/// <summary> /// Cast a spell via an Attack /// </summary> /// <param name="a"></param> /// <param name="caster"></param> public void CastSpell(CombatHUDAttack.Attack a, GameObject caster, float angle) { foreach (GameObject c in allSpellPrefabs) { if (c.GetComponent <SpellRecords>().spell.ID == a.selectedSpell.ID) { GameObject s = Instantiate(c); switch (a.fireMode) { case CombatHUDAttack.FireMode.FREE: s.GetComponent <SpellRecords>().SetSpell(a.selectedSpell, caster.transform.position, a.attackDirection, caster); break; case CombatHUDAttack.FireMode.POINT: s.GetComponent <SpellRecords>().SetSpell(a.selectedSpell, caster.transform.position, (a.attackPointModePoint - caster.transform.position), caster); break; case CombatHUDAttack.FireMode.TARGET: float currentAngle = Vector3.Angle(Vector2.right, CombatManager.ins.combatHUDAttack.memory[a.attackTarget] - caster.transform.position); if (caster.transform.position.y > CombatManager.ins.combatHUDAttack.memory[a.attackTarget].y) { currentAngle = 360 - currentAngle; } currentAngle += angle; if (currentAngle > 360) { currentAngle -= 360; } else if (currentAngle < 0) { currentAngle += 360; } float distance = Vector3.Distance(caster.transform.position, CombatManager.ins.combatHUDAttack.memory[a.attackTarget]); Vector3 newVec = new Vector3(caster.transform.position.x + distance * Mathf.Cos(currentAngle * Mathf.Deg2Rad), caster.transform.position.y + distance * Mathf.Sin(currentAngle * Mathf.Deg2Rad)); s.GetComponent <SpellRecords>().SetSpell(a.selectedSpell, caster.transform.position, newVec - caster.transform.position, caster); break; default: s.GetComponent <SpellRecords>().SetSpell(a.selectedSpell, caster.transform.position, a.attackDirection, caster); break; } AddActiveSpell(s); return; } } }
/// <summary> /// Cancels spell /// </summary> /// <param name="a"></param> public void CancelSpell(CombatHUDAttack.Attack a) { //Check if spell trying to cancel is being casted if (spellCastCoroutine != null && a.isCasting) { StopCoroutine(spellCastCoroutine); spellCastCoroutine = null; } //remove from UI if (gameObject == GameManagerScript.ins.player) { CombatManager.ins.combatHUDAttack.RemoveAttackFromLayout(a); } //remove from spellQueue if (spellQueue.Count > 0) { spellQueue.Remove(a); } }
void ImportPlayerCombatData(PlayerCombatData playerCD) { //Import Movement Data combatHUDLog.RemoveAllMovement(); foreach (PlayerCombatMovementData playerCMD in playerCD.pcmd) { List <Vector3> des = new List <Vector3>(); foreach (PlayerCombatMovementDestination vec in playerCMD.destination) { des.Add(new Vector3(vec.posX, vec.posY, 0)); } combatHUDLog.LogMovePosition(des, playerCMD.hash); } if (combatHUDLog.loggedMoves.Count == 0) { GameManagerScript.ins.playerInfo.polyNav.Stop(); } //Import Attack Data combatHUDAttack.RemoveAllAttacks(); GameManagerScript.ins.playerInfo.CancelAllSpells(); foreach (PlayerCombatAttackData playerCAD in playerCD.pcad) { CombatHUDAttack.Attack a = new CombatHUDAttack.Attack(); a.selectedSpell = SpellManagerScript.ins.GetSpellFromID(playerCAD.selectedSpellID); a.selfCast = playerCAD.selfCast; a.isCasting = playerCAD.isCasting; a.fireMode = playerCAD.fm; a.attackPoint = new Vector3(playerCAD.attackPointPosX, playerCAD.attackPointPosY, 0); a.attackDirection = new Vector3(playerCAD.attackDirectionX, playerCAD.attackDirectionY, 0); a.attackPointModePoint = new Vector3(playerCAD.attackPointModePosX, playerCAD.attackPointModePosY, 0); a.hash = playerCAD.hash; a.attackTarget = NPCManagerScript.ins.GetNPCInSceneFromID(playerCAD.attackTarget); combatHUDAttack.LoadAttackToLayout(a); } combatHUDAttack.DrawAttackPositions(); combatHUDAttack.SortAttackLayout(); //Import Order Data combatSpeech.RemoveAllOrders(); foreach (PlayerCombatOrderData playerCOD in playerCD.pcod) { combatSpeech.ImportOrderData(playerCOD.npcID, playerCOD.o, new Vector3(playerCOD.standAreaPosX, playerCOD.standAreaPosY, 0), new Vector3(playerCOD.watchAreaPosX, playerCOD.watchAreaPosY, 0)); } //Import Progress Data combatHUDAttack.memory.Clear(); GameManagerScript.ins.playerInfo.progress = playerCD.pcqd.spellProgress; GameManagerScript.ins.playerInfo.wasLoaded = true; if (GameManagerScript.ins.playerInfo.spellQueue.Count > 0) { GameManagerScript.ins.playerInfo.spellQueue[0].loggedInfo.GetComponentInChildren <Image>().fillAmount = playerCD.pcqd.spellProgress / (GameManagerScript.ins.playerInfo.spellQueue[0].selectedSpell.castTime * 100); } combatSpeech.progress = playerCD.pcqd.orderProgress; combatSpeech.wasLoaded = true; foreach (MemoryData md in playerCD.pcqd.memoryData) { combatHUDAttack.memory.Add(NPCManagerScript.ins.GetNPCInSceneFromID(md.npcID), new Vector3(md.posX, md.posY)); } }