コード例 #1
0
    // Update is called once per frame
    void Update()
    {
        directionTimer += Time.deltaTime;
        spawnDustTimer += Time.deltaTime;
        frameTimer     += Time.deltaTime;
        startTimer     += Time.deltaTime;

        if (frameTimer > 0.1f)
        {
            frameTimer   = 0f;
            currentFrame = !currentFrame;
            if (currentFrame)
            {
                GetComponent <SpriteRenderer>().sprite = frames[0];
            }
            else
            {
                GetComponent <SpriteRenderer>().sprite = frames[1];
            }
        }

        GetComponent <Rigidbody2D>().velocity += direction * Time.deltaTime * 60f * 0.07f;

        float angleBetween = Vector3.SignedAngle(transform.up, GetComponent <Rigidbody2D>().velocity, new Vector3(0f, 0f, 1f));

        transform.RotateAround(transform.position, new Vector3(0f, 0f, 1f), angleBetween * Time.deltaTime * 3f);

        if (directionTimer > directionMaxTimer)
        {
            directionTimer = 0f;
            GetComponent <Rigidbody2D>().velocity = Vector3.zero;
            RandomizeDirection();
        }

        if (spawnDustTimer > spawnDustMaxTimer)
        {
            spawnDustTimer = 0f;
            GameObject go  = Instantiate <GameObject>(dustPrefab);
            GameObject snd = Instantiate <GameObject>(soundPrefab);
            snd.GetComponent <SFXScript>().sfx = shootDustSound;
            if (Random.Range(1f, 100f) < 50f)
            {
                go.transform.position = transform.position + transform.right * 0.1f;
            }
            else
            {
                go.transform.position = transform.position + transform.right * -0.1f;
            }
        }

        if (GetComponent <GemScript>().GetPlanet() == null && startTimer > 0.1f)
        {
            SpawnExplosion();
            ScoreTimerScript sts = FindObjectOfType <ScoreTimerScript>();
            sts.AddScore(15000 / sts.GetScoreScale());
            Destroy(this.gameObject);
        }
        if (GetComponent <GemScript>().GetPlanet() != null)
        {
            startTimer = 0f;
        }
    }
コード例 #2
0
    // Update is called once per frame
    void Update()
    {
        stateTimer += Time.deltaTime;
        frameTimer += Time.deltaTime;
        startTimer += Time.deltaTime;

        if (planet == null)
        {
            planet = FindObjectOfType <PlanetScript>();
        }

        if (planet == null && startTimer > 0.1f)
        {
            SpawnExplosion();
            ScoreTimerScript sts = FindObjectOfType <ScoreTimerScript>();
            sts.AddScore(15000 / sts.GetScoreScale());
            Destroy(this.gameObject);
        }
        if (planet != null)
        {
            startTimer = 0f;
        }

        if (state == 0)
        {
            transform.RotateAround(Vector3.zero, Vector3.forward, -137.5f / 2f * Time.deltaTime);

            if (frameTimer > 0.1f)
            {
                frameTimer   = 0f;
                currentFrame = !currentFrame;
                if (currentFrame)
                {
                    GetComponent <SpriteRenderer>().sprite = frames[0];
                }
                else
                {
                    GetComponent <SpriteRenderer>().sprite = frames[1];
                }
            }

            if (stateTimer > 2f)
            {
                state      = 1;
                stateTimer = 0f;
            }
        }
        if (state == 1)
        {
            if (stateTimer > 0.3f)
            {
                state      = 2;
                stateTimer = 0f;
            }
        }
        if (state == 2)
        {
            Dictionary <int, float>      distances = new Dictionary <int, float>();
            Dictionary <int, GameObject> prefabs   = new Dictionary <int, GameObject>();

            GemScript[] allGems = FindObjectsOfType <GemScript>();

            state      = 3;
            stateTimer = 0f;

            if (allGems.Length <= 0)
            {
                return;
            }

            foreach (GemScript gs in allGems)
            {
                float dist = (transform.position - gs.transform.position).magnitude;
                if (!distances.ContainsKey(gs.shape))
                {
                    distances.Add(gs.shape, dist);
                    prefabs.Add(gs.shape, gs.gameObject);
                    continue;
                }
                if (distances[gs.shape] > dist)
                {
                    distances[gs.shape] = dist;
                    prefabs[gs.shape]   = gs.gameObject;
                }
            }

            int   shapeMin     = -1;
            float shapeMinDist = 0f;

            for (int i = -1; i <= 5; i++)
            {
                if (distances.ContainsKey(i) && distances[i] > shapeMinDist)
                {
                    shapeMin     = i;
                    shapeMinDist = distances[i];
                }
            }

            GameObject go = Instantiate <GameObject>(prefabs[shapeMin]);
            go.transform.position   = transform.position * 0.83f;
            go.transform.localScale = go.transform.localScale * 0.1f;
            GameObject snd = Instantiate <GameObject>(soundPrefab);
            snd.GetComponent <SFXScript>().sfx = shootSound;
        }
        if (state == 3)
        {
            if (stateTimer > 0.2f)
            {
                state      = 0;
                stateTimer = 0f;
            }
        }
    }
コード例 #3
0
    // Update is called once per frame
    void Update()
    {
        PlanetScript planet     = GetComponent <GemScript>().GetPlanet();
        float        maxGemDist = 10f;

        if (planet != null)
        {
            Vector2 towardsPlanet = planet.transform.position - transform.position;
            GetComponent <Rigidbody2D>().velocity = GetComponent <Rigidbody2D>().velocity + towardsPlanet.normalized * Time.deltaTime * GetComponent <Rigidbody2D>().mass;
        }
        if (targetPlanet == null)
        {
            SpawnExplosion();
            ScoreTimerScript sts = FindObjectOfType <ScoreTimerScript>();
            sts.AddScore(15000 / sts.GetScoreScale());
            Destroy(this.gameObject);
        }

        if (state == 0)
        {
            spr.sprite  = frames[0];
            stateTimer += Time.deltaTime;
            if (stateTimer > 0.5f)
            {
                Vector3 addition = transform.up * 250f / 30f + transform.right * -100f / 30f;
                GetComponent <Rigidbody2D>().velocity += new Vector2(addition.x, addition.y);
                if (planet != null)
                {
                    GetComponent <Rigidbody2D>().velocity += GetComponent <Rigidbody2D>().velocity *3f / (transform.position - planet.transform.position).magnitude;
                }
                stateTimer = 0f;
                state      = 1;

                GameObject snd = Instantiate <GameObject>(soundPrefab);
                snd.GetComponent <SFXScript>().sfx = jumpSound;
            }
            if (planet != null)
            {
                float angleBetween = Vector3.SignedAngle(transform.up, transform.position - planet.transform.position, new Vector3(0f, 0f, 1f));
                transform.RotateAround(transform.position, new Vector3(0f, 0f, 1f), angleBetween * Time.deltaTime * 6f);
                GetComponent <Rigidbody2D>().velocity /= (transform.position - planet.transform.position).magnitude;
            }

            GemScript[] allGems = FindObjectsOfType <GemScript>();
            float       dist    = maxGemDist;
            for (int i = 0; i < allGems.Length; i++)
            {
                float gemDist = (transform.position - allGems[i].transform.position).magnitude;
                if (allGems[i] != null && allGems[i].shape == 0 && gemDist < dist)
                {
                    dist   = gemDist;
                    redGem = allGems[i];
                }
            }
            if (redGem != null)
            {
                state      = 2;
                stateTimer = 0f;

                GameObject snd = Instantiate <GameObject>(soundPrefab);
                snd.GetComponent <SFXScript>().sfx = angrySound;
            }
        }
        if (state == 1)
        {
            spr.sprite  = frames[3];
            stateTimer += Time.deltaTime;
            if (stateTimer > 1.2f)
            {
                state      = 0;
                stateTimer = 0f;
            }
            if (planet != null)
            {
                float angleBetween = Vector3.SignedAngle(transform.up, transform.position - planet.transform.position, new Vector3(0f, 0f, 1f));
                transform.RotateAround(transform.position, new Vector3(0f, 0f, 1f), angleBetween * Time.deltaTime * 6f);
            }
        }
        if (state == 2)
        {
            float changeTime = 0.5f;
            spr.sprite = frames[2];
            if (stateTimer < changeTime * 2f / 3f)
            {
                spr.sprite = frames[1];
            }
            stateTimer += Time.deltaTime;
            if (redGem == null || (transform.position - redGem.transform.position).magnitude > maxGemDist)
            {
                state      = 0;
                stateTimer = 0f;
                redGem     = null;
            }
            else
            {
                float angleBetween = Vector3.SignedAngle(transform.up, redGem.transform.position - transform.position, new Vector3(0f, 0f, 1f));
                transform.RotateAround(transform.position, new Vector3(0f, 0f, 1f), angleBetween);
                if (stateTimer > changeTime)
                {
                    state      = 3;
                    stateTimer = 0f;
                }
            }
        }
        if (state == 3)
        {
            spr.sprite = frames[4];
            if (redGem == null || (transform.position - redGem.transform.position).magnitude > maxGemDist)
            {
                state      = 0;
                stateTimer = 0f;
                redGem     = null;
            }
            else
            {
                float angleBetween = Vector3.SignedAngle(transform.up, redGem.transform.position - transform.position, new Vector3(0f, 0f, 1f));
                transform.RotateAround(transform.position, new Vector3(0f, 0f, 1f), angleBetween);
                Vector3 addition = transform.up * Time.deltaTime * 20f;
                GetComponent <Rigidbody2D>().velocity += new Vector2(addition.x, addition.y);
            }
        }
    }
コード例 #4
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown("p") && false)
        {
            foreach (PlanetScript ps in phase1Planets)
            {
                if (ps != null && ps.gameObject != null)
                {
                    Destroy(ps.gameObject);
                }
            }
            foreach (PlanetScript ps in phase2Planets)
            {
                if (ps != null && ps.gameObject != null)
                {
                    Destroy(ps.gameObject);
                }
            }
        }

        if (phase == 1)
        {
            bool found = false;
            foreach (PlanetScript ps in phase1Planets)
            {
                if (ps != null && ps.gameObject != null)
                {
                    found = true;
                    break;
                }
            }
            if (!found)
            {
                foreach (RabbitAntigravBehavior rab in antigravRabbits)
                {
                    rab.Explode();
                    ScoreTimerScript sts = FindObjectOfType <ScoreTimerScript>();
                    sts.AddScore(37500 / (sts.GetScoreScale() * 2));
                    phase2Parent.SetActive(true);
                    FindObjectOfType <CannonScript>().ResetPlanets();
                    GemScript[] allGems = FindObjectsOfType <GemScript>();
                    for (int i = 0; i < allGems.Length; i++)
                    {
                        allGems[i].ResetPlanets();
                    }
                }
                phase = 2;
            }
        }
        else if (phase == 2)
        {
            if (phase2Parent.transform.position.y > 0f)
            {
                phase2Parent.transform.position -= Vector3.up * Time.deltaTime * 3f;
            }

            bool found = false;
            foreach (PlanetScript ps in phase2Planets)
            {
                if (ps != null && ps.gameObject != null)
                {
                    found = true;
                    break;
                }
            }
            if (!found)
            {
                phase = 3;
                Destroy(phase2Parent);
                hapiObject.SetActive(true);
                hapiObject.transform.localScale = new Vector3(1f, 1f, 1f) * 0.01f;
                ScoreTimerScript sts = FindObjectOfType <ScoreTimerScript>();
                sts.AddScore(37500 / (sts.GetScoreScale() * 2));
                FindObjectOfType <CannonScript>().ResetPlanets();
                GemScript[] allGems = FindObjectsOfType <GemScript>();
                for (int i = 0; i < allGems.Length; i++)
                {
                    allGems[i].ResetPlanets();
                }
            }
        }
        else if (phase == 3)
        {
            if (hapiObject == null)
            {
                ScoreTimerScript sts = FindObjectOfType <ScoreTimerScript>();
                sts.StopTimer();
                sts.AddScore(37500 / sts.GetScoreScale());
                phase = 4;
            }
            else
            {
                dyingHapi.transform.position = hapiObject.transform.position;
                dyingHapi.transform.rotation = hapiObject.transform.rotation;
            }
        }
        else
        {
            dyingHapi.SetActive(true);
            timer += Time.deltaTime;
            if (timer > 10f)
            {
                timer = 0f;
                FindObjectOfType <ScoreTimerScript>().SetHighScore();
                if (DataTracker.GetSum() >= 1000000)
                {
                    Instantiate <GameObject>(endingCutsceneB);
                }
                else
                {
                    Instantiate <GameObject>(endingCutsceneA);
                }
                Instantiate <GameObject>(finalCutsceneControl);
                FindObjectOfType <ScoreTimerScript>().NextLevel();
            }
        }
    }
コード例 #5
0
    // Update is called once per frame
    void Update()
    {
        stateTimer     += Time.deltaTime;
        startTimer     += Time.deltaTime;
        directionTimer += Time.deltaTime;

        if (planet == null)
        {
            planet = FindObjectOfType <PlanetScript>();
        }

        if (planet == null && startTimer > 0.1f)
        {
            SpawnExplosion();
            ScoreTimerScript sts = FindObjectOfType <ScoreTimerScript>();
            sts.AddScore(15000 / sts.GetScoreScale());
            Destroy(portalLeft);
            Destroy(this.gameObject);
        }
        if (planet != null)
        {
            startTimer = 0f;
        }

        float angleBetween = Vector3.SignedAngle(transform.up, GetComponent <Rigidbody2D>().velocity, new Vector3(0f, 0f, 1f));

        transform.RotateAround(transform.position, new Vector3(0f, 0f, 1f), angleBetween * Time.deltaTime * 3f);

        float throwSpeed = 5f;

        if (directionTimer > directionMaxTimer)
        {
            RandomizeDirection();
            directionTimer = 0f;
        }

        if (state == 0)
        {
            GetComponent <Rigidbody2D>().velocity  = direction * 4f;
            GetComponent <SpriteRenderer>().sprite = frames[0];
            Debug.Log(portalLeft.transform.localPosition);
            portalLeft.GetComponent <Rigidbody2D>().velocity = Vector2.zero;
            portalLeft.transform.localPosition = portalOffset;
            if (stateTimer > 3f)
            {
                portalLeft.transform.SetParent(null);
                portalLeft.GetComponent <Rigidbody2D>().velocity = new Vector3(transform.up.x, transform.up.y) * -throwSpeed;
                state      = 1;
                stateTimer = 0f;

                GameObject snd = Instantiate <GameObject>(soundPrefab);
                snd.GetComponent <SFXScript>().sfx = shootSound;
            }
        }
        else
        {
            GetComponent <Rigidbody2D>().velocity  = direction * 2f;
            GetComponent <SpriteRenderer>().sprite = frames[1];
            Vector3 tow = (transform.position - portalLeft.transform.position).normalized;
            if (portalLeft.GetComponent <Rigidbody2D>().velocity.magnitude > throwSpeed)
            {
                portalLeft.GetComponent <Rigidbody2D>().velocity = portalLeft.GetComponent <Rigidbody2D>().velocity.normalized *throwSpeed;
            }
            portalLeft.GetComponent <Rigidbody2D>().velocity += new Vector2(tow.x, tow.y) * Time.deltaTime * 60f * 0.15f;
            if (stateTimer > 0.75f && (portalLeft.transform.position - transform.position).magnitude < 0.75f)
            {
                portalLeft.GetComponent <Rigidbody2D>().velocity = Vector2.zero;
                portalLeft.transform.SetParent(transform);
                portalLeft.transform.localPosition = portalOffset;
                state      = 0;
                stateTimer = 0f;

                GameObject snd = Instantiate <GameObject>(soundPrefab);
                snd.GetComponent <SFXScript>().sfx = catchSound;
            }
        }
    }