Beispiel #1
0
        private void Canvas_DragDrop(object sender, DragEventArgs e)
        {
            var dropPoint = new Point(e.X, e.Y);
            var point     = canvas.PointToClient(dropPoint);

            if (e.Data.GetDataPresent(typeof(Terrain)))
            {
                var terrain = (Terrain)e.Data.GetData(typeof(Terrain));
                var area    = new Rectangle(point.X, point.Y, terrain.Width, terrain.Height);
                _messageHub.Post(new PlaceTileCommand
                {
                    Point        = point,
                    Terrain      = terrain,
                    PreviousTile = _session.GetTiles(area)
                });
                thumbnail.Visible = false;
            }
            else if (e.Data.GetDataPresent(typeof(Entity)))
            {
                var unit = (Entity)e.Data.GetData(typeof(Entity));
                _messageHub.Post(new AddUnitCommand
                {
                    Point = point,
                    Unit  = unit
                });
                thumbnail.Visible = false;
                canvas.Invalidate();
            }
        }
Beispiel #2
0
 public void OnKeyboardEvent(KeyPressEventArgs e)
 {
     if (Control.ModifierKeys == Keys.Control)
     {
         if ((e.KeyChar & (char)Keys.Z) != 0)
         {
             _messageHub.Post(new UndoCommand());
         }
         else if ((e.KeyChar & (char)Keys.Z) != 0)
         {
         }
     }
 }
Beispiel #3
0
 public void Init()
 {
     _messageHub.Post(new CreateCameraCommand
     {
         Viewport = _viewport
     });
     _messageHub.Subscribe(this, CommandType.MoveCamera);
 }
Beispiel #4
0
 public MapHandler(MessageHub messageHub, ISession session, MapSettings settings)
 {
     _session    = session;
     _messageHub = messageHub;
     _messageHub.Post(new CreateMapCommand
     {
         MapSettings = settings
     });
 }
Beispiel #5
0
        public MapHandler(MessageHub messageHub, ISession session, int width, int height)
        {
            _messageHub = messageHub;
            _session    = session;

            _messageHub.Post(new CreateMapCommand
            {
                MapSettings = new MapSettings
                {
                    Width  = width,
                    Height = height
                }
            });
        }
Beispiel #6
0
        public void Initialise(string unitsFilepath, string mapFilename, string weaponFilepath, string modelFilepath)
        {
            // todo: refactor this to:
            // unit = LoadUnitModel();
            // LoadTexture(unit.Texture);
            // factories.Initialise..?
            TextureFactory.LoadTextures(@"C:\Source\MapEditor\MapEngine\Content\Textures");
            WeaponFactory.LoadWeapons(weaponFilepath); // todo: code stink - requires factories to be initialised in an order
            UnitFactory.LoadUnits(unitsFilepath);
            ModelFactory.LoadModel(modelFilepath);

            var units = UnitLoader.LoadUnits(mapFilename);

            foreach (var unit in units)
            {
                _messageHub.Post(new CreateEntityCommand {
                    Entity = unit
                });
            }
        }
Beispiel #7
0
        public void Update()
        {
            foreach (var e in _entities)
            {
                var weaponComponent = e.GetComponent <WeaponComponent>();
                var now             = DateTime.Now;// todo: weaponComponent.GetElapsedTime()
                var elapsed         = (now - weaponComponent.LastFiredTime).TotalMilliseconds;
                if (elapsed < weaponComponent.ReloadTime)
                {
                    continue;
                }

                var location = e.GetComponent <LocationComponent>(); // todo: replace these with entity extension methods?
                var collider = new BoundingCircle {
                    Radius = weaponComponent.Range, Location = location.Location
                };
                var collisions = _collisionHandler.GetCollisions(collider).Where(x => x.entity.Id != e.Id);
                if (!collisions.Any())
                {
                    continue;
                }

                // get closest target in range -- in future we could have an AI component with target priorities here
                var target = collisions.First().entity;
                if (!TryGetAim(e, target, out var aimPoint))
                {
                    continue;
                }

                var projectile = CreateProjectile(location, aimPoint, weaponComponent);
                _messageHub.Post(new CreateEntityCommand {
                    Entity = projectile
                });

                weaponComponent.LastFiredTime = now;
            }
        }