コード例 #1
0
    // Start is called before the first frame update
    void Start()
    {
        inputManager  = GetComponent <SlimeInputManager>();
        stateDataDict = new Dictionary <State, StateData>();

        StoreStateData(currentState);
    }
コード例 #2
0
        public override void Execute()
        {
            if (!SlimeInputManager.IsUpright(transform))
            {
                return;
            }
            transform.Rotate(Vector3.up, -rotationSpeed * Time.deltaTime);

            if (/*Input.GetKeyUp(KeyCode.LeftArrow)*/ !owner.slimeInputManager.inputTurnLeft)
            {
                GetComponent <StateManager>()?.ChangeState(nextState);
            }
        }
コード例 #3
0
 private void Start()
 {
     // SUPER HACKY
     if (slimeInputManager == null)
     {
         slimeInputManager = GetComponentInParent <SlimeInputManager>();
         if (slimeInputManager == null)
         {
             slimeInputManager = GameObject.Find("Main Camera")?.GetComponent <SlimeInputManager>(); // Super ugly hacky
         }
     }
     if (slime == null)
     {
         slime = GetComponentInParent <Slime>();
         //slime = slimeInputManager?.currentTarget;
     }
 }
コード例 #4
0
        public override void Execute()
        {
            if (!IsGrounded() && !liftedOff)
            {
                liftedOff = true;
            }

            if (!getUpright && IsGrounded() && !SlimeInputManager.IsUpright(transform, 30))
            {
                getUpright = true;
                if (!jumpForceAdded)
                {
                    Vector3 force = rb.mass * jumpForceMultiplier * Vector3.up;
                    rb.AddForce(force);
                    jumpForceAdded = true;
                }

                return;
            }

            // Make slime upright if its not (Move upright if angle is >30° while grounded, if not grounded execute until angle is less than 5°
            if (getUpright && !IsGrounded() && !SlimeInputManager.IsUpright(transform, 10) /*(transform.rotation.eulerAngles.x < -20 || transform.rotation.eulerAngles.x > 20 || transform.rotation.eulerAngles.z < -20 ||
                                                                                            * transform.rotation.eulerAngles.z > 20)*/)
            {
                Quaternion targetRot = Quaternion.FromToRotation(transform.up, Vector3.up) * transform.rotation;
                transform.rotation = Quaternion.Slerp(transform.rotation, targetRot, Time.deltaTime * rotationSpeed);

                /*
                 * if(IsGrounded())
                 *   rb.AddForce(rb.mass * 0.1f * Vector3.up);*/

                ////Quaternion targetRotation = Quaternion.Euler(0, transform.rotation.y,0);//Quaternion.identity;
                //targetRotation.y = transform.localRotation.y;

                //transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, 500f);
                ////transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, 180f * Time.deltaTime);
                return;
            }

            //HACK Forwardpush while jumping; Input Hack
            if (jumpForceAdded && !IsGrounded() && Input.GetKey(KeyCode.LeftShift) && !forwardPushDone)
            {
                Slime   slime        = GetComponent <Slime>();
                Vector3 forwardForce = (slime.rb.mass) * 100 * transform.forward;
                forwardForce.y = 0;
                rb.AddForce(forwardForce);
                forwardPushDone = true;
            }

            if (IsGrounded() && !jumpForceAdded && rb.velocity.y <= 0)
            {
                Vector3 force = rb.mass * jumpForceMultiplier * Vector3.up;

                rb.AddForce(force);
                jumpForceAdded = true;
                Slime slime = owner.GetComponent <Slime>(); // hack
                if (doTweenSquashEffect)
                {
                    DOTween.To(() => transform.localScale, (x) => transform.localScale = x, new Vector3(0.25f * slime.Volume * elasticityMultiplier, 0.75f * slime.Volume * elasticityMultiplier, 0.25f * slime.Volume * elasticityMultiplier), 1f).SetEase(Ease.OutElastic).OnComplete(() =>
                    {
                        DOTween.To(() => transform.localScale, (x) => transform.localScale = x,
                                   new Vector3(0.5f * slime.Volume, 0.5f * slime.Volume, 0.5f * slime.Volume), 1f).SetEase(Ease.OutElastic).SetDelay(.5f); // TODO Setelay HACK. The reverse function should be executed ongrounded!
                    });
                }
            }



            if (jumpForceAdded && liftedOff && (IsGrounded() && (rb.velocity.y <= 0 && rb.velocity.y > -.9)))
            {
                owner.ChangeState(nextState);
            }
        }
コード例 #5
0
 public override bool Decide(StateController controller)
 {
     return(!SlimeInputManager.IsUpright(controller.transform));
 }