Advertisement
LittleAngel

Webplayer Templates issue

May 25th, 2011
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.81 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. /* NOTES:
  5. * Is there just one starting spawn? For SetStartingPage? Or does the spawn point come into it for other reasons?
  6. * In multi-player games with SUN and SHADOW (Dawn/Dusk) there needs to be a way to hard set the hex locations. In this blue sky version, it's irrelevant.
  7. * Look at utilizing MessageManager instead of Message
  8. */
  9.  
  10. [System.Serializable]
  11. public class UIElements {
  12. public UIStateToggleBtn allies;
  13. public UIStateToggleBtn germans;
  14. public UIButton tailing;
  15. public UIButton hitFrame;
  16. public UIButton lost;
  17. public UIButton aboveYou;
  18. public UIButton belowYou;
  19. public UIButton victory;
  20. public UIButton defeat;
  21. public GameObject fokkerCover;
  22. public GameObject sopwithCover;
  23. public GameObject coverPage;
  24. }
  25.  
  26. public class PageData {
  27. public int pageNumber;
  28. public int hexID;
  29. public int hexFacing;
  30. public int relativeRange;
  31. public bool tailing;
  32. public bool canFire;
  33. public bool targeted;
  34. public int direction;
  35. public int facing;
  36. }
  37.  
  38. public class UnitDetails {
  39. // public GameObject spawn;
  40. public GameObject aircraft;
  41. public GameObject bullets;
  42. public Transform aircraftTransform;
  43. public Transform cameraSpawn;
  44. public UIStateToggleBtn moveIcon;
  45. public GameObject turnCover;
  46. public PageData[] hexData;
  47. public int[,] maneuverData;
  48. public int currentHealth;
  49. }
  50.  
  51. public class GameManager : MonoBehaviour {
  52. #region Variable Declaration
  53. public bool testing; // TESTING??
  54. public bool usingMoves; // OBSOLETE
  55. public bool isPlayer; // SET PRIVATE
  56. public int moveScale;
  57. public float overflyDistance;
  58. public bool lookAt; // TESTING??
  59. public Camera gameCamera;
  60. public SpriteText MessageObject;
  61. public GameObject[] aircraft;
  62. public GameObject[] bullets;
  63. public GameObject[] spawnPoints;
  64. public GameObject[] cameraSpawnPoints;
  65. public GameObject[] hexes;
  66. public Vector3[] maneuverData;
  67. public PageData[] hexDataAllies;
  68. public PageData[] hexDataGermans;
  69. public int[,] maneuverDataAllies;
  70. public int[,] maneuverDataGermans;
  71. public bool iPhone4; // TESTING
  72. public UIElements uIElements;
  73. private GameObject playersSpawn;
  74. private UnitDetails players;
  75. private UnitDetails opponents;
  76. private int currentPage;
  77. private int playersManeuverID;
  78. private int opponentsManeuverID;
  79. private int playersManeuverPage;
  80. private int opponentsManeuverPage;
  81. private bool topOfTheTurn;
  82. private static GameManager gameManager; // To set an instance of this script
  83.  
  84. // Reference Support
  85. // This can be cached on start as GameManager gameManager; & in Start() gameManager = GameManager.Instance();
  86. // Once cached, requires function calls as: gameManager.SomeFunction ();
  87.  
  88. public static GameManager Instance () {
  89. if (!gameManager) {
  90. gameManager = FindObjectOfType(typeof (GameManager)) as GameManager;
  91. if (!gameManager)
  92. Debug.LogError ("There needs to be one active GameManager script on a GameObject in your scene.");
  93. }
  94.  
  95. return gameManager;
  96. }
  97. #endregion
  98.  
  99. void Awake () {
  100. players = new UnitDetails ();
  101. opponents = new UnitDetails ();
  102. isPlayer = true;
  103. topOfTheTurn = true;
  104. uIElements.allies.SetState (1);
  105. uIElements.germans.SetState (1);
  106. uIElements.tailing.Hide(true);
  107. uIElements.lost.Hide(true);
  108. uIElements.hitFrame.Hide(true);
  109. uIElements.aboveYou.Hide(true);
  110. uIElements.belowYou.Hide(true);
  111. uIElements.victory.Hide(true);
  112. uIElements.defeat.Hide(true);
  113. }
  114.  
  115. public void StartGame (int aircraftID) { // Refactor this to "Allies" and "Germans" rather than in int? Or use an enum? int is a bit obtuse...
  116. // SetManeuver the refernces depending upon faction
  117. if (aircraftID == 0) { // This annoys me that 1 = 0 for playuer aircraft... refactor??
  118. // Player is Allies
  119. playersSpawn = spawnPoints[0];
  120.  
  121. players.aircraft = aircraft[0];
  122. players.bullets = bullets[0];
  123. players.cameraSpawn = cameraSpawnPoints[0].transform;
  124. players.hexData = hexDataAllies;
  125. players.maneuverData = maneuverDataAllies;
  126. players.moveIcon = uIElements.allies;
  127. players.turnCover = uIElements.sopwithCover;
  128.  
  129. opponents.aircraft = aircraft[1];
  130. opponents.bullets = bullets[1];
  131. opponents.cameraSpawn = cameraSpawnPoints[1].transform;
  132. opponents.hexData = hexDataGermans;
  133. opponents.maneuverData = maneuverDataGermans;
  134. opponents.moveIcon = uIElements.germans;
  135. opponents.turnCover = uIElements.fokkerCover;
  136. } else if (aircraftID == 1) {
  137. // Player is German
  138. playersSpawn = spawnPoints[1];
  139.  
  140. players.aircraft = aircraft[1];
  141. players.bullets = bullets[1];
  142. players.cameraSpawn = cameraSpawnPoints[1].transform;
  143. players.hexData = hexDataGermans;
  144. players.maneuverData = maneuverDataGermans;
  145. players.moveIcon = uIElements.germans;
  146. players.turnCover = uIElements.fokkerCover;
  147.  
  148. opponents.aircraft = aircraft[0];
  149. opponents.bullets = bullets[0];
  150. opponents.cameraSpawn = cameraSpawnPoints[0].transform;
  151. opponents.hexData = hexDataAllies;
  152. opponents.maneuverData = maneuverDataAllies;
  153. opponents.moveIcon = uIElements.allies;
  154. opponents.turnCover = uIElements.sopwithCover;
  155. }
  156.  
  157. // Set a reference to the aircraft transforms
  158. players.aircraftTransform = players.aircraft.transform;
  159. opponents.aircraftTransform = opponents.aircraft.transform;
  160.  
  161. // Set the health values
  162. players.currentHealth = 12;
  163. opponents.currentHealth = 12;
  164.  
  165. // Turn on the aircraft
  166. for (int i = 0; i < aircraft.Length; i ++) {
  167. aircraft[i].SetActiveRecursively (true);
  168. }
  169.  
  170. // Turn off the bullets
  171. for (int i = 0; i < bullets.Length; i ++) {
  172. bullets[i].SetActiveRecursively (false);
  173. }
  174.  
  175. // Find and Set the start page
  176. currentPage = (Random.Range(0,2) == 0) ? 170 : 173; // This could be split off into it's own method in consideration of completely random pages...
  177. Debug.Log ("Start Game - current page: " + currentPage);
  178.  
  179. // Place the player's aircraft at its starting hex.
  180. players.aircraftTransform.position = playersSpawn.transform.position;
  181. players.aircraftTransform.rotation = playersSpawn.transform.rotation;
  182.  
  183. // Place the Opponent's Aircraft at its starting hex.
  184. opponents.aircraftTransform.position = hexes[players.hexData[currentPage].hexID].transform.position;
  185. Vector3 setRotation = Vector3.zero;
  186. setRotation.y = ((players.hexData[currentPage].hexFacing) - 1) * 60.0f; // Page hex facing should be changed from 1-6 to 0-5 and remove the -1
  187. opponents.aircraftTransform.eulerAngles = setRotation;
  188.  
  189. // Set the Games's Camera
  190. SetPlayersLook ();
  191.  
  192. // Hide the splash page
  193. uIElements.coverPage.SetActiveRecursively (false); // This may change if there is a scene change based on game type...
  194. }
  195.  
  196. public void SetManeuver (int newManeuverID) {
  197. if (topOfTheTurn) {
  198. Debug.Log ("Top of the Turn, Player goes first");
  199. if (isPlayer) {
  200. Debug.Log("Player's Move");
  201. SetPlayersMove (newManeuverID);
  202.  
  203. Debug.Log ("Top of turn, Set camera");
  204. ChangeGameCamera ();
  205.  
  206. } else {
  207. Debug.Log("Opponent's Move");
  208. SetOpponentsMove(newManeuverID);
  209.  
  210. ResolveMove();
  211. Debug.Log ("Resolve Move returns: " + currentPage);
  212.  
  213. }
  214. } else if (!topOfTheTurn) {
  215. Debug.Log ("NOT Top of the Turn, Opponent goes first");
  216. if (!isPlayer) {
  217. Debug.Log("Opponent's Move");
  218. SetOpponentsMove(newManeuverID);
  219.  
  220. Debug.Log ("!Top of turn, Set camera");
  221. ChangeGameCamera ();
  222.  
  223. } else {
  224. Debug.Log("Player's Move");
  225. SetPlayersMove (newManeuverID);
  226.  
  227. ResolveMove();
  228. Debug.Log ("Resolve Move returns: " + currentPage);
  229. }
  230. }
  231. }
  232.  
  233. void SetPlayersMove (int newManeuverID) {
  234. playersManeuverID = newManeuverID;
  235. playersManeuverPage = players.maneuverData [currentPage, playersManeuverID];
  236. players.moveIcon.SetState(0);
  237. }
  238.  
  239. void SetOpponentsMove (int newManeuverID) {
  240. opponentsManeuverID = newManeuverID;
  241. opponentsManeuverPage = opponents.maneuverData[currentPage, opponentsManeuverID];
  242. opponents.moveIcon.SetState(0);
  243. }
  244.  
  245. void ChangeGameCamera () {
  246. isPlayer = !isPlayer;
  247. if (isPlayer) {
  248. SetPlayersLook();
  249. players.turnCover.SetActiveRecursively(true);
  250. } else {
  251. SetOpponentsLook();
  252. opponents.turnCover.SetActiveRecursively(true);
  253. }
  254. }
  255.  
  256. void SetPlayersLook () {
  257. gameCamera.transform.position = players.cameraSpawn.position;
  258. if (lookAt) {
  259. gameCamera.transform.LookAt (opponents.aircraftTransform);
  260. } else {
  261. Vector3 setRotation = Vector3.zero;
  262. setRotation.y = players.aircraftTransform.eulerAngles.y;
  263. Debug.Log("SetPlayersLook; setRotation.y: " + setRotation.y);
  264. setRotation.y += ((players.hexData[currentPage].direction) - 1) * 45.0f; // Page hex facing should be changed from 1-6 to 0-5 and remove the -1
  265. Debug.Log("SetPlayersLook += players.hexData[currentPage].direction: " + setRotation.y);
  266. gameCamera.transform.eulerAngles = setRotation;
  267. }
  268.  
  269. if (players.hexData[currentPage].hexID == 0) {
  270. uIElements.aboveYou.Hide(false);
  271. } else {
  272. uIElements.aboveYou.Hide(true);
  273. }
  274.  
  275. if (players.hexData[currentPage].targeted) {
  276. uIElements.hitFrame.Hide(false);
  277. opponents.bullets.SetActiveRecursively(true);
  278. Debug.Log ("targeted" + players.hexData[currentPage].relativeRange);
  279. switch (players.hexData[currentPage].relativeRange) {
  280. case 1:
  281. players.currentHealth -= 4;
  282. break;
  283. case 2:
  284. players.currentHealth -= 2;
  285. break;
  286. case 3:
  287. players.currentHealth -= 1;
  288. break;
  289. }
  290. Debug.Log("Player's Current Health: : " + players.currentHealth);
  291. if (players.currentHealth <= 0) {
  292. uIElements.victory.Hide(true);
  293. uIElements.defeat.Hide(false);
  294. }
  295. } else {
  296. uIElements.hitFrame.Hide(true);
  297. opponents.bullets.SetActiveRecursively(false);
  298. }
  299.  
  300. if (players.hexData[currentPage].canFire) {
  301. players.bullets.SetActiveRecursively(true);
  302. if (opponents.currentHealth <= 0) {
  303. uIElements.victory.Hide(false);
  304. uIElements.defeat.Hide(true);
  305. }
  306. } else {
  307. players.bullets.SetActiveRecursively(false);
  308. }
  309.  
  310. if (players.hexData[currentPage].tailing) {
  311. uIElements.tailing.Hide(false);
  312. } else {
  313. uIElements.tailing.Hide(true);
  314. }
  315. }
  316.  
  317. void SetOpponentsLook () {
  318. // Set Camera Position
  319. gameCamera.transform.position = opponents.cameraSpawn.position;
  320.  
  321. // Set Camera Rotation
  322. if (lookAt) {
  323. gameCamera.transform.LookAt (players.aircraftTransform);
  324. } else {
  325. Vector3 setRotation = Vector3.zero;
  326. setRotation.y = opponents.aircraftTransform.eulerAngles.y;
  327. Debug.Log("SetOpponentsLook; setRotation.y: " + setRotation.y);
  328. setRotation.y += ((opponents.hexData[currentPage].direction) - 1) * 45.0f; // Page hex facing should be changed from 1-6 to 0-5 and remove the -1
  329. Debug.Log("SetOpponentsLook += opponents.hexData[currentPage].direction: " + setRotation.y);
  330. gameCamera.transform.eulerAngles = setRotation;
  331. }
  332.  
  333. // Set HexID:0 Message // This is TEMP TESTING and Needs Perfection
  334. if (opponents.hexData[currentPage].hexID == 0) {
  335. uIElements.aboveYou.Hide(false);
  336. } else {
  337. uIElements.aboveYou.Hide(true);
  338. }
  339.  
  340. if (opponents.hexData[currentPage].targeted) {
  341. uIElements.hitFrame.Hide(false);
  342. players.bullets.SetActiveRecursively(true);
  343. Debug.Log ("targeted range: " + players.hexData[currentPage].relativeRange);
  344. switch (opponents.hexData[currentPage].relativeRange) {
  345. case 1:
  346. opponents.currentHealth -= 4;
  347. break;
  348. case 2:
  349. opponents.currentHealth -= 2;
  350. break;
  351. case 3:
  352. opponents.currentHealth -= 1;
  353. break;
  354. }
  355. Debug.Log("Opponent's Current Health: : " + opponents.currentHealth);
  356. if (opponents.currentHealth <= 0) {
  357. uIElements.victory.Hide(true);
  358. uIElements.defeat.Hide(false);
  359. }
  360. } else {
  361. uIElements.hitFrame.Hide(true);
  362. players.bullets.SetActiveRecursively(false);
  363. }
  364.  
  365. if (opponents.hexData[currentPage].canFire) {
  366. opponents.bullets.SetActiveRecursively(true);
  367. if (players.currentHealth <= 0) {
  368. uIElements.victory.Hide(false);
  369. uIElements.defeat.Hide(true);
  370. }
  371. } else {
  372. opponents.bullets.SetActiveRecursively(false);
  373. }
  374.  
  375. if (opponents.hexData[currentPage].tailing) {
  376. uIElements.tailing.Hide(false);
  377. } else {
  378. uIElements.tailing.Hide(true);
  379. }
  380. }
  381.  
  382. void ResolveMove() {
  383. Vector3 setPosition = Vector3.zero;
  384. Vector3 setRotation = Vector3.zero;
  385. Vector3 movement = Vector3.zero;
  386.  
  387. // Get New Current Page
  388. currentPage = GetNewCurrentPage ();
  389.  
  390.  
  391. // Player
  392. setPosition.x = 8.661f * moveScale * maneuverData[playersManeuverID].x;
  393. setRotation.y = 60 * maneuverData[playersManeuverID].y;
  394. setPosition.z = 5.0f * moveScale * maneuverData[playersManeuverID].z;
  395.  
  396. movement = players.aircraftTransform.TransformDirection (setPosition);
  397.  
  398. players.aircraftTransform.position += movement;
  399. players.aircraftTransform.eulerAngles += setRotation;
  400.  
  401. // Opponent
  402. setPosition.x = 8.661f * moveScale * maneuverData[opponentsManeuverID].x;
  403. setRotation.y = 60 * maneuverData[opponentsManeuverID].y;
  404. setPosition.z = 5.0f * moveScale * maneuverData[opponentsManeuverID].z;
  405.  
  406. movement = opponents.aircraftTransform.TransformDirection (setPosition);
  407.  
  408. opponents.aircraftTransform.position += movement;
  409. opponents.aircraftTransform.eulerAngles += setRotation;
  410.  
  411. // Remove Opponent from view (This will need work if there is a multiplayer game...? No hot-seat on MP?)
  412. setPosition = Vector3.zero;
  413. setPosition.x = opponents.aircraftTransform.position.x;
  414. setPosition.y = (players.hexData[currentPage].hexID == 0) ? overflyDistance : 0.0f;
  415. setPosition.z = opponents.aircraftTransform.position.z;
  416. opponents.aircraftTransform.position = setPosition;
  417.  
  418. if (isPlayer)
  419. SetPlayersLook ();
  420. else
  421. SetOpponentsLook ();
  422.  
  423. players.moveIcon.SetState(1);
  424. opponents.moveIcon.SetState(1);
  425.  
  426. topOfTheTurn = !topOfTheTurn;
  427. }
  428.  
  429. int GetNewCurrentPage () {
  430. // Initialize the variables.
  431. int newPagePlayer = -1;
  432. int newPageOpponent = -1;
  433.  
  434. // Check the ManeuverPage. Is it 0?
  435. if (opponentsManeuverPage == 0 && playersManeuverPage == 0) {
  436. Debug.Log("Both Player's Maneuver Page Read 0! Returning 0!");
  437. return 0;
  438. }
  439.  
  440. // Find the new page
  441. if (playersManeuverPage != 0) {
  442. newPageOpponent = opponents.maneuverData [playersManeuverPage, opponentsManeuverID];
  443. }
  444. if (opponentsManeuverPage != 0) {
  445. newPagePlayer = players.maneuverData [opponentsManeuverPage, playersManeuverID];
  446. }
  447.  
  448. // Check the new page number
  449. if (playersManeuverPage == 0) {
  450. Debug.Log ("Player Maneuver Page = 0! Returning newPagePlayer: " + newPagePlayer);
  451. return newPagePlayer;
  452.  
  453. } else if (opponentsManeuverPage == 0) {
  454. Debug.Log ("Opponent's Maneuver Page = 0! Returning newPageOpponent: " + newPageOpponent);
  455. return newPageOpponent;
  456.  
  457. }else if (newPagePlayer == newPageOpponent) {
  458. Debug.Log("Page: " + newPagePlayer);
  459. return newPagePlayer;
  460. } else {
  461. Debug.LogError ("newPagePlayer " + newPagePlayer + " newPageOpponent: " + newPageOpponent);
  462. Debug.LogError("Maneuver Resolution does not Match! Check page " + currentPage + "\nAlso check MT Pages! Player Book: " + opponentsManeuverPage + " Opponent Book: " + playersManeuverPage);
  463. return 0;
  464. }
  465. }
  466.  
  467. void Message (string message) {
  468. MessageObject.Text = message;
  469. StartCoroutine(CancelMessage ());
  470. }
  471.  
  472. public IEnumerator CancelMessage () {
  473. yield return new WaitForSeconds (1.0f);
  474. MessageObject.Text = "";
  475. }
  476.  
  477. void RestartLevel () {
  478. Application.LoadLevel (Application.loadedLevel);
  479. }
  480.  
  481. // void OnGUI () {
  482. // GUI.Label (new Rect (180, 10, 70, 50), currentPage.ToString());
  483. // GUI.Box (new Rect(10, 10, 150, 50),"");
  484. // lookAt = GUI.Toggle(new Rect(10, 10, 150, 50), lookAt, "Look At");
  485. // }
  486. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement