Advertisement
Guest User

SnekController

a guest
Mar 30th, 2017
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.05 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine.UI;
  4. using UnityEngine;
  5.  
  6. public class SnekController : MonoBehaviour {
  7.  
  8.     public List<GameObject> Snake = new List<GameObject> ();
  9.  
  10.     public int sizeOfSnake;
  11.  
  12.     public float TimeToMove;
  13.  
  14.  
  15.     public string dir = "right";
  16.     public Vector3 tempPos;
  17.  
  18.     private float elapsedTime;
  19.     public Text elTime;
  20.  
  21.     private Sprite TurnSprite;
  22.     private Sprite BodySprite;
  23.     private Sprite TailSprite;
  24.  
  25.     void Start () {
  26.         initSNEK ();
  27.         SpriteLoads ();
  28.     }
  29.  
  30.  
  31.  
  32.     void Update () {
  33.         Inputs ();
  34.         updateSnake ();
  35.         ChangingSprites ();
  36.         ShowTime ();
  37.     }
  38.  
  39.  
  40.  
  41.     void appendToSnake()            //function that instantiate clones of Body
  42.     {
  43.         GameObject part = Instantiate (Resources.Load<GameObject> ("Prefabs/Body")) as GameObject;
  44.         if (!Snake.Contains (part)) {
  45.             Snake.Add (part);
  46.         }
  47.     }
  48.  
  49.     string CheckCurve(int prev, int current, int next)              //func to check which direction snake turned (if it does)
  50.     {
  51.         float prevPartX = Snake [prev].transform.position.x;
  52.         float prevPartY = Snake [prev].transform.position.y;
  53.  
  54.         float nextPartX = Snake [next].transform.position.x;
  55.         float nextPartY = Snake [next].transform.position.y;
  56.  
  57.         float currentPartX = Snake [current].transform.position.x;
  58.         float currentPartY = Snake [current].transform.position.y;
  59.  
  60.         if (((prevPartX > currentPartX) && (nextPartY < currentPartY)) || ((prevPartY < currentPartY) && (nextPartX > currentPartX))) {
  61.             return "down-to-right";
  62.         }
  63.         else if (((prevPartX > currentPartX) && (nextPartY > currentPartY)) || ((prevPartY > currentPartY && nextPartX > currentPartX))) {
  64.             return "up-to-right";
  65.         }
  66.         else if (((prevPartX < currentPartX) && (nextPartY < currentPartY)) || ((prevPartY < currentPartY) && (nextPartX < currentPartX))) {
  67.             return "down-to-left";
  68.         }
  69.         else if (((prevPartX < currentPartX) && (nextPartY > currentPartY)) || ((prevPartY > currentPartY) && (nextPartX < currentPartX))) {
  70.             return "up-to-left";
  71.         }
  72.         return "same";
  73.  
  74.     }
  75.  
  76.     void initSNEK(){                            //func to add proper number of snake parts
  77.         for (int i = 0; i < sizeOfSnake; i++) {
  78.             appendToSnake ();
  79.         }
  80.         for (int j = Snake.Count - 1; j > 0; j--) {
  81.             if (j > 0) {
  82.                 Snake [j].transform.position = Snake [j - 1].transform.position;
  83.             }
  84.         }
  85.         Snake [0].transform.position = transform.position;
  86.  
  87.         if (dir == "up") {
  88.             tempPos.y++;
  89.             transform.localEulerAngles = new Vector3 (0, 0, 90);
  90.         } else if (dir == "left") {
  91.             tempPos.x--;
  92.             transform.localEulerAngles = new Vector3 (0, 0, 180);
  93.         } else if (dir == "down") {
  94.             tempPos.y--;
  95.             transform.localEulerAngles = new Vector3 (0, 0, 270);
  96.         } else if (dir == "right") {
  97.             tempPos.x++;
  98.             transform.localEulerAngles = new Vector3 (0, 0, 0);
  99.         }
  100.  
  101.         transform.position = tempPos;
  102.     }
  103.  
  104.     void Inputs()       //func that interpret input to direction of snake head
  105.     {
  106.  
  107.         if (Input.GetAxis ("Vertical") > 0) {
  108.             dir = "up";
  109.         }
  110.         if (Input.GetAxis ("Vertical") < 0) {
  111.             dir = "down";
  112.         }
  113.         if (Input.GetAxis ("Horizontal") < 0) {
  114.             dir = "left";
  115.         }
  116.         if (Input.GetAxis ("Horizontal") > 0) {
  117.             dir = "right";
  118.         }
  119.  
  120.     }
  121.  
  122.     bool ItIsTime()     //func to test if it is time to update snake
  123.     {
  124.         if (elapsedTime >= TimeToMove)
  125.         {
  126.             elapsedTime = 0;
  127.             return true;
  128.         }
  129.         else
  130.             return false;
  131.     }
  132.  
  133.  
  134.     void SpriteLoads()      //lol, just like in name, it is loading sprites from resources (also changing sprite of last part)
  135.     {
  136.         TurnSprite = Resources.Load<Sprite> ("Graphics/Turn") as Sprite;
  137.         BodySprite = Resources.Load<Sprite> ("Graphics/Body1") as Sprite;
  138.         TailSprite = Resources.Load<Sprite> ("Graphics/Tail") as Sprite;
  139.         Snake [Snake.Count - 1].GetComponent <SpriteRenderer> ().sprite = TailSprite;
  140.     }
  141.  
  142.     void SetTime()      //Function to calculate how much time elapsed from last update of snake
  143.     {
  144.         elapsedTime += Time.deltaTime;
  145.     }
  146.  
  147.  
  148.  
  149.     void ShowTime()     //func to "draw" time on screen
  150.     {
  151.         elTime.text = "Time :" + elapsedTime.ToString ();
  152.     }
  153.        
  154.  
  155.  
  156.     void updateSnake()      //function that move our lovely animal, also turning head
  157.     {
  158.         SetTime ();
  159.         if (ItIsTime()) {
  160.  
  161.             for (int j = Snake.Count - 1; j > 0; j--) {
  162.                 if (j > 0) {
  163.                     Snake [j].transform.position = Snake [j - 1].transform.position;
  164.                 }
  165.             }
  166.  
  167.  
  168.             Snake [0].transform.position = transform.position;
  169.  
  170.  
  171.                 if (dir == "up") {
  172.                     tempPos.y++;
  173.                     transform.localEulerAngles = new Vector3 (0, 0, 90);
  174.                 } else if (dir == "left") {
  175.                     tempPos.x--;
  176.                     transform.localEulerAngles = new Vector3 (0, 0, 180);
  177.                 } else if (dir == "down") {
  178.                     tempPos.y--;
  179.                     transform.localEulerAngles = new Vector3 (0, 0, 270);
  180.                 } else if (dir == "right") {
  181.                     tempPos.x++;
  182.                     transform.localEulerAngles = new Vector3 (0, 0, 0);
  183.                 }
  184.             }
  185.  
  186.         transform.position = tempPos;
  187.     }
  188.  
  189.     void ChangingSprites(){         //messy func to set right sprites to right parts of snek :)     I dunno how to improve that part.
  190.  
  191.         string curve = "";
  192.  
  193.         for (int j = Snake.Count - 1; j > 0; j--) {
  194.             if (j > 0) {
  195.                 if (j < Snake.Count - 1) {
  196.                     curve = CheckCurve (j - 1, j, j + 1);
  197.                     if (curve == "same") {
  198.                         Snake [j].GetComponent <SpriteRenderer> ().sprite = BodySprite;
  199.                     }
  200.                     else if (curve == "up-to-left") {
  201.                         Snake [j].GetComponent <SpriteRenderer> ().sprite = TurnSprite;
  202.                         Snake [j].transform.localEulerAngles = new Vector3 (0, 0, 0);
  203.                     }
  204.                     else if (curve == "up-to-right") {
  205.                         Snake [j].GetComponent <SpriteRenderer> ().sprite = TurnSprite;
  206.                         Snake [j].transform.localEulerAngles = new Vector3 (0, 0, 270);
  207.                     }
  208.                     else if (curve == "down-to-right") {
  209.                         Snake [j].GetComponent <SpriteRenderer> ().sprite = TurnSprite;
  210.                         Snake [j].transform.localEulerAngles = new Vector3 (0, 0, 180);
  211.                     }
  212.                     else if (curve == "down-to-left") {
  213.                         Snake [j].GetComponent <SpriteRenderer> ().sprite = TurnSprite;
  214.                         Snake [j].transform.localEulerAngles = new Vector3 (0, 0, 90);
  215.                     }
  216.                 }
  217.             }
  218.         }
  219.  
  220.         float prevPartX = transform.position.x;
  221.         float prevPartY = transform.position.y;
  222.  
  223.         float nextPartX = Snake [1].transform.position.x;
  224.         float nextPartY = Snake [1].transform.position.y;
  225.  
  226.         float currentPartX = Snake [0].transform.position.x;
  227.         float currentPartY = Snake [0].transform.position.y;
  228.  
  229.         if (((prevPartX > currentPartX) && (nextPartY < currentPartY)) || ((prevPartY < currentPartY) && (nextPartX > currentPartX))) {
  230.             Snake [0].GetComponent <SpriteRenderer> ().sprite = TurnSprite;
  231.             Snake [0].transform.localEulerAngles = new Vector3 (0, 0, 180);
  232.         }
  233.         else if (((prevPartX > currentPartX) && (nextPartY > currentPartY)) || ((prevPartY > currentPartY && nextPartX > currentPartX))) {
  234.             Snake [0].GetComponent <SpriteRenderer> ().sprite = TurnSprite;
  235.             Snake [0].transform.localEulerAngles = new Vector3 (0, 0, 270);
  236.         }
  237.         else if (((prevPartX < currentPartX) && (nextPartY < currentPartY)) || ((prevPartY < currentPartY) && (nextPartX < currentPartX))) {
  238.             Snake [0].GetComponent <SpriteRenderer> ().sprite = TurnSprite;
  239.             Snake [0].transform.localEulerAngles = new Vector3 (0, 0, 90);
  240.         }
  241.         else if (((prevPartX < currentPartX) && (nextPartY > currentPartY)) || ((prevPartY > currentPartY) && (nextPartX < currentPartX))) {
  242.             Snake [0].GetComponent <SpriteRenderer> ().sprite = TurnSprite;
  243.             Snake [0].transform.localEulerAngles = new Vector3 (0, 0, 0);
  244.         }
  245.         else Snake [0].GetComponent <SpriteRenderer> ().sprite = BodySprite;
  246.  
  247.         float tailY = Snake [Snake.Count - 1].transform.position.y;
  248.         float tailX = Snake [Snake.Count - 1].transform.position.x;
  249.  
  250.         float nextToTailX = Snake [Snake.Count - 2].transform.position.x;
  251.         float nextToTailY = Snake [Snake.Count - 2].transform.position.y;
  252.  
  253.  
  254.         if (nextToTailY > tailY)
  255.             Snake [Snake.Count - 1].transform.localEulerAngles = new Vector3 (0, 0, 0);
  256.         if (nextToTailY < tailY)
  257.             Snake [Snake.Count - 1].transform.localEulerAngles = new Vector3 (0, 0, 180);
  258.         if (nextToTailX > tailX)
  259.             Snake [Snake.Count - 1].transform.localEulerAngles = new Vector3 (0, 0, 270);
  260.         if (nextToTailX < tailX)
  261.             Snake [Snake.Count - 1].transform.localEulerAngles = new Vector3 (0, 0, 90);
  262.  
  263.     }
  264.  
  265. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement