コード例 #1
0
ファイル: TankGameSession.cs プロジェクト: zt0616/GameFabric
        async Task <bool> ITankGameSession.TakeDamage(ActorId TankID, float amount)
        {
            try
            {
                bool             isDead    = false;
                float            newHealth = 0.0f;
                GameSessionState state     = await this.GetStateAsync <GameSessionState>();

                foreach (TankSessionMemberItem i in state.Players)
                {
                    if (i.TankId == TankID)
                    {
                        newHealth = await(i.TankId.Proxy <ITank>().TakeDamageAsync(amount));
                        if (newHealth <= 0)
                        {
                            isDead = true;
                        }
                    }
                }
                await this.SetStateAsync(state);

                //Notify clients
                TakeDamageResponse tdr = new TakeDamageResponse();
                tdr.Status            = System.Net.HttpStatusCode.OK;
                tdr.TankGameSessionId = this.Id.GetGuidId();
                tdr.TankId            = TankID.GetGuidId();
                tdr.Health            = newHealth;
                tdr.isDead            = isDead;

                List <Task> tasks = new List <Task>();
                foreach (TankSessionMemberItem i in state.Players)
                {
                    GateResponse gr = new GateResponse((int)RequestProcessorEnum.TakeDamage, (int)HttpStatusCode.OK, i.UserId.GetGuidId(), tdr.Serialize());
                    tasks.Add(i.UserId.Proxy <IUser>().SendGateResponseAsync(gr));
                }
                await Task.WhenAll(tasks);

                //End notify clients
                return(isDead);
            }
            catch (Exception E)
            {
                this.Log(E);
                return(false);
            }
        }