private void ReadDetailsCommand() { if (this.details.Command == DetailCommand.PickEntity) { EntitySelector.PickEntity(this.details.Entity); this.details = null; } else if (this.details.Command == DetailCommand.GatherResource) { ((IResourceProvider)this.details.Entity).Gather(5); } else if (this.details.Command == DetailCommand.Close) { this.details = null; } }
private void CleanDead() { var markedForDestruction = UsersManager.CurrentPlayer.Units.Where(u => u.IsAlive == false).ToArray(); foreach (var unit in markedForDestruction) { this.deadUnits.Enqueue(unit); UsersManager.CurrentPlayer.Units.Remove(unit); UsersManager.CurrentPlayer.AllEntities.Remove(unit); if (EntitySelector.EntityPicked == unit || EntitySelector.EntitySelected == unit) { EntitySelector.Deselect(); EntitySelector.PlaceEntity(); } if (this.details?.Entity == unit) { this.details = null; } } }
public override void Update(GameTime gameTime) { this.CleanDead(); var allEntities = UsersManager.CurrentPlayer.AllEntities; foreach (var entity in allEntities) { entity.GravityAffect(gameTime, this.terrain); } foreach (var unit in UsersManager.CurrentPlayer.Units) { unit.Update(gameTime, this.terrain, allEntities); } this.details?.Update(gameTime); if (Input.KeyPressed(Keys.D1)) { if (EntitySelector.HasPicked()) { EntitySelector.PlaceEntity(); } else { var unit = new Swordsman(Guid.NewGuid(), UsersManager.CurrentPlayer.Id, Vector3.Zero, Quaternion.Identity); Client.Socket.Writer.Send(Message.Create(Service.AddUnit, UnitFactory.ToDto(unit))); UsersManager.CurrentPlayer.Units.Add(unit); UsersManager.CurrentPlayer.AllEntities.Add(unit); EntitySelector.EntityPicked = unit; } } if (Input.LeftMouseClick()) { if (EntitySelector.HasPicked()) { EntitySelector.PlaceEntity(); } else { EntitySelector.SelectEntity( DisplayManager.Instance.GraphicsDevice, this.camera.ProjectionMatrix, this.camera.ViewMatrix, allEntities); if (EntitySelector.HasSelected()) { var projectedPosition = DisplayManager.Instance.GraphicsDevice.Viewport.Project( EntitySelector.EntitySelected.Position, this.camera.ProjectionMatrix, this.camera.ViewMatrix, Matrix.Identity); this.details = new EntityDetailsLayout(EntitySelector.EntitySelected, PointTextures.TransparentBlackPoint, projectedPosition); } } } if (EntitySelector.HasSelected()) { if (Input.RightMouseDoubleClick) { IEntity selected = EntitySelector.EntitySelected; this.CommandSelectedEntity(selected, allEntities.Where(e => e != selected)); } } if (this.details != null) { this.ProjectClickedEntity(); this.ReadDetailsCommand(); } EntitySelector.DragEntity( DisplayManager.Instance.GraphicsDevice, this.camera.ProjectionMatrix, this.camera.ViewMatrix, this.terrain); this.skybox.Update(gameTime); this.camera.Update(gameTime, this.terrain); }