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