Beispiel #1
0
        public void ExecuteModule(IModule module)
        {
            switch (module.Category)
            {
            case Category.Weapon:
                var missile = MissilesFactory.GetMissile(module.ToWeapon().AmmoId).ToCelestialObject();

                missile.OwnerId = (int)module.Id;
                OnExecuteModuleForSelectObjectOnMap?.Invoke(module, SpaceMapActions.GetSpaceshipsByDistance);
                //OnExecuteModuleForPointInMap?.Invoke(module, missile);
                break;

            case Category.Shield:
                break;

            case Category.Propulsion:
                break;

            case Category.Reactor:
                break;

            case Category.SpaceScanner:
                break;

            case Category.DeepScanner:
                OnActivateModuleForSelectObjectInMap?.Invoke(module, SpaceMapActions.GetUnknownCelestialObjectsByDistance);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Beispiel #2
0
        public void AddCelestialObject(int sessionId, int objectId, float positionX, float positionY, int direction, int speed,
                                       int classification, string name, int ammoId, int moduleId, int shipOwnerId)
        {
            var missile = MissilesFactory.GetMissile(ammoId).ToCelestialObject();

            missile.Id        = objectId;
            missile.PositionX = positionX;
            missile.PositionY = positionY;
            missile.Direction = direction;
            missile.Speed     = speed;
            missile.Name      = name;
            missile.OwnerId   = moduleId;

            _gameSession.AddCelestialObject(missile);

            Command(sessionId, shipOwnerId, moduleId, 0, 0, CommandTypes.ReloadWeapon.ToInt());
        }
Beispiel #3
0
        private void ImplementAttack(Spaceship npcShip, Spaceship targetSpaceship, GameSession session, List <Command> sessionCommands)
        {
            Logger.Debug(TraceMessage.Execute(this, $"Set attack npc-commend for {npcShip.Id} to {targetSpaceship.Id}."));

            var modulesWeapon = npcShip.Modules.
                                Where(module => module.Category == Category.Weapon).
                                                                                               //Map(_ => _.ToWeapon()). // Convert to weapon type
                                Where(_ => _.ToWeapon().ReloadTime <= _.ToWeapon().Reloading); // GetInteger only modules with ready to use


            var distance = Coordinates.GetDistance(npcShip.GetLocation(), targetSpaceship.GetLocation());



            foreach (var weaponModule in modulesWeapon)
            {
                var missile = MissilesFactory.GetMissile(weaponModule.ToWeapon().AmmoId).ToCelestialObject();

                missile.Id        = RandomGenerator.GetId();
                missile.OwnerId   = npcShip.Id;
                missile.PositionX = npcShip.PositionX;
                missile.PositionY = npcShip.PositionY;

                var weaponTargetPointInSpace = GetTargetLocation(targetSpaceship, missile, distance);

                var targetPointInSpace = new PointInSpace
                {
                    Id             = RandomGenerator.GetId(),
                    PositionY      = weaponTargetPointInSpace.Y,
                    PositionX      = weaponTargetPointInSpace.X,
                    Speed          = 0,
                    Direction      = 0,
                    Name           = "Missile Target",
                    Signature      = 1,
                    Classification = (int)CelestialObjectTypes.PointInMap,
                    IsScanned      = true
                };

                session.AddCelestialObject(targetPointInSpace);
                session.AddCelestialObject(missile);

                var command = new Command
                {
                    CelestialObjectId       = missile.Id,
                    TargetCelestialObjectId = targetPointInSpace.Id,
                    MemberId     = 0,
                    TargetCellId = 0,
                    Type         = CommandTypes.Fire
                };

                session.AddCommand(command);

                var commandReloadModule = new Command
                {
                    CelestialObjectId       = npcShip.Id,
                    TargetCelestialObjectId = weaponModule.Id,
                    MemberId     = 0,
                    TargetCellId = 0,
                    Type         = CommandTypes.ReloadWeapon
                };

                session.AddCommand(commandReloadModule);
            }
        }