예제 #1
0
        public bool InqRunRate(ref float rate)
        {
            // get run skill from WorldObject
            uint runSkill = 0;
            var  creature = WorldObject as Creature;

            if (creature != null)
            {
                runSkill = creature.GetCreatureSkill(Skill.Run).Current;
            }

            //rate = (float)MovementSystem.GetRunRate(0.0f, 300, 1.0f);
            rate = (float)MovementSystem.GetRunRate(0.0f, (int)runSkill, 1.0f);
            //Console.WriteLine($"{WorldObject.Name} ({WorldObject.Guid}) - WeenieObject.InqRunRate: runSkill = {runSkill}, rate = {rate}");
            return(true);
        }
예제 #2
0
        private void Initialize()
        {
            audioManager = new AudioManager();
            renderer     = new ImmediateModeRenderer();
            sprites      = new List <Sprite>();
            sources      = new List <Source>();
            entities     = new List <Entity>();

            string script = "";

            using (StreamReader file = new StreamReader("Assets/Scripts/movement_script.lua"))
            {
                script = file.ReadToEnd();
            }

            Entity entity = new Entity(0);

            entity.AddComponent(new Position(0, 0));
            entity.AddComponent(new Input(new KeyboardAndMouse()));
            entity.AddComponent(new Velocity(0, 0));
            entity.AddComponent(new SpriteComponent(new Sprite(0, 0, 20, 20, SceneManager.AssetManager.LoadTexture("Assets/Images/heart.png"))));
            entity.AddComponent(new Player());
            entities.Add(entity);

            for (int i = 1; i < 2000; i++)
            {
                entity = new Entity(i);
                entity.AddComponent(new Position(i * 40, 0));
                entity.AddComponent(new Velocity(0, 1));
                //entity.AddComponent(new SpriteComponent(new Sprite(0, 0, 20, 20, SceneManager.AssetManager.LoadTexture("Assets/Images/heart.png"))));
                entity.AddComponent(new Rain());
                entities.Add(entity);
            }

            movementSystem   = new MovementSystem();
            scriptingSystem  = new ScriptingSystem();
            renderingSystem  = new RenderingSystem(renderer);
            inputSystem      = new InputSystem();
            collisionSystem  = new CollisionSystem();
            collisionHandler = new CollisionHandler();

            sources.Add(new Source(SceneManager.AssetManager.LoadWave("Assets/Audio/main game.wav")));
            sources[0].Play();
            sources[0].SetPosition(350, 200);
            sources[0].ReferenceDistance = 200f;
            //sources[0].SetVelocity(0, 0);
        }
    private void ProcessLateralMovement(MovementSystem movementSystem)
    {
        float direction = 1f;                   // направление бокового движения (по умолчанию вправо)

        if (_elapsedTimeLaterialMovement < 0)   // изменение направления движения корабля (влево)
        {
            direction = -1f;
        }

        movementSystem.LateralMovement(direction * Time.deltaTime * 0.1f);

        _elapsedTimeLaterialMovement -= Time.deltaTime;                 // отсчёт прошедшего времени бокового движения
        if (_elapsedTimeLaterialMovement < -_periodLaterialMovement)    // если мы вышли за рамки периода,
        {
            _elapsedTimeLaterialMovement = _periodLaterialMovement;     // снова устанавливаем "секундомер" на заданный период
        }
    }
예제 #4
0
        public void GetMovementSpeed()
        {
            var moveSpeed = MotionTable.GetRunSpeed(MotionTableId);

            if (moveSpeed == 0)
            {
                moveSpeed = 2.5f;
            }
            var scale = ObjScale ?? 1.0f;

            var runSkill = GetCreatureSkill(Skill.Run).Current;

            RunRate   = (float)MovementSystem.GetRunRate(0.0f, (int)runSkill, 1.0f);
            MoveSpeed = moveSpeed * RunRate * scale;

            //Console.WriteLine(Name + " - Run: " + runSkill + " - RunRate: " + RunRate + " - Move: " + MoveSpeed + " - Scale: " + scale);
        }
예제 #5
0
    protected override void ProcessHandling(MovementSystem movementSystem)
    {
        switch (_movementBehaviour)
        {
        case MovementBehaviour.Linear:
            movementSystem.LongitudinalMovement(Time.deltaTime);
            break;

        case MovementBehaviour.Sinusoid:
            movementSystem.LongitudinalMovement(Time.deltaTime);
            movementSystem.LateralMovement((float)Mathf.Sin(transform.position.y));
            break;

        case MovementBehaviour.Random:
            movementSystem.LongitudinalMovement(Time.deltaTime);
            movementSystem.LateralMovement(Random.Range(-1, 2) * Time.deltaTime);
            break;
        }
    }
예제 #6
0
        protected override void ProcessHandling(MovementSystem movementSystem)
        {
            if (_userControl == null)
            {
                return;
            }

            float   positionX         = _userControl.X * Time.deltaTime;
            Vector3 transformPosition = transform.position;

            if (GameAreaHelper.RestrictLateralMovement(ref transformPosition, positionX, _representation.bounds, Camera.main))
            {
                movementSystem.LateralMovement(positionX);
            }
            else
            {
                transform.position = transformPosition;
            }
        }
        protected override void ProcessHandling(MovementSystem movementSystem)
        {
            var move = new Vector3(inputStrategy.GetHorizontalMove(Camera.main.WorldToScreenPoint(transform.position).x) * Time.deltaTime, 0, 0);

            if (GameAreaHelper.IsInGameplayAreaFull(transform, _representation.bounds))
            {
                lastPosition = transform.position;
                movementSystem.LateralMovement(move.x);
            }
            else
            {
                transform.position = lastPosition;
            }

            if (inputStrategy.IsStrategySwitchedPressed(out InputStrategy newStrategy))
            {
                inputStrategy = newStrategy;
            }
        }
예제 #8
0
        public virtual BaseActor SpawnTrigger(SpawnParams spawnParam)
        {
            BaseActor actor = m_ActorService.AddActor(spawnParam.ActorType);

            //TransformComponent transform = actor.AddComponent<TransformComponent>(spawnParam.InitPos.HasValue ? spawnParam.InitPos.Value : Vector3.Zero,
            //                                                                      spawnParam.InitRot.HasValue ? spawnParam.InitRot.Value : Quaternion.Identity, spawnParam.InitScale.HasValue ? spawnParam.InitScale.Value : Vector3.One);
            actor.AddComponent(spawnParam.AttributeComponent, spawnParam.AttributeKey);
            TriggerComponent trigger = actor.AddComponent <TriggerComponent>();

            trigger.Owner = spawnParam.Owner;

            MovementSystem movementSysten = m_ActorService.GetComponentSystem <MovementSystem>();

            movementSysten.Transform(actor, spawnParam.InitPos, spawnParam.InitRot, spawnParam.InitScale);



            return(actor);
        }
        // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
        override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
        {
            brain = animator.GetComponent <BrainManager>();
            ms    = animator.GetComponent <MovementSystem>();

            float min            = Vector3.Distance(animator.transform.position, brain.manager.playerUnits[0].transform.position);
            int   playerToAttack = 0;

            for (int i = 1; i < brain.manager.playerUnits.Count; i++)
            {
                float temp = Vector3.Distance(animator.transform.position, brain.manager.playerUnits[i].transform.position);
                if (temp < min)
                {
                    min            = temp;
                    playerToAttack = i;
                }
            }
            Target             = brain.manager.playerUnits[playerToAttack];
            abilitiesContainer = brain.creature.abilityContainer;
        }
예제 #10
0
        public void TestMovementSystem()
        {
            var state = new GameState();

            for (int i = 0; i < NUMBER_OF_ENTITIES; ++i)
            {
                state.GameData.Transforms[i] = new Transform(new Vector2(50.0f, 600.0f), 0.0f, new Vector2(1.0f), new Vector2(16.0f, 16.0f));
                state.GameData.Velocities[i] = new Vector2(1.0f, 1.0f);
                state.GameData.Tags[i]       = 1;

                state.EntityCount++;
            }

            Console.WriteLine($"Number of entities: {state.EntityCount}");
            for (int i = 1; i < 33; ++i)
            {
                var system = new MovementSystem("Movement", state);
                RunSystem(system, i);
            }
            state.ClearState();
        }
        public void UpdateMovesPlayerToNextFloorIfPlayerStandsAboveStairsDownAndShiftDotKeysAreDown(Keys shiftKey)
        {
            // Arrange
            const int StairsX = 3;
            const int StairsY = 3;

            var player = new Entity();

            player.Set(new MoveToKeyboardComponent(player));
            var system = new MovementSystem(player);

            var map = new ArrayMap <AbstractMapTile>(5, 5);

            for (var y = 0; y < map.Height; y++)
            {
                for (var x = 0; x < map.Width; x++)
                {
                    map[x, y] = new FloorTile();
                }
            }

            map[StairsX, StairsY] = new StairsDownTile();
            EventBus.Instance.Broadcast("Map changed", map);

            player.Position.X = StairsX;
            player.Position.Y = StairsY;

            SadConsole.Global.KeyboardState.KeysDown.Add(AsciiKey.Get(shiftKey));
            SadConsole.Global.KeyboardState.KeysDown.Add(AsciiKey.Get(Keys.OemPeriod));

            bool usedStairs = false;

            EventBus.Instance.Register <string>("Player used stairs", (floorNumber) => usedStairs = true);

            // Act
            system.Update(0);

            // Assert
            Assert.That(usedStairs, Is.True);
        }
        public void UpdateChangesPlayerPositionIfNewPositionIsWalkable(bool isDestinationWalkable)
        {
            // Arrange
            var player = new Entity();
            var system = new MovementSystem(player);

            player.Set(new MoveToKeyboardComponent(player));
            player.Position.X = 3;
            system.Add(player);
            player.Position.Y = 3;

            var playerMoved = false;

            var map = new ArrayMap <AbstractMapTile>(5, 5);

            for (var y = 0; y < map.Height; y++)
            {
                for (var x = 0; x < map.Width; x++)
                {
                    map[x, y] = new FloorTile();
                }
            }

            map[player.Position.X - 1, player.Position.Y].IsWalkable = isDestinationWalkable;
            SadConsole.Global.KeyboardState.KeysPressed.Add(AsciiKey.Get(Keys.Left));

            // Update the map in the movement system
            EventBus.Instance.Broadcast("Map changed", map);
            EventBus.Instance.Register <Player>("Player moved", (data) => playerMoved = true);

            var expectedX = isDestinationWalkable ? player.Position.X - 1 : player.Position.X;

            // Act
            system.Update(0);

            // Assert
            Assert.That(player.Position.X, Is.EqualTo(expectedX));       // Position changed
            Assert.That(playerMoved, Is.EqualTo(isDestinationWalkable)); // Event fired (or not)
        }
예제 #13
0
    private void Awake()
    {
        mTransform = transform;

        collisionSystem = GetComponent <CollisionSystem>();
        if (!collisionSystem)
        {
            collisionSystem = gameObject.AddComponent <CollisionSystem>();
        }

        movementSystem = GetComponent <MovementSystem>();
        if (!movementSystem)
        {
            movementSystem = gameObject.AddComponent <MovementSystem>();
        }

        stairsSystem = GetComponent <StairsSystem>();
        if (!stairsSystem)
        {
            stairsSystem = gameObject.AddComponent <StairsSystem>();
        }
    }
예제 #14
0
 public void selectFigurine(GameObject figurine)
 {
     assist.ClearThrowPath();
     assist.ClearWalkPath();
     dijSys.resetDijkstra();
     player = figurine;
     if (figurine == null)
     {
         player = null;
         rotationScript.setNewTarget(null);
         figurGewaehlt = false;
     }
     else
     {
         attr = (AttributeComponent)player.GetComponent(typeof(AttributeComponent));
         movement = (MovementSystem)player.GetComponent(typeof(MovementSystem));
         Cell currentCell = (Cell)attr.getCurrentCell().GetComponent(typeof(Cell));
         dijSys.executeDijsktra(currentCell, attr.actMovRange, attr.items.getCurrentWeapon().weaponRange);
         manager.setSelectedFigurine(figurine);
         figurGewaehlt = true;
         rotationScript.setNewTarget(player);
     }
 }
예제 #15
0
        public void Rollback()
        {
            const float deltaTime      = 1f / 10f; // Running 10 FPS
            const float fixedDeltaTime = 1f / 5f;  // Fixed tick at 5 FPS

            var world = new World(EcsConfig.Default);

            var inputSystem    = new PlayerInputSystem();
            var movementSystem = new MovementSystem();

            var config = SimulationConfig.Default;

            config.FixedTick = fixedDeltaTime;

            var simulation = new ClientSimulation <SingletonInputComponent>(
                config: config,
                world: world,
                update:
                new Systems(world)
                .Add(inputSystem),
                fixedUpdate:
                new Systems(world)
                .Add(movementSystem));

            simulation.Create();

            var testDriver = new SimulationManagerTestDriver <SingletonInputComponent>(
                simulation,
                fixedDeltaTime);

            // Singleton input entity
            var entityInput = world.NewEntity();
            // Singleton player entity.
            var entityPlayer = world.NewEntity();

            entityPlayer.GetComponent <SingletonPlayerComponent>();
            ref var movement = ref entityPlayer.GetComponent <MovementComponent>();
예제 #16
0
    // Use this for initialization
    void Start()
    {
        // getting the MS logger to see which version the MS is
        MSL = GameObject.Find("MSLogger").GetComponent <MSLogger>().MS;

        // getting the gradient data
        GameObject playArea = GameObject.FindGameObjectWithTag("PlayArea");

        gradientData = playArea.GetComponent <DataReader>().gradientData;

        // getting the right hand
        rightHand = GameObject.FindGameObjectWithTag("SensorRight");

        // getting the GameObject the Audio Listener is on
        audioListener = GameObject.FindGameObjectWithTag("Ears");


        // getting the CasA
        if (MSL == MovementSystem.MS1)
        {
            CasALeft  = GameObject.FindGameObjectWithTag("SuperNovaLeft");
            CasARight = GameObject.FindGameObjectWithTag("SuperNovaRight");
        }
        else
        {
            CasA = GameObject.FindGameObjectWithTag("SuperNova");
        }


        // getting the rotator transform
        rotator = transform.parent.transform;

        // getting the headfollow
        headFollow = GameObject.FindGameObjectWithTag("HeadFollow");

        curFacingDir = transform.forward;
    }
    private void InstantiateSystemsManager()
    {
        SystemsManager      = Instantiate(new GameObject());
        SystemsManager.name = "SystemsManager";


        movementSystem       = SystemsManager.AddComponent <MovementSystem>();
        keyboardInputSystem  = SystemsManager.AddComponent <KeyboardInputSystem>();
        mouseInputSystem     = SystemsManager.AddComponent <MouseInputSystem>();
        factorySystem        = SystemsManager.AddComponent <FactorySystem>();
        lSystemSystem        = SystemsManager.AddComponent <LSystemSystem>();
        lSystemFactorySystem = SystemsManager.AddComponent <LSystemFactorySystem>();

        entityPool = SystemsManager.AddComponent <EntityPool>();
        entityPool.InitialiseEntitiesList();


        movementSystem.entityPool       = entityPool;
        keyboardInputSystem.entityPool  = entityPool;
        mouseInputSystem.entityPool     = entityPool;
        factorySystem.entityPool        = entityPool;
        lSystemSystem.entityPool        = entityPool;
        lSystemFactorySystem.entityPool = entityPool;
    }
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // Create game systems
            InputSystem              = new InputSystem(this);
            NetworkSystem            = new NetworkSystem(this);
            RenderingSystem          = new RenderingSystem(this);
            MovementSystem           = new MovementSystem(this);
            WeaponSystem             = new WeaponSystem(this);
            EnemyAISystem            = new EnemyAISystem(this);
            NpcAISystem              = new NpcAISystem(this);
            GarbagemanSystem         = new GarbagemanSystem(this);
            CollisionSystem          = new Systems.CollisionSystem(this);
            RoomChangingSystem       = new RoomChangingSystem(this);
            QuestLogSystem           = new QuestLogSystem(this);
            SpriteAnimationSystem    = new SpriteAnimationSystem(this);
            SkillSystem              = new SkillSystem(this);
            TextSystem               = new TextSystem(this);
            EngineeringOffenseSystem = new EngineeringOffenseSystem(this);
            HUDSystem    = new HUDSystem(this);
            SplashSystem = new SplashSystem(this);

            InputHelper.Load(4);
            HUDSystem.LoadContent();

            // Testing code.
            LevelManager.LoadContent();
            LevelManager.LoadLevel("D01F01R01");
            //Song bg = Content.Load<Song>("Audio/Main_Loop");
            //MediaPlayer.Stop();
            //MediaPlayer.IsRepeating = true;
            //MediaPlayer.Play(bg);
            //End Testing Code
        }
예제 #19
0
 void Start()
 {
     selectIndicator.SetActive(false);
     combatSystem   = GetComponent <CombatSystem>();
     movementSystem = GetComponent <MovementSystem>();
 }
예제 #20
0
        public List <Tile> FindPath(Tile goal, Tile[,] grid, MovementSystem ms)
        {
            List <Node> openList   = new List <Node>();
            List <Node> closedList = new List <Node>();

            Node start = new Node(null, ms.currentTile.x, ms.currentTile.y);

            start.g = start.h = start.f = 0;
            Node end = new Node(null, goal.x, goal.y);

            end.g = end.h = end.f = 0;

            openList.Add(start);

            while (openList.Count > 0)
            {
                Node currentNode  = openList[0];
                int  currentIndex = 0;
                for (int i = 0; i < openList.Count; i++)
                {
                    if (openList[i].f < currentNode.f)
                    {
                        currentNode  = openList[i];
                        currentIndex = i;
                    }
                }

                openList.RemoveAt(currentIndex);
                closedList.Add(currentNode);

                if (currentNode.x == end.x && currentNode.y == end.y)
                {
                    List <Tile> path    = new List <Tile>();
                    Node        current = currentNode;
                    while (current != null)
                    {
                        path.Add(grid[current.x, current.y]);
                        current = current.parent;
                    }
                    return(path);
                }

                List <Node> children = new List <Node>();

                //check surronding tiles
                Node nodePos = new Node(currentNode, currentNode.x + 1, currentNode.y);
                if (nodePos.x < 49 && nodePos.y < 49)
                {
                    if (grid[nodePos.x, nodePos.y] && grid[nodePos.x, nodePos.y].walkable && !grid[nodePos.x, nodePos.y].unitOnTile)
                    {
                        children.Add(nodePos);
                    }
                }
                nodePos = new Node(currentNode, currentNode.x, currentNode.y + 1);
                if (nodePos.x < 49 && nodePos.y < 49)
                {
                    if (grid[nodePos.x, nodePos.y] && grid[nodePos.x, nodePos.y].walkable && !grid[nodePos.x, nodePos.y].unitOnTile)
                    {
                        children.Add(nodePos);
                    }
                }
                nodePos = new Node(currentNode, currentNode.x - 1, currentNode.y);
                if (nodePos.x < 49 && nodePos.y < 49)
                {
                    if (grid[nodePos.x, nodePos.y] && grid[nodePos.x, nodePos.y].walkable && !grid[nodePos.x, nodePos.y].unitOnTile)
                    {
                        children.Add(nodePos);
                    }
                }
                nodePos = new Node(currentNode, currentNode.x, currentNode.y - 1);
                if (nodePos.x < 49 && nodePos.y < 49)
                {
                    if (grid[nodePos.x, nodePos.y] && grid[nodePos.x, nodePos.y].walkable && !grid[nodePos.x, nodePos.y].unitOnTile)
                    {
                        children.Add(nodePos);
                    }
                }

                foreach (Node child in children)
                {
                    bool stop = false;
                    foreach (Node closedChild in closedList)
                    {
                        if (!stop && child == closedChild)
                        {
                            stop = true;
                        }
                    }
                    if (!stop)
                    {
                        child.g = currentNode.g + 1;
                        child.h = Mathf.RoundToInt(Vector3.Distance(goal.transform.position, grid[child.x, child.y].transform.position));
                        child.f = child.g + child.h;

                        foreach (Node openNode in openList)
                        {
                            if (!stop && child == openNode && child.g > openNode.g)
                            {
                                stop = true;
                            }
                        }
                        if (!stop)
                        {
                            openList.Add(child);
                        }
                    }
                }
            }

            return(null);
        }
예제 #21
0
 private void Awake()
 {
     _Instance = this;
 }
예제 #22
0
 private void Awake()
 {
     systemsObj         = this.transform.Find("Systems");
     systemListenersObj = this.transform.Find("System Listeners");
     movementSystem     = systemsObj.GetComponent <MovementSystem>();
 }
예제 #23
0
 private void Start()
 {
     movementSystem = GetComponent <MovementSystem>();
 }
예제 #24
0
 // Passes player input to movement system
 protected override void ProcessHandling(MovementSystem movementSystem)
 {
     movementSystem.LateralMovement(Input.GetAxis(_horizontalMovement) * Time.deltaTime);
 }
 protected override void ProcessMove(MovementSystem movementSystem)
 {
     //movementSystem.LateralMovement(Time.deltaTime);
     //movementSystem.LongitudinalMovement(Time.deltaTime);
     movementSystem.RandomMovement(Time.deltaTime);
 }
예제 #26
0
 public bool InqJumpVelocity(float extent, ref float velocityZ)
 {
     velocityZ = MovementSystem.GetJumpHeight(1.0f, 100, 1.0f, 1.0f) * 19.6f;
     return(true);
 }
예제 #27
0
파일: Player.cs 프로젝트: decaprime/ACE
        public void HandleActionJump(JumpPack jump)
        {
            StartJump = new ACE.Entity.Position(Location);
            //Console.WriteLine($"JumpPack: Velocity: {jump.Velocity}, Extent: {jump.Extent}");

            var strength = Strength.Current;
            var capacity = EncumbranceSystem.EncumbranceCapacity((int)strength, AugmentationIncreasedCarryingCapacity);
            var burden   = EncumbranceSystem.GetBurden(capacity, EncumbranceVal ?? 0);

            // calculate stamina cost for this jump
            var extent      = Math.Clamp(jump.Extent, 0.0f, 1.0f);
            var staminaCost = MovementSystem.JumpStaminaCost(extent, burden, PKTimerActive);

            //Console.WriteLine($"Strength: {strength}, Capacity: {capacity}, Encumbrance: {EncumbranceVal ?? 0}, Burden: {burden}, StaminaCost: {staminaCost}");

            // ensure player has enough stamina to jump

            /*if (staminaCost > Stamina.Current)
             * {
             *  // get adjusted power
             *  extent = MovementSystem.GetJumpPower(Stamina.Current, burden, false);
             *
             *  staminaCost = (int)Stamina.Current;
             *
             *  // adjust jump velocity
             *  var velocityZ = MovementSystem.GetJumpHeight(burden, GetCreatureSkill(Skill.Jump).Current, extent, 1.0f);
             *
             *  jump.Velocity.Z = velocityZ;
             * }*/

            IsJumping    = true;
            LastJumpTime = DateTime.UtcNow;

            UpdateVitalDelta(Stamina, -staminaCost);

            IsJumping = false;

            //Console.WriteLine($"Jump velocity: {jump.Velocity}");

            // TODO: have server verify / scale magnitude
            if (FastTick)
            {
                if (!PhysicsObj.IsMovingOrAnimating)
                {
                    //PhysicsObj.UpdateTime = PhysicsTimer.CurrentTime - Physics.PhysicsGlobals.MinQuantum;
                    PhysicsObj.UpdateTime = PhysicsTimer.CurrentTime;
                }

                // perform jump in physics engine
                PhysicsObj.TransientState &= ~(Physics.TransientStateFlags.Contact | Physics.TransientStateFlags.WaterContact);
                PhysicsObj.calc_acceleration();
                PhysicsObj.set_on_walkable(false);
                PhysicsObj.set_local_velocity(jump.Velocity, false);

                if (CombatMode == CombatMode.Magic && MagicState.IsCasting)
                {
                    FailCast();
                }
            }
            else
            {
                PhysicsObj.UpdateTime = PhysicsTimer.CurrentTime;

                // set jump velocity
                //var glob_velocity = Vector3.Transform(jump.Velocity, Location.Rotation);
                //PhysicsObj.set_velocity(glob_velocity, true);

                // perform jump in physics engine
                PhysicsObj.TransientState &= ~(Physics.TransientStateFlags.Contact | Physics.TransientStateFlags.WaterContact);
                PhysicsObj.calc_acceleration();
                PhysicsObj.set_on_walkable(false);
                PhysicsObj.set_local_velocity(jump.Velocity, false);
            }

            // this shouldn't be needed, but without sending this update motion / simulated movement event beforehand,
            // running forward and then performing a charged jump does an uncharged shallow arc jump instead
            // this hack fixes that...
            var movementData = new MovementData(this);

            movementData.IsAutonomous = true;
            movementData.MovementType = MovementType.Invalid;
            movementData.Invalid      = new MovementInvalid(movementData);
            EnqueueBroadcast(new GameMessageUpdateMotion(this, movementData));

            // broadcast jump
            EnqueueBroadcast(new GameMessageVectorUpdate(this));

            if (MagicState.IsCasting && RecordCast.Enabled)
            {
                RecordCast.OnJump(jump);
            }
        }
예제 #28
0
 public TargetSelection(Game1 myGame)
 {
     system      = myGame.SystemManager.sMovement;
     TList       = new List <Vector2>();
     mouseVector = new Vector2();
 }
예제 #29
0
 //движение врага по прямой (по направлению корабля)
 protected override void ProcessHandling(MovementSystem movementSystem)
 {
     movementSystem.LongitudinalMovement(Time.deltaTime);
 }
예제 #30
0
        public IState UpdateState(ref GameSettings gameSettings, GameTime gameTime, Camera camera, KeyboardState currentKey, KeyboardState prevKey, MouseState currentMouse, MouseState prevMouse)
        {
            Guid playerId = this._components.Entities.Where(c => c.HasComponents(ComponentFlags.IS_PLAYER)).FirstOrDefault().Id;

            // Level input
            if (currentKey.IsKeyDown(Keys.Escape) && prevKey.IsKeyUp(Keys.Escape))
            {
                return(new PauseState(this._content, this));
            }
            if (currentKey.IsKeyDown(Keys.Q) && prevKey.IsKeyUp(Keys.Q))
            {
                return(new TestLevel(this._content, camera));
            }

            if (currentKey.IsKeyDown(Keys.F) && prevKey.IsKeyUp(Keys.F))
            {
                this._components.DelayedActions.Add(new Action(() =>
                {
                    for (int i = 0; i < 10; i++)
                    {
                        Guid testId = ArkCreation.SpawnEntityWithOverrides(Constants.Ark.Monsters.TestNpc, ref this._components, new BaseEntity(ComponentFlags.POSITION)
                        {
                            Position = new Position()
                            {
                                OriginPosition = new Vector2(Constants.Random.Next(20, this._gridCols * 48), Constants.Random.Next(0, this._gridRows * 48))
                            }
                        });
                        InventorySystem.GenerateRandomInventoryItemsForEntity(this._components, testId);
                    }
                }));
            }
            if (currentKey.IsKeyDown(Keys.E) && prevKey.IsKeyUp(Keys.E))
            {
                this._components.DelayedActions.Add(new Action(() =>
                {
                    Guid testId = ArkCreation.SpawnEntityWithOverrides(Constants.Ark.Monsters.TestNpc, ref this._components, new BaseEntity(ComponentFlags.POSITION)
                    {
                        Position = new Position()
                        {
                            OriginPosition = this._components.Positions[playerId].OriginPosition
                        }
                    });
                    InventorySystem.GenerateRandomInventoryItemsForEntity(this._components, testId);
                }));
            }
            if (currentKey.IsKeyDown(Keys.R) && prevKey.IsKeyUp(Keys.R))
            {
                this._components.DelayedActions.Add(new Action(() =>
                {
                    Guid id = this._components.Entities.Where(x => x.HasDrawableSprite() && !x.HasComponents(ComponentFlags.IS_PLAYER) && x.HasComponents(ComponentFlags.INVENTORY)).First().Id;
                    InventorySystem.DropEntityInventory(this._components, id);
                    this._components.DestroyEntity(id);
                }));
            }

            // Camera Updates
            CameraSystem.ControlCamera(currentKey, prevKey, camera, gameTime);
            CameraSystem.PanCamera(camera, gameTime);

            // Entity Movement Updates
            this._components.Entities.ForEach(c =>
            {
                if (c.IsMovable())
                {
                    switch (this._components.Movements[c.Id].MovementType)
                    {
                    case MovementType.AI:
                        //AI Movement System Call
                        break;

                    case MovementType.INPUT:
                        MovementSystem.InputMovement(currentKey, prevKey, gameTime, this._components.Positions[c.Id], this._components.Movements[c.Id]);
                        break;

                    case MovementType.DIRECTED:
                        MovementSystem.UpdateMovingEntities(this._components.Movements[c.Id], this._components.Positions[c.Id], gameTime, this._components, c);
                        break;
                    }
                }
            });

            // Entity Information Updates
            // Collision
            CollisionSystem.CheckForCollisions(this._components, this._collisionPartition);
            CollisionSystem.HandleCollisions(this._components);

            // Set up for next frame
            CameraSystem.UpdateCameraTarget(this._components, camera);
            CollisionSystem.ResetCollisions(ref this._components);
            this._components.InvokeDelayedActions();

            return(this);
        }
예제 #31
0
 public bool InqRunRate(ref float rate)
 {
     // get run skill from WorldObject
     rate = (float)MovementSystem.GetRunRate(0.0f, 300, 1.0f);
     return true;
 }