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;
 }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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>();
        }
Exemplo n.º 7
0
        //////////////////////////////////////////////////////////////////////////////////
        // 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);
        }
Exemplo n.º 8
0
        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;
        }
Exemplo n.º 9
0
        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);
            }
        }
Exemplo n.º 10
0
        // 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();
            }
        }
Exemplo n.º 12
0
        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;
        }
Exemplo n.º 13
0
 public void ReleaseController(IShipController controller)
 {
     _controllers.Remove(controller);
 }
Exemplo n.º 14
0
 public bool TakeController(IShipController controller)
 {
     _controllers.Insert(0, controller);
     return(true);
 }
Exemplo n.º 15
0
 internal void SetController(IShipController controller)
 {
     _controller = controller;
 }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
 public GameView(IShipController tankController, IEnemyController enemyController)
 {
     _shipController  = tankController;
     _enemyController = enemyController;
 }