예제 #1
0
        public ContextMenuTemplate GetSpawnMonsterMenu(BoardTile tile)
        {
            ContextMenuTemplate template = new ContextMenuTemplate();

            template.textures = ButtonTextures.FromList(contextMenuTextures.blankTileTextures);
            template.font     = contextMenuTextures.baseFont;

            template.tags = new List <List <string> >()
            {
                new List <string>()
                {
                    "SpawnMonster", SRDLibrary.Monsters.Commoner.ToString()
                },
                new List <string>()
                {
                    "SpawnMonster", SRDLibrary.Monsters.Goblin.ToString()
                },
                new List <string>()
                {
                    "SpawnMonster", SRDLibrary.Monsters.Cultist.ToString()
                },
                new List <string>()
                {
                    "SpawnMonster", SRDLibrary.Monsters.CultFanatic.ToString()
                }
            };
            template.texts = new List <string>()
            {
                "Commoner", "Goblin", "Cultist", "Cult Fanatic"
            };


            return(template);
        }
예제 #2
0
        public List <BoardTile> GetTilesInRange(BoardTile originSquare, int range, bool includeOrigin = false)
        {
            List <BoardTile> tileList = new List <BoardTile>();

            //int offset; //The offset for diagonals in distance calculations for square
            if (boardShape == BoardShape.Square)
            {
                int rangeInTiles = (int)(range / tileGameSize);
                for (int x = -rangeInTiles; x <= rangeInTiles; x++)
                {
                    for (int y = -rangeInTiles; y <= rangeInTiles; y++)
                    {
                        Vector2 coords = new Vector2(originSquare.coords.X + x, originSquare.coords.Y + y);
                        if (TileExists(coords))
                        {
                            if (includeOrigin || Tile(coords) != originSquare)
                            {
                                tileList.Add(Tile(coords));
                            }
                        }
                    }
                }
            }

            return(tileList);
        }
예제 #3
0
 public void SetInitialTile(BoardTile tile)
 {
     SetToTile(tile);
     encounter = tile.board.encounter;
     encounter.creatures.Add(this);
     SortTexture();
 }
예제 #4
0
 public Creature(BoardTile tile, Texture2D texture = null) : base(new Vector2(0, 0), texture ?? baseCommonTexture, tile)
 {
     Initializing();
     baseStats = new BaseStats(this);
     SetInitialTile(tile);
     RecalibrateStats();
 }
예제 #5
0
 public void SetToTile(BoardTile tile)
 {
     transform.localPosition = new Vector2(0, 0);
     boardTile     = tile;
     tile.creature = this;
     SetParent(tile, true, true);
 }
예제 #6
0
        public IEnumerator MoveOrder(BoardTile boardTile)
        {
            List <Creature> creaturesNearNewLocation = new List <Creature>();

            foreach (BoardTile tile in encounter.board.GetTilesInRange(boardTile, 5))
            {
                if (tile.creature != null)
                {
                    creaturesNearNewLocation.Add(tile.creature);
                }
            }

            foreach (BoardTile tile in encounter.board.GetTilesInRange(boardTile, 5))
            {
                if (tile.creature != null && !creaturesNearNewLocation.Contains(tile.creature))
                {
                    if (!tile.creature.reactionTaken)
                    {
                        OpportunityAttackOption optionDisplay = new OpportunityAttackOption(this, tile.creature);

                        while (!optionDisplay.finished)
                        {
                            yield return(null);
                        }
                        if (optionDisplay.cancelled)
                        {
                            yield break;
                        }
                    }
                }
            }
            MoveTo(boardTile);
        }
예제 #7
0
        public CreatureContextMenu MakeCommandMenu(BoardTile tile, Creature creature)
        {
            ContextMenuTemplate menu        = GetCommandMenu(creature, tile);
            CreatureContextMenu commandMenu = new CreatureContextMenu(tile, creature ?? default(Creature), menu);

            contextMenu = commandMenu;
            return(commandMenu);
        }
예제 #8
0
 public void MakeContextMenu(BoardTile tile)
 {
     board.mouseHoverActive = false;
     if (contextMenu != null)
     {
         contextMenu.DestroyAndChildren();
     }
     contextMenu = new EncounterControlsContextMenu(tile, GetContextMenuBlankTile(tile), GetContextMenuEncounterControls());
 }
예제 #9
0
 public void ClearHoveredTile()
 {
     if (hoveredBoardTile == null)
     {
         return;
     }
     hoverOverlayTile.DestroyAndChildren();
     hoverOverlayTile = null;
     hoveredBoardTile = null;
 }
예제 #10
0
        public BoardTile FindTilePixel(Vector2 pixelCoords)
        {
            BoardTile reference         = boardTiles[0, 0];
            Vector2   tilePixelSize     = reference.transform.Size;
            Vector2   positionReference = reference.transform.GlobalPosition - reference.transform.Size / 2;
            Vector2   relativePosition  = pixelCoords - positionReference;

            Vector2 coords = new Vector2((int)(relativePosition.X / tilePixelSize.X), (int)(relativePosition.Y / tilePixelSize.Y));

            return(TileIfExists(coords));
        }
예제 #11
0
 public void SetHoveredTile(BoardTile tile)
 {
     hoveredBoardTile = tile;
     if (hoverOverlayTile != null)
     {
         hoverOverlayTile.DestroyAndChildren();
     }
     hoverOverlayTile = new GameObject(new Vector2(0, 0), textureSet.tileHoverTexture, tile);
     hoverOverlayTile.transform.layerDepth = -0.001f;
     hoverOverlayTile.transform.Size       = hoveredBoardTile.transform.Size;
 }
예제 #12
0
        public OrderControl(Board board, BoardTile originSquare, int range, Color color, List <TileOrderCriteria> criteria = null, string description = "")
        {
            SetDefaults();
            board.encounter.orderControl = this;
            encounter        = board.encounter;
            this.color       = color;
            this.description = description;

            validTiles = new List <BoardTile>(board.GetTilesInRange(originSquare, range));
            SetCriteria(criteria);
            SetHovers();
        }
예제 #13
0
        public List <BoardTile> GetCone(BoardTile origin, BoardTile destination, int length, int width, bool includeOrigin = false, int error = 4)
        {
            Vector2 originPosition      = origin.transform.GlobalPosition;
            Vector2 destinationPosition = destination.transform.GlobalPosition;
            Vector2 differencePixels    = destinationPosition - originPosition;
            Vector2 directionPixels     = Vector2.Normalize(differencePixels);

            Vector2 perpendicularDirectionPixels = new Vector2(directionPixels.Y, -directionPixels.X);

            int   tilePixelSize = (int)origin.transform.Size.X;
            float sizePerPixel  = tileGameSize / origin.transform.Size.X;

            List <BoardTile> tiles = new List <BoardTile>();

            tiles.Add(origin);
            BoardTile lastTile        = origin;
            Vector2   currentPosition = originPosition;

            int   widthInPixels     = (int)(width / sizePerPixel);
            float rateOfWidthGrowth = (widthInPixels) / (length / sizePerPixel);

            for (int i = (int)(Math.Abs(differencePixels.Length())); i > 0; i -= error)
            {
                if (i * sizePerPixel > length)
                {
                    i = (int)(length / sizePerPixel);
                }
                currentPosition = originPosition + (i * directionPixels);

                Vector2   currentWidthPosition = currentPosition;
                BoardTile tile;

                int widthAti = (int)(i * rateOfWidthGrowth);
                for (int j = -widthAti / 2; j <= widthAti / 2; j += error)
                {
                    currentWidthPosition = currentPosition + (j * perpendicularDirectionPixels);
                    tile = FindTilePixel(currentWidthPosition);

                    if (tile != null && tile != lastTile && !tiles.Contains(tile))
                    {
                        tiles.Add(tile);
                        lastTile = tile;
                    }
                }
            }

            if (!includeOrigin)
            {
                tiles.Remove(origin);
            }

            return(tiles);
        }
예제 #14
0
        public virtual void SimpleSphereOnSelfTarget(BoardTile origin = null, bool includeOrigin = false)
        {
            List <BoardTile> tiles = new List <BoardTile>();

            foreach (BoardTile tile in caster.encounter.board.GetTilesInRange(caster.boardTile, maxRange, includeOrigin))
            {
                if (tile.creature != null)
                {
                    tiles.Add(tile);
                }
            }
            AreaTargeted(tiles);
        }
 public void SetSelection(BoardTile tile, List <BoardTile> boardtiles)
 {
     foreach (BoardTile oldHovered in selection)
     {
         oldHovered.RemoveHoverColor();
     }
     selected  = tile;
     selection = new List <BoardTile>(boardtiles);
     foreach (BoardTile hovered in selection)
     {
         hovered.SetHoverColor(color);
     }
 }
 public DirectionalAreaOrder(BoardTile origin, int length, int width, Style style, Color?color = null, Spell spell = null, bool includeOrigin = false)
 {
     Debug.WriteLine("Directional Order Started");
     board                       = origin.board;
     this.origin                 = origin;
     this.length                 = length;
     this.width                  = width;
     this.style                  = style;
     this.color                  = color ?? Color.Goldenrod;
     this.spell                  = spell;
     this.includeOrigin          = includeOrigin;
     board.OnTileSelectionEvent += new Board.BoardDelegate(Selected);
     selection                   = new List <BoardTile>();
 }
예제 #17
0
        public List <BoardTile> GetCircle(BoardTile origin, BoardTile destination, int length, int width)
        {
            Vector2 originCoords      = origin.coords;
            Vector2 destinationCoords = destination.coords;
            Vector2 difference        = destinationCoords - originCoords;

            if (Math.Abs(difference.Length()) > (length / tileGameSize))
            {
                difference        = Vector2.Normalize(difference) * length / tileGameSize;
                destinationCoords = new Vector2((int)(originCoords.X + difference.X), (int)(originCoords.Y + difference.Y));
            }

            return(GetTilesInRange(Tile(destinationCoords), width, true));
        }
예제 #18
0
        public OrderControl(Encounter encounter, List <BoardTile> validTiles, Color color, string description = "", List <TileOrderCriteria> criteria = null)
        {
            SetDefaults();
            encounter.orderControl = this;
            this.encounter         = encounter;
            list             = false;
            this.validTiles  = new List <BoardTile>(validTiles);
            this.color       = color;
            this.description = description;
            this.selection   = null;

            SetCriteria(criteria);

            SetHovers();
        }
예제 #19
0
        public ContextMenuTemplate GetContextMenuBlankTile(BoardTile tile)
        {
            ContextMenuTemplate template = new ContextMenuTemplate();

            template.textures = ButtonTextures.FromList(contextMenuTextures.blankTileTextures);
            template.font     = contextMenuTextures.baseFont;

            template.texts = new List <string>()
            {
                "Spawn Monster",
                "Spawn Quick Character",
                "Spawn Character",
                "Destroy Encounter"
            };
            template.tags = new List <List <string> >()
            {
                new List <string>()
                {
                    ContextMenu.DefaultTags.ParentMenu.ToString()
                },
                new List <string>()
                {
                    ContextMenu.DefaultTags.ParentMenu.ToString()
                },
                new List <string>()
                {
                    EncounterControls.SpawnCharacter.ToString()
                },
                new List <string>()
                {
                    EncounterControls.DestroyEncounter.ToString()
                }
            };

            template.childMenus = new List <ContextMenuTemplate>()
            {
                GetSpawnMonsterMenu(tile), GetSpawnQuickCharacterSpeciesMenu()
            };

            return(template);
        }
        public void GetSelection(BoardTile tile)
        {
            if (selected != null && selected == tile)
            {
                return;
            }
            switch (style)
            {
            case (Style.Circle):
                SetSelection(tile, board.GetCircle(origin, tile, length, width));
                break;

            case (Style.Cone):
                SetSelection(tile, board.GetCone(origin, tile, length, width, includeOrigin));
                break;

            case (Style.Line):
                SetSelection(tile, board.GetLine(origin, tile, length, width, includeOrigin));
                break;
            }
        }
예제 #21
0
        protected IEnumerator SetOrderControl(Board board, BoardTile originSquare, int range, Color color, List <TileOrderCriteria> criteria = null, string description = "")
        {
            orderControl = new OrderControl(board, originSquare, range, color, criteria, description);
            while (!orderControl.cancelled)
            {
                if (orderControl.cancelled)
                {
                    break;
                }

                if (orderControl.selection == null)
                {
                    yield return(null);
                }
                else
                {
                    orderControl.Cancel();
                    SelectionMade();
                    break;
                }
            }
        }
예제 #22
0
        public PlayerCharacter(List <string> quickCharacterChoices, BoardTile tile) : base(tile)
        {
            classes = new Dictionary <PlayerClass, int>()
            {
                { DnDManager.classes[quickCharacterChoices[(int)QuickCharacterChoices.Class]], int.Parse(quickCharacterChoices[(int)QuickCharacterChoices.Level]) }
            };
            primaryClass = DnDManager.classes[quickCharacterChoices[(int)QuickCharacterChoices.Class]];
            subclasses   = new List <SubClass>()
            {
                DnDManager.subClasses[quickCharacterChoices[(int)QuickCharacterChoices.SubClass]]
            };
            species = DnDManager.species[quickCharacterChoices[(int)QuickCharacterChoices.Species]];
            if (quickCharacterChoices[(int)QuickCharacterChoices.SubSpecies] != null)
            {
                subSpecies = DnDManager.subSpecies[quickCharacterChoices[(int)QuickCharacterChoices.SubSpecies]];
            }
            else
            {
                subSpecies = null;
            }
            level = int.Parse(quickCharacterChoices[(int)QuickCharacterChoices.Level]);

            if (subSpecies != null)
            {
                name = string.Format("Lvl " + quickCharacterChoices[(int)QuickCharacterChoices.Level] + " " + quickCharacterChoices[(int)QuickCharacterChoices.SubSpecies] + " " + quickCharacterChoices[(int)QuickCharacterChoices.SubClass]);
            }
            else
            {
                name = string.Format("Lvl " + quickCharacterChoices[(int)QuickCharacterChoices.Level] + " " + quickCharacterChoices[(int)QuickCharacterChoices.Species] + " " + quickCharacterChoices[(int)QuickCharacterChoices.SubClass]);
            }

            RollStats(true);
            MakePlayerCharacter();
            baseStats.RollHP(true);
            ResetHP();
            RecalibrateStats();
        }
예제 #23
0
 public BoardTile MakeBoardTileSquare(int xIndex, int yIndex, int xPosition, int yPosition, int squareSize)
 {
     boardTiles[xIndex, yIndex]        = new BoardTile(BoardShape.Square, new Vector2(xPosition, yPosition), textureSet.tileTexture, squareSize, this);
     boardTiles[xIndex, yIndex].coords = new Vector2(xIndex, yIndex);
     return(boardTiles[xIndex, yIndex]);
 }
예제 #24
0
 public void SetDefaults()
 {
     selection     = null;
     selectionList = new List <BoardTile>();
     cancelled     = false;
 }
예제 #25
0
 public int GetDistance(BoardTile origin, BoardTile destination)
 {
     return(((int)Math.Max(Math.Abs(destination.coords.X - origin.coords.X), Math.Abs(destination.coords.Y - origin.coords.Y))) * tileGameSize);
 }
예제 #26
0
 public void TileSelected(BoardTile tile)
 {
     OnTileSelectionEvent?.Invoke(tile, null);
 }
예제 #27
0
 public void Select(BoardTile tile)
 {
     selection = tile;
 }
 public void Selected(BoardTile tile, Board.BoardEventArgs e)
 {
     GetSelection(tile);
     SelectionMade();
 }
예제 #29
0
 public virtual void SimpleSphereTarget(BoardTile origin = null)
 {
     new DirectionalAreaOrder(origin ?? caster.boardTile, maxRange, width, TargetTypeToStyle(targetType), null, this);
 }
 public EncounterControlsContextMenu(BoardTile tile, ContextMenuTemplate template1, ContextMenuTemplate template2) : base(template1, template2, new Vector2(0, 0), tile)
 {
     this.tile           = tile;
     destroyOnOtherClick = true;
 }