Esempio n. 1
0
#pragma warning restore 0649
    #endregion     // Serialized Fields


    #endregion     // Fields

    #region Properties
    #endregion     // Properties

    #region Methods
    public override void DoUpdate()
    {
        Unit.State.Persistent    persistent = unit.state.persistent;
        Unit.State.Momentary     momentary  = unit.state.momentary;
        Unit.ManagerState        manState   = unit.manState;
        Unit.ManagerState.AiData aiData     = manState.aiData;

        switch (aiData.state)
        {
        case Unit.AiState.Idle:
            persistent.navTarget = manState.homePoint;
            break;

        case Unit.AiState.Chasing:
            persistent.navTarget = aiData.closestTarget.transform.position;
            break;
        }
    }
Esempio n. 2
0
    void UpdateMovement(Unit unit)
    {
        Unit.State        state    = unit.state;
        Unit.ManagerState manState = unit.manState;

        float acc       = unit.def.moveData.acceleration;
        float dec       = unit.def.moveData.deceleration;
        float moveSpeed = unit.def.moveData.moveSpeed;

        Vector3 vel = state.persistent.velocity;

        if (state.momentary.obeyGravity && !state.persistent.onGround)
        {
            vel += Physics.gravity * Time.deltaTime;
        }

        Vector2 xzVel   = vel.XZ();
        Vector2 xzDir   = xzVel.normalized;
        float   xzSpeed = xzVel.magnitude;

        float yVel = vel.y;

        Vector2 inputMoveVector = state.momentary.moveInput;

        if (inputMoveVector == Vector2.zero)
        {
            xzSpeed = Mathf.MoveTowards(xzSpeed, 0.0f, dec * Time.deltaTime);
        }
        else
        {
            Vector3 moveDirLocal = inputMoveVector.ToXZ().normalized;
            xzDir = unit.transform.TransformDirection(moveDirLocal).XZ();

            moveSpeed *= inputMoveVector.magnitude;

            if (xzSpeed < moveSpeed)
            {
                xzSpeed = Mathf.MoveTowards(xzSpeed, moveSpeed, acc * Time.deltaTime);
            }
        }

        //DbgValues.Set(unit, "xzSpeed", xzSpeed);
        //DbgValues.Set(unit, "moveInput", inputMoveVector);
        //DbgValues.Set(unit, "aimInput", inputMoveVector);
        //DbgValues.Set(unit, "jumpInput", state.momentary.jumpInput);
        //DbgValues.Set(unit, "fireInput", state.momentary.fireInput);
        //DbgValues.Set(unit, "rot", unit.transform.rotation);

        Vector2 moveVector = xzDir * xzSpeed;

        bool wantsJump = state.momentary.jumpInput;

        if (wantsJump && state.persistent.onGround)
        {
            yVel += unit.def.moveData.jumpForce;
            manState.groundCheck.delayTimer = settings.groundCheck.postJumpDelay;
        }

        vel = new Vector3(
            moveVector.x,
            yVel,
            moveVector.y
            );

        if (unit.parts.controller != null)
        {
            CollisionFlags collFlags = unit.parts.controller.Move(vel * Time.deltaTime);

            if (0 != (collFlags & CollisionFlags.CollidedSides))
            {
                vel.x = vel.z = 0.0f;
            }
        }

        bool onGround;

        if (unit.manState.groundCheck.delayTimer > 0.0f)
        {
            onGround = false;
        }
        else
        {
            onGround = GroundCheck(unit);
        }

        state.persistent.onGround = onGround;

        if (onGround)
        {
            vel.y = 0.0f;
        }

        Vector2 aimVector = state.momentary.aimInput * UnitSettings.AimSettings.sensitivity;

        if (unit.parts.camera != null)
        {
            float rotationX = unit.parts.camera.transform.localRotation.eulerAngles.x;

            if ((rotationX + aimVector.y) <= UnitSettings.AimSettings.minRotationX || (rotationX + aimVector.y) >= UnitSettings.AimSettings.maxRotationX)
            {
                unit.parts.camera.transform.Rotate(
                    aimVector.y, 0.0f, 0.0f
                    );
            }
        }

        state.persistent.velocity = vel;

        unit.transform.Rotate(0.0f, aimVector.x, 0.0f);

        if (manState.groundCheck.delayTimer > 0.0f)
        {
            manState.groundCheck.delayTimer -= Time.deltaTime;
        }
    }