Example #1
0
        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);
        }
Example #3
0
        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;
        }
Example #4
0
        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());
        }
Example #5
0
        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();
            }
        }
Example #6
0
        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());
        }