diff options
Diffstat (limited to 'AlienSurvival/Assets/Scripts/Test/TestPeaceMaker.cs')
-rw-r--r-- | AlienSurvival/Assets/Scripts/Test/TestPeaceMaker.cs | 314 |
1 files changed, 314 insertions, 0 deletions
diff --git a/AlienSurvival/Assets/Scripts/Test/TestPeaceMaker.cs b/AlienSurvival/Assets/Scripts/Test/TestPeaceMaker.cs new file mode 100644 index 0000000..11f76ba --- /dev/null +++ b/AlienSurvival/Assets/Scripts/Test/TestPeaceMaker.cs @@ -0,0 +1,314 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +public class TestPeaceMaker : MonoBehaviour +{ + + [SerializeField] private Transform m_Camera; + [SerializeField] private float m_Speed; + [SerializeField] private Transform m_Centre; + [SerializeField] private SpriteRenderer m_Arrow; + [SerializeField] private float m_ArrowRadius; + [SerializeField] private TestPeaceMakerBullet m_Bullet; + [SerializeField] private TestPeaceMakerGrenade m_Grenade; + [SerializeField] private Vector2 m_Zoom; + [SerializeField] private GameObject m_LaunchVfx; + [SerializeField] private Transform m_LaunchPoint; + [SerializeField] private TestB2 m_B2; + [SerializeField] private TestSpaceBeam m_SpaceBeam; + + private Vector3 zoomIn + { + get + { + Vector3 zin = new Vector3(m_Zoom.x, m_Zoom.x, 1); + return zin; + } + } + private Vector3 zoomOut + { + get + { + Vector3 zout = new Vector3(m_Zoom.y, m_Zoom.y, 1); + return zout; + } + } + + private TopDownShadowCaster m_Shadow; + + private SpriteRenderer m_SpriteRenderer; + private TopDownTransform m_Coord; + private Coroutine m_CoFire; + private Coroutine m_CoLaunchGrenade; + + private Vector3 m_PreMouse; + + private Vector2 m_AimDirection; + + private Vector3 m_TargetZoom; + + private enum ControlMode + { + Mouse, + Joystick, + } + private ControlMode m_ControlMode; + + void Start() + { + m_SpriteRenderer = GetComponent<SpriteRenderer>(); + m_Coord = GetComponent<TopDownTransform>(); + + m_ControlMode = ControlMode.Mouse; + m_AimDirection = Vector2.zero; + + m_TargetZoom = new Vector3(m_Zoom.x, m_Zoom.x, 1); + + m_Shadow = GetComponent<TopDownShadowCaster>(); + } + + void Update() + { + bool isMove = Move(); + + SetAim(); + + bool isFire = Fire(); + bool isGrenade = LaunchGrenade(); + bool isBeam = SpaceBeam(); + + CallB2(); + + CameraFollow(); + + CameraZoom(/*isMove ||*/ isFire || isGrenade /*|| isBeam*/); + } + + void CameraZoom(bool zout) + { + if(zout) + { + m_TargetZoom = zoomOut; + m_Camera.localScale = Vector3.Lerp(m_Camera.localScale, m_TargetZoom, 0.25f); + } + else + { + m_TargetZoom = zoomIn; + m_Camera.localScale = Vector3.Lerp(m_Camera.localScale, m_TargetZoom, /*Time.deltaTime * 2f*/0.25f); + } + } + + void CameraFollow() + { + Vector3 pos = m_Camera.position; + pos.x = m_Coord.x; + pos.y = m_Coord.y; + + if (Vector3.Distance(pos, m_Camera.position) > 0.1f) + { + m_Camera.position = Vector3.Lerp(m_Camera.position, pos, 3 * Time.deltaTime); + } + } + + bool Move() + { + float x = Input.GetAxisRaw("Horizontal"); + float y = Input.GetAxisRaw("Vertical"); + + bool isMove = x != 0 || y != 0; + + if (isMove) + { + Vector2 direction = new Vector2(x, y).normalized; + + Vector3 position = m_Coord.position; + position.x += direction.x * m_Speed * Time.deltaTime; + position.y += direction.y * m_Speed * Time.deltaTime; + + m_Coord.position = position; + + if (x > 0) + { + m_SpriteRenderer.flipX = false; + m_Shadow.Flip(false); + } + else if (x < 0) + { + m_SpriteRenderer.flipX = true; + m_Shadow.Flip(true); + } + } + + return isMove; + } + + void SetAim() + { + float xAxis = Input.GetAxisRaw("AimHorizontal"); + float yAxis = Input.GetAxisRaw("AimVertical"); + + bool bJoytick = xAxis != 0 || yAxis != 0; + + bool bMouse = (Input.mousePosition - m_PreMouse).magnitude > 0.01f; + m_PreMouse = Input.mousePosition; + + if(bJoytick) + { + m_ControlMode = ControlMode.Joystick; + } + if(bMouse) + { + m_ControlMode = ControlMode.Mouse; + } + + Vector2 centrePos = m_Centre.position; + Vector2 dir = Vector2.zero; + if (m_ControlMode == ControlMode.Mouse) + { + Vector2 camPos = GetCameraPosition(); + dir = (camPos - centrePos).normalized; + } + else + { + dir = new Vector2(xAxis, -yAxis).normalized; + } + + if(dir.magnitude > 0) + { + m_AimDirection = dir; + Vector2 arrowPos = centrePos + m_ArrowRadius * m_AimDirection; + m_Arrow.transform.position = new Vector3(arrowPos.x, arrowPos.y, m_Arrow.transform.position.z); + m_Arrow.transform.rotation = Quaternion.Euler(0, 0, Mathf.Atan2(m_AimDirection.y, m_AimDirection.x) * Mathf.Rad2Deg); + } + } + + Vector2 GetCameraPosition() + { + Vector3 screenPos = Input.mousePosition; + Vector2 target = Camera.main.ScreenToWorldPoint(screenPos); + return target; + } + + bool Fire() + { + if (Input.GetButtonDown("Fire1") || (Input.GetAxis("GunTrigger") == 1)) + { + if (m_CoFire == null) + { + m_CoFire = StartCoroutine(coFire(0.1f)); + } + } + if (!Input.GetButton("Fire1") && (Input.GetAxis("GunTrigger") == 0)) + { + if(m_CoFire != null) + { + StopCoroutine(m_CoFire); + m_CoFire = null; + } + return false; + } + return true; + } + + bool LaunchGrenade() + { + if (Input.GetButtonDown("Fire2") || (Input.GetAxis("BombTrigger") == 1)) + { + if (m_CoLaunchGrenade == null) + { + m_CoLaunchGrenade = StartCoroutine(coLaunchGrenade(0.2f)); + } + } + if (!Input.GetButton("Fire2") && (Input.GetAxis("BombTrigger") == 0)) + { + if (m_CoLaunchGrenade != null) + { + StopCoroutine(m_CoLaunchGrenade); + m_CoLaunchGrenade = null; + } + return false; + } + return true; + } + + IEnumerator coFire(float interval) + { + while (true) + { + CreateBullet(m_AimDirection, 12f, 2f); + //CreateBullet(TestMathHelper.Rotate(m_AimDirection, 10 * Mathf.Deg2Rad), 12f, 2f); + //CreateBullet(TestMathHelper.Rotate(m_AimDirection, -10 * Mathf.Deg2Rad), 12f, 2f); + + yield return new WaitForSeconds(interval); + } + } + + TestPeaceMakerBullet CreateBullet(Vector2 dir, float speed, float lifeTime) + { + TestPeaceMakerBullet bullet = Instantiate<TestPeaceMakerBullet>(m_Bullet); + + bullet.transform.position = m_Arrow.transform.position + new Vector3(m_AimDirection.x, m_AimDirection.y, 0) * -0.3f; + + bullet.Set(dir, speed, lifeTime); + bullet.gameObject.SetActive(true); + + return bullet; + } + + + Vector3 GetRandomLaunchGrenadeDirection() + { + Vector3 dirOnPlane = Quaternion.Euler(0, 0, Random.Range(-15f, 15f)) * new Vector3(m_AimDirection.x, m_AimDirection.y, 0); + dirOnPlane = dirOnPlane.normalized; + Vector3 dir = new Vector3(dirOnPlane.x, dirOnPlane.y, Random.Range(0f, 1f)).normalized; + return dir.normalized; + } + + IEnumerator coLaunchGrenade(float interval) + { + while (true) + { + // grenade + TestPeaceMakerGrenade grenade = Instantiate<TestPeaceMakerGrenade>(m_Grenade); + Vector3 position = m_Coord.position + new Vector3(0, 0, 1.8f); + grenade.Set(position, GetRandomLaunchGrenadeDirection(), Random.Range(8f, 10f)); + grenade.gameObject.SetActive(true); + + // vfx + GameObject eff = Instantiate<GameObject>(m_LaunchVfx, this.transform); + eff.transform.position = m_LaunchPoint.transform.position; + eff.SetActive(true); + + yield return new WaitForSeconds(interval); + } + } + + void CallB2() + { + if(Input.GetButtonDown("Fire3")) + { + TestB2 b2 = Instantiate<TestB2>(m_B2); + + Vector3 pos3D = m_Coord.GetProjectedPosition(); + b2.Set(pos3D + new Vector3(-15, 0,0 ), pos3D + new Vector3(15, 0,0 ), 20f, 3f); + } + } + + bool SpaceBeam() + { + if (Input.GetButtonDown("SpaceBeam")) + { + TestSpaceBeam beam = Instantiate<TestSpaceBeam>(m_SpaceBeam); + + Vector3 pos3D = m_Coord.position; + beam.Set(pos3D + new Vector3(3, 0, 0)); + + TinyCountDown.Instance.Set("SpaceBeam", 0.1f); + return true; + } + return TinyCountDown.Instance.Get("SpaceBeam") > 0; + } + +} |