154 lines
5.0 KiB
C#
154 lines
5.0 KiB
C#
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; }}
|
|
// private AudioSource boostAudio;
|
|
public float boostAudioPitchRate = 0.01f;
|
|
public float boostAudioPitchMax,boostAudioPitchMin;
|
|
void Awake(){
|
|
defeaultEmitRate = UpMoneyEffect.emissionRate;
|
|
UpMoneyEffect.emissionRate = 0;
|
|
instance= this;
|
|
spriteRenderer = GetComponent<SpriteRenderer>();
|
|
// boostAudio = GetComponent<AudioSource>();
|
|
}
|
|
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;}
|
|
// boostAudio.pitch += ((isUp) ? 1 : -1 ) * boostAudioPitchRate;
|
|
// boostAudio.pitch = Mathf.Clamp(boostAudio.pitch, boostAudioPitchMin, boostAudioPitchMax);
|
|
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){
|
|
GetComponent<AudioSource>().PlayOneShot(upSFX);
|
|
|
|
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);
|
|
|
|
GetComponent<AudioSource>().Stop();
|
|
|
|
|
|
}
|
|
|
|
|
|
void SwitchSide(){
|
|
if(!Started && !gameStarted){
|
|
gameStarted = true;
|
|
GameManager.instance.StartGame();
|
|
Started=true;
|
|
// boostAudio.Play();
|
|
}
|
|
|
|
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<TrailRenderer>().startColor = newTrail.GetComponent<TrailRenderer>().endColor = (isUp) ? Color.green:Color.red;
|
|
|
|
|
|
GetComponent<SpriteRenderer>().sprite = (isUp) ? upwardSprite : normalSprite;
|
|
|
|
|
|
}
|
|
|
|
void ToggleUpmoneyEffect(bool value){
|
|
if (value)
|
|
{
|
|
UpMoneyEffect.emissionRate = defeaultEmitRate;
|
|
}
|
|
else
|
|
{
|
|
UpMoneyEffect.emissionRate = 0;
|
|
}
|
|
}
|
|
|
|
|
|
void OnDrawGizmos(){
|
|
Gizmos.DrawWireSphere(transform.position, senseRadius);
|
|
}
|
|
}
|