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(); } }
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()); }
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); } }