Example #1
0
        public async void Start()
        {
            battlePhase = BattlePhase.Starting;

            // Register data handlers
            unitOrderMoveDataHandler = DataHandler.New(HandleUnitOrderMove, new NetDataFilterUnitOrder(battleData.id).And(new NetDataFilterType(typeof(UnitOrderMove))));
            unitOrderStopDataHandler = DataHandler.New(HandleUnitOrderStop, new NetDataFilterUnitOrder(battleData.id).And(new NetDataFilterType(typeof(UnitOrderStop))));
            NetDataEventManager.Instance.RegisterHandler(unitOrderMoveDataHandler);
            NetDataEventManager.Instance.RegisterHandler(unitOrderStopDataHandler);


            // Load players
            LoadBattleRequestData loadBattleRequestData = new LoadBattleRequestData()
            {
                battle = battleData
            };

            NetRequest request1 = NetRequest.CreateAndSend(player1.NetworkingClient.Connection, loadBattleRequestData, Channel.ReliableFragmented);
            NetRequest request2 = NetRequest.CreateAndSend(player2.NetworkingClient.Connection, loadBattleRequestData, Channel.ReliableFragmented);

            await Task.WhenAll(request1.WaitForResponse(), request2.WaitForResponse());

            bool player01Loaded = request1.response.GetDataOrDefault <bool>();
            bool player02Loaded = request2.response.GetDataOrDefault <bool>();

            if (player01Loaded == false || player02Loaded == false)
            {
                Log.Error(LogTag, $"Failed to start BattleSession for BattleData: {battleData}.");
                return;
            }

            // Start battle phases loop
            while (battlePhase != BattlePhase.BattleEnded)
            {
                StartPlanningPhase();
                await WaitForEndOfPhase();

                StartActionPhase();
                await WaitForEndOfPhase();

                if (battleData.unitsOnBoard.Count == 0)
                {
                    battlePhase = BattlePhase.BattleEnded;
                }
            }
        }