Example #1
0
    public static void HandleMovementInput(GameObject character, float horizontalAxisVal, float verticalAxisVal, bool isRunning)
    {
        CharacterSpeed characterSpd = character.GetComponent <CharacterSpeed>();

        if (Mathf.Abs(verticalAxisVal) > 0.01f)
        {
            if (isRunning)
            {
                character.transform.position += character.transform.forward * (verticalAxisVal * characterSpd.fRunSpeed * Time.deltaTime);
            }
            else if (Mathf.Abs(verticalAxisVal) > 0.95f)
            {
                character.transform.position += character.transform.forward * (verticalAxisVal * characterSpd.fMoveSpeed * Time.deltaTime);
            }
            else
            {
                character.transform.position += character.transform.forward * (verticalAxisVal * characterSpd.fSlowSpeed * Time.deltaTime);
            }
        }
        else
        {
            verticalAxisVal = 0.0f;
        }

        if (Mathf.Abs(horizontalAxisVal) > 0.01f)
        {
            character.transform.position += character.transform.right * (horizontalAxisVal * characterSpd.fSlowSpeed * Time.deltaTime);
        }
        else
        {
            horizontalAxisVal = 0.0f;
        }
    }
Example #2
0
        public void OnSlashCommand(MessageEventArgs args, SlashCommand command)
        {
            // client sends "&gc info 1" on entering the world
            var split = command.Command.Split(' ');

            switch (split[0].ToLower(CultureInfo.InvariantCulture))
            {
            case "&quit":
                args.Session.Send(new Quit(false));
                break;

            case "&exit":
                args.Session.Send(new Quit(true));
                break;

            case "&speed":
                if (split.Length > 1 && ushort.TryParse(split[1], out ushort value))
                {
                    var speed = new CharacterSpeed(value, 100, false);
                    args.Session.Send(speed);
                }
                break;

            case "&up":
                if (split.Length > 1 && ushort.TryParse(split[1], out ushort height))
                {
                    var coords = _selected.Coordinates;
                    _selected.Coordinates = new Coordinates(coords.X, coords.Y, coords.Z + height, coords.Heading);
                    var position = new PositionAndObjectId(_selected);
                    args.Session.Send(position);
                }
                break;
            }
        }
Example #3
0
    public static void HandleMovementInputTargeted(GameObject character, float verticalAxisVal, bool isRunning, Vector3 targetPosition)
    {
        CharacterSpeed characterSpd = character.GetComponent <CharacterSpeed>();

        if (Mathf.Abs(verticalAxisVal) > 0.01f)
        {
            if (isRunning)
            {
                character.transform.position = Vector3.MoveTowards(character.transform.position, targetPosition, verticalAxisVal * characterSpd.fRunSpeed * Time.deltaTime);
            }
            else if (Mathf.Abs(verticalAxisVal) > 0.95f)
            {
                character.transform.position = Vector3.MoveTowards(character.transform.position, targetPosition, verticalAxisVal * characterSpd.fMoveSpeed * Time.deltaTime);
            }
            else
            {
                character.transform.position = Vector3.MoveTowards(character.transform.position, targetPosition, verticalAxisVal * characterSpd.fSlowSpeed * Time.deltaTime);
            }
        }
    }
Example #4
0
    public static float HandleRotationInputTargeted(GameObject character, Vector3 targetPosition)
    {
        CharacterSpeed characterSpd = character.GetComponent <CharacterSpeed>();

        Vector3 characterForward = character.transform.TransformDirection(Vector3.forward);

        Vector3 toTarget = targetPosition - character.transform.position;

        float angleToTarget = Vector3.Dot(characterForward.normalized, toTarget.normalized);

        float angleInRad = Mathf.Acos(angleToTarget);
        float angleInDeg = angleInRad * Mathf.Rad2Deg;

        if (angleInDeg < 1.0f)
        {
            return(angleInDeg);
        }

        character.transform.Rotate(Vector3.up, angleInRad);

        return(angleInDeg);
    }
    private void SetWalkStatus()
    {
        tvec = arTexture.tvec;
        if (tvec != null)
        {
            tVec.x = (float)tvec.get(0, 0)[0];
            tVec.y = (float)tvec.get(1, 0)[0];
            tVec.z = Mathf.Abs((float)tvec.get(2, 0)[0]);
            // Set run and walk threshold once get tvec
            if (_runThreshold == 0)
            {
                _runThreshold  = tVec.z * 0.9f;
                _walkThreshold = tVec.z * 1.2f;
                if (_calibrateHeadPos)
                {
                    _xHeadOffset = tVec.x;
                }
            }

            // Set movement direction and speed
            _movingDirection = transform.forward;
            _characterSpeed  = characterSpeedSets.Find(x => x.guestState == GetComponent <Transformation>().currentGuestState);
            if (!_characterSpeed.canVerticalMove)
            {
                _movingDirection.y = 0f;
            }

            // Set movement
            if (tVec.z < _runThreshold)
            {
                // Run
                rb.MovePosition(transform.position + _movingDirection * _characterSpeed.runSpeed * Time.deltaTime);
                // transform.position += _movingDirection * _characterSpeed.runSpeed * Time.deltaTime;
                isMoveText.text = "The player is running";
                SoundManager.instance.isMoving  = true;
                SoundManager.instance.isRunning = true;
            }
            else if (tVec.z < _walkThreshold)
            {
                // Walk
                rb.MovePosition(transform.position + _movingDirection * _characterSpeed.walkSpeed * Time.deltaTime);
                // transform.position += _movingDirection * _characterSpeed.walkSpeed * Time.deltaTime;
                isMoveText.text = "The player is walking";
                SoundManager.instance.isMoving  = true;
                SoundManager.instance.isRunning = false;
            }
            else
            {
                // Walk back (can be stop, will discuss later)
                //transform.position -= _movingDirection * _characterSpeed.walkSpeed * Time.deltaTime;

                isMoveText.text = "the player stops";
                SoundManager.instance.isMoving  = false;
                SoundManager.instance.isRunning = false;
            }
        }
        else
        {
            SoundManager.instance.isMoving = false;
        }
        if (GetComponent <Transformation>().currentGuestState == GuestState.Vampier)
        {
            PlayMovementSound();
        }
        else
        {
            SoundManager.instance.StopFootstep();
        }
    }