コード例 #1
0
ファイル: DashBoard.cs プロジェクト: Dev01FC/CnC-SC
        private void FireFixedGun(GameCommand cmdReceived, PlayerGame playerGame, Game game)
        {
            PlayerUnit playerUnit = this.flPlayerUnits.TypedItems <PlayerUnit>().Where(c => c.Id == cmdReceived.ObjectId && c.Unit.UserId == playerGame.UserId).FirstOrDefault();

            if (playerUnit == null)
            {
                new CommandFeedback(cmdReceived, enCommandStatus.Rejected, "PlayerUnit not found").Save(this.FAppPrivate);
            }
            else
            {
                Unit myUnit = playerUnit.Unit;
                if (myUnit == null)
                {
                    new CommandFeedback(cmdReceived, enCommandStatus.Rejected, "Unit not found").Save(this.FAppPrivate);
                }

                else
                {
                    if (!myUnit.HasFixedGun || myUnit.FixedGunFiringRange < cmdReceived.Distance)
                    {
                        new CommandFeedback(cmdReceived, enCommandStatus.Rejected, "Unit doesn't have a fixed gun or distance out of range").Save(this.FAppPrivate);
                    }
                    else
                    {
                        int targetYpos = -1;
                        int targetXpos = -1;
                        switch (myUnit.Heading)
                        {
                        case enHeading.North:
                            targetYpos = (int)(myUnit.Position.Ypos - cmdReceived.Distance);
                            targetXpos = (int)(myUnit.Position.Xpos);
                            break;

                        case enHeading.NorthWest:
                            targetYpos = (int)(myUnit.Position.Ypos - cmdReceived.Distance);
                            targetXpos = (int)(myUnit.Position.Xpos - cmdReceived.Distance);
                            break;

                        case enHeading.South:
                            targetYpos = (int)(myUnit.Position.Ypos + cmdReceived.Distance);
                            targetXpos = (int)(myUnit.Position.Xpos);
                            break;

                        case enHeading.SouthWest:
                            targetYpos = (int)(myUnit.Position.Ypos + cmdReceived.Distance);
                            targetXpos = (int)(myUnit.Position.Xpos - cmdReceived.Distance);
                            break;

                        case enHeading.SouthEast:
                            targetYpos = (int)(myUnit.Position.Ypos + cmdReceived.Distance);
                            targetXpos = (int)(myUnit.Position.Xpos + cmdReceived.Distance);
                            break;

                        case enHeading.NorthEast:
                            targetYpos = (int)(myUnit.Position.Ypos - cmdReceived.Distance);
                            targetXpos = (int)(myUnit.Position.Xpos + cmdReceived.Distance);
                            break;

                        case enHeading.East:
                            targetYpos = (int)(myUnit.Position.Ypos);
                            targetXpos = (int)(myUnit.Position.Xpos + cmdReceived.Distance);
                            break;

                        case enHeading.West:
                            targetYpos = (int)(myUnit.Position.Ypos);
                            targetXpos = (int)(myUnit.Position.Xpos - cmdReceived.Distance);
                            break;

                        default:
                            break;
                        }

                        if (targetXpos > -1 && targetYpos > -1)
                        {
                            PlayerUnit pu = this.flPlayerUnits.TypedItems <PlayerUnit>().Where(c => c.Unit.Position.Xpos == targetXpos && c.Unit.Position.Ypos == targetYpos).FirstOrDefault();


                            if (pu == null)
                            {
                                new CommandFeedback(cmdReceived, enCommandStatus.Rejected, "Target missed").Save(this.FAppPrivate);
                            }
                            else
                            {
                                Unit attackedUnit = pu.Unit;
                                attackedUnit.Armor   -= myUnit.FixedGunArmorDamage;
                                attackedUnit.Shields -= myUnit.FixedGunShieldDamage;
                                pu.Save(this.FAppPrivate);



                                if (attackedUnit.Armor < 1 || attackedUnit.Shields < 1)
                                {
                                    attackedUnit.Status = enUnitStatus.Destroyed;
                                    new CommandFeedback(cmdReceived, enCommandStatus.Accepted, attackedUnit.Name + " destroyed!").Save(this.FAppPrivate);
                                    pu.Delete(this.FAppPrivate);
                                }
                                else
                                {
                                    new CommandFeedback(cmdReceived, enCommandStatus.Accepted, attackedUnit.Name + " hit!, enemy shields: " + attackedUnit.Shields + ", enemy armor: " + attackedUnit.Armor).Save(this.FAppPrivate);
                                }
                            }
                        }
                    }
                }
            }
        }