Advertisement
Guest User

Untitled

a guest
Jan 30th, 2015
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.66 KB | None | 0 0
  1. //#define USE_RANDOM_AI
  2. using UnityEngine;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Timers;
  6. public class Computer : Actor
  7. {
  8. #if USE_RANDOM_AI
  9.     public float minTime = 0.1f;
  10.     public float maxTime = 1f;
  11.  
  12.     private Timer moveTimer;
  13.  
  14.     private enum Movements
  15.     {
  16.         MoveUp, MoveDown, Place, Nothing,Max
  17.     };
  18. #endif
  19. #if PIECE_WAIT_SYSTEM
  20.     private System.Timers.Timer delayTimer;
  21.     private bool delayTimerDone = false;
  22. #endif //PIECE_WAIT_SYSTEM
  23.     public int randomMoveChance = 0;
  24.     // Use this for initialization
  25.     protected override void Start ()
  26.     {
  27.         base.Start();
  28. #if PIECE_WAIT_SYSTEM
  29.         delayTimer = new System.Timers.Timer(Random.Range(0, playPieces[playPieces.Count - 1].cooldown * 1000));
  30.         delayTimer.Elapsed += DelayTimerElapsed;
  31.         delayTimer.Start();
  32. #endif //PIECE_WAIT_SYSTEM
  33. #if USE_RANDOM_AI
  34.         moveTimer = this.gameObject.AddComponent<Timer>();
  35.         moveTimer.StartTimer(minTime, maxTime, "MoveTimerEnd");
  36. #endif
  37.     }
  38. #if PIECE_WAIT_SYSTEM
  39.     void DelayTimerElapsed(object sender, ElapsedEventArgs e)
  40.     {
  41.         delayTimerDone = true;
  42.  
  43.         /*throw new System.NotImplementedException();*/
  44.     }
  45. #endif //PIECE_WAIT_SYSTEM
  46.     // Update is called once per frame
  47.     protected override void Update()
  48.     {
  49. #if !USE_RANDOM_AI && !PIECE_WAIT_SYSTEM
  50.         CalculateMove();//New placement
  51. #endif
  52. #if PIECE_WAIT_SYSTEM
  53.         if (delayTimerDone)
  54.         {
  55.             CalculateMove();
  56.             delayTimer.Interval = Random.Range(0, playPieces[playPieces.Count - 1].cooldown * 1000);
  57.             delayTimer.Start();
  58.             delayTimerDone = false;
  59.         }
  60. #endif
  61.         base.Update();
  62.     }
  63.     //Smart AI
  64.     private void CalculateMove()
  65.     {
  66.         if (Time.timeScale == 0)
  67.             return;
  68.  
  69.         if (canPlace && !isNotUseable)
  70.         {
  71.             int randomChance = Random.Range(0, 100);
  72.             int selectedPlank = -1;
  73.             if (randomChance < randomMoveChance)
  74.             {
  75.                 selectedPlank = Random.Range(0, commonVariable.planks.Count);
  76.             }
  77.             else
  78.             {
  79.                 PlayPiece[] playPieces = GameObject.FindObjectsOfType<PlayPiece>();
  80.                 float[] powerLane = new float[commonVariable.planks.Count];
  81.                 for (int i = 0; i < playPieces.Length; i++)
  82.                 {
  83.                     if (playPieces[i].power > 0)
  84.                     {
  85.                         if (playPieces[i].team == this.team)
  86.                         {
  87.                             powerLane[playPieces[i].placedLane] += playPieces[i].power;
  88.                         }
  89.                         else
  90.                         {
  91.                             powerLane[playPieces[i].placedLane] -= playPieces[i].power;
  92.                         }
  93.                     }
  94.                 }
  95.                 for (int p = 0; p < powerLane.Length; p++)
  96.                 {
  97.                     if (this.selectedPiece.pieceType == PlayPiece.PieceType.BARREL)//We got a barrel
  98.                     {
  99.                         if (powerLane[p] < 0 && powerLane[p] > -100)
  100.                         {
  101.                             if (selectedPlank >= 0)
  102.                             {
  103.                                 if (powerLane[selectedPlank] < powerLane[p])
  104.                                     selectedPlank = p;
  105.                             }
  106.                             else
  107.                             {
  108.                                 selectedPlank = p;
  109.                             }
  110.                         }
  111.                     }
  112.                     else
  113.                     {
  114.                         if (powerLane[p] <= 0 && powerLane[p] > -100)//If we got less power or equal to 0 and there is no barrel there.
  115.                         {
  116.                             selectedPlank = p;
  117.                             if (powerLane[p] + this.selectedPiece.power >= 0)
  118.                                 selectedPlank = p;
  119.                         }
  120.                     }
  121.                 }
  122.                 if (selectedPlank < 0)
  123.                     selectedPlank = Random.Range(0, commonVariable.planks.Count);
  124.             }//End not Random
  125.             SelectNewPlank(selectedPlank);
  126.             while (!PlacePiece())//One shall not keep spamming to place when we can't place there!
  127.             {
  128.                 selectedPlank = Random.Range(0, commonVariable.planks.Count);
  129.                 SelectNewPlank(selectedPlank);
  130.             }
  131.         }//End can place
  132.     }//End function
  133. #if USE_RANDOM_AI
  134.     private void Movement()
  135.     {
  136.         if (Time.timeScale == 0)
  137.             return;
  138.  
  139.         int random = Random.Range(0, (int)(Movements.Max -1));
  140.         switch (random)
  141.         {
  142.             case (int)Movements.MoveUp:
  143.                 SelectNewPlank(selectedPlank - 1);
  144.                 break;
  145.  
  146.             case (int)Movements.MoveDown:
  147.                 SelectNewPlank(selectedPlank + 1);
  148.                 break;
  149.  
  150.             case (int)Movements.Place:
  151.                 this.PlacePiece();
  152.                 break;
  153.  
  154.             case (int)Movements.Nothing:
  155.                 break;
  156.             default:
  157.                 Debug.LogError("Error no move found move:" + random);
  158.                 return;
  159.         }
  160.  
  161.     }
  162.     private void MoveTimerEnd()
  163.     {
  164.         Movement();
  165.         moveTimer.StartTimer(Random.Range(minTime, maxTime), 0, "MoveTimerEnd");
  166.     }
  167. #endif
  168. #if PIECE_WAIT_SYSTEM
  169.     private void OnDestroy()
  170.     {
  171.         delayTimer.Stop();
  172.         delayTimer.Elapsed -= DelayTimerElapsed;
  173.         delayTimer.Dispose();
  174.         delayTimer = null;
  175.     }
  176. #endif
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement