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(); } }
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) { } } }
public void Init() { _messageHub.Post(new CreateCameraCommand { Viewport = _viewport }); _messageHub.Subscribe(this, CommandType.MoveCamera); }
public MapHandler(MessageHub messageHub, ISession session, MapSettings settings) { _session = session; _messageHub = messageHub; _messageHub.Post(new CreateMapCommand { MapSettings = settings }); }
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 } }); }
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 }); } }
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; } }