// on récupère les commandes void Update() { if (Input.GetMouseButtonDown(0)) { nextTile = GetMouseOveredTile(); if (nextTile == null) { return; } if (nextTile.type == Tile.Type.Porte) { openDoor = true; return; } Vector3 deplacement = nextTile.transform.position - PositionActuelle.ToVector3(); if (deplacement.magnitude > 2 * Constantes.INNER_RADIUS + 1e-3) { nextTile = null; } nextPulse = false; } if (Input.GetKeyDown(KeyCode.Space)) { nextPulse = true; } // Recenter camera Camera.main.transform.position = Vector3.Lerp(transform.position + new Vector3(2, 4, 1), Camera.main.transform.position, 0.99f); }
public override void Move() { Coord source; float intensity; // si l'avatar est visible if (GameManager.Instance.avatar.VisibilityFrom(PositionActuelle, out source, out intensity)) { // on oublie la dernière source vue bestIntensity = intensity; bestSource = source; } // sinon, on regarde s'il y a de la lumière else { foreach (Firefly luciole in GameManager.Instance.fireflies) { // si l'intensité est supérieure, on change d'objectif if (luciole.VisibilityFrom(PositionActuelle, out source, out intensity) && intensity > bestIntensity) { bestSource = source; bestIntensity = intensity; } } } if (bestIntensity > 0 && bestSource != PositionActuelle) { // direction dans laquelle le monstre se déplace Vector2 vecteurPosition = PositionActuelle.ToVector2(); Vector2 direction = bestSource.ToVector2() - vecteurPosition; direction.Normalize(); Coord newPosition = new Coord(vecteurPosition + 2 * Constantes.INNER_RADIUS * direction); Tile tile = GameManager.Instance.tiles [newPosition.x, newPosition.y]; if (tile.CurrentState == Tile.State.None && tile.nextState == Tile.State.None) { GameManager.Instance.tiles [PositionActuelle.x, PositionActuelle.y].nextState = Tile.State.None; PositionActuelle = newPosition; tile.nextState = Tile.State.Monster; } } // déclin de l'intensité dans la mémoire du monstre intensity -= Constantes.INTENSITY_DECAY / 2; if (bestIntensity < 0) { bestIntensity = 0f; } }