Esempio n. 1
0
        /// <summary>
        /// 同步移除
        /// 需要外部调用清除的BUFF,比如BUFF消失时间未到,但是人物已经死亡时
        /// </summary>
        public static void Destroy(long uid)
        {
            CBuffTrigger buff = Get(uid);

            if (buff != null)
            {
                buff.Destory();
                //Remove(uid);
            }
        }
Esempio n. 2
0
        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());
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 public static void Add(long uid, CBuffTrigger creature)
 {
     m_dicSkill[uid] = creature;
 }
Esempio n. 5
0
        /// <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();
                        }
                    }
                }
            }
        }