Beispiel #1
0
    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);
                        }
                    }
                }
            }
        }
    }
Beispiel #2
0
    // 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);
                    }
                }
            }
        }
    }