diff options
Diffstat (limited to 'AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs')
-rw-r--r-- | AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs | 145 |
1 files changed, 0 insertions, 145 deletions
diff --git a/AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs b/AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs deleted file mode 100644 index 3a73d21..0000000 --- a/AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs +++ /dev/null @@ -1,145 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class TestWaspRobot : MonoBehaviour -{ - [SerializeField] private TopDownTransform m_Follow; - - [SerializeField] private float m_MoveSpeed; - - private SpriteRenderer m_SpriteRenderer; - private TopDownTransform m_Coords; - - // wasp»·ÈÆ - [SerializeField] private float m_Radius; - - [SerializeField] private List<Sprite> m_Sprites; - - private bool m_Following; - - private float m_Angle; - - private float m_OrbitSpeed = 3f; - - enum State - { - None, - Move, - Orbit, - } - - private State m_State = State.None; - - private Coroutine m_Coroutine; - - private void Start() - { - m_SpriteRenderer = GetComponent<SpriteRenderer>(); - m_Coords = GetComponent<TopDownTransform>(); - - m_Following = false; - m_Angle = 0; - - ChangeState(State.Move); - } - - private void ChangeState(State state) - { - if(m_State != state) - { - //Debug.Log(m_State.ToString() + "->" + state.ToString()); - - if(m_Coroutine != null) - { - StopCoroutine(m_Coroutine); - } - m_State = state; - m_Coroutine = StartCoroutine("co" + m_State.ToString()); - } - } - - void Update() - { - - float distance = (m_Follow.positionOnGround - m_Coords.positionOnGround).magnitude; - m_Following = distance > m_Radius + 0.1f; - - if(m_Following) - { - ChangeState(State.Move); - } - else - { - ChangeState(State.Orbit); - } - - } - - IEnumerator coMove() - { - while (true) - { - if (m_Following) - { - Vector2 dir = (m_Follow.positionOnGround - m_Coords.positionOnGround).normalized; - - Vector2 posOnGround = m_Coords.positionOnGround; - posOnGround.x += m_MoveSpeed * Time.deltaTime * dir.x; - posOnGround.y += m_MoveSpeed * Time.deltaTime * dir.y; - - m_Coords.positionOnGround = posOnGround; - - float rad = GetAngleToTarget(); - - int index = GetSpriteIndex(rad); - SetSprite(index); - } - - yield return null; - } - } - - IEnumerator coOrbit() - { - m_Angle = GetAngleToTarget(); - - while (true) - { - m_Angle += Time.deltaTime * m_OrbitSpeed; - - Vector2 centre = m_Follow.positionOnGround; - centre += new Vector2(Mathf.Cos(m_Angle), Mathf.Sin(m_Angle)).normalized * m_Radius; - m_Coords.positionOnGround = Vector2.Lerp(m_Coords.positionOnGround, centre, 0.25f); - - int index = GetSpriteIndex(m_Angle); - SetSprite(index); - - yield return null; - } - } - - float GetAngleToTarget() - { - Vector2 posOnGround = m_Coords.positionOnGround; - Vector2 target = m_Follow.positionOnGround; - - Vector2 dir = (posOnGround - target).normalized; - - return Mathf.Atan2(dir.y, dir.x) + 2 * Mathf.PI * TestMathHelper.Check(dir.y < 0); - } - - // angle rad - int GetSpriteIndex(float rad) - { - int index = ((int)Mathf.Floor(((rad * Mathf.Rad2Deg) % 360) / 30)) % 12; - index = Mathf.Clamp(index, 0, m_Sprites.Count - 1); - return index; - } - - void SetSprite(int index) - { - m_SpriteRenderer.sprite = m_Sprites[index]; - } - -} |