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); }
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); } //} }
// /// <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); }