Esempio n. 1
0
    public void summon(Vector3 initialPosition, Vector3 intermediatePosition, Vector3 finalPosition, Vector3 mirrorPosition, float summonD)
    {
        summonInitialPosition      = initialPosition;
        summonIntermediatePosition = intermediatePosition;
        summonFinalPosition        = finalPosition;
        summonFinalPosition2       = finalPosition + new Vector3(0, 0, 1.6f);
        summonMirrorPosition       = mirrorPosition + new Vector3(0, 3, 0);   // ad-hoc correction: a tad higher
        summonDelay = summonD;

        this.transform.position = initialPosition;
        rigidBody.useGravity    = true;
        rigidBody.isKinematic   = false;

        autopilotOrigin      = initialPosition;
        autopilotDestination = intermediatePosition;
        autopilot            = true;

        state    = ShadowState.summoned;
        state2   = ShadowStateSlot2.disabled;
        substate = 0;

        this.isWaitingForActionToComplete = true;
        waitingRef = this;

        linearSpeed = linearSpeed * 1.5f;
    }
Esempio n. 2
0
 public void enterMirror()
 {
     y = this.transform.position.y;
     //navAgent.enabled = false;
     rigidBody.detectCollisions = false;
     rigidBody.useGravity       = false;
     state       = ShadowState.enteringMirror;
     lerp        = 0.0f;
     state2      = ShadowStateSlot2.blinking;
     startPos.y  = y;
     mirrorPos.y = y;
 }
Esempio n. 3
0
    public void mirrorConverge(Vector3 startPos, Vector3 stopPos, Vector3 mirrorPos)
    {
        state  = ShadowState.seeking;
        state2 = ShadowStateSlot2.disabled;
        //navAgent.speed = linearSpeed * 75.0f;
        float distToMirror = (mirrorPos - this.transform.position).magnitude;

        if (distToMirror > ShadowSpawnController.offScreenRadius)
        {
            //navAgent.Warp (startPos);
        }
        //navAgent.destination = stopPos;
        //navAgent.updateRotation = false;
        this.mirrorPos = mirrorPos;
        this.startPos  = stopPos;
    }
Esempio n. 4
0
    public void initialize()
    {
        frame             = 0;
        linearSpeed       = maxLinearSpeed;
        elapsedTime       = 0.0f;
        state             = ShadowState.spawning1;
        state2            = ShadowStateSlot2.cannotShoot;
        timeToStateChange = floatRandomRange(minTimeToStateChange, maxTimeToStateChange);
        targetAngle       = angle = (floatRandomRange(0.0f, 360.0f) / 360.0f) * 2.0f * 3.1416f;
        rigidBody         = this.GetComponent <Rigidbody> ();
        spriteRend        = SpriteQuad.GetComponent <SpriteRenderer> ();
        SpriteMat         = spriteRend.material;

        /*SpriteMat.SetFloat("_Mode", 2);
        *  SpriteMat.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
        *  SpriteMat.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
        *  SpriteMat.SetInt("_ZWrite", 1);
        *  SpriteMat.EnableKeyword("_ALPHATEST_ON");
        *  SpriteMat.DisableKeyword("_ALPHABLEND_ON");
        *  SpriteMat.DisableKeyword("_ALPHAPREMULTIPLY_ON");
        *  //SpriteMat.renderQueue = 2450;*/
        directionFromAngle(angle);
        spriteRend.sprite   = images [0];
        stateElapsedTime    = 0.0f;
        canShootRedEyesTime = 0.0f;
        burstElapsedTime    = 0.0f;
        timeToBurst         = floatRandomRange(minBurstDuration, maxBurstDuration);
        initialized         = true;
        blink = false;
        rigidBody.velocity         = new Vector3(0, 0, 0);
        rigidBody.detectCollisions = false;
        rigidBody.isKinematic      = true;
        if (freezer == null)
        {
            freezer = GameObject.Find("Freezer").GetComponent <Freezer> ();
        }
        //navAgent = this.GetComponent<NavMeshAgent> ();
        this.frozen = false;

        rigidBody.useGravity = true;
        moving = true;
    }
Esempio n. 5
0
    new void Update()
    {
        if (freezer.frozen)
        {
            return;
        }

        if (state == ShadowState.seeking)
        {
        }

        if (state == ShadowState.entered)
        {
        }

        if (state == ShadowState.enteringMirror)
        {
            lerp += lerpSpeed * Time.deltaTime;
            if (lerp > 1.0f)
            {
                SpriteMat.color = new Color(1, 1, 1, 0);
                state           = ShadowState.entered;
                state2          = ShadowStateSlot2.disabled;
            }
        }

        if (state2 == ShadowStateSlot2.disabled)
        {
        }

        if (state2 == ShadowStateSlot2.blinking)
        {
            blink = !blink;
            if (blink)
            {
                SpriteMat.color = new Color(1, 1, 1, 0);
            }
            else
            {
                SpriteMat.color = new Color(1, 1, 1, 1);
            }
        }

        if (state2 == ShadowStateSlot2.cannotShoot)
        {
            canShootRedEyesTime += Time.deltaTime;
            if (canShootRedEyesTime > doNotShootRedEyesTime)
            {
                state2 = ShadowStateSlot2.idling;
            }
        }

        if (state2 == ShadowStateSlot2.idling)
        {
            burstElapsedTime += Time.deltaTime;

            if (burstElapsedTime > timeToBurst)
            {
                burstElapsedTime   = 0.0f;
                eyeShotElapsedTime = 0.0f;
                timeToEyeShot      = floatRandomRange(minEyeShotInterval, maxEyeShotInterval);
                timeToBurst        = floatRandomRange(minBurstDuration, maxBurstDuration);
                state2             = ShadowStateSlot2.bursting;
            }
        }

        if (state2 == ShadowStateSlot2.bursting)
        {
            eyeShotElapsedTime += Time.deltaTime;
            burstElapsedTime   += Time.deltaTime;
            if (eyeShotElapsedTime > timeToEyeShot)
            {
                eyeShotElapsedTime = 0.0f;
                timeToEyeShot      = floatRandomRange(minEyeShotInterval, maxEyeShotInterval);
                GameObject newEyes = (GameObject)Instantiate(eyesPrefab, this.transform.position + new Vector3(0, 2.0f, 0), Quaternion.Euler(0, 0, 0));
                newEyes.GetComponent <Redeyes> ().thoughtTextPrefab = thoughtTextPrefab;
                IconCooldown coolDown = GameObject.Find("StarCooldown").GetComponent <IconCooldown> ();
                newEyes.GetComponent <Redeyes> ().eyeDispelController = coolDown;
                GameObject p = GameObject.Find("Player");
                newEyes.GetComponent <Redeyes> ().player = p;
                Letter letter = GameObject.Find("Letter").GetComponent <Letter> ();
                newEyes.GetComponent <Redeyes> ().letter = letter;
                newEyes.GetComponent <Redeyes> ().initialize();
                redEyesStringBank.rosetta = rosetta;
                newEyes.GetComponent <Redeyes> ().stringBank = redEyesStringBank;
                newEyes.GetComponent <Redeyes> ().rosetta    = rosetta;
            }

            if (burstElapsedTime > timeToBurst)
            {
                burstElapsedTime = 0.0f;
                timeToBurst      = floatRandomRange(minTimeToBurst, maxTimeToBurst);
                state2           = ShadowStateSlot2.idling;
            }
        }

        if (state == ShadowState.spawning1)
        {
            stateElapsedTime += Time.deltaTime;
            Vector3 newPos = this.transform.position;
            newPos.x += Time.deltaTime * spawnDirection * 2.0f;
            this.transform.position = newPos;
            if (stateElapsedTime > 1.0f)
            {
                state = ShadowState.spawning2;
                rigidBody.detectCollisions = true;
                rigidBody.isKinematic      = false;
            }
        }

        if (state == ShadowState.spawning2)
        {
            stateElapsedTime += Time.deltaTime;
            if (stateElapsedTime > 2.0f)
            {
                state = ShadowState.spawning3;
                rigidBody.velocity = new Vector3(0, 0, 0);
            }
            rigidBody.velocity = new Vector3(1.0f, 0.0f, 0.0f);
        }

        if (state == ShadowState.spawning3)
        {
            stateElapsedTime += Time.deltaTime;
            if (stateElapsedTime > 2.0f)
            {
                state           = ShadowState.idle;
                SpriteMat.color = new Vector4(1, 1, 1, 1);
            }
        }

        if (state == ShadowState.spawning1 ||
            state == ShadowState.spawning2 ||
            state == ShadowState.spawning3)
        {
            elapsedTime += Time.deltaTime;
            if (elapsedTime > (1.0f / blinkSpeed))
            {
                elapsedTime = 0.0f;
                blink       = !blink;
                if (blink)
                {
                    SpriteMat.color = new Vector4(1, 1, 1, 0);
                }
                else
                {
                    SpriteMat.color = new Vector4(1, 1, 1, 1);
                }
            }

            return;
        }

        elapsedTime     += Time.deltaTime;
        animElapsedTime += Time.deltaTime;

        if (elapsedTime > timeToStateChange)
        {
            timeToStateChange = floatRandomRange(minTimeToStateChange, maxTimeToStateChange);
            targetAngle       = (floatRandomRange(0.0f, 360.0f) / 360.0f) * 2.0f * 3.1416f;
            elapsedTime       = 0.0f;
        }

        if (angle < targetAngle)
        {
            angle += angleSpeed * Time.deltaTime;
            if (angle > targetAngle)
            {
                angle = targetAngle;
            }
        }

        if (angle > targetAngle)
        {
            angle -= angleSpeed * Time.deltaTime;
            if (angle < targetAngle)
            {
                angle = targetAngle;
            }
        }

        if (state == ShadowState.walking)
        {
        }

        if (state == ShadowState.summoned)
        {
            if (substate == 0)               // waiting for shadow to reach Intermediate position

            {
                if (!isWaitingForActionToComplete)
                {
                    autopilotOrigin      = summonIntermediatePosition;
                    autopilotDestination = summonFinalPosition;
                    autopilot            = true;
                    substate             = 1;
                    elapsedTime          = 0.0f;
                    this.isWaitingForActionToComplete = true;
                    waitingRef = this;
                }
            }

            if (substate == 1)               // waiting for shadow to reach final position 2

            {
                if (!isWaitingForActionToComplete)
                {
                    autopilotOrigin      = summonFinalPosition;
                    autopilotDestination = summonFinalPosition2;
                    autopilot            = true;
                    substate             = 2;
                    elapsedTime          = 0.0f;
                    this.isWaitingForActionToComplete = true;
                    waitingRef = this;
                }
            }

            if (substate == 2)               // waiting for shadow to reach mirror

            {
                if (!isWaitingForActionToComplete)
                {
                    moving       = false;
                    elapsedTime += Time.deltaTime;
                    if (elapsedTime > (1.0f + summonDelay))
                    {
                        rigidBody.isKinematic = true;
                        rigidBody.useGravity  = false;
                        lerp = 0.0f;
                        summonFinalPosition2 = this.transform.position;
                        substate             = 3;
                    }
                }
            }

            if (substate == 3)
            {
                lerp += Time.deltaTime;
                if (lerp > 1.0f)
                {
                    lerp     = 1.0f;
                    substate = 4;
                }
                if (blink)
                {
                    spriteRend.enabled = false;
                }
                else
                {
                    spriteRend.enabled = true;
                }
                blink = !blink;
                Vector3 pos = Vector3.Lerp(summonFinalPosition2, summonMirrorPosition, lerp);
                this.transform.position   = pos;
                this.transform.localScale = new Vector3(1.0f - lerp, 1.0f - lerp, 1.0f - lerp);
            }
        }

        if (moving)
        {
            directionFromAngle(angle);
            spriteRend.sprite = images [frame % images.Length];
            if (animElapsedTime > (1.0f / animationSpeed))
            {
                animElapsedTime = 0.0f;
                frame           = (frame + 1) % images.Length;
            }
        }
        else
        {
            spriteRend.sprite = images [0];
        }
    }