// 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(); }
void Awake() { if (instance == null) { instance = this; } }
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(); }
// 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(); } } }
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]); }
// 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; } }
// 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))) ); } } } }