Ejemplo n.º 1
0
        private bool TryDualCastSpell(BodyHand hand, BodyHand secondaryHand)
        {
            if (Vector3.Distance(hand.transform.position, secondaryHand.transform.position) > 0.5)
            {
                return(false);
            }
            var controlHand          = PlayerControl.GetHand(hand.side);
            var secondaryControlHand = PlayerControl.GetHand(secondaryHand.side);

            if (!(controlHand.gripPressed || secondaryControlHand.gripPressed))
            {
                return(false);                                                                // Need to be creative here...
            }
            if (!(controlHand.usePressed || secondaryControlHand.usePressed))
            {
                return(false);
            }


            var item = itemData.Spawn();

            item.gameObject.AddComponent <FireBallScript>();
            item.gameObject.GetComponent <FireBallScript>().isDualCast = true;
            var distance = 0f;

            item.transform.position   = Vector3.Lerp(hand.transform.position, secondaryHand.transform.position, 0.5f) + Player.local.body.transform.forward * distance;
            item.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
            hand.telekinesis.StartTargeting(item.GetMainHandle(hand.side));
            hand.telekinesis.TryCatch();
            secondaryHand.telekinesis.StartTargeting(item.GetMainHandle(hand.side));
            secondaryHand.telekinesis.TryCatch();

            item.gameObject.GetComponentInChildren <Collider>().isTrigger = false;
            return(true);
        }
Ejemplo n.º 2
0
        private void HandleCast(BodyHand hand, BodyHand secondaryHand)
        {
            // check if both hands are empty and close to eachother,
            // in that case use dualCasting.

            var mainHandCanCast = VerifyCanCast(hand);

            if (!mainHandCanCast)
            {
                return;
            }
            var secondaryHandCanCast = false;

            if (secondaryHand != null)
            {
                secondaryHandCanCast = VerifyCanCast(secondaryHand);
            }

            // Attempt dual casting, otherwise just cast normal spell
            if (secondaryHandCanCast && TryDualCastSpell(hand, secondaryHand))
            {
                return;
            }

            CastSpell(hand);
        }
Ejemplo n.º 3
0
        private void CastSpell(BodyHand hand)
        {
            var controlHand = PlayerControl.GetHand(hand.side);

            if (!controlHand.usePressed)
            {
                return;
            }
            if (!controlHand.gripPressed)
            {
                return;                           // Need to be creative here...
            }
            var item = itemData.Spawn();

            item.gameObject.AddComponent <FireBallScript>();
            item.gameObject.GetComponent <FireBallScript>().castHand = hand;
            var distance = 0.5f;

            item.transform.position   = hand.caster.transform.position - hand.transform.up * distance; // Spawn object distance meters infront of hand
            item.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
            hand.telekinesis.StartTargeting(item.GetMainHandle(hand.side));
            hand.telekinesis.TryCatch();

            item.gameObject.GetComponentInChildren <Collider>().isTrigger = false;
        }
Ejemplo n.º 4
0
        private bool VerifyCanCast(BodyHand hand)
        {
            var caster = hand.caster;

            if (caster == null || caster.currentSpell == null)
            {
                return(false);
            }

            if (caster.currentSpell.name != "FireBallSpell(Clone)")
            {
                GameObject.Destroy(caster.currentSpell.gameObject);
                return(false);
            }

            if (hand.interactor.grabbedHandle != null) // or if only grabbed fireball
            {
                return(false);
            }
            if (hand.telekinesis.catchedHandle != null)
            {
                return(false);
            }
            return(true);
        }
Ejemplo n.º 5
0
        public void GetIceWindSpell(BodyHand hand)
        {
            if (!hand.caster)
            {
                return;
            }

            if (!hand.caster.currentSpell)
            {
                return;
            }



            switch (hand.side)
            {
            case Side.Left:
                if (leftIceWind)
                {
                    if (hand.caster.currentSpell != iceWindSpellL)
                    {
                        leftIceWind.active = false;
                        leftIceWind.frostVFX.Stop();
                    }
                    return;
                }
                else
                {
                    if (hand.caster.currentSpell.name == "IceSpell(Clone)")
                    {
                        iceWindSpellL      = hand.caster.currentSpell;
                        leftIceWind        = hand.caster.currentSpell.gameObject.AddComponent <IceWindController>();
                        leftIceWind.hand   = hand;
                        leftIceWind.active = true;
                        leftIceWind.frostVFX.Play();
                    }
                }
                return;

            case Side.Right:
                if (rightIceWind)
                {
                    if (hand.caster.currentSpell != iceWindSpellR)
                    {
                        rightIceWind.active = false;
                        rightIceWind.frostVFX.Stop();
                    }
                    return;
                }
                else
                {
                    if (hand.caster.currentSpell.name == "IceSpell(Clone)")
                    {
                        iceWindSpellR       = hand.caster.currentSpell;
                        rightIceWind        = hand.caster.currentSpell.gameObject.AddComponent <IceWindController>();
                        rightIceWind.hand   = hand;
                        rightIceWind.active = true;
                        rightIceWind.frostVFX.Play();
                    }
                }
                return;

            default:
                return;
            }
        }