Cómo hacer cola acciones y animaciones en la Unidad de combate por turnos?

votos
0

Estoy trabajando en una secuencia de combate por turnos en la Unidad de C # y actualmente he turno de trabajo, y las entradas y AI conmutación. Pero yo no puedo averiguar cómo hacer cola para arriba con animaciones ANF cosas, de modo que uno pasa después de otras en ExecuteTurnActions () ;

Así que mi pregunta es, básicamente, ¿Cómo estructuro ExecuteTurnActions () ?

Lo necesito para pasar por todas las entidades y jugar sus animaciones de acuerdo con lo que está pasando, como:

// PlayAnimation is simply Animator.SetTrigger(string)
Entities[0].PlayAnimation(Attack) or Entities[0].PlayAnimation(ReceiveDamage)

Necesito para asegurarse de que cuando uno ataques de entidad, justo cuando el ataque sucede, la otra entidad recibe daños y reproduce su animación en ese momento. Sé que hay eventos de animación, pero no estoy seguro de cómo hacer que fluya de un lado y asegúrese de que cada entidad sabe qué entidad para activar la animación siguiente (cuando son atacados por ejemplo). ¿Alguna sugerencia?

Mi estructura se ve algo como esto en pseudocódigo :

ENTITIES_TO_CREATE = MatchMaker.GetNumberOfPlayersAndEnemies();

void Start() {

    InitializeAllThatsNeeded();
    Entities[] = new Entity[ENTITIES_TO_CREATE];  

    // In a for loop, load up stuff and populate Entities
    Entities[0].Name = MatchMaker.GetName(0);
    Entities[0].Strength = MatchMaker.GetStrength(0); // etc etc etc

}

void Update() {

    bool HaveAllEntitiesSelectedTurnAction = new bool[Entities.Length];

    // Check every frame if all Entities have selected a turn action
    for (int i = 0; i <= Entities.Length - 1; i++) {

            HaveAllEntitiesSelectedTurnAction[i] = Entities[i].isTurnActionSelected;

        }

    // If the Entity that goes first has its action selected, then let the rest select theirs
    if(Entities[EntityHasFirstTurn].TurnActionSelected) {

        //All logic happens here, if Entity happens to be player then the player
        //is allowed input, if enity is NPC then generate hit value etc.

        // isTurnActionSelected set in this part

        // Now if all have selected their action, execute them in order
        if(HaveAllEntitiesSelectedTurnAction.All(x => x) {

            ExecuteTurnActions();

        }

    }   

}
Publicado el 27/11/2018 a las 16:52
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Para priorizar los eventos se recomienda usar una cola de prioridad estructura de datos.

En cuanto a ExecuteTurnActions(), sólo se debe establecer indicadores apropiados de un componente animador (sobre la base de la cola, lo más probable). Es posible que desee a cada entidad tiene su propia cola de eventos que interactúa con su propio animador.

La construcción de una máquina de estados para todas sus animaciones es lo que hay que hacer en primer lugar. El establecimiento de determinados estados permitirá a la Unidad de manejar todas las transiciones. Para obtener más información sobre el Animador y gastos de sus estados se ven aquí .

Respondida el 27/11/2018 a las 17:39
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more