Exemple #1
0
    // 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);
    }
Exemple #2
0
    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;
        }
    }