예제 #1
0
    /* methods */

    public void initialize()
    {
        if (level == null)
        {
            level = GameObject.Find("LevelController").GetComponent <LevelControllerScript> ();
        }
        if (player == null)
        {
            player = GameObject.Find("Player");
        }
        whirlDifficulty    = 1.0f;
        elapsedTime        = 0.0f;
        targetAngle        = angle = (floatRandomRange(0.0f, 360.0f) / 360.0f) * 2.0f * 3.1416f;
        timeToWhirl        = floatRandomRange(minTimeToWhirl / whirlDifficulty, maxTimeToWhirl / whirlDifficulty);
        timeToChasePlayer  = floatRandomRange(minTimeToChasePlayer, maxTimeToChasePlayer);
        timeToVeer         = floatRandomRange(minTimeToChasePlayer, maxTimeToChasePlayer);
        frozen             = false;
        targetLinearSpeed  = linearSpeed = maxLinearSpeed;
        rigidBody          = this.GetComponent <Rigidbody> ();
        elapsedChasingTime = 0.0f;
        elapsedVeeringTime = 0.0f;
        rosetta            = GameObject.Find("Rosetta").GetComponent <Rosetta> ();
        mcRef = GameObject.Find("MasterController").GetComponent <MasterControllerScript> ();
        ds    = mcRef.getStorage();

        string lvl = level.locationName.Substring(0, 6);
        string key = lvl + "SpawnedShadows";

        ds.storeIntValue(key, 0);

        int waveNumber = ds.retrieveIntValue(lvl + "ShadowWaveNumber");

        if (waveNumber > shadowSpawnController.waveType.Length)
        {
            Destroy(this.gameObject);
        }

        state = InterconNetworkState.busy;
        if (freezer == null)
        {
            freezer = GameObject.Find("Freezer").GetComponent <Freezer> ();
        }
    }
예제 #2
0
    void Update()
    {
        if (freezer.frozen)
        {
            return;
        }

        if (!frozen)
        {
            elapsedTime += Time.deltaTime;
        }

        /* busy: spawning whilwinds */
        if (state == InterconNetworkState.busy)
        {         // pursuing player
            elapsedVeeringTime += Time.deltaTime;
            if (elapsedVeeringTime > timeToVeer)
            {
                elapsedVeeringTime = 0.0f;
                //int r = Random.Range (0, 100);

                Vector3 pPos  = player.transform.position;
                Vector3 tPos  = this.transform.position;
                Vector3 delta = pPos - tPos;
                delta.Normalize();
                targetAngle = Mathf.Acos(delta.x);
                if (delta.z < 0.0)
                {
                    targetAngle = (2.0f * 3.1416f) - targetAngle;
                }

                linearSpeed = floatRandomRange(minLinearSpeed, maxLinearSpeed);

                Debug.Log("<color=orange>Target Angle updated: " + targetAngle + "</color>");
            }

            if (elapsedTime > timeToWhirl)
            {
                elapsedTime = 0.0f;
                GameObject newWhirl = (GameObject)Instantiate(whirlwindPrefab, this.transform.position, Quaternion.Euler(0, 0, 0));
                newWhirl.name = "Whirlwind";
                newWhirl.GetComponent <Whirlwind> ().thoughtTextPrefab = thoughtTextPrefab;
                newWhirl.GetComponent <Whirlwind> ().parent            = this;
                newWhirl.GetComponent <Whirlwind> ().shadowPrefab      = shadowPrefab;
                newWhirl.GetComponent <Whirlwind> ().rosetta           = rosetta;
                newWhirl.GetComponent <Whirlwind> ().FamilyIcon        = FamilyIcon;
                newWhirl.GetComponent <Whirlwind> ().CoupleIcon        = CoupleIcon;
                newWhirl.GetComponent <Whirlwind> ().FriendsIcon       = FriendsIcon;
                //newWhirl.GetComponent<Whirlpool> ().Start ();
                newWhirl.GetComponent <Whirlwind> ().WorkIcon = WorkIcon;
                int wave = shadowSpawnController.getWaveIndex();

                newWhirl.GetComponent <Whirlwind> ().shadowStringBanks     = HeroShadows[wave];
                newWhirl.GetComponent <Whirlwind> ().redEyesStringBanks    = HeroRedeyes[wave];
                newWhirl.GetComponent <Whirlwind> ().shadowSpawnController = shadowSpawnController;
                newWhirl.GetComponent <Whirlwind> ().placesStringBank      = places;
                newWhirl.GetComponent <Whirlwind> ().datesStringBank       = dates;

                timeToWhirl = floatRandomRange(minTimeToWhirl / whirlDifficulty, maxTimeToWhirl / whirlDifficulty);
            }

            if (level == null)
            {
                level = GameObject.Find("LevelController").GetComponent <LevelControllerScript> ();
            }
            string lvl      = level.locationName.Substring(0, 6);
            int    nShadows = level.retrieveIntValue(lvl + "SpawnedShadows");

            if (nShadows >= ShadowSpawnController.maxShadows)
            {
                state = InterconNetworkState.driftingAway;
            }
        }

        if (state == InterconNetworkState.driftingAway)
        {         // pursuing player
            if (!deletedWhirlwinds)
            {
                if (GameObject.Find("Whirlwind") != null)
                {
                    Destroy(GameObject.Find("Whirlwind"));
                }
                else
                {
                    deletedWhirlwinds = true;
                }
            }

            elapsedVeeringTime += Time.deltaTime;
            if (elapsedVeeringTime > timeToVeer)
            {
                elapsedVeeringTime = 0.0f;

                //int r = Random.Range (0, 100);

                Vector3 pPos  = player.transform.position;
                Vector3 tPos  = this.transform.position;
                Vector3 delta = -(pPos - tPos);                 // flee from player
                delta.Normalize();
                targetAngle = Mathf.Acos(delta.x);
                if (delta.z < 0.0)
                {
                    targetAngle = (2.0f * 3.1416f) - targetAngle;
                }

                linearSpeed = floatRandomRange(minLinearSpeed, maxLinearSpeed);
            }
        }

        if (state == InterconNetworkState.relaxed)
        {         // just float by...
            elapsedVeeringTime += Time.deltaTime;
            if (elapsedVeeringTime > timeToVeer)
            {
                elapsedVeeringTime = 0.0f;

                //int r = Random.Range (0, 6.28f);
                float newAngle = FloatRandom.floatRandomRange(0, 6.28f);

                targetAngle = newAngle;

                linearSpeed = floatRandomRange(minLinearSpeed, maxLinearSpeed);
            }
        }

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

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