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)); } }
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); } }