Advertisement
Guest User

Untitled

a guest
Dec 30th, 2020
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.07 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Unity.MLAgents;
  5. using UnityEngine;
  6. using UnityEngine.UI;
  7.  
  8. public class AILearning : MonoBehaviour
  9. {
  10.     public static AILearning Main;
  11.     public Text turnCounter;
  12.     public Text Message;
  13.     private List<string> Messages = new List<string>();
  14.     private int cnt = 0;
  15.     private int turnCount = 0;
  16.     private List<AI> leftOvers = new List<AI>();
  17.     static public int totalCount = 0;
  18.  
  19.     private float timer = 0;
  20.     // Start is called before the first frame update
  21.     void Start()
  22.     {
  23.         Main = this;
  24.         TwitchIrc.Instance.OnServerMessage += OnServerMessage;
  25.         TwitchIrc.Instance.OnUserJoined += OnUserJoined;
  26.         TwitchIrc.Instance.OnChannelMessage += ChannelMessage;
  27.  
  28.         TwitchViewer.Load();
  29.  
  30.         StartCoroutine(RunAI());
  31.     }
  32.  
  33.     private void OnApplicationQuit()
  34.     {
  35.         TwitchViewer.Save();
  36.     }
  37.  
  38.     public void AddMessage(string message)
  39.     {
  40.         Messages.Insert(Messages.Count, message);
  41.         Messages.Reverse();
  42.         Messages = Messages.Take(25).ToList();
  43.         Messages.Reverse();
  44.         Message.text = string.Join("\n", Messages);
  45.     }
  46.  
  47.     //Receive message from server
  48.     void OnServerMessage(string message)
  49.     {
  50.         Debug.Log(message);
  51.     }
  52.  
  53.     void OnUserJoined(Irc.UserJoinedEventArgs userJoinedArgs)
  54.     {
  55.         TwitchViewer user = TwitchViewer.GetUser(userJoinedArgs.User);
  56.         if (user == null)
  57.         {
  58.             user = new TwitchViewer() {
  59.                 Username = userJoinedArgs.User
  60.             };
  61.             TwitchViewer.Viewers.List.Add(user);
  62.         }
  63.     }
  64.  
  65.     public void ChannelMessage(Irc.ChannelMessageEventArgs channelMessageArgs)
  66.     {
  67.         // IRC Message to commands here!
  68.         TwitchViewer user = TwitchViewer.GetUser(channelMessageArgs.From);
  69.         string msg = channelMessageArgs.Message;
  70.         if (user != null && msg.StartsWith("!"))
  71.         {
  72.             if (msg.ToLower().StartsWith("!buy card "))
  73.             {
  74.                 msg = msg.ToLower().TrimStart("!buy card ");
  75.                 user.BuyCard(msg);
  76.             }
  77.             else if (msg.ToLower().StartsWith("!buy stat "))
  78.             {
  79.                 msg = msg.ToLower().TrimStart("!buy stat ");
  80.                 user.BuyStat(msg);
  81.             }
  82.             else if (msg.ToLower().StartsWith("!add "))
  83.             {
  84.                 msg = msg.ToLower().TrimStart("!add ");
  85.                 user.AddCard(msg);
  86.             }
  87.             else if (msg.ToLower().StartsWith("!remove "))
  88.             {
  89.                 msg = msg.ToLower().TrimStart("!remove ");
  90.                 user.RemoveCard(msg);
  91.             }
  92.             else if (msg.ToLower().StartsWith("!points"))
  93.             {
  94.                 user.DisplayPoints();
  95.             }
  96.             else if (msg.ToLower().StartsWith("!join"))
  97.             {
  98.                 user.Join();
  99.             }
  100.             else if (msg.ToLower().StartsWith("!cards"))
  101.             {
  102.                 user.CardList();
  103.             }
  104.         }
  105.     }
  106.  
  107.  
  108.     private bool stuck = false;
  109.     public void Update()
  110.     {
  111.         if (Time.realtimeSinceStartup - timer > 5)
  112.         {
  113.             StopAllCoroutines();
  114.             stuck = true;
  115.             GameData.lockHand = false;
  116.             if (AI.ai.Count > 0)
  117.             {
  118.                 foreach (AI ai in AI.ai)
  119.                 {
  120.                     leftOvers.Add(ai);
  121.                 }
  122.             }
  123.             StartCoroutine(RunAI());
  124.             timer = Time.realtimeSinceStartup;
  125.         }
  126.     }
  127.  
  128.     public IEnumerator RunAI()
  129.     {
  130.         yield return new WaitForSeconds(0.1f);
  131.         while (cnt < 1000000)
  132.         {
  133.             leftOvers = leftOvers.Where(value => value != null).ToList();
  134.             if (leftOvers.Count > 0)
  135.             {
  136.                 //if (turnCount < 100)
  137.                 //{
  138.                     TwitchIrc.Instance.Message(
  139.                         string.Format(
  140.                             "SirSword Winner is: {0} in team {1}",
  141.                             string.Join(", ", leftOvers.Select(value => value.name)).ReplaceLast(", ", " and "),
  142.                             leftOvers.FirstOrDefault().faction
  143.                         )
  144.                     );
  145.                     foreach (AI ai in leftOvers)
  146.                     {
  147.                         TwitchViewer user = TwitchViewer.GetUser(ai.name.ToLower());
  148.                         if (user != null)
  149.                         {
  150.                             user.AccumelatedPoints += 5;
  151.                         }
  152.                     }
  153.                 //}
  154.                 /*else
  155.                 {
  156.                     TwitchIrc.Instance.Message(
  157.                         string.Format(
  158.                             "SirSad Tied with: {0}",
  159.                             string.Join(", ", leftOvers.Select(value => value.name)).ReplaceLast(", ", " and ")
  160.                         )
  161.                     );
  162.                     foreach (AI ai in leftOvers)
  163.                     {
  164.                         TwitchViewer user = TwitchViewer.GetUser(ai.name.ToLower());
  165.                         if (user != null)
  166.                         {
  167.                             user.AccumelatedPoints += 2;
  168.                         }
  169.                     }
  170.                 }*/
  171.             }
  172.  
  173.             cnt++;
  174.             TwitchIrc.Instance.Message(string.Format("PowerUpL ROUND {0} PowerUpR", cnt));
  175.             totalCount = 0;
  176.  
  177.             foreach (AI ai in leftOvers)
  178.             {
  179.                 if (ai != null && ai.GetComponent<MonsterAgent>() != null)
  180.                 {
  181.                     if (turnCount > 0 && !stuck)
  182.                     {
  183.                         ai.GetComponent<MonsterAgent>().AddReward(1);
  184.                     }
  185.                     ai.OnDeath.Invoke(ai, ai, 0, true);
  186.                 }
  187.             }
  188.             stuck = false;
  189.             turnCount = 0;
  190.             leftOvers.Clear();
  191.  
  192.             BattleMapGenerator.Instance.Reset();
  193.             BattleMapGenerator.Instance.Generate();
  194.  
  195.             yield return new WaitForEndOfFrame();
  196.  
  197.             TrainerSpawner[] spawners = GetComponentsInChildren<TrainerSpawner>();
  198.             foreach (TrainerSpawner spawner in spawners)
  199.             {
  200.                 if(spawner != null)
  201.                 {
  202.                     spawner.Spawn();
  203.                     totalCount++;
  204.                 }
  205.                 yield return new WaitForEndOfFrame();
  206.             }
  207.  
  208.             timer = Time.realtimeSinceStartup;
  209.             while (AI.ai.Select(value => value.faction).Distinct().ToList().Count > 1 && turnCount < 1000)
  210.             {
  211.                 turnCount++;
  212.                 turnCounter.text = string.Format("Turn: {0}", turnCount);
  213.                 Unit.SetOrder();
  214.                 List<AI> aiList = Unit.units.Where(value => value.GetType() != typeof(Unit)).Select(value => (AI)value).ToList();
  215.                 foreach (AI unit in aiList)
  216.                 {
  217.                     unit.isMyTurn = true;
  218.                     while (unit != null && unit.isMyTurn)
  219.                     {
  220.                         if (unit != null)
  221.                         {
  222.                             unit.GetComponent<MonsterAgent>().RequestDecision();
  223.                             unit.GetComponent<MonsterAgent>().RequestAction();
  224.                         }
  225.                         yield return new WaitForEndOfFrame();
  226.  
  227.                         //if (Time.realtimeSinceStartup - timer < 60) break;
  228.                     }
  229.                     timer = Time.realtimeSinceStartup;
  230.                 }
  231.                 foreach (Unit unit in Unit.units)
  232.                 {
  233.                     unit.PlayStack();
  234.                 }
  235.  
  236.                yield return Unit.StartQueue();
  237.                Unit.units.ForEach(u =>
  238.                 {
  239.                     u.stack.ForEach(c =>
  240.                     {
  241.                         if (c.keywords
  242.                                 .Select(value => value.Get<Game.Keyword.OnDiscard>())
  243.                                 .Where(value => value != null)
  244.                                 .All(value => value.OnDiscard(u, c)))
  245.                         {
  246.                             u.discardPile.Add(c);
  247.                             if (u == GameData.Player) DiscardPile.main.UpdateDiscard();
  248.                         }
  249.                     });
  250.                     u.stack.Clear();
  251.                     u.CheckReShuffle();
  252.                 }
  253.                 );
  254.                 Unit.OnStackComplete.Invoke();
  255.                 yield return new WaitForEndOfFrame();
  256.             }
  257.  
  258.             if(turnCount > 0 && spawners.Length > 0)
  259.             {
  260.                 Academy.Instance.StatsRecorder.Add("Custom/Turns", turnCount);
  261.                 Academy.Instance.StatsRecorder.Add("Custom/Avg. Unit Turns", turnCount / spawners.Length);
  262.             }
  263.  
  264.             if (AI.ai.Count > 0)
  265.             {
  266.                 foreach (AI ai in AI.ai)
  267.                 {
  268.                     leftOvers.Add(ai);
  269.                 }
  270.             }
  271.  
  272.         }
  273.     }
  274. }
  275.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement