예제 #1
0
    void DrawMoveState(ProjectedGameState projectedState, ProjectedGameState nextState, EntityData lastActiveEntity)
    {
        EntityData activeEntity      = projectedState.activeEntity;
        Vector2Int positionThisState = activeEntity.Position;
        Vector2Int positionLastState = projectedState
                                       .scenarioState
                                       .lastGameState
                                       .GetEntityWhere(e => e.ID == activeEntity.ID)
                                       .Position;
        EntityData activeEntityTwoStatesAgo = projectedState
                                              .scenarioState
                                              .lastGameState
                                              .lastGameState
                                              .GetEntityWhere(e => e.ID == activeEntity.ID);

        bool isEntitysFirstMove = lastActiveEntity == null ||
                                  activeEntity.ID != lastActiveEntity.ID ||
                                  (activeEntity.ID == activeEntityTwoStatesAgo.ID &&
                                   activeEntity.Position == activeEntityTwoStatesAgo.Position);

        bool isFailedBump = projectedState.DoesEntityBump(activeEntity) &&
                            positionLastState == positionThisState;

        if (isEntitysFirstMove && !isFailedBump)
        {
            DrawPath_Beginning(activeEntity, positionLastState, positionThisState);
        }

        if (!projectedState.DoesEntityBump(activeEntity))
        {
            DrawPath(activeEntity, projectedState, nextState);
        }
        else
        {
            projectedState.bumps.ForEach(b => DrawBump(activeEntity, projectedState, nextState, b));
        }
    }
예제 #2
0
    void DrawPath(EntityData activeEntity, ProjectedGameState projectedState, ProjectedGameState nextState)
    {
        bool isEntityAliveNextState = nextState == null || nextState
                                      .scenarioState
                                      .HasEntityWhere(e => e == activeEntity);
        bool isEntitysLastMove = projectedState.action.card.category == CardCategory.Movement &&
                                 (nextState == null ||
                                  nextState.action.card.category != CardCategory.Movement ||
                                  nextState.activeEntity.ID != activeEntity.ID);

        Vector2Int positionLastState = projectedState
                                       .scenarioState
                                       .lastGameState
                                       .GetEntityWhere(e => e.ID == activeEntity.ID)
                                       .Position;
        Vector2Int positionThisState = activeEntity.Position;

        if (isEntitysLastMove)
        {
            DrawPath_Ending(activeEntity, positionLastState, positionThisState);
            return;
        }

        bool isNextMoveFailedBump = nextState.DoesEntityBump(nextState.activeEntity) &&
                                    nextState.activeEntity.Position == activeEntity.Position;

        if (projectedState.action.card.category == CardCategory.Movement &&
            !isEntitysLastMove &&
            !isNextMoveFailedBump &&
            isEntityAliveNextState)
        {
            Vector2Int positionNextState = nextState
                                           .scenarioState
                                           .GetEntityWhere(e => e == activeEntity)
                                           .Position;

            DrawPath_Between(activeEntity, positionLastState, positionThisState, positionNextState);
        }
    }