private ToolImpact UnitMoveOrder(GodEntity godEntity) { if (godEntity.EntityState.MouseUp) { foreach (var entityLink in godEntity.SelectedEntities.Where(e => e.IsDynamic)) { var entity = EntityFactory.DynamicEntityManager.FindEntity(entityLink); var controller = entity.Controller as INpc; if (controller != null && godEntity.EntityState.IsBlockPicked && godEntity.EntityState.PickPointNormal == Vector3I.Up) { controller.Movement.Goto(godEntity.EntityState.PickedBlockPosition + Vector3I.Up); } if (controller != null && godEntity.EntityState.IsEntityPicked && godEntity.EntityState.PickedEntityLink.IsDynamic) { controller.Movement.Leader = EntityFactory.DynamicEntityManager.FindEntity(godEntity.EntityState.PickedEntityLink); } } } return(new ToolImpact()); }
public GodEntity CreateNewPlayerFocusEntity(uint entityId) { var entity = new GodEntity(); entity.DynamicId = entityId; entity.Position = _server.LandscapeManager.GetHighestPoint(new Vector3D(10, 0, 10)); return(entity); }
public GodEntityManager(D3DEngine engine, GodEntity playerEntity, InputsManager inputsManager, SingleArrayChunkContainer cubesHolder, CameraManager <ICameraFocused> cameraManager, LandscapeBufferManager bufferManager, VisualWorldParameters visParameters, GlobalStateManager globalStateManager) { if (engine == null) { throw new ArgumentNullException("engine"); } if (playerEntity == null) { throw new ArgumentNullException("playerEntity"); } if (inputsManager == null) { throw new ArgumentNullException("inputsManager"); } if (cubesHolder == null) { throw new ArgumentNullException("cubesHolder"); } if (cameraManager == null) { throw new ArgumentNullException("cameraManager"); } if (bufferManager == null) { throw new ArgumentNullException("bufferManager"); } if (visParameters == null) { throw new ArgumentNullException("visParameters"); } GodEntity = playerEntity; _faction = globalStateManager.GlobalState.Factions[GodEntity.FactionId]; _eyeOrientation = GodEntity.HeadRotation; _bodyOrientation = GodEntity.BodyRotation; _engine = engine; _inputsManager = inputsManager; _cubesHolder = cubesHolder; _cameraManager = cameraManager; _bufferManager = bufferManager; _visParameters = visParameters; }
private ToolImpact ItemPlacement(GodEntity godEntity, GodHandToolState godHandToolState) { Faction faction = EntityFactory.GlobalStateManager.GlobalState.Factions[godEntity.FactionId]; var item = (IItem)EntityFactory.Config.BluePrints[godHandToolState.DesignationBlueprintId]; var pos = item.GetPosition(godEntity); if (pos.Valid) { faction.Designations.Add(new PlaceDesignation { BlueprintId = godHandToolState.DesignationBlueprintId, Position = pos }); } return(new ToolImpact()); }
private void InputHandling() { var moveVector = Vector3.Zero; if (_inputsManager.MouseManager.StrategyMode) { var ms = _inputsManager.MouseManager.CurMouseState; if (ms.X == 0) { moveVector.X = -1; } if (ms.X == _engine.ViewPort.Width - 1) { moveVector.X = 1; } if (ms.Y == 0) { moveVector.Z = 1; } if (ms.Y == _engine.ViewPort.Height - 1) { moveVector.Z = -1; } } if (_inputsManager.ActionsManager.isTriggered(Actions.Move_Forward)) { moveVector.Z = 1; } if (_inputsManager.ActionsManager.isTriggered(Actions.Move_Backward)) { moveVector.Z = -1; } if (_inputsManager.ActionsManager.isTriggered(Actions.Move_StrafeLeft)) { moveVector.X = -1; } if (_inputsManager.ActionsManager.isTriggered(Actions.Move_StrafeRight)) { moveVector.X = 1; } moveVector.Normalize(); Quaternion inv = GodEntity.HeadRotation; inv.Invert(); inv.X = 0; inv.Z = 0; inv.Normalize(); _moveVector = Vector3.Transform(moveVector, inv); var godHandToolState = GodEntity.EntityState.ToolState as GodHandToolState; if (godHandToolState == null) { godHandToolState = new GodHandToolState(); GodEntity.EntityState.ToolState = godHandToolState; } godHandToolState.SliceValue = Chunks.SliceValue; godHandToolState.DesignationBlueprintId = GodEntity.DesignationBlueprintId; if (_inputsManager.ActionsManager.isTriggered(UtopiaActions.UseLeft)) { GodEntity.EntityState.MouseUp = _inputsManager.MouseManager.CurMouseState.LeftButton == ButtonState.Released; GodEntity.EntityState.MouseButton = MouseButton.LeftButton; if (!GodEntity.EntityState.MouseUp) { if (GodEntity.EntityState.IsBlockPicked) { _selectionStart = GodEntity.EntityState.PickedBlockPosition; _selectionNow = true; } } else { _selectionNow = false; } GodEntity.ToolUse(); } if (_inputsManager.ActionsManager.isTriggered(UtopiaActions.UseRight)) { GodEntity.EntityState.MouseUp = _inputsManager.MouseManager.CurMouseState.RightButton == ButtonState.Released; GodEntity.EntityState.MouseButton = MouseButton.RightButton; GodEntity.ToolUse(); } }
private ToolImpact Selection(IDynamicEntity owner, GodEntity godEntity, GodHandToolState godHandToolState) { if (!godEntity.EntityState.MouseUp) { if (owner.EntityState.IsBlockPicked) { _selectionStart = owner.EntityState.PickedBlockPosition; } return(new ToolImpact()); } if (godEntity.EntityState.IsBlockPicked) { Faction faction = EntityFactory.GlobalStateManager.GlobalState.Factions[godEntity.FactionId]; var select = !faction.Designations.OfType <DigDesignation>().Any(d => d.BlockPosition == godEntity.EntityState.PickedBlockPosition); if (godHandToolState != null && _selectionStart.Y == godHandToolState.SliceValue - 1) { _selectionStart.y--; } var range = Range3I.FromTwoVectors(_selectionStart, godEntity.EntityState.PickedBlockPosition); var cursor = EntityFactory.LandscapeManager.GetCursor(range.Position); foreach (var vector in range) { cursor.GlobalPosition = vector; if (cursor.Read() == WorldConfiguration.CubeId.Air) { continue; } if (select) { if (!faction.Designations.OfType <DigDesignation>().Any(d => d.BlockPosition == vector)) { faction.Designations.Add(new DigDesignation { BlockPosition = vector }); } } else { if (faction.Designations.OfType <DigDesignation>().Any(d => d.BlockPosition == vector)) { faction.Designations.RemoveAll(d => d is DigDesignation && ((DigDesignation)d).BlockPosition == vector); } } } } if (godEntity.EntityState.IsEntityPicked) { godEntity.SelectedEntities.Clear(); godEntity.SelectedEntities.Add(godEntity.EntityState.PickedEntityLink); logger.Warn("Selected entity " + godEntity.EntityState.PickedEntityLink); } return(new ToolImpact()); }