コード例 #1
0
    protected override void Awake()
    {
        base.Awake();

        mMoveToTarget = GetComponent <RigidBodyMoveToTarget>();

        tank.setStateCallback += OnTankStateChanged;

        bodyCtrl.rigidbody.isKinematic = true;
        bodyCtrl.enabled    = false;
        gravityCtrl.enabled = false;
    }
コード例 #2
0
    protected override void SpawnStart()
    {
        base.SpawnStart();

        if (!mMover)
        {
            RigidBodyMoveToTarget rigidMover = stats.GetComponent <RigidBodyMoveToTarget>();
            if (rigidMover)
            {
                mMover = rigidMover.target;
            }
        }
    }
コード例 #3
0
    bool _DoStuffMoveOfsY(RigidBodyMoveToTarget mover, float start, float end, float curTime)
    {
        float delay = Mathf.Abs(end - start) / stuffSpeed;

        if (curTime < delay)
        {
            float t = Holoville.HOTween.Core.Easing.Sine.EaseInOut(curTime, 0.0f, 1.0f, delay, 0.0f, 0.0f);
            mover.offset.y = Mathf.Lerp(start, end, t);
            return(false);
        }
        else
        {
            mover.offset.y = end;
            return(true);
        }
    }
コード例 #4
0
    protected override void ActivatorWakeUp()
    {
        switch ((EntityState)state)
        {
        case EntityState.Normal:
        case EntityState.Hurt:
        case EntityState.Stun:
            if (!respawnOnSleep)
            {
                if (attachGO)
                {
                    attachGO.SetActive(true);
                }

                if (mProj)
                {
                    mProj.gameObject.SetActive(true);
                }
                else
                {
                    if (!string.IsNullOrEmpty(attachProjType))
                    {
                        mProj = Projectile.Create(projGroup, attachProjType, attachProjPt.position, Vector3.zero, null);
                        RigidBodyMoveToTarget attacher = mProj.GetComponent <RigidBodyMoveToTarget>();
                        if (attacher)
                        {
                            attacher.target = attachProjPt;
                        }

                        mProj.releaseCallback += OnProjRelease;

                        if (attachProjChain)
                        {
                            attachProjChain.SetActive(true);
                        }
                    }
                }
            }
            break;
        }

        base.ActivatorWakeUp();
    }
コード例 #5
0
    protected override void StateChanged()
    {
        base.StateChanged();

        switch ((EntityState)state)
        {
        case EntityState.Stun:
            if (animator)
            {
                animator.Pause();
            }
            break;

        case EntityState.Normal:
            if (attachGO)
            {
                attachGO.SetActive(true);
            }

            if (animator && !animator.isPlaying)
            {
                animator.Play("move");
            }

            if (prevState != (int)EntityState.Stun)
            {
                if (anim)
                {
                    anim.Play(anim.DefaultClip);
                }

                if (!mProj)
                {
                    if (!string.IsNullOrEmpty(attachProjType))
                    {
                        mProj = Projectile.Create(projGroup, attachProjType, attachProjPt.position, Vector3.zero, null);
                        RigidBodyMoveToTarget attacher = mProj.GetComponent <RigidBodyMoveToTarget>();
                        if (attacher)
                        {
                            attacher.target = attachProjPt;
                        }

                        mProj.releaseCallback += OnProjRelease;

                        if (attachProjChain)
                        {
                            attachProjChain.SetActive(true);
                        }
                    }
                }
                else
                {
                    mProj.gameObject.SetActive(true);
                }
            }
            break;

        case EntityState.Dead:
            if (attachGO)
            {
                attachGO.SetActive(false);
            }

            if (mProj)
            {
                mProj.releaseCallback -= OnProjRelease;

                if (mProj.isAlive)
                {
                    RigidBodyMoveToTarget attacher = mProj.GetComponent <RigidBodyMoveToTarget>();
                    if (attacher)
                    {
                        attacher.target = null;
                    }

                    if (mProj.stats)
                    {
                        mProj.stats.curHP = 0;
                    }
                    else
                    {
                        mProj.state = (int)Projectile.State.Dying;
                    }
                }

                mProj = null;

                if (attachProjChain)
                {
                    attachProjChain.SetActive(false);
                }
            }
            break;

        case EntityState.RespawnWait:
            break;
        }
    }
コード例 #6
0
    void ToPhase(Phase phase)
    {
        if (mCurPhase == phase)
        {
            return;
        }

        //prev
        switch (mCurPhase)
        {
        case Phase.Move:
            StopCoroutine(moveFireRoutine);
            CancelInvoke(moveToPlayerFunc);
            CancelInvoke(nextPhaseFunc);

            tank.bodyCtrl.moveSide = 0.0f;
            break;

        case Phase.FireSeeker:
            StopCoroutine(seekerFireRoutine);
            seekerAnimDat.Play("default");
            break;
        }

        switch (phase)
        {
        case Phase.Move:
            if (tank.bodyCtrl.isGrounded)
            {
                if (!IsInvoking(moveToPlayerFunc))
                {
                    InvokeRepeating(moveToPlayerFunc, 0.0f, moveFacePlayerDelay);
                }
            }
            else
            {
                tank.bodyCtrl.moveSide = 0.0f;     //wait till we land
            }

            Invoke(nextPhaseFunc, moveNextPhaseDelay);
            StartCoroutine(moveFireRoutine);
            break;

        case Phase.FireSeeker:
            StartCoroutine(seekerFireRoutine);
            break;

        case Phase.MoveNoTank:
            bodySpriteCtrl.StopOverrideClip();

            RigidBodyMoveToTarget mover = GetComponent <RigidBodyMoveToTarget>();
            mover.enabled = false;

            bodyCtrl.rigidbody.isKinematic = false;
            bodyCtrl.enabled          = true;
            gravityCtrl.enabled       = true;
            bodySpriteCtrl.controller = bodyCtrl;

            bodySpriteCtrl.moveClip     = cryClip;
            bodySpriteCtrl.idleClip     = cryClip;
            bodySpriteCtrl.upClips[0]   = cryClip;
            bodySpriteCtrl.downClips[0] = cryClip;
            bodySpriteCtrl.RefreshClips();

            mCurMovePtInd = 0;
            break;

        case Phase.Dead:
            bodyCtrl.rigidbody.isKinematic = false;
            bodyCtrl.enabled          = true;
            gravityCtrl.enabled       = true;
            bodySpriteCtrl.controller = bodyCtrl;

            bodyCtrl.moveSide = 0.0f;
            Vector3 vel = bodyCtrl.localVelocity;
            vel.x = 0;
            bodyCtrl.localVelocity = vel;

            bodySpriteCtrl.StopOverrideClip();
            break;
        }

        mCurPhase = phase;
    }
コード例 #7
0
 int MoverCompare(RigidBodyMoveToTarget x, RigidBodyMoveToTarget y)
 {
     return(x.name.CompareTo(y.name));
 }