Esempio n. 1
0
    // 选中目标位置召唤(必有目标,才能释放技能)
    void DoSummonTargetPos(Character actor)
    {
        Debug.Log("DoSummonTarget");
        s_SummonUID++;

        int id    = cfg.args[0];
        int angle = cfg.args[1];
        int count = cfg.args[2];

        float angleStart = actor.transform.rotation.eulerAngles.y;

        List <Character> lstActor;

        if (angle == 360)
        {
            // circle
            lstActor = CharacterManager.Instance.FindActor(actor.transform.position, SkillTarget.SKILL_TARGET_ENEMY, SkillRegion.SKILL_REGION_CIRCLE, ownSkill.Aoe, angle, Vector3.zero);
        }
        else
        {
            lstActor = CharacterManager.Instance.FindActor(actor.transform.position, SkillTarget.SKILL_TARGET_ENEMY, SkillRegion.SKILL_REGION_SECTOR, ownSkill.Aoe, angle, actor.transform.forward);
        }

        lstActor = CharacterManager.Instance.SortActor(actor.transform.position, lstActor);

        int i = 0;

        for (; i < count && i < lstActor.Count; i++)
        {
            Character target = lstActor[i];

            Vector3 dir = target.transform.position - actor.transform.position;
            dir.y = 0.0f;
            dir.Normalize();

            SkillSummonInfo info = new SkillSummonInfo();
            info.id      = id;
            info.skillid = ownSkill.ID;
            info.target  = target;

            actor.AddSummon(s_SummonUID, target.transform.position, Quaternion.identity, info);
        }
    }
Esempio n. 2
0
    private int hitcount = 0;   // 统计攻击次数

    public void SetInfo(int id, Character actor, SkillSummonInfo info)
    {
        ID    = id;
        owner = actor;

        cfg = CfgManager.GetInstance().SkillSummons[info.id];

        skill = actor.GetSkill(info.skillid);

        // skill effects
        int count = cfg.skilleffects.Length;

        if (count > 0)
        {
            skilleffects = new SkillEffect[count];
            for (int i = 0; i < count; i++)
            {
                skilleffects[i] = SkillEffect.CreateSkillEffect(cfg.skilleffects[i], skill);
            }
        }
    }
Esempio n. 3
0
 public void AddSummon(int uid, Vector3 pos, Quaternion rot, SkillSummonInfo info)
 {
     if (CfgManager.GetInstance().SkillSummons.ContainsKey(info.id))
     {
         CfgSkillSummon cfg    = CfgManager.GetInstance().SkillSummons[info.id];
         GameObject     prefab = (GameObject)ResourceManager.Instance.LoadAsset(cfg.prefab);
         GameObject     go     = Instantiate(prefab) as GameObject;
         go.tag = gameObject.tag + "Missile";
         go.transform.localScale = Vector3.one;
         go.transform.rotation   = rot;
         if (cfg.speed > 0)              //移动
         {
             go.transform.position = pos + new Vector3(0, 0.5f, 0) + transform.forward * 0.5f;
         }
         else
         {
             go.transform.position = pos;
         }
         SkillSummon summon = go.AddComponent <SkillSummon>();
         summon.SetInfo(uid, this, info);
     }
 }
Esempio n. 4
0
    void DoSummon(Character actor)
    {
        Debug.Log("DoSummon");
        s_SummonUID++;

        int id    = cfg.args[0];
        int angle = cfg.args[1];
        int count = cfg.args[2];

        float angleStart = actor.transform.rotation.eulerAngles.y;


        SkillSummonInfo info = new SkillSummonInfo();

        info.id      = id;
        info.skillid = ownSkill.ID;

        int angleHalf = angle / 2;

        if (count % 2 == 0)           // 偶数
        // border
        {
            actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart - angleHalf, 0)), info);
            actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart + angleHalf, 0)), info);

            int left = count - 2;
            if (left > 0)
            {
                int anglePer = angleHalf / (left + 1);
                angleStart -= angleHalf;
                for (int i = 0; i < left; i++)
                {
                    int angleOffset = anglePer * (i + 1);
                    actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart + angleOffset, 0)), info);
                }
            }
        }
        else             // 奇数
                         // middle
        {
            actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart, 0)), info);

            if (count > 1)              // 3, 5...
            // border
            {
                actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart - angleHalf, 0)), info);
                actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart + angleHalf, 0)), info);

                int left = (count - 3) / 2;
                if (left > 0)
                {
                    int anglePer = angleHalf / (left + 1);
                    for (int i = 0; i < left; i++)
                    {
                        int angleOffset = anglePer * (i + 1);
                        actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart - angleOffset, 0)), info);
                        actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart + angleOffset, 0)), info);
                    }
                }
            }
        }
    }