Bento-Quirino / DJD2D3D

GNU General Public License v3.0
2 stars 0 forks source link

Movimento do inimigos #7

Closed mrplcardoso closed 1 month ago

mrplcardoso commented 1 month ago

Os inimigos não deslocam sua posição. A ilusão de movimento deve ser feita manipulando o tamanho dos objetos. Garantir que a ancoragem da Sprite está no centro do objeto.

mrplcardoso commented 1 month ago

10/10

Carrtz commented 1 month ago

using System.Collections; using System.Collections.Generic; using UnityEngine;

public class EnemyMovement : MonoBehaviour { private float Speed = 5f; private Vector3 inicialPosition; private float startTime;

public float distance => Vector3.Distance(inicialPosition, transform.localScale);
public readonly float MaxDistance = 8;
public readonly float MaxHeight = 8; 
public readonly float MaxWidth = 8; 

public delegate void DistanceReachedHandler();
public static event DistanceReachedHandler OnDistanceReached;

void Start()
{
    inicialPosition = transform.localScale;
    startTime = Time.time;
}

void Update()
{
    // Aumenta a escala do inimigo
    Vector3 newScale = transform.localScale + new Vector3(1, 1) * Speed * Time.deltaTime;

    if (newScale.y > MaxHeight)
    {
        newScale.y = MaxHeight; 

    }

    // Verifica se a nova scale ultrapassa a largura máxima
    if (newScale.x > MaxWidth)
    {
        newScale.x = MaxWidth; 
    }

    transform.localScale = newScale;

    if (distance >= MaxDistance && Time.time - startTime >= 5f)
    {
        if (OnDistanceReached != null)
        {
            OnDistanceReached();
        }
        // Desabilita o aumento do inimigo na tela apos 5 segundos de atingir a altura máxima (revisar tempo balanceado depois)
        enabled = false;
    }
}

} (codigo ajustado para o PlayerDeath)

mrplcardoso commented 1 month ago

@Carrtz if (newScale.y > MaxHeight) { newScale.y = MaxHeight;

}

// Verifica se a nova scale ultrapassa a largura máxima
if (newScale.x > MaxWidth)
{
    newScale.x = MaxWidth; 
}

isso pode ser feito com Vector2.Clamp()
mrplcardoso commented 1 month ago

@Carrtz if (distance >= MaxDistance && Time.time - startTime >= 5f) { if (OnDistanceReached != null) { OnDistanceReached(); } // Desabilita o aumento do inimigo na tela apos 5 segundos de atingir a altura máxima (revisar tempo balanceado depois) enabled = false; } transforma essa parte em uma Coroutine/IEnumerator