private void ApplyInput(IShipController controller, double dt) { const double RotationPower = 14; const double EnginePower = 7; var forward = Vector.AtAngle(Angle); var forwardSpeed = 0.0; if (controller.LeftEngineEnabled && _leftEngineRemaining > 0) { _rightRunning = true; RotationSpeed -= RotationPower * dt; forwardSpeed += 0.5; _leftEngineRemaining -= dt; } if (controller.RightEngineEnabled && _rightEngineRemaining > 0) { _leftRunning = true; RotationSpeed += RotationPower * dt; forwardSpeed += 0.5; _rightEngineRemaining -= dt; } if (controller.GunEnabled) { ShotTimer = ShotTime; } Velocity += forward * forwardSpeed * EnginePower; }
public void SetUp() { _keyboardHandler = Substitute.For<IKeyboardHandler>(); _controllerFactory = new ControllerFactory(_keyboardHandler); _controller1 = _controllerFactory.Controller1; _controller2 = _controllerFactory.Controller2; }
public void Simulate(IShipController controller, int steps) { for (int i = 0; i < steps && IsActive; ++i) { Simulate(controller); } }
private void ManualFlight_Click(object sender, RoutedEventArgs e) { if (ManualFlight.IsChecked != true) { LoadAI.IsEnabled = true; controller = aiController; } else { LoadAI.IsEnabled = false; controller = new MouseShipController(View); } StartButton.IsEnabled = testCase != null && controller != null; }
public Ship(GameState game, Vector2 position, IShipController controller, int faction = 0, float acceleration = 5, Direction2 direction = default(Direction2), float inverseFriction = 0.8f) : base(game) { this.position = position; this.controller = controller; this.faction = faction; this.acceleration = acceleration; this.forwards = direction; this.inverseFriction = inverseFriction; controller.SetShip(this); game.Ships.Add(this); }
internal Ship(string name, Vector2 position, float radius, Color color, IGraphicsFactory graphicsFactory, IShipComponentFactory shipComponentFactory) : base(position, radius, 1) { Name = name; Color = color; _controller = new NullShipController(); _energyStore = shipComponentFactory.CreateEnergyStore(); _shield = shipComponentFactory.CreateShield(this); _hull = shipComponentFactory.CreateHull(this); _thrusterArray = shipComponentFactory.CreateThrusterArray(this); _graphicsFactory = graphicsFactory; _arrows = new List<IArrow>(); }
////////////////////////////////////////////////////////////////////////////////// // MonoBehaviour // /// <summary> /// get references to services and internal components. /// </summary> void Awake() { // get services controller = IOC.Resolve<IShipController>(); bullets = IOC.Resolve<IShootableFactory>(); registry = IOC.Resolve<IRegistryService>(); // get and initialize components rigid = GetComponent<Rigidbody>(); rigid.constraints = RigidbodyConstraints.FreezeRotation; rigid.useGravity = false; // register with services and controllers controller.Register(this); registry.Register<IShip>("Ship", this); }
public IGameObject CreateShip(string name, Vector2 position, Vector2 velocity, Color color, IShipController controller) { var ship = new Ship(name, position, 16, color, _graphicsFactory, _shipComponentFactory) { Velocity = velocity, Model = _contentManager.Load<Model>("Models/Saucer") }; ship.SetController(controller); ship.SetShowArrows(true); _gravitySimulator.RegisterParticipant(ship); _universe.Register(ship); _drawingManager.Register(ship); _gameObjects.Add(ship); return ship; }
private void Simulate(IShipController controller) { Vector2D gravity = new Vector2D(); foreach (Planet planet in Planets) { Vector2D distance = planet.Position - Ship.Position; if (distance.Length <= planet.Radius) { IsActive = false; } gravity += 15 * 0.001 * (Math.Pow(planet.Radius, 3) / Math.Pow(distance.Length, 3)) * distance; } Ship.Velocity += gravity; controller.UpdateShip(this, gravity); ++TimeSteps; const double MaxTurn = 2 * Math.PI / 25; Ship.Angle += Math.Max(-MaxTurn, Math.Min(MaxTurn, Ship.Turn)); Ship.Velocity += 12 * 0.02 * Ship.Direction; Ship.Position += Ship.Velocity; double targetDistance = (Ship.Position - Waypoints[TargetWaypoint]).Length; if (targetDistance < 20) { ++TargetWaypoint; if (TargetWaypoint == Waypoints.Count) { IsActive = false; } } else if (targetDistance > 1500) { IsActive = false; } if (TraceMovement) { Trace.Add(Ship.Position); } }
// Monobehaviour // /// <summary> /// Set up internal data objects. Resolve references to services. /// </summary> void Awake() { // create new list to hold enemy references enemyList = new List<IEnemy>(); // resolve services enemies = IOC.Resolve<IEnemyFactory>(); time = IOC.Resolve<ITimeService>(); registry = IOC.Resolve<IRegistryService>(); shipController = IOC.Resolve<IShipController>(); endGameController = IOC.Resolve<IEndGameController>(); // initialize wave info currentWaveIndex = 0; // get pointer to current wave currentWave = waveData.waves[0]; // set start time on countdown time.SetCountdown(waveData.startTime); }
public void Update(World world, double dt, IShipController controller) { _leftRunning = _rightRunning = false; controller.Update(world, this, dt); ApplyInput(controller, dt); AddGravity(world, dt); Position += Velocity * dt; Angle += RotationSpeed * dt; RotationSpeed /= Math.Exp(dt * 3); if (ShotTimer > 0) { ShotTimer -= dt; FireLazer(world); } foreach (var ship in world.Ships) { if (!ReferenceEquals(ship, this) && Model.HitBox.IntersectsOther(ship.Model.HitBox, Position, Angle, ship.Position, ship.Angle)) { Kill(); ship.Kill(); } } foreach (var planet in world.Planets) { if (Model.HitBox.IntersectsPlanet(planet, Position, Angle)) { Kill(); } } if (Position.X < 0 || Position.X >= world.ScreenWidth * Game1.ScaleHack || Position.Y < 0 || Position.Y >= world.ScreenHeight * Game1.ScaleHack) { Kill(); } }
private void LoadAI_Click(object sender, RoutedEventArgs e) { var dialog = new OpenFileDialog(); dialog.InitialDirectory = Directory.GetCurrentDirectory(); if (dialog.ShowDialog() == true) { using (var stream = new StreamReader(dialog.FileName)) { try { aiController = new AiShipController(stream.ReadToEnd()); controller = aiController; } catch { MessageBox.Show("Error loading AI.", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } } StartButton.IsEnabled = testCase != null; }
public void ReleaseController(IShipController controller) { _controllers.Remove(controller); }
public bool TakeController(IShipController controller) { _controllers.Insert(0, controller); return(true); }
internal void SetController(IShipController controller) { _controller = controller; }
public void SetUp() { _graphicsFactory = Substitute.For<IGraphicsFactory>(); _graphicsDevice = Substitute.For<IGraphicsDevice>(); _shipComponentFactory = Substitute.For<IShipComponentFactory>(); _energyStore = Substitute.For<IEnergyStore>(); _shield = Substitute.For<IShield>(); _hull = Substitute.For<IHull>(); _thrusterArray = Substitute.For<IThrusterArray>(); _controller = Substitute.For<IShipController>(); _shipComponentFactory.CreateEnergyStore().ReturnsForAnyArgs(_energyStore); _shipComponentFactory.CreateShield(Arg.Any<IShip>()).Returns(_shield); _shipComponentFactory.CreateHull(Arg.Any<IShip>()).Returns(_hull); _shipComponentFactory.CreateThrusterArray(Arg.Any<IShip>()).Returns(_thrusterArray); _position = new Vector2(12f, 5.5f); _ship = new Ship("TestShip", _position, _radius, Color.Goldenrod, _graphicsFactory, _shipComponentFactory); _ship.SetController(_controller); }
public GameView(IShipController tankController, IEnemyController enemyController) { _shipController = tankController; _enemyController = enemyController; }