static ScenarioState RandomizeItemStartingCoordinates(ScenarioState state, List <ItemData> items, Vector2Int exit, int boardWidth) { for (int i = 0; i < items.Count; i++) { ItemData item = items[i]; Vector2Int newPosition = GenerateRandomVector2IntInBounds(boardWidth); while (state.IsTileOccupied(newPosition) || state.DoesPositionContainItem(newPosition) || exit == newPosition) { newPosition = GenerateRandomVector2IntInBounds(boardWidth); } item.Position = newPosition; } return(state); }
/// <summary> /// Only for use in scenario. /// </summary> public static void DealDamage(this EntityData entity, int amount, ScenarioState scenarioState) { int newHealth = entity.CurrentHealth - amount; entity.SetHealth(newHealth); if (entity.CheckThat(IsDead)) { scenarioState.enemies.RemoveAll(e => e == entity); TreasureData itemToSpawn = entity.dropItem as TreasureData; Vector2Int positionToSpawn = entity.Position; if (itemToSpawn != null && !scenarioState.DoesPositionContainItem(positionToSpawn)) { TreasureData itemInstance = UnityEngine.Object.Instantiate(itemToSpawn); itemInstance.Position = positionToSpawn; scenarioState.items.Add(itemInstance); } } }
public static bool DoesPositionContainItemWhere(this ScenarioState state, Vector2Int position, Predicate <ItemData> predicate) { return(state.DoesPositionContainItem(position) && predicate(state.GetItemInPosition(position))); }