protected override void Awake()
    {
        base.Awake();

        animator = GetComponent <Animator>();
        channels = base.channels as FighterChannels;
    }
Beispiel #2
0
    protected override void OnEnable()
    {
        base.OnEnable();

        controlled = channels as FighterChannels;
        crosshair  = GetComponentInChildren <CrosshairMotor>();
        tracker    = GetComponentInChildren <TargetTrackerMotor>();

        Cursor.visible   = false;
        Cursor.lockState = CursorLockMode.Locked;
    }
    protected override void Awake()
    {
        base.Awake();

        channels = base.channels as FighterChannels;

        Vector3 pos = transform.position;

        startPos           = pos;
        pos.z              = startZ;
        transform.position = pos;
    }
    protected override void DoOutput(FighterChannels channels)
    {
        emission.enabled = channels.attack1;

        if (channels.attack1)
        {
            float hitDistance = range;
            bool  didHit      = Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, range, hitMask);
            if (didHit)
            {
                hitDistance = hit.distance;

                hit.collider.Damage(damagePerSecond * Time.deltaTime * damageMultiplier);
            }

            SetDistance(hitDistance);
            Vector3 hitPos = transform.position;

            if (didHit)
            {
                hitPos          = hit.transform.position;
                currentChain[0] = hit.transform.root;
            }
            for (int i = 0; i < currentChain.Length; i++)
            {
                currentChain[i] = null;
            }
            for (int i = 0; i < chain.Length; i++)
            {
                if (didHit)
                {
                    didHit = false;

                    int chainHitCount = Physics.OverlapSphereNonAlloc(hitPos, chainRadius, spherecastBuffer, hitMask);
                    if (chainHitCount > 0)
                    {
                        Transform chainHitObject = null;
                        float     minDist        = float.PositiveInfinity;
                        for (int j = 0; j < chainHitCount; j++)
                        {
                            if (Array.IndexOf(currentChain, spherecastBuffer[j].transform.root) >= 0)
                            {
                                continue;
                            }

                            float chainDist = Vector3.SqrMagnitude(hitPos - spherecastBuffer[j].transform.position);
                            if (chainDist < minDist)
                            {
                                minDist        = chainDist;
                                chainHitObject = spherecastBuffer[j].transform;
                            }
                        }

                        if (chainHitObject)
                        {
                            chainHitObject.Damage(damagePerSecond * Time.deltaTime * damageMultiplier);
                            currentChain[i + 1] = chainHitObject;
                            chain[i].gameObject.SetActive(true);
                            chain[i].transform.position = hitPos;
                            chain[i].transform.forward  = chainHitObject.position - hitPos;
                            var main2 = chain[i].main;
                            main2.startLifetime = Mathf.Sqrt(minDist) / main2.startSpeed.constant;
                            didHit = true;
                            hitPos = chainHitObject.position;
                        }
                    }
                }

                if (!didHit)
                {
                    chain[i].gameObject.SetActive(false);
                }
            }
        }
        else
        {
            foreach (var item in chain)
            {
                item.gameObject.SetActive(false);
            }
        }
    }
Beispiel #5
0
    protected override void Awake()
    {
        base.Awake();

        channels = base.channels as FighterChannels;
    }