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()); }