示例#1
0
    // Use this for initialization
    void Start()
    {
        hero = HeroStone.getInstance();

        lineRenderer = GetComponent <LineRenderer>();

        ground            = new Plane(Vector3.up, Vector3.zero);
        corners           = new Vector3[4];
        vectorfieldOffset = new Vector2(0, 0);
        screenCorners     = new Vector3[] {
            new Vector3(0, 0, 0),
            new Vector3(Camera.main.pixelWidth, 0, 0),
            new Vector3(0, Camera.main.pixelHeight, 0),
            new Vector3(Camera.main.pixelWidth, Camera.main.pixelHeight, 0)
        };



        RaycastCameraFrustum();

        vectorfieldOrigin = new Vector2(Mathf.Floor(cornerBounds.min.x - grow), Mathf.Floor(cornerBounds.min.z - grow));
        Vector2 vectorfieldMax = new Vector2(Mathf.Ceil(cornerBounds.max.x + grow), Mathf.Ceil(cornerBounds.max.z + grow));


        // create array with the correct amount of indizes
        vfX         = (int)(vectorfieldMax.x - vectorfieldOrigin.x);
        vfY         = (int)(vectorfieldMax.y - vectorfieldOrigin.y);
        vectorfield = new VectorfieldFraction[vfX, vfY];
        resetVectorfield();
    }
示例#2
0
 void Awake()
 {
     if (instance == null)
     {
         instance = this;
     }
 }
示例#3
0
 public void startGame()
 {
     gameIsRunning = true;
     VectorField.instance.clearParticles();
     VectorField.instance.addParticle(HeroStone.getInstance().GetComponent <Rigidbody>());
     currentScoreCanvas.gameObject.SetActive(true);
     startGameCanvas.gameObject.SetActive(false);
     AudioManager.instance.setIngame();
     CameraMovement.instance.StartAutoMove();
 }
示例#4
0
    // Update is called once per frame
    void Update()
    {
        if (gameIsRunning)
        {
            currentScoreHandler.setImages(Mathf.RoundToInt(distanceTreveld));

            if (HeroStone.getInstance().transform.position.x < Camera.main.transform.position.x - WorldManager.getInstance().visibleDistance)
            {
                endGame();
            }
        }
    }
示例#5
0
    public void endGame()
    {
        gameIsRunning = false;
        gameEndCanvas.gameObject.SetActive(true);
        currentScoreCanvas.gameObject.SetActive(false);
        HeroStone.getInstance().enabled = false;
        CameraMovement.instance.StopAutoMove();

        AudioManager.instance.setMenue();

        int score = Mathf.RoundToInt(distanceTreveld);

        highscore[0] = PlayerPrefs.GetInt("1", 0);
        highscore[1] = PlayerPrefs.GetInt("2", 0);
        highscore[2] = PlayerPrefs.GetInt("3", 0);

        if (score > highscore[0])
        {
            highscore[2] = highscore[1];
            highscore[1] = highscore[0];
            highscore[0] = score;
        }

        else if (score > highscore[1])
        {
            highscore[2] = highscore[1];
            highscore[1] = score;
        }

        else if (score > highscore[2])
        {
            highscore[2] = score;
        }

        finalScoreHandler.setImages(score);

        for (int i = 0; i < 3; i++)
        {
            print(highscore[i]);
            highScoreHandler[i].setImages(highscore[i]);
        }

        PlayerPrefs.SetInt("1", highscore[0]);
        PlayerPrefs.SetInt("2", highscore[1]);
        PlayerPrefs.SetInt("3", highscore[2]);
    }
示例#6
0
    // Update is called once per frame
    void FixedUpdate()
    {
        if (HeroStone.getInstance() != null)
        {
            Vector3 heroPos = HeroStone.getInstance().transform.position;

            float xSpeed = HeroStone.getInstance().GetComponent <Rigidbody>().velocity.x *0.2f;

            float x = Mathf.Max(Mathf.Lerp(heroPos.x + xSpeed, transform.position.x, 0.95f), transform.position.x + currentXSpeed);
            float z = Mathf.Clamp(Mathf.Lerp(heroPos.z, transform.position.z, 0.95f), -maxZ, maxZ);
            float y = transform.position.y;


            transform.position = new Vector3(x, y, z);
        }

        if (isAutoMoving)
        {
            currentXSpeed += deltaXSpeed * Time.fixedDeltaTime;
        }
    }
示例#7
0
    // Update is called once per frame
    void Update()
    {
        hero = HeroStone.getInstance();

        RaycastCameraFrustum();

        Vector2 newOrigin = new Vector2(Mathf.Floor(cornerBounds.min.x - grow), Mathf.Floor(cornerBounds.min.z - grow));

        // if the origin has moved the array needs to be moved as well
        // this is done by discarding entries that are not needed anymore

        if (newOrigin.x > vectorfieldOrigin.x + vectorfieldOffset.x)
        {
            // raise Offset
            vectorfieldOffset.Set(vectorfieldOffset.x + 1, vectorfieldOffset.y);

            // clear fields
            for (int i = 0; i < vfY; i++)
            {
                vectorfield[(int)(vfX + ((vectorfieldOffset.x - 1) % vfX)) % vfX, i] = new VectorfieldFraction();
            }
        }

        if (newOrigin.x < vectorfieldOrigin.x + vectorfieldOffset.x)
        {
            // reduce Offset
            vectorfieldOffset.Set(vectorfieldOffset.x - 1, vectorfieldOffset.y);

            // clear fields
            for (int i = 0; i < vectorfield.GetLength(1); i++)
            {
                vectorfield[(int)(vfX + ((vectorfieldOffset.x - 1) % vfX)) % vfX, i] = new VectorfieldFraction();
            }
        }

        if (newOrigin.y > vectorfieldOrigin.y + vectorfieldOffset.y)
        {
            // raise Offset
            vectorfieldOffset.Set(vectorfieldOffset.x, vectorfieldOffset.y + 1);

            // clear fields
            for (int i = 0; i < vfX; i++)
            {
                vectorfield[i, (int)(vfY + ((vectorfieldOffset.y - 1) % vfY)) % vfY] = new VectorfieldFraction();
            }
        }

        if (newOrigin.y < vectorfieldOrigin.y + vectorfieldOffset.y)
        {
            // raise Origin
            vectorfieldOffset.Set(vectorfieldOffset.x, vectorfieldOffset.y - 1);

            // clear fields
            for (int i = 0; i < vfX; i++)
            {
                vectorfield[i, (int)(vfY + ((vectorfieldOffset.y - 1) % vfY)) % vfY] = new VectorfieldFraction();
            }
        }

        // force propagation
        // buffer
        for (int i = 0; i < vfX; i++)
        {
            for (int j = 0; j < vfY; j++)
            {
                vectorfield[i, j].velBuffer = vectorfield[i, j].vel;
            }
        }
        for (int i = 0; i < vfX; i++)
        {
            for (int j = 0; j < vfY; j++)
            {
                // diffuse
                vectorfield[i, j].vel = Diffuse(i, j);
            }
        }


        // add force to particles
        foreach (Rigidbody particle in particles)
        {
            particle.AddForce(forceFactor * getForce(particle.GetComponent <Transform>().position));
            if (particle.gameObject != hero)
            {
                Vector3 forceVector = (hero.transform.position - particle.transform.position);

                if (forceVector.magnitude < heroAttractionDist)
                {
                    particle.GetComponent <Rigidbody>().AddForce(
                        forceVector.normalized *
                        heroAttractionForce
                        );
                    particle.GetComponent <Rigidbody>().AddForce(
                        -forceVector.normalized *
                        (heroAttractionForce * 2f * (Mathf.Lerp(1, 0, forceVector.magnitude / heroAttractionDist)))
                        );
                }
            }
        }
    }