using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[XLua.Hotfix]
public class SkyLightController : MonoBehaviour
{
[Range(0, 180)]
public float perXAngleChangedDir = 40;
[Range(0, 360)]
public float perYAngleChangedDir = 40;
[Range(0, 360)]
public float perZAngleChangedDir = 40;
[Range(0, 360)]
public float xSpeedRandomMin;
[Range(0, 360)]
public float xSpeedRandomMax;
[Range(0, 360)]
public float ySpeedRandomMin;
[Range(0, 360)]
public float ySpeedRandomMax;
[Range(0, 360)]
public float zSpeedRandomMin;
[Range(0, 360)]
public float zSpeedRandomMax;
private Light m_Light;
private float rawXAngle;
private float rawYAngle;
private float rawZAngle;
private float dynamicXAngle;
private float dynamicYAngle;
private float dynamicZAngle;
static Vector3 v3Angle;
float xSpeed;
float ySpeed;
float zSpeed;
int xDir;
int yDir;
int zDir;
float recordLastChangeDirXAngle;
float recordLastChangeDirYAngle;
float recordLastChangeDirZAngle;
static int[] dirs = { -1, 1 };
private void Awake()
{
m_Light = GetComponent<Light>();
var localEulerAgnles = this.transform.localEulerAngles;
rawXAngle = localEulerAgnles.x;
rawYAngle = localEulerAgnles.y;
rawZAngle = localEulerAgnles.z;
dynamicXAngle = rawXAngle;
dynamicYAngle = rawYAngle;
dynamicZAngle = rawZAngle;
xSpeed = Random.Range(xSpeedRandomMin, xSpeedRandomMax);
ySpeed = Random.Range(ySpeedRandomMin, ySpeedRandomMax);
zSpeed = Random.Range(zSpeedRandomMin, zSpeedRandomMax);
xDir = 1;
yDir = 1;
zDir = 1;
recordLastChangeDirXAngle = 0;
recordLastChangeDirYAngle = 0;
recordLastChangeDirZAngle = 0;
}
private void Update()
{
dynamicXAngle += (Time.deltaTime * xSpeed) * xDir;
if (Mathf.Abs(recordLastChangeDirXAngle - dynamicXAngle) >= perXAngleChangedDir)
{
recordLastChangeDirXAngle = dynamicXAngle;
xSpeed = Random.Range(xSpeedRandomMin, xSpeedRandomMax);
xDir = dirs[Random.Range(0, 1)];
}
if (dynamicXAngle <= 0 || dynamicXAngle >= 180)
{
recordLastChangeDirXAngle = dynamicXAngle;
xSpeed = Random.Range(xSpeedRandomMin, xSpeedRandomMax);
if (dynamicXAngle <= 0)
xDir = 1;
else
xDir = -1;
}
dynamicXAngle = dynamicXAngle % 180;
dynamicYAngle += (Time.deltaTime * ySpeed) * yDir;
if (Mathf.Abs(recordLastChangeDirYAngle - dynamicYAngle) >= perYAngleChangedDir)
{
recordLastChangeDirYAngle = dynamicYAngle;
ySpeed = Random.Range(ySpeedRandomMin, ySpeedRandomMax);
yDir = dirs[Random.Range(0, 1)];
}
dynamicYAngle = dynamicYAngle % 360;
dynamicZAngle += (Time.deltaTime * zSpeed) * zDir;
if (Mathf.Abs(recordLastChangeDirZAngle - dynamicZAngle) >= perZAngleChangedDir)
{
recordLastChangeDirZAngle = dynamicZAngle;
zSpeed = Random.Range(zSpeedRandomMin, zSpeedRandomMax);
zDir = dirs[Random.Range(0, 1)];
}
dynamicZAngle = dynamicZAngle % 360;
v3Angle.Set(dynamicXAngle, dynamicYAngle, dynamicZAngle);
this.transform.localEulerAngles = v3Angle;
}
}