/Assets/CameraControl.cs

https://bitbucket.org/Codwa/battalion-of-reckless-renegades · C# · 169 lines · 122 code · 28 blank · 19 comment · 27 complexity · 318e8f7a91188f72bfa2aa818d926e39 MD5 · raw file

  1. //File: Camera Control
  2. //Purpose: Moves the camera to follow the player, move to boss areas, and handle's spawning enemies from the sides.
  3. //Written by: Cody Way
  4. //Created on: 7/16/13
  5. //Last updated: 8/7/13
  6. using UnityEngine;
  7. using System.Collections;
  8. using SpawnTypes;
  9. namespace SpawnTypes {
  10. public enum SpawnState { NORMAL, LEFT, RIGHT, NONE } ;
  11. }
  12. public class CameraControl : MonoBehaviour {
  13. //Camera position variables
  14. public float cameraOffsetX1;
  15. public float cameraOffsetX2;
  16. public float cameraOffsetY;
  17. public float cameraOffsetZ;
  18. public Vector3 bossPosition;
  19. //Boss Camera variables
  20. public bool bossActive;
  21. private bool prevBoss;
  22. private bool bossTravel;
  23. //Following Player variables
  24. private bool facingRight;
  25. private bool prevFacing;
  26. private bool traveling;
  27. //Lerp variable
  28. private float time;
  29. //Enemy Spawn variables
  30. public GameObject leftSpawn;
  31. public GameObject rightSpawn;
  32. private SpawnState state;
  33. private float spawnTime;
  34. public float spawnTimer;
  35. public GameObject PrimaryEnemy;
  36. //Use this for initialization
  37. void Start () {
  38. traveling = false;
  39. time = 0;
  40. facingRight = true;
  41. prevFacing = facingRight;
  42. bossActive = false;
  43. prevBoss = bossActive;
  44. bossTravel = false;
  45. spawnTime = 0;
  46. }
  47. //Update is called once per frame
  48. void Update () {
  49. Camera camera = GetComponent<Camera>();
  50. Transform player = GameObject.FindGameObjectWithTag("Player").transform;
  51. #region Movement and Facing
  52. //Determine facing of the character
  53. if(Input.GetAxis("Horizontal") == 1)
  54. facingRight = true;
  55. else if (Input.GetAxis("Horizontal") == -1)
  56. facingRight = false;
  57. //Determine whether or not camera needs moved
  58. if(facingRight != prevFacing)
  59. {
  60. traveling = true;
  61. prevFacing = facingRight;
  62. time = 0;
  63. }
  64. if(bossActive != prevBoss)
  65. {
  66. bossTravel = true;
  67. prevBoss = bossActive;
  68. time = 0;
  69. }
  70. //Moves camera to boss area camera location
  71. if(bossTravel)
  72. {
  73. if(bossActive)
  74. camera.transform.position = Vector3.Lerp(camera.transform.position,bossPosition,time);
  75. else {
  76. if(facingRight)
  77. camera.transform.position = Vector3.Lerp(camera.transform.position,new Vector3(player.position.x + cameraOffsetX1, cameraOffsetY, cameraOffsetZ),time);
  78. else
  79. camera.transform.position = Vector3.Lerp(camera.transform.position,new Vector3(player.position.x + cameraOffsetX2, cameraOffsetY, cameraOffsetZ),time);
  80. }
  81. time += Time.deltaTime;
  82. if(time >= 1)
  83. bossTravel = false;
  84. }
  85. //Moves camera to left or right side
  86. else if(traveling && !bossActive)
  87. {
  88. if(facingRight)
  89. camera.transform.position = Vector3.Lerp(camera.transform.position,new Vector3(player.position.x + cameraOffsetX1, cameraOffsetY, cameraOffsetZ),time);
  90. else
  91. camera.transform.position = Vector3.Lerp(camera.transform.position,new Vector3(player.position.x + cameraOffsetX2, cameraOffsetY, cameraOffsetZ),time);
  92. time += Time.deltaTime;
  93. if(time >= 1)
  94. traveling = false;
  95. }
  96. //Follow player
  97. else if(!bossActive)
  98. {
  99. if(facingRight)
  100. camera.transform.position = new Vector3(player.position.x + cameraOffsetX1, cameraOffsetY, cameraOffsetZ);
  101. else
  102. camera.transform.position = new Vector3(player.position.x + cameraOffsetX2, cameraOffsetY, cameraOffsetZ);
  103. }
  104. #endregion
  105. if(Time.timeScale != 0) {
  106. spawnTime += Time.deltaTime;
  107. if(spawnTime >= spawnTimer) {
  108. Transform obj;
  109. Vector3 position;
  110. switch(state) {
  111. case SpawnState.LEFT:
  112. obj = transform.FindChild("LeftSpawn");
  113. Instantiate(PrimaryEnemy,obj.position,obj.rotation);
  114. break;
  115. case SpawnState.RIGHT:
  116. obj = transform.FindChild("RightSpawn");
  117. Instantiate(PrimaryEnemy,obj.position,obj.rotation);
  118. break;
  119. case SpawnState.NORMAL:
  120. obj = transform.FindChild("RightSpawn");
  121. Instantiate(PrimaryEnemy,obj.position,obj.rotation);
  122. obj = transform.FindChild("LeftSpawn");
  123. Instantiate(PrimaryEnemy,obj.position,obj.rotation);
  124. break;
  125. }
  126. spawnTime = 0;
  127. }
  128. }
  129. }
  130. //Call when entering boss area
  131. void EnterBossArea(BossAreaMessageParams values) {
  132. bossPosition = values.pos;
  133. bossActive = true;
  134. state = values.state;
  135. }
  136. //Call when exiting boss area
  137. void ExitBossArea() {
  138. bossActive = false;
  139. state = SpawnState.NORMAL;
  140. }
  141. }