/// <summary> /// 同步移除 /// 需要外部调用清除的BUFF,比如BUFF消失时间未到,但是人物已经死亡时 /// </summary> public static void Destroy(long uid) { CBuffTrigger buff = Get(uid); if (buff != null) { buff.Destory(); //Remove(uid); } }
private void CreateTrigger(BuffTriggerCsvData data) { CBuffTrigger buffTri = CBuffTriggerMgr.Create((eBuffTriggerPosType)data.PosType); buffTri.m_caster = m_caster; buffTri.m_rec = m_rec; buffTri.m_skillIndex = m_skillIndex; buffTri.m_skillPos = m_skillPos; buffTri.m_extendParam = m_extendParam; buffTri.Create(data.Id, string.Empty, m_startPos, m_skillDir); if (m_caster != null) { m_caster.AddTrigger((int)buffTri.GetUid()); } }
public static CBuffTrigger Create(eBuffTriggerPosType type) { CBuffTrigger obj = null; if (type == eBuffTriggerPosType.Laser) { obj = new CBuffTrigger_Laser(m_uid++); } else if (type == eBuffTriggerPosType.SkillEndPos_Curve) { obj = new CBuffTrigger_Curve(m_uid++); } else if (type == eBuffTriggerPosType.SkillEndPos) { obj = new CBuffTrigger_SkillEndPos(m_uid++); } else if (type == eBuffTriggerPosType.BindCaster) { obj = new CBuffTrigger_BindCaster(m_uid++); } else if (type == eBuffTriggerPosType.CasterStartPos_SkillDir) { obj = new CBuffTrigger_SkillDir(m_uid++); } else if (type == eBuffTriggerPosType.Lightning) { obj = new CBuffTrigger_Lightning(m_uid++); } else { obj = new CBuffTrigger(m_uid++); } //Add(m_uid++, obj); m_listAdd.Add(obj); return(obj); }
public static void Add(long uid, CBuffTrigger creature) { m_dicSkill[uid] = creature; }
/// <summary> /// 通过BUFF区域检测触发 /// </summary> public virtual void Trigger() { if (m_triggerData.ShapeType == (int)eBuffTriggerShapeType.Circle) { FPSphere tSphere = new FPSphere(); tSphere.c = GetPos(); tSphere.r = new FixedPoint(m_triggerData.Length); List <long> list = CCreatureMgr.GetCreatureList(); for (int i = 0; i < list.Count; i++) { CCreature creature = CCreatureMgr.Get(list[i]); if (m_caster.bCamp(creature) || creature.IsDie()) { continue; } FPSphere playerS = new FPSphere(); playerS.c = creature.GetPos(); playerS.r = creature.GetR(); if (FPCollide.bSphereSphere(tSphere, playerS)) { OnHitAddBuff(m_caster, creature); } } } else if (m_triggerData.ShapeType == (int)eBuffTriggerShapeType.Sector) { List <long> list = CCreatureMgr.GetCreatureList(); for (int i = 0; i < list.Count; i++) { CCreature creature = CCreatureMgr.Get(list[i]); if (m_caster.bCamp(creature) || creature.IsDie()) { continue; } FPSphere playerS = new FPSphere(); playerS.c = creature.GetPos(); playerS.r = creature.GetR(); FPSector sec = new FPSector(); sec.pos = GetPos(); sec.dir = GetDir(); sec.angle = new FixedPoint(m_triggerData.Width); sec.r = new FixedPoint(m_triggerData.Length); if (FPCollide.bSectorInside(sec, creature.GetPos())) { OnHitAddBuff(m_caster, creature); } } } else if (m_triggerData.ShapeType == (int)eBuffTriggerShapeType.Rect) { List <long> list = CCreatureMgr.GetCreatureList(); for (int i = 0; i < list.Count; i++) { CCreature creature = CCreatureMgr.Get(list[i]); if (m_caster.bCamp(creature) || creature.IsDie()) { continue; } FPSphere playerS = new FPSphere(); playerS.c = creature.GetPos(); playerS.r = creature.GetR(); Vector2d pos = GetPos(); int angle = (int)FPCollide.GetAngle(GetDir()).value; FPObb obb = new FPObb(pos, new Vector2d(m_triggerData.Width, m_triggerData.Length), angle); if (FPCollide.bSphereOBB(playerS, obb)) { OnHitAddBuff(m_caster, creature); } } } if (m_triggerData.PosType == (int)eBuffTriggerPosType.CasterStartPos_SkillDir) { // 障碍碰撞 if (CMapMgr.m_map.IsblockNotAirWal((int)m_curPos.x.value, (int)m_curPos.y.value)) { Destory(); return; } if (PhysicsManager.Inst.IsblockNotAirWal((int)m_curPos.x, (int)m_curPos.y)) { Destory(); return; } // 子弹碰撞 FPSphere cur = new FPSphere(); cur.c = GetPos(); cur.r = GetR(); foreach (KeyValuePair <long, CBuffTrigger> item in CBuffTriggerMgr.m_dicSkill) { CBuffTrigger tri = item.Value; if (tri.m_triggerData.PosType == (int)eBuffTriggerPosType.CasterStartPos_SkillDir && tri != this && tri.m_caster != m_caster) { FPSphere triItem = new FPSphere(); triItem.c = tri.GetPos(); triItem.r = tri.GetR(); if (FPCollide.bSphereSphere(cur, triItem)) { Destory(); tri.Destory(); } } } } }