Esempio n. 1
0
        public override void Update()
        {
            base.Update();
            if (!hand)
            {
                return;
            }
            whooshEffect.SetSpeed(Mathf.InverseLerp(3, 12, dagger.rb.velocity.magnitude));
            Vector3    position;
            Quaternion rotation;

            if (hand.playerHand.controlHand.usePressed)
            {
                var fistIndex = (hand.side == Side.Right) ? index : (2 - index);
                position = hand.Palm() + hand.ThumbDir() * 0.15f + hand.ThumbDir() * (0.4f * (fistIndex + 0.3f * hand.Velocity().magnitude));
                rotation = Quaternion.LookRotation(hand.ThumbDir(), -hand.PalmDir());
            }
            else
            {
                var     angleTarget = Mathf.Clamp(60 - hand.Velocity().magnitude * 15, 15, 60);
                var     angle       = index * angleTarget - angleTarget;
                Vector3 offset      = Quaternion.AngleAxis(angle, -Vector3.right)
                                      * (Vector3.forward * (0.2f + 0.3f * hand.Velocity().magnitude / 2))
                                      + (-Vector3.right - Vector3.forward) * 0.3f * hand.Velocity().magnitude / 2;
                position = hand.transform.TransformPoint(offset);
                rotation = Quaternion.LookRotation(hand.PointDir(), -hand.PalmDir());
            }
            dagger.UpdateJoint(position, rotation, 10);
            dagger.item.Throw(1, Item.FlyDetection.Forced);
            dagger.item.IgnoreRagdollCollision(Player.currentCreature.ragdoll);
        }
Esempio n. 2
0
 public override void Update()
 {
     base.Update();
     if (effectShown)
     {
         textObject.SetActive(true);
         ringEffect.SetSpeed(GetHandDistanceInGs());
         ringEffect.SetIntensity(GetHandDistanceInGs());
         lineEffect.SetSource(Player.currentCreature.handLeft.caster.magicSource);
         lineEffect.SetTarget(Player.currentCreature.handRight.caster.magicSource);
         Player.currentCreature.mana.mergePoint.transform.rotation = GetHandsPointingQuaternion();
         text.text = $"{Math.Round(GetHandDistanceInGs(), 1)}G";
         textObject.transform.position = Vector3.Lerp(
             textObject.transform.position,
             Player.currentCreature.mana.mergePoint.transform.position + new Vector3(0, 0.2f, 0),
             Time.deltaTime * 50.0f);
         textObject.transform.rotation = Quaternion.LookRotation(textObject.transform.position - Player.currentCreature.animator.GetBoneTransform(HumanBodyBones.Head).position);
     }
     else
     {
         textObject.SetActive(false);
     }
 }
Esempio n. 3
0
        public void Update()
        {
            isHeld   = item.mainHandler != null;
            isStored = item.holder != null;

            item.rb.useGravity = false;
            item.rb.velocity  *= friction;

            if (Item.list.Where(
                    i => i.itemId == "BlackHoleSphere" ||
                    i.itemId == "WhiteHoleSphere").Count() > 2)
            {
                DestroyOldHoles();
            }

            if (!active)
            {
                return;
            }

            if (isHeld)
            {
                wasHeld = true;
                float axis = PlayerControl.GetHand(item.mainHandler.side).useAxis;
                effect.SetIntensity(axis);
                effect.SetSpeed(axis);
                if (type == White)
                {
                    if (axis > 0)
                    {
                        PushOrSucc(axis);
                        if (!hasFired)
                        {
                            hasFired = true;
                            FireObject();
                        }
                    }
                    else
                    {
                        hasFired = false;
                    }
                }
                else
                {
                    if (axis > 0)
                    {
                        PushOrSucc(axis);
                    }
                }
            }
            else if (isStored)
            {
                wasHeld = true;
                effect.SetIntensity(0);
                effect.SetSpeed(0);
                hasFired = false;
            }
            else
            {
                if (wasHeld)
                {
                    wasHeld      = false;
                    lastHeldTime = Time.time;
                }
                effect.SetIntensity(1);
                effect.SetSpeed(1);
                PushOrSucc();
                hasFired = false;
            }
            if (!isStored && !isHeld && storedItems.Count > 0 && type == White && Time.time - lastHeldTime > itemSpamDelay && Time.time - lastThrownItem > itemThrowDelay)
            {
                lastThrownItem = Time.time;
                GameObject storedObject = storedItems.Dequeue();
                storedObject.SetActive(true);
                TriggerHeadThrow(storedObject.GetComponent <Rigidbody>());
            }
        }