Esempio n. 1
0
    public static void CreateBullet(string mastername, SkillBulletType bi)
    {
        var bu = new Bullet(mastername, Logic.time, bi);

        buob[bu.id] = bu;
        View.CreateBullet(mastername, bu.id, bu.bu.BulletSEName, bu.pos, bu.rot, bu.bu.FlySpeed > 0?true:false);
    }
Esempio n. 2
0
    public Bullet(string mn = "", float bt = 0, SkillBulletType b = null)
    {
        if (mn != null)
        {
            Mastername = mn;
        }
        BeginTime = bt;

        if (b != null)
        {
            bu = b;
        }
        //pos = p;
        //rot = r;
        var ob = Logic.obinfmp[Mastername];

        tag = ob.tag;
        pos = ob.pos;
        rot = ob.rot;
        dir = ob.dir;
        //rot.y = 15f*dir;
        //Debug.Log("bullet " + rot);
        id    = Logic.GetNewID();
        ifEnd = false;
        if (b != null)
        {
            if (bu.FlySpeed <= 0)
            {
                //法术场类
                for (int i = 0; i < bu.JudgeTimes; i++)
                {
                    timer.Add((Logic.time + bu.EachAttackTime * i, delegate() {
                        AttackJudge();
                        AEJudge(1);
                    }));
                }
            }
            else
            {
                //飞行类
            }
        }

        /*if(bu.BulletFireEnemyPos) {
         *  Creature temp = null;
         *  foreach(var t in Logic.obinfmp) {
         *      var e = Logic.obinfmp[t.Key];
         *      if(e.curCreatureData.curHP<=0) {
         *          continue;
         *      }
         *      if(e.tag==Logic.obinfmp[Mastername].tag) {
         *          continue;
         *      }
         *      if(temp==null) {
         *          temp = e;
         *      } else {
         *          if(Dis2(pos,e.pos)<Dis2(pos,temp.pos)) {
         *              Debug.Log("SUO DING " + e.name + " pos " + e.pos);
         *              temp = e;
         *          }
         *      }
         *  }
         *  if(temp!=null && Dis2(pos,temp.pos)<bu.MaxSearchDistance) {
         *      pos = temp.pos;
         *  }
         * }*/
        //if(bu.IfLockEnemy) {
        Creature temp = null;

        foreach (var t in Logic.obinfmp)
        {
            var e = Logic.obinfmp[t.Key];
            if (e.curCreatureData.curHP <= 0)
            {
                continue;
            }
            if (e.tag == Logic.obinfmp[Mastername].tag)
            {
                continue;
            }
            if (temp == null)
            {
                temp = e;
            }
            else if (Dis2(pos, e.pos) < Dis2(pos, temp.pos))
            {
                temp = e;
            }
        }
        if (temp != null && Dis2(pos, temp.pos) < bu.MaxSearchDistance && bu.IfLockEnemy)
        {
            Lockname = temp.name;
        }
        else
        {
            Lockname = "";
        }
        if (temp != null && Dis2(pos, temp.pos) < bu.MaxSearchDistance && bu.BulletFireEnemyPos)
        {
            pos = temp.pos;
            Debug.Log("fire " + temp.name + " " + temp.pos);
        }
        //}
    }
Esempio n. 3
0
    //
    /// <summary>
    /// 使用技能
    /// </summary>
    /// <param name="useSkillIdex">使用的技能在当前生物可用技能表中的下标</param>
    public virtual bool ToUseSkill(int useSID)
    {
        //技能冷却、MP判定
        if (Logic.time - SkillLastFireTime[useSID] < curSkillDataList[useSID].CoolingTime)
        {
            return(false); //技能未冷却
        }
        if (curCreatureData.curMP < curSkillDataList[useSID].CostMP)
        {
            return(false); //MP不足
        }
        //询问状态机状态是否能够改变
        if (!curFSM.ChangeState(curSkillDataList[useSID].StateName))
        {
            return(false); //不可更改为当前技能;
        }
        //更改当前正在释放的技能为请求释放的技能
        curSID = useSID;

        //技能进入冷却时间
        SkillReset(curSID);
        curCreatureData.curMP -= curSkillDataList[useSID].CostMP;

        //--------------------------------攻击属性----------------------------------------------------------------
        foreach (var t in curSkillDataList[useSID].ATKs)
        {
            SkillAttackType e = t;
            timer.Add((Logic.time + e.SkillAttackJudgeBeginTime, delegate() {
                MeleeMultiplayerAttack(e);
            }));
        }
        //--------------------------------BUFF属性----------------------------------------------------------------
        foreach (var t in curSkillDataList[useSID].BUFFs)
        {
            SkillBUFFType e = t;
            timer.Add((Logic.time + e.BeginTime, delegate(){
                for (int i = 0; i < e.RoleTimes; i++)
                {
                    int j = i;
                    BUFFtimer.Add((Logic.time + e.BeginTime + j * e.EachRoleTime, delegate() {
                        if ((e.RoleAttribute & 1) != 0)
                        {
                            HPRecover(e.EffectValue);
                            //curCreatureData.curHP += e.EffectValue;
                            //if(curCreatureData.curHP>curCreatureData.maxMP) curCreatureData.curHP = curCreatureData.maxHP;
                        }
                        if ((e.RoleAttribute & 2) != 0)
                        {
                            MPRecover(e.EffectValue);
                            //curCreatureData.curMP += e.EffectValue;
                            //if(curCreatureData.curMP>curCreatureData.maxMP) curCreatureData.curMP = curCreatureData.maxMP;
                        }
                        if ((e.RoleAttribute & 4) != 0)
                        {
                            //curCreatureData.Speed *= e.EffectRatio>1?0:(1-e.EffectRatio);
                            SpeedChange(e.EffectRatio);
                        }
                        if ((e.RoleAttribute & 8) != 0)
                        {
                            //curCreatureData.Defence *= e.EffectRatio>1?0:(1-e.EffectRatio);
                            DefenceChange(e.EffectRatio);
                        }
                        if ((e.RoleAttribute & 16) != 0)
                        {
                            //curCreatureData.Attack *= e.EffectRatio>1?0:(1-e.EffectRatio);
                            AttackChange(e.EffectRatio);
                        }
                    }));
                    if (e.IfRecycle)
                    {
                        BUFFtimer.Add((Logic.time + e.BeginTime + e.RoleTimes * e.EachRoleTime, delegate() {
                            if ((e.RoleAttribute & 1) != 0)
                            {
                                HPRecover(-e.EffectValue * e.RoleTimes);
                                //curCreatureData.curHP -= e.EffectValue*e.RoleTimes;
                            }
                            if ((e.RoleAttribute & 2) != 0)
                            {
                                MPRecover(-e.EffectValue * e.RoleTimes);
                                //curCreatureData.curMP -= e.EffectValue*e.RoleTimes;
                            }
                            if ((e.RoleAttribute & 4) != 0)
                            {
                                //curCreatureData.Speed *= e.EffectRatio>1?0:(1-e.EffectRatio);
                                SpeedChange(-e.EffectRatio);
                            }
                            if ((e.RoleAttribute & 8) != 0)
                            {
                                //curCreatureData.Defence *= e.EffectRatio>1?0:(1-e.EffectRatio);
                                DefenceChange(-e.EffectRatio);
                            }
                            if ((e.RoleAttribute & 16) != 0)
                            {
                                //curCreatureData.Attack *= e.EffectRatio>1?0:(1-e.EffectRatio);
                                AttackChange(-e.EffectRatio);
                            }
                        }));
                    }
                }
            }));
        }
        //--------------------------------子弹属性----------------------------------------------------------------
        foreach (var t in curSkillDataList[useSID].Bullets)
        {
            SkillBulletType e = t;
            timer.Add((Logic.time + e.BulletFireTime, delegate() {
                BulletsManager.CreateBullet(name, e);
            }));
        }
        //--------------------------------位移属性----------------------------------------------------------------
        foreach (var t in curSkillDataList[useSID].MOVEs)
        {
            SkillMoveType e = t;
            for (float i = 0; i < e.DuringTime; i += Logic.eachframtime)
            {
                timer.Add((Logic.time + e.BeginTime + i, delegate() {
                    Move(e.Speed);
                    //float angle = 15.0f * dir;
                    //float f = (float)(angle*Math.PI/180.0f);
                    //pos += (new Vector3((float)Math.Sin(f),0,(float)Math.Cos(f)))*((float)(e.Speed*Logic.eachframtime));
                    //rot = new Vector3(0,15.0f*dir,0);
                }));
            }
        }


        //curSkillStage = (0,0,0);

        //技能释放成功
        //Debug.Log("use skill " + useSID);
        return(true);
    }