public Spell(SpellName name, SpellAreaType areaType, int spellRange, int manaCost, int damage, bool[] spellRune) { this.name = name; this.areaType = areaType; this.spellRune = spellRune; this.manaCost = manaCost; this.damage = damage; this.spellRange = spellRange; }
// V V V Makes a list of tiles of AOE public List <Tile> AreaType(SpellAreaType mySpellAreaType) { int[][] dirList = new int[4][] { new int[] { 0, 1 }, new int[] { 0, -1 }, new int[] { 1, 0 }, new int[] { -1, 0 } }; List <Tile> targetTiles = new List <Tile>(); if (mouseController.selected == null) { return(targetTiles); } switch (mySpellAreaType) { //type linessa spellrange min ei saa olla 0 case SpellAreaType.Line: if (playerBehaviour.currentCharacter.currentTile.z < mouseController.selected.locZ) { LineTargets(0, dirList, out targetTiles); } else if (playerBehaviour.currentCharacter.currentTile.z > mouseController.selected.locZ) { LineTargets(1, dirList, out targetTiles); } else if (playerBehaviour.currentCharacter.currentTile.x > mouseController.selected.locX) { LineTargets(3, dirList, out targetTiles); } else { LineTargets(2, dirList, out targetTiles); } break; case SpellAreaType.Cross: targetTiles.Add(mouseController.selected); for (int i = 1; i <= spellButtons.currentSpell.areaOfEffect; i++) { foreach (var c in dirList) { targetTiles.Add(gridController.GetTile(mouseController.selected.locX + c[0] * i, mouseController.selected.locZ + c[1] * i)); } } break; case SpellAreaType.Diagonal: targetTiles.Add(mouseController.selected); for (int i = 1; i <= spellButtons.currentSpell.areaOfEffect; i++) { targetTiles.Add(gridController.GetTile(mouseController.selected.locX + i, mouseController.selected.locZ + i)); targetTiles.Add(gridController.GetTile(mouseController.selected.locX + i, mouseController.selected.locZ - i)); targetTiles.Add(gridController.GetTile(mouseController.selected.locX - i, mouseController.selected.locZ + i)); targetTiles.Add(gridController.GetTile(mouseController.selected.locX - i, mouseController.selected.locZ - i)); } break; case SpellAreaType.Normal: for (int i = 0 - spellButtons.currentSpell.areaOfEffect; i <= spellButtons.currentSpell.areaOfEffect; i++) { for (int j = 0 - spellButtons.currentSpell.areaOfEffect; j <= spellButtons.currentSpell.areaOfEffect; j++) { if (Mathf.Abs(i) + Mathf.Abs(j) <= spellButtons.currentSpell.areaOfEffect) { targetTiles.Add(gridController.GetTile(mouseController.selected.locX + j, mouseController.selected.locZ + i)); } } } break; // spellrange ei saa olla 0 case SpellAreaType.Cone: if (playerBehaviour.currentCharacter.currentTile.z < mouseController.selected.locZ) { ConeTargets(0, dirList, out targetTiles); } else if (playerBehaviour.currentCharacter.currentTile.z > mouseController.selected.locZ) { ConeTargets(1, dirList, out targetTiles); } else if (playerBehaviour.currentCharacter.currentTile.x > mouseController.selected.locX) { ConeTargets(3, dirList, out targetTiles); } else { ConeTargets(2, dirList, out targetTiles); } break; case SpellAreaType.Square: for (int i = 0 - spellButtons.currentSpell.areaOfEffect; i <= spellButtons.currentSpell.areaOfEffect; i++) { for (int j = 0 - spellButtons.currentSpell.areaOfEffect; j <= spellButtons.currentSpell.areaOfEffect; j++) { targetTiles.Add(gridController.GetTile(mouseController.selected.locX + j, mouseController.selected.locZ + i)); } } break; } List <Tile> returnables = new List <Tile>(); foreach (var tile in targetTiles) { if (tile != null) { if (tile.myType == Tile.BlockType.BaseBlock) { returnables.Add(tile); } } } return(returnables); }
//Enable Spell Overlay Method public void setSpellOverlay(SpellAreaType areaType, int size, Vector2 center) { //Check if Inside Bounds (Bounds X-Axis fixed by Camera) if (center.y > -5f && center.y < 4f && center.x > -8.5f && center.x < 8.5f) { //Get Cell Number int horizontalCell = ((int)(center.x + 9f)); int verticalCell = ((int)(center.y + 5f)); //Setup Center center = new Vector2(horizontalCell, verticalCell); //Check Spell Center if (center == currentSpellCenter) { return; } else { currentSpellCenter = center; } //Reset Spell Overlay resetSpellOverlay(); //Check Area Type if (areaType == SpellAreaType.Circle || areaType == SpellAreaType.Cross) { //Make Center GameObject obj = this.transform.GetChild((verticalCell * width) + horizontalCell).gameObject; obj.SetActive(true); activeOverlays.AddLast(obj); //Make Cross for (int i = 1; i < size; i++) { //UP if (insideArea(verticalCell + i, horizontalCell)) { obj = this.transform.GetChild(((verticalCell + i) * width) + horizontalCell).gameObject; obj.SetActive(true); activeOverlays.AddLast(obj); } //DOWN if (insideArea(verticalCell - i, horizontalCell)) { obj = this.transform.GetChild(((verticalCell - i) * width) + horizontalCell).gameObject; obj.SetActive(true); activeOverlays.AddLast(obj); } //LEFT if (insideArea(verticalCell, horizontalCell - i)) { obj = this.transform.GetChild((verticalCell * width) + horizontalCell - i).gameObject; obj.SetActive(true); activeOverlays.AddLast(obj); } //RIGHT if (insideArea(verticalCell, horizontalCell + i)) { obj = this.transform.GetChild((verticalCell * width) + horizontalCell + i).gameObject; obj.SetActive(true); activeOverlays.AddLast(obj); } } //Make Rest of Circle if Area is Circle if (areaType == SpellAreaType.Circle) { for (int i = 1; i < size - 1; i++) { if (insideArea(verticalCell + i, horizontalCell + i)) { obj = this.transform.GetChild(((verticalCell + i) * width) + horizontalCell + i).gameObject; obj.SetActive(true); activeOverlays.AddLast(obj); } if (insideArea(verticalCell - i, horizontalCell - i)) { obj = this.transform.GetChild(((verticalCell - i) * width) + horizontalCell - i).gameObject; obj.SetActive(true); activeOverlays.AddLast(obj); } if (insideArea(verticalCell + i, horizontalCell - i)) { obj = this.transform.GetChild(((verticalCell + i) * width) + horizontalCell - i).gameObject; obj.SetActive(true); activeOverlays.AddLast(obj); } if (insideArea(verticalCell - i, horizontalCell + i)) { obj = this.transform.GetChild(((verticalCell - i) * width) + horizontalCell + i).gameObject; obj.SetActive(true); activeOverlays.AddLast(obj); } } } } } }