public void CastSpell(SpellValues spell, CharacterValues caster, Tile currentMouseTile) { playerBehaviour.aControll.PlayAttack(caster); playerBehaviour.aControll.PlaySpell(spell); Tile casterTile = gridController.GetTile(caster.currentTile.x, caster.currentTile.z); Tile targetTile = currentMouseTile; //Tile temp1 = gridController.GetTile(caster.currentTile.x,caster.currentTile.z); //Tile temp2 = gridController.GetTile(target.currentTile.x,target.currentTile.z); List <Tile> targetsList = abilities.AreaType(currentSpell.mySpellAreaType); int leach = 0; foreach (var item in targetsList) { PlayerInfo checker = item.CharCurrentlyOnTile; CharacterValues target = null; if (checker) { target = checker.thisCharacter; } if (target) { int damageStuff = 0; int healingIsFun = 0; if (spell.healsAlly == true) { if (target.team == caster.team) { healingIsFun = TrueHealCalculator(spell.spellHealMax, spell.spellHealMin, target.healsReceived); } else { damageStuff = TrueDamageCalculator(spell.spellDamageMax, spell.spellDamageMin, caster.damageChange, target.armorChange, caster.damagePlus, target.armorPlus); } } else if (spell.hurtsAlly == false) { if (target.team != caster.team) { damageStuff = TrueDamageCalculator(spell.spellDamageMax, spell.spellDamageMin, caster.damageChange, target.armorChange, caster.damagePlus, target.armorPlus); } } else { damageStuff = TrueDamageCalculator(spell.spellDamageMax, spell.spellDamageMin, caster.damageChange, target.armorChange, caster.damagePlus, target.armorPlus); } leach = leach + damageStuff; GetHit(target, damageStuff); GetHealed(target, healingIsFun); if (spell.effect && spell.effectOnTarget == true && target != caster) { sEffects.ApplyEffect(caster, spell.effect, target); playerBehaviour.UpdateTabs(); } if (spell.effect && spell.effectOnCaster == true && target == caster) { sEffects.ApplyEffect(caster, spell.effect, target); playerBehaviour.UpdateTabs(); } } } if (spell.damageStealsHp == true) { StealHp(caster, leach); } if (spell.spellPull != 0) { //abilities.SpellPull(spell.mySpellPullType); } if (spell.spellPushback != 0) { //abilities.SpellPush(spell.mySpellPushType); } if (spell.moveCloserToTarget != 0) { //abilities.WalkTowardsTarget(); } if (spell.moveAwayFromTarget != 0) { //abilities.MoveAwayFromTarget(); } if (spell.teleportToTarget == true) { abilities.CasterTeleport(casterTile); } if (spell.chagePlaceWithTarget == true) { abilities.TeleportSwitch(casterTile, targetTile); } HandleCoolDownIncrease(spell); UpdateHpApMp(); }
void Update() { //Mouse/ray setup Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if (Physics.Raycast(ray, out hitInfo)) { hitObject = hitInfo.transform.gameObject; if (hitObject.CompareTag("Tile")) { //if (selected) // selected.GetComponent<Renderer>().material = selected.BaseMaterial; selected = hitObject.gameObject.GetComponent <Tile>(); if (selected.myType == Tile.BlockType.BaseBlock && selected != previousTile) { // Debug.Log("Tämä on baseblock"); if (previousTile) { Renderer pr = previousTile.GetComponent <Renderer>(); pr.material = previousTile.GetComponent <Tile>().BaseMaterial; previousTile = null; if (targetedTiles != null) { ResetTileMaterials(targetedTiles); targetedTiles = null; ChangeTileMaterials(rangeTiles, rangeMaterial); ChangeTileMaterials(nullTiles, rangeNullMaterial); } } previousTile = selected; Renderer sr = selected.GetComponent <Renderer>(); sr.material = hovermaterial; } } //Jos hovertile on jotain muuta, resettaa hovertilet if (!hitObject.CompareTag("Tile") || (hitObject.CompareTag("Tile") && selected.myType != Tile.BlockType.BaseBlock)) { if (previousTile) { Renderer pr = previousTile.GetComponent <Renderer>(); pr.material = previousTile.GetComponent <Tile>().BaseMaterial; previousTile = null; if (targetedTiles != null) { ResetTileMaterials(targetedTiles); targetedTiles = null; ChangeTileMaterials(rangeTiles, rangeMaterial); ChangeTileMaterials(nullTiles, rangeNullMaterial); } } } } if (hitInfo.transform == null) { selected = null; } // kun spell nappulaa on painettu if (spellCast.spellOpen == true) { if (currentMovement) { ResetTileMaterials(tilesToBeReset); tilesToBeReset.Clear(); rangeTilesPainted = false; } //pitäisi maalata target range if (rangeTiles == null) { if (spellCast.currentSpell.needLineOfSight == true) { nullTiles = abilities.RangeType(spellCast.currentSpell.mySpellRangeType, true); foreach (var tile in nullTiles) { Renderer aR = tile.GetComponent <Renderer>(); aR.material = rangeNullMaterial; } rangeTiles = abilities.RangeType(spellCast.currentSpell.mySpellRangeType, false); foreach (var tile in rangeTiles) { Renderer aR = tile.GetComponent <Renderer>(); aR.material = rangeMaterial; } } else { rangeTiles = abilities.RangeType(spellCast.currentSpell.mySpellRangeType, false); foreach (var tile in rangeTiles) { Renderer aR = tile.GetComponent <Renderer>(); aR.material = rangeMaterial; } } } //pitäisi maalata AOE tilet targetedTiles = abilities.AreaType(spellCast.currentSpell.mySpellAreaType); foreach (var tile in rangeTiles) { if (tile == selected) { ChangeTileMaterials(targetedTiles, targetMaterial); } } // kun spell castataan if (Input.GetMouseButtonDown(0) && !stillMoving && spellCast.currentSpell != null) { if (abilities.CheckCastability(spellCast.currentSpell, selected) == true) { if (targetedTiles != null) { spellCast.CastSpell(spellCast.currentSpell, playerBehaviour.currentCharacter, selected); foreach (var tile in rangeTiles) { Renderer tr = tile.GetComponent <Renderer>(); tr.material = tile.GetComponent <Tile>().BaseMaterial; } rangeTiles = null; foreach (var target in targetedTiles) { Renderer ar = target.GetComponent <Renderer>(); ar.material = target.GetComponent <Tile>().BaseMaterial; } targetedTiles = null; spellCast.Aftermath(); } else { spellCast.SpellCancel(); } } else { Debug.Log("cannot be cast"); spellCast.SpellCancel(); } } // spell cansellataan if (Input.GetMouseButtonDown(1)) { //if (rangeTiles != null) //{ // ResetTileMaterials(rangeTiles); // rangeTiles = null; //} //if (targetedTiles != null) //{ // ResetTileMaterials(targetedTiles); // targetedTiles = null; //} spellCast.SpellCancel(); } movementEnabled = false; } else { movementEnabled = true; } if (movementEnabled) { if (!currentMovement) { Debug.Log("Movement still not set!"); } if (!rangeTilesPainted || selected == null) { ResetTileMaterials(tilesToBeReset); tilesToBeReset.Clear(); movementRangeTiles = currentMovement.TilesInRange(); ChangeTileMaterials(movementRangeTiles, movementMaterial); tilesToBeReset.AddRange(movementRangeTiles); rangeTilesPainted = true; } ChangeTileMaterials(movementRangeTiles, movementMaterial); //otherwise hovering over resets the tiles if (movementRangeTiles.Contains(selected)) { //Hae reitti ja maalaa se PlayerMovement.PathTile tempTest = currentMovement.pathTiles.Where(x => x._tile == selected).FirstOrDefault(); if (tempTest != null) { tilesInPath = PlayerMovement.CalculateRouteBack(tempTest); ChangeTileMaterials(tilesInPath, pathMaterial); Renderer sr = selected.GetComponent <Renderer>(); sr.material = pathSelectedMaterial; huijaus = tempTest; } else { huijaus = null; } } if (Input.GetMouseButtonDown(0) && !stillMoving && selected != currentMovement.CurrentTile && movementRangeTiles.Contains(selected)) { if (currentMovement.MoveToTile(selected, PlayerMovement.MovementMethod.Walk, huijaus)) { if (!currentMovement.unlimitedMovementPoints) { currentMovement.playerInfo.thisCharacter.currentMp -= (tilesInPath.Count() - 2); } } ResetTileMaterials(tilesToBeReset); tilesToBeReset.Clear(); rangeTilesPainted = false; spellCast.UpdateHpApMp(); } } }