Esempio n. 1
0
        public void SwitchMovement(PlayerMovementMode mode)
        {
            DeactivateAllModes();

            switch (mode)
            {
            case PlayerMovementMode.Realistic:
                activeMovementMode = GetComponent <RealisticMovement>();
                break;

            case PlayerMovementMode.Mainframe:
                activeMovementMode = GetComponent <MainframeMovement>();
                break;

            case PlayerMovementMode.LiveWire:
                activeMovementMode = GetComponent <LiveWireMovement>();
                break;

            default:
                activeMovementMode = GetComponent <MainframeMovement>();
                break;
            }

            activeMovementMode.Activate();
        }
Esempio n. 2
0
        IEnumerator TrailEffectCoroutine(GameObject trailPlayer, float timeStamp, PlayerMovementMode currentPlayerMovementMode)        // DelayJump
        {
            float timeOffset = 0;


            while (timeOffset < timeStamp)
            {
                yield return(null);

                if (DragonakSwoopGameManager.instance.gameState != GameState.paused)
                {
                    timeOffset += Time.deltaTime;
                    if (timeOffset > timeStamp)
                    {
                        if (currentPlayerMovementMode == PlayerMovementMode.Jumping)
                        {
                            Jump(trailPlayer.GetComponent <Rigidbody2D> ());
                        }
                        else if (currentPlayerMovementMode == PlayerMovementMode.floating)
                        {
                            Float(trailPlayer.GetComponent <Rigidbody2D> ());
                        }
                    }
                }
            }
            timeOffset = 0;
        }
Esempio n. 3
0
        /// <summary>
        /// Sets the ground movement mode based on current parameters.
        /// </summary>
        private void SetMovementMode()
        {
            if (_falling)
            {
                _movementMode = PlayerMovementMode.Floor;
                return;
            }

            var oldMode = _movementMode;

            if ((_groundAngle >= 45) && (_groundAngle < 135))
            {
                _movementMode = PlayerMovementMode.RightWall;
            }
            else if ((_groundAngle >= 135) && (_groundAngle < 225))
            {
                _movementMode = PlayerMovementMode.Ceiling;
            }
            else if ((_groundAngle >= 225) && (_groundAngle < 315))
            {
                _movementMode = PlayerMovementMode.LeftWall;
            }
            else
            {
                _movementMode = PlayerMovementMode.Floor;
            }

            if (oldMode != _movementMode)
            {
                TraceSource.TraceEvent(TraceEventType.Verbose, 0, $"Switching to movement mode {_movementMode} from {oldMode}.");
            }
        }
 public PlayerControllerComponent(Entity referringEntity)
     : base(referringEntity)
 {
     _movementMode = PlayerMovementMode.ThirdPerson;
     referringEntity.Position = _cameraTargetPosition;
     Speed = 2.0f;
     RotationSpeed = 2f;
 }
Esempio n. 5
0
        /// <summary>
        /// gives effect for delay jump
        /// </summary>

        public void TrailEffect(PlayerMovementMode playerMovementMode)            // argument is declared for consistency movement between main player and trail.(It will remain following when continuously switching mode)
        {
            int count = 0;

            foreach (GameObject trailPlayer in trailPlayerList)
            {
                count++;
                StartCoroutine(TrailEffectCoroutine(trailPlayer, trailPlayerMovementDelay * count, playerMovementMode));
            }
        }
Esempio n. 6
0
        /// <summary>
        /// Places the player into a falling state.
        /// </summary>
        private void Fall()
        {
            if (_falling)
            {
                return;
            }

            _movementMode = PlayerMovementMode.Floor;
            _falling      = true;
        }
Esempio n. 7
0
 public void SwitchMode(PlayerMovementMode movementMode)
 {
     if (movementMode == PlayerMovementMode.Jumping)
     {
         movement  = null;
         movement += JumpMode;
     }
     else if (movementMode == PlayerMovementMode.floating)
     {
         movement  = null;
         movement += FloatMode;
     }
 }
Esempio n. 8
0
 public void SetPlayerMovementMode(PlayerMovementMode mode)
 {
     playerMovementMode = mode;
 }
Esempio n. 9
0
        /// <summary>
        /// Performs a jump.
        /// </summary>
        private void Jump()
        {
            if (_falling)
            {
                // cant jump whilst in the air
                return;
            }

            var position = _player.Position;
            var size     = _player.Size;

            _jumping = true;

            double deltaX, deltaY;

            switch (_movementMode)
            {
            case PlayerMovementMode.Floor:
                deltaX = 0.0;
                deltaY = -((size.Y / 2) + 5.0);
                break;

            case PlayerMovementMode.Ceiling:
                deltaX = 0.0;
                deltaY = ((size.Y / 2) + 5.0);
                break;

            case PlayerMovementMode.RightWall:
                deltaX = -((size.Y / 2) + 5.0);
                deltaY = 0.0;
                break;

            case PlayerMovementMode.LeftWall:
                deltaX = ((size.Y / 2) + 5.0);
                deltaY = 0.0;
                break;

            default:
                deltaX = 0.0;
                deltaY = 0.0;
                break;
            }

            var tq = new TraceQuery
            {
                Line          = new Line(position.X, position.Y, position.X + deltaX, position.Y + deltaY),
                CollisionPath = _player.CollisionPath,
                Options       = TraceLineOptions.IgnoreJumpThrough | TraceLineOptions.SolidOnly,
                Ignore        = _player
            };
            var tr = _collisionService.TraceLine(tq);

            if (tr.Hit)
            {
                // relative ceiling too low, nowhere to jump
                return;
            }

            _movementMode = PlayerMovementMode.Floor;
            _falling      = true;
            _rolling      = true;
            _player.SetBoundingBox(Player.RollingBox);

            var rad = _groundAngle * (Math.PI / 180.0);

            _xsp -= JumpSpeed * -Math.Sin(rad);
            _ysp -= JumpSpeed * -Math.Cos(rad);

            if (_ysp < JumpSpeed)
            {
                _ysp = JumpSpeed;
            }

            if (JumpSound != 0)
            {
                _audioService.PlaySoundEffect(JumpSound);
            }
        }
Esempio n. 10
0
        /// <summary>
        /// Calculates the ground angle from the contacted tiles.
        /// </summary>
        /// <param name="trA">The trace result from sensor A.</param>
        /// <param name="trB">The trace result from sensor B.</param>
        /// <param name="mode">The movement mode.</param>
        private void CalculateGroundAngle(TraceResult trA, TraceResult trB, PlayerMovementMode mode)
        {
            if (!trA.Hit && !trB.Hit)
            {
                TraceSource.TraceEvent(TraceEventType.Warning, 0, "Unable to calculate player angle!");
                return;
            }

            TraceResult tr;

            if (trA.Hit && !trB.Hit)
            {
                tr = trA;
            }
            else if (!trA.Hit && trB.Hit)
            {
                tr = trB;
            }
            else
            {
                if (mode == PlayerMovementMode.Ceiling)
                {
                    if (trA.ContactPoint.Y > trB.ContactPoint.Y)
                    {
                        tr = trA;
                    }
                    else
                    {
                        tr = trB;
                    }
                }
                else if (mode == PlayerMovementMode.RightWall)
                {
                    if (trA.ContactPoint.X < trB.ContactPoint.X)
                    {
                        tr = trA;
                    }
                    else
                    {
                        tr = trB;
                    }
                }
                else if (mode == PlayerMovementMode.LeftWall)
                {
                    if (trA.ContactPoint.X > trB.ContactPoint.X)
                    {
                        tr = trA;
                    }
                    else
                    {
                        tr = trB;
                    }
                }
                else
                {
                    if (trA.ContactPoint.Y < trB.ContactPoint.Y)
                    {
                        tr = trA;
                    }
                    else
                    {
                        tr = trB;
                    }
                }
            }

            if (tr.Entity != null)
            {
                _groundAngle = 0.0;
            }
            else
            {
                _groundAngle = tr.Tile.Definition.Angles[(int)mode];
            }

            _groundAngle = Utils.ClampAngle(_groundAngle);
        }
Esempio n. 11
0
    private void Update()
    {
        //Used for crisp jumping
        float gravity = GravityScale;

        //Cancel velocity when colliding with wall
        if (m_Controller.collisionState.left || m_Controller.collisionState.right)
        {
            m_Velocity.x = 0.0f;
        }

        if (m_Controller.collisionState.above || m_Controller.collisionState.below)
        {
            m_Velocity.y = 0.0f;
        }

        //Change the movement method depending on the current movement mode
        switch (MovementMode)
        {
        case PlayerMovementMode.Running:
            //Switch to Skateboarding
            if (m_Switch)
            {
                MovementMode = PlayerMovementMode.Skateboarding;
                break;
            }

            //Run
            Run();
            break;

        case PlayerMovementMode.Skateboarding:
            //Switch to Running
            if (m_Switch)
            {
                MovementMode = PlayerMovementMode.Running;
                break;
            }

            //Skateboard
            Skateboard();
            break;
        }

        //Set up last jump time
        if (m_Jump && !m_JumpLast)
        {
            m_LastJumpTime = 0.0f;
        }
        else
        {
            m_LastJumpTime += Time.deltaTime;
        }

        //Check if the player is grounded and prevent them from gaining momentum
        if (m_Controller.isGrounded)
        {
            m_TimeSinceLastGround = 0.0f;
            m_Velocity.y          = 0.0f;
        }
        else
        {
            //Check if the player is falling
            if (m_Velocity.y < 0)
            {
                gravity *= FallMultiplier;
            }
            //Check if the player isn't holding the jump button
            else if (m_Velocity.y > 0 && !m_Jump)
            {
                gravity *= LowJumpMultiplier;
            }

            m_TimeSinceLastGround += Time.deltaTime;
        }

        //Check for jumping
        if (m_LastJumpTime <= JumpTime && m_TimeSinceLastGround <= CoyoteTime)
        {
            m_Velocity.y = m_JumpVelocity;
        }

        //Add gravity
        m_Velocity.y += Physics2D.gravity.y * Time.deltaTime * gravity;

        //Move the player
        m_Controller.Move(m_Velocity * Time.deltaTime);

        //Flip the sprite depending on the sign
        if (m_Velocity.x > 0)
        {
            m_Renderer.flipX = false;
        }
        else if (m_Velocity.x < 0)
        {
            m_Renderer.flipX = true;
        }
    }
Esempio n. 12
0
        public Player(World world)
        {
            _inputSystem  = GameInstance.GetService <InputSystem>();
            _playerEntity = world.EntitySystem.CreateEntity(true);

            var mesh           = new Mesh(GameInstance.GraphicsDevice, Primitives.GenerateQuadForYBillboard());
            var diffuseTexture = GameInstance.Content.Load <Texture2D>(ResourceNames.Textures.DefaultGuy);
            var material       = new Material
            {
                DiffuseTexture  = diffuseTexture,
                UseTransparency = true,
                TexcoordScale   = diffuseTexture.GetTexcoordsFromPixelCoords(32, 32),
                IsUnlit         = true
            };

            _modelEntityComponent = _playerEntity.AddComponent(new ModelEntityComponent(_playerEntity, mesh, material, true));

            _cameraEntity = world.EntitySystem.CreateEntity();
            _cameraEntity.SetParent(_playerEntity);

            var cameraComponent = _cameraEntity.AddComponent(new CameraEntityComponent(_cameraEntity, new Skybox(GameInstance)
            {
                Scale   = 50,
                Texture = GameInstance.Content.Load <Texture2D>(ResourceNames.Textures.skybox_texture)
            }));

            cameraComponent.FarClipDistance = 50.0f;
            Camera = cameraComponent.Camera;

            Speed         = 2.0f;
            RotationSpeed = 2f;

            var forward = Animation.CreateDiscrete(0.65f, new[]
            {
                diffuseTexture.GetTexcoordsFromPixelCoords(0, 0),
                diffuseTexture.GetTexcoordsFromPixelCoords(32, 0),
                diffuseTexture.GetTexcoordsFromPixelCoords(0, 0),
                diffuseTexture.GetTexcoordsFromPixelCoords(64, 0),
            }, t => _modelEntityComponent.Material.TexcoordOffset = t, true);
            var left = Animation.CreateDiscrete(0.65f, new[]
            {
                diffuseTexture.GetTexcoordsFromPixelCoords(0, 32),
                diffuseTexture.GetTexcoordsFromPixelCoords(32, 32),
                diffuseTexture.GetTexcoordsFromPixelCoords(0, 32),
                diffuseTexture.GetTexcoordsFromPixelCoords(64, 32),
            }, t => _modelEntityComponent.Material.TexcoordOffset = t, true);
            var right = Animation.CreateDiscrete(0.65f, new[]
            {
                diffuseTexture.GetTexcoordsFromPixelCoords(0, 96),
                diffuseTexture.GetTexcoordsFromPixelCoords(32, 96),
                diffuseTexture.GetTexcoordsFromPixelCoords(0, 96),
                diffuseTexture.GetTexcoordsFromPixelCoords(64, 96),
            }, t => _modelEntityComponent.Material.TexcoordOffset = t, true);
            var backward = Animation.CreateDiscrete(0.65f, new[]
            {
                diffuseTexture.GetTexcoordsFromPixelCoords(0, 64),
                diffuseTexture.GetTexcoordsFromPixelCoords(32, 64),
                diffuseTexture.GetTexcoordsFromPixelCoords(0, 64),
                diffuseTexture.GetTexcoordsFromPixelCoords(64, 64),
            }, t => _modelEntityComponent.Material.TexcoordOffset = t, true);

            _playerEntity.AddComponent(new FigureMovementAnimationComponent(_playerEntity, forward, backward, left, right));

            _movementMode          = PlayerMovementMode.ThirdPerson;
            _cameraEntity.Position = _cameraTargetPosition;

            var colliderComponent = new CollisionEntityComponent(_playerEntity, new Vector3(0.35f, 0.6f, 0.35f),
                                                                 new Vector3(0.0f, 0.3f, 0.0f), "Player")
            {
                ResolvesPosition = true,
            };

            _playerEntity.AddComponent(colliderComponent);

            _playerEntity.Position = new Vector3(5, 0, 8);
        }