|
|
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic; //input for lists
- using UnityEngine.UI;
-
- public class spacePlayerController : MonoBehaviour {
-
- public string HorizontalBtn; //holds string for horizontal input
- public string VerticalBtn; //holds string for Vertical input
- public string StrongAttackBtn;
- public string DashAttackBtn;
-
- public Animator animator; //Holds animator for Pinata
- public GameObject heart; //Health sprites
- public GameObject newConfetti; //confetti when hit
- public GameObject newCandy;
- public stickController stick; //controller for stick
- public GUIText scoreDisplay;
- public GUIText gameOverDisplay;
- public GameObject dashDisplay;
- public GameObject playerFrac;
- public GameObject Planet;
-
- public float runSpeed; //run speed
- public float jumpHeight; //jump height
- public float health; //holds health
- public int confettiOnHit; //amount of confetti created on hit
- public Vector2 healthPos;
- public float invulTime;
- public float attackWait;
- public bool isHit;
- public float dashDistance;
- public float dashTime;
- public float dashWait;
- public float minY;public bool heartBlack = false;
- public bool heartColor = true;
- public bool dead = false;
- public float heartTimer = 0.0f;
-
-
-
- private float displayedHealth = 3; //currently displayed health
- private bool updateHealth = true; //if the health bar needs updating
- private float curDirection = -1; //direction player is pointing
- private bool canJump = true; // if player can jump
- private bool canSpin = true; // if player can spin
- private List<GameObject> hearts = new List<GameObject> (); //list which holds health sprites;
- private bool isSpinning = false; //checks if player is spin attacking
- private float lastHit;
- private float lastAttack;
- private int score;
- private bool isDashing =false;
- private bool canDash = true;
- private float lastDash = 0.0f;
- private bool stopDash = false;
- public float deathTimer = 3.0f;
- bool droppedCandy = false;
- private bool exploded = false;
-
-
-
-
-
- void Start(){
- if (transform.rotation.y == 180)
- curDirection = -1;
- else
- curDirection = 1;
- }
-
-
- // Update is called once per frame
- void Update () {
-
- displayHealth ();
- death ();
- applyPlayerDirection (Input.GetAxisRaw (HorizontalBtn));
- damage ();
- //if (transform.position.y < minY)
- // health = 0;
-
- if (score >= 10) {
- gameOverDisplay.enabled = true;
- gameOverDisplay.text = ""+ gameObject.name + " Wins";
- Time.timeScale = 0;
-
- }
-
- dashDisplay.GetComponent<Scrollbar> ().size = (Time.time - lastDash) / dashWait;
-
- Vector3 direction = transform.position - Planet.transform.position;
- float tempRotZ = Vector3.Angle (Vector3.up, direction);
- Vector3 tempRot = transform.rotation.eulerAngles;
- if ((direction.x > 0 && transform.rotation.eulerAngles.y <10)|| (direction.x < 0 && transform.rotation.eulerAngles.y >170))
- tempRot.z = 360 - tempRotZ;
- else
- tempRot.z = tempRotZ;
- transform.rotation = Quaternion.Euler (tempRot);
-
-
-
- }
-
- void FixedUpdate() {
-
- /*
- * Movement inputs
- */
- Vector2 velocity = transform.InverseTransformDirection(rigidbody2D.velocity);
- if (transform.rotation.eulerAngles.y <10)
- velocity.x = Input.GetAxis (HorizontalBtn) * runSpeed; //Horizontal input
- else
- velocity.x = Input.GetAxis (HorizontalBtn) * -runSpeed; //Horizontal input
-
- if ((Input.GetAxisRaw (VerticalBtn) == 1) && (canJump)) //Vertical input
- {
- velocity.y = jumpHeight;
- canJump = false;
- }//end if
-
- if (Input.GetAxisRaw (StrongAttackBtn)==1) {
- if (!isSpinning && canSpin && Time.time - lastAttack > attackWait){
- velocity.y = jumpHeight;
- lastAttack = Time.time;
- StartCoroutine (spinAttack (Vector3.down * 360, 0.2f));
- }
- }
-
- if (Input.GetAxisRaw (DashAttackBtn) == 1) {
- //Debug.Log ("dashbutton pressed");
- if(!isDashing && canDash && Time.time - lastDash > dashWait){
- lastDash = Time.time;
- StartCoroutine (dashAttack (dashDistance,dashTime));
- }
-
- }
-
-
-
- rigidbody2D.velocity = transform.TransformDirection(velocity); //apply inputs
- animator.SetFloat("Velocity",velocity.magnitude);//inputs for animator
- animator.SetBool ("Fall", !canJump);
-
-
- }//end fixed update
-
- private void displayHealth(){
-
- if (displayedHealth != health) //check if health needs updating
- updateHealth = true;
-
- if (updateHealth){
- foreach (GameObject desHeart in hearts) //Destroy all heart sprites
- GameObject.Destroy (desHeart);
- hearts.Clear(); //sets list to zero
-
- for (int i=1; i<= health; i++) { //creates new heart sprite for each health
- GameObject heartCanister = Instantiate (heart) as GameObject; //creat heart sprite
- Vector3 heartPos = new Vector3 ();
-
- //set position
- if (healthPos.x == 1)
- heartPos.x = (i * 0.033f);
- else
- heartPos.x = 1-(i * 0.033f);
-
- if (healthPos.y == 1)
- heartPos.y = 0.95f;
- else
- heartPos.y = 0.05f;
-
- heartCanister.transform.position = heartPos;
- hearts.Add(heartCanister); //adds heart to list
-
- if (heartBlack == true && heartColor == false){
- heartCanister.guiTexture.color = Color.black;
-
- //else (heartCanister.guiTexture.color = Color.red);
- }
- }//end for
-
- displayedHealth = health;
- updateHealth = false;
- }//end if
-
- }//end displayHealth
-
- //respawns player if they die
-
- private void death()
- {
- if (health <= 0|| dead ==true) {
- dead = true;
- if (dead == true){
- heartColor = false;
- heartBlack = true;
- heartTimer += Time.deltaTime;
- if (heartTimer >=1.5f){
- health = 1;
- }
- if (heartTimer >=2.5f){
- health = 2;
- }
- if (!exploded){
-
- exploded = true;
- Vector3 fracRotation = transform.rotation.eulerAngles;
- fracRotation.y +=90;
- GameObject explosion = Instantiate (playerFrac, transform.position+(Vector3.up*-3), Quaternion.Euler(fracRotation)) as GameObject;
- }
-
- }
- if (deathTimer > 0) {
- deathTimer -= Time.deltaTime;
- if (!droppedCandy) {
- Instantiate (newCandy, transform.position + Vector3.up, transform.rotation);
- Debug.Log ("Exploded position: " + transform.position);
-
- droppedCandy = true;
- }
- transform.position = new Vector3 (10, -50, 0);
- if (deathTimer <= 0) {
- Vector3 spawnPos = new Vector3 (Random.Range (-20.0f, 20.0f), 15.0f, 0); //picks random position
- health = 3; //resets life
-
- transform.position = spawnPos; //changes position
- rigidbody2D.velocity = Vector2.zero;
- deathTimer = deathTimer + 3.02f;
- heartTimer = heartTimer - 3.00f;
- droppedCandy = false;
- heartBlack = false;
- dead = false;
- heartColor = true;
- exploded = false;
- }
- }//end if
-
-
- /*else if (hearts <= 0) {
- dead = true;
- }*/
-
- }//end death
- }
-
- private void applyPlayerDirection(float moveHorizontal)
- {
-
- if ((curDirection != moveHorizontal) && (moveHorizontal != 0) && !isSpinning) //if player movement direction vs displayed direction
- {
- transform.Rotate(0,180,0); //rotates player
-
- curDirection = moveHorizontal; //updates direction
- }
- }
-
- private void damage (){
- if (isHit) {
- gameObject.GetComponentInChildren<PolygonCollider2D> ().enabled = false;
- isHit = false;
- lastHit = Time.time;
- }
- if (lastHit+invulTime < Time.time)
- gameObject.GetComponentInChildren<PolygonCollider2D> ().enabled = true;
-
-
- }
- //spin
- IEnumerator spinAttack(Vector3 byAngles, float inTime) {
- isSpinning = true;
- canSpin = false;
- stick.isAttacking = true;
- Debug.Log ("" + gameObject.name + "spinning");
- Quaternion startAngle = transform.rotation;
- Quaternion endAngle = Quaternion.Euler(transform.eulerAngles + byAngles);
- float direction = transform.eulerAngles.y;
-
- for(float i = 0; i < 1; i += Time.deltaTime/inTime) {
- transform.rotation = Quaternion.Euler(0,direction,Mathf.Lerp(transform.eulerAngles.z,transform.eulerAngles.z + 360,i));
- yield return null;
-
- }
- transform.eulerAngles = new Vector3 (0,direction,0);
- //Debug.Log ("" + gameObject.name + "End spin");
- isSpinning = false;
- stick.isAttacking = false;
- }
- //dash
- IEnumerator dashAttack (float dashDistance,float dashTime) {
- float endPosition;
- int dashDirection;
-
- isDashing = true;
- canDash = false;
- stick.isAttacking = true;
- Debug.Log ("" + gameObject.name + "Dashing");
- rigidbody2D.gravityScale = 0;
-
-
-
-
- Vector3 startPosition = transform.position;
- //Debug.Log ("rotation Y: " + transform.eulerAngles.y);
- if (transform.eulerAngles.y >= 150)
- dashDirection = -1;
- else
- dashDirection = 1;
-
- endPosition = startPosition.x + (dashDirection * dashDistance);
- //Debug.Log ("Dash start: " + startPosition.x);
- //Debug.Log ("Dash Direction: " + (dashDirection ));
- //Debug.Log ("Dash end: " + endPosition);
-
- for (float i = 0; i < 1; i += Time.deltaTime/dashTime) {
- transform.position = new Vector3(dashDirection * Mathf.Lerp((dashDirection)*startPosition.x, (dashDirection)* endPosition, i), startPosition.y, startPosition.z);
- if ((transform.position.x < -30.5f && dashDirection == -1) || (transform.position.x > 26.5 && dashDirection == 1))
- stopDash = true;
-
-
- if (stopDash)
- break;
-
- yield return null;
- }
-
-
- stopDash = false;
- isDashing = false;
- canDash = true;
- stick.isAttacking = false;
- //Debug.Log ("" + gameObject.name + " finished Dashing");
- rigidbody2D.gravityScale = 4;
- }
-
-
-
-
-
- void OnCollisionEnter2D(Collision2D col){
- if (col.collider.tag == "ground") {
- canJump = true;
- canSpin = true;
- }
- else if (col.collider.tag == "Player") {
- canJump = true;
- canSpin = true;
- }
-
- if (col.collider.tag == "wall") {
- stopDash = true;
-
- }
- if (col.collider.tag == "failBox") {
- health = 0;
-
- }
- }
-
- void OnTriggerEnter2D(Collider2D trig)
- {
- Debug.Log (trig.gameObject.tag);
- if (trig.gameObject.tag == "candy")
- {
- Destroy (trig.gameObject, 0.0f);
- score++;
- scoreDisplay.text = "score: " + score.ToString ();
- }
- }
-
-
-
-
-
-
- }
|