using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { public static PlayerController instance{get; private set;} public Sprite upwardSprite; public Sprite downwardSprite; public Sprite normalSprite; public ParticleSystem UpMoneyEffect; public Vector3 effectOffset; float defeaultEmitRate; public static Transform t {get {return instance.transform; }} void Awake(){ defeaultEmitRate = UpMoneyEffect.emissionRate; UpMoneyEffect.emissionRate = 0; instance= this; spriteRenderer = GetComponent(); } public Vector3 eulerAngles; public float movingSpeed = 1; public float boostSpeed= 2; public float turnAngle = 15; public GameObject trailPrefab; public Transform currentTrail; public AudioClip upSFX, downSFX; public float senseRadius = 5; public bool isUp { get { return transform.eulerAngles.z != 360-turnAngle;}} SpriteRenderer spriteRenderer; void Start() { CameraFollower.Target = transform; } bool gameStarted =false; public void GameOver(){ Started=false; spriteRenderer.sprite = downwardSprite; } public static bool Started; // Update is called once per frame void Update(){ UpMoneyEffect.transform.position = new Vector3(transform.position.x, transform.position.y, UpMoneyEffect.transform.position.z)-effectOffset; if (boosting){return;} if(Input.GetKeyDown(KeyCode.Space)){ SwitchSide(); } } void FixedUpdate() { if(!Started){return;} transform.Translate(transform.right * movingSpeed); eulerAngles = transform.eulerAngles; currentTrail.transform.position = transform.position; if(transform.position.y < 0){ GameManager.GameOver(); } if(boosting){return;} Collider2D overlap = Physics2D.OverlapCircle(transform.position, senseRadius); if(overlap!=null){ if(overlap.name.Contains("option")){ Debug.Log(overlap.name + " : " + overlap.name.LastIndexOf(",")); float rate= float.Parse(overlap.name.Substring(overlap.name.LastIndexOf(",")+1)); StartCoroutine(giveBoost(rate)); Destroy(overlap.gameObject); } } } public static bool boosting =false; IEnumerator giveBoost(float perc){ boosting=true; float newY = transform.position.y * perc; float deltaY = Mathf.Abs(newY - transform.position.y); spriteRenderer.sprite = (perc > 1) ? upwardSprite : downwardSprite; // float boostingSpeed = transform.position.y * (1f/boostSpeed); float boostingSpeed = boostSpeed * deltaY; // if(transform.position.y < 250){boostingSpeed = boostSpeed/2f;} ToggleUpmoneyEffect(true); if(perc > 1){ while(transform.position.y < newY){ transform.position += new Vector3(0,boostingSpeed,0); if(!isUp){SwitchSide();} yield return new WaitForFixedUpdate(); } }else{ while(transform.position.y > newY){ transform.position -= new Vector3(0,boostingSpeed,0); if(isUp){SwitchSide();} yield return new WaitForFixedUpdate(); } } spriteRenderer.sprite = normalSprite; boosting=false; ToggleUpmoneyEffect(false); } void SwitchSide(){ if(!Started && !gameStarted){ gameStarted = true; GameManager.instance.StartGame(); Started=true; } transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, isUp ? -turnAngle : turnAngle); GameObject newTrail = Instantiate(trailPrefab, transform.position, Quaternion.identity); currentTrail = newTrail.transform; newTrail.GetComponent().startColor = newTrail.GetComponent().endColor = (isUp) ? Color.green:Color.red; GetComponent().sprite = (isUp) ? upwardSprite : normalSprite; } void ToggleUpmoneyEffect(bool value){ if (value) { UpMoneyEffect.emissionRate = defeaultEmitRate; } else { UpMoneyEffect.emissionRate = 0; } } void OnDrawGizmos(){ Gizmos.DrawWireSphere(transform.position, senseRadius); } }