public void HandleTroopDeployedEvent(object cookie)
        {
            SmartEntity    smartEntity = (SmartEntity)cookie;
            TroopComponent troopComp   = smartEntity.TroopComp;

            if (troopComp == null)
            {
                return;
            }
            TransformComponent transformComp = smartEntity.TransformComp;

            if (transformComp == null)
            {
                return;
            }
            TroopPlacedAction troopPlacedAction = new TroopPlacedAction();

            troopPlacedAction.Time    = this.GetActionTime();
            troopPlacedAction.TroopId = troopComp.TroopType.Uid;
            troopPlacedAction.BoardX  = transformComp.CenterGridX();
            troopPlacedAction.BoardZ  = transformComp.CenterGridZ();
            TeamComponent teamComp = smartEntity.TeamComp;

            troopPlacedAction.TeamType = teamComp.TeamType;
            this.battleRecord.Add(troopPlacedAction);
        }
        private void TroopPlacedActionCallback(uint id, object cookie)
        {
            TroopPlacedAction troopPlacedAction = cookie as TroopPlacedAction;
            IDataController   dataController    = Service.Get <IDataController>();
            TroopTypeVO       troopTypeVO       = dataController.Get <TroopTypeVO>(troopPlacedAction.TroopId);
            IntPosition       boardPosition     = new IntPosition(troopPlacedAction.BoardX, troopPlacedAction.BoardZ);

            Service.Get <TroopController>().SpawnTroop(troopTypeVO, troopPlacedAction.TeamType, boardPosition, (troopPlacedAction.TeamType == TeamType.Defender) ? TroopSpawnMode.LeashedToBuilding : TroopSpawnMode.Unleashed, true);
            this.battleController.OnTroopDeployed(troopTypeVO.Uid, troopPlacedAction.TeamType, boardPosition);
        }