void GatherActionList() { ActionSelector.actions.Clear(); if (mCurrentHoveredTile != null) { EnvironmentTile tile = mCurrentHoveredTile.transform.GetComponent <EnvironmentTile>(); foreach (Material m in tile.GetComponent <MeshRenderer>().materials) { m.SetColor("_Tint", new Color(0.8f, 0.8f, 0.8f)); } if (tile != null) { Entity[] entitiesOnTile = Environment.instance.GetEntitiesAt(tile.PositionTile); foreach (Entity e in entitiesOnTile) { AttachTileActionsToSelector(e.GetComponents <TileAction>(), tile); } AttachTileActionsToSelector(tile.GetComponents <TileAction>(), tile); Item item = mCharacter.GetHandItem(); if (item != null) { foreach (var action in item.GetComponents <TileAction>()) { action.environmentTile = tile; if (action.Valid(mCharacter)) { // We must instantiate a instance of the current action. // The reason for this is a edge case when you have a item action that has reference to a tile, // then you select the option multiple times. Only the last one will be recognized and the // tile highlighting will go crazy as it is pointing to unknown tiles TileAction actionInstance = TileAction.Instantiate(action); actionInstance.environmentTile = tile; ActionSelector.actions.Add(actionInstance); } } } } } }
// Defines a click on the UI and runs the appropriate action function public void Select(Vector2Int start, Vector2Int end) { TileAction action = null; if (actions.Count > 0 && !selectorCanvas.enabled) { action = actions[0]; } else if (mSelection >= actions.Count || mSelection < 0) { return; } else { action = actions[mSelection]; } Environment enviroment = Environment.instance; int xMin = 0; int xMax = 0; int yMin = 0; int yMax = 0; if (start.x > end.x) { xMin = end.x; xMax = start.x; } else { xMin = start.x; xMax = end.x; } if (start.y > end.y) { yMin = end.y; yMax = start.y; } else { yMin = start.y; yMax = end.y; } for (int y = yMax; y >= yMin; y--) { for (int x = xMin; x <= xMax; x++) { EnvironmentTile tile = enviroment.GetTile(x, y); bool found = false; if (mCharacter.GetHandItem() != null) { foreach (TileAction areaItemAction in mCharacter.GetHandItem().GetComponents <TileAction>()) { areaItemAction.environmentTile = tile; if (areaItemAction.GetType() == action.GetType() && areaItemAction.Valid(mCharacter)) { TileAction actionInstance = TileAction.Instantiate(action); actionInstance.environmentTile = tile; mCharacter.AddActionToQue(actionInstance); found = true; continue; } } if (found) { continue; } } foreach (TileAction areaTileAction in tile.GetComponents <TileAction>()) { areaTileAction.environmentTile = tile; if (areaTileAction.GetType() == action.GetType() && areaTileAction.Valid(mCharacter)) { mCharacter.AddActionToQue(areaTileAction); } } } } }