Ejemplo n.º 1
0
        void SearchUnitInBox(List <Unit> targetList)
        {
            float extentsX, extentsY, extentsZ;

            unsafe
            {
                extentsX = GetTemplate().BoxDatas.Extents[0];
                extentsY = GetTemplate().BoxDatas.Extents[1];
                extentsZ = GetTemplate().BoxDatas.Extents[2];
            }

            var check    = new AnyUnitInObjectRangeCheck(this, GetTemplate().MaxSearchRadius, false);
            var searcher = new UnitListSearcher(this, targetList, check);

            Cell.VisitAllObjects(this, searcher, GetTemplate().MaxSearchRadius);

            float halfExtentsX = extentsX / 2.0f;
            float halfExtentsY = extentsY / 2.0f;
            float halfExtentsZ = extentsZ / 2.0f;

            float minX = GetPositionX() - halfExtentsX;
            float maxX = GetPositionX() + halfExtentsX;

            float minY = GetPositionY() - halfExtentsY;
            float maxY = GetPositionY() + halfExtentsY;

            float minZ = GetPositionZ() - halfExtentsZ;
            float maxZ = GetPositionZ() + halfExtentsZ;

            AxisAlignedBox box = new AxisAlignedBox(new Vector3(minX, minY, minZ), new Vector3(maxX, maxY, maxZ));

            targetList.RemoveAll(unit => !box.contains(new Vector3(unit.GetPositionX(), unit.GetPositionY(), unit.GetPositionZ())));
        }
Ejemplo n.º 2
0
        void SearchUnitInCylinder(List <Unit> targetList)
        {
            var check    = new AnyUnitInObjectRangeCheck(this, GetTemplate().MaxSearchRadius, false);
            var searcher = new UnitListSearcher(this, targetList, check);

            Cell.VisitAllObjects(this, searcher, GetTemplate().MaxSearchRadius);

            float height = GetTemplate().CylinderDatas.Height;
            float minZ   = GetPositionZ() - height;
            float maxZ   = GetPositionZ() + height;

            targetList.RemoveAll(unit => unit.GetPositionZ() < minZ ||
                                 unit.GetPositionZ() > maxZ);
        }
Ejemplo n.º 3
0
        void SearchUnits(List <Unit> targetList, float radius, bool check3D)
        {
            var check = new AnyUnitInObjectRangeCheck(this, radius, check3D);

            if (IsServerSide())
            {
                var searcher = new PlayerListSearcher(this, targetList, check);
                Cell.VisitWorldObjects(this, searcher, GetTemplate().MaxSearchRadius);
            }
            else
            {
                var searcher = new UnitListSearcher(this, targetList, check);
                Cell.VisitAllObjects(this, searcher, GetTemplate().MaxSearchRadius);
            }
        }
Ejemplo n.º 4
0
        void SearchUnitInSphere(List <Unit> targetList)
        {
            float radius = GetTemplate().SphereDatas.Radius;

            if (GetTemplate().HasFlag(AreaTriggerFlags.HasDynamicShape))
            {
                if (GetMiscTemplate().MorphCurveId != 0)
                {
                    radius = MathFunctions.lerp(GetTemplate().SphereDatas.Radius, GetTemplate().SphereDatas.RadiusTarget, Global.DB2Mgr.GetCurveValueAt(GetMiscTemplate().MorphCurveId, GetProgress()));
                }
            }

            var check    = new AnyUnitInObjectRangeCheck(this, radius);
            var searcher = new UnitListSearcher(this, targetList, check);

            Cell.VisitAllObjects(this, searcher, GetTemplate().MaxSearchRadius);
        }
Ejemplo n.º 5
0
        static bool TestArea(StringArguments args, CommandHandler handler)
        {
            float       radius = 40.0f;
            WorldObject obj    = handler.GetPlayer();

            // Get Creatures
            List <Unit> creatureList = new List <Unit>();

            var go_check  = new AnyUnitInObjectRangeCheck(obj, radius);
            var go_search = new UnitListSearcher(obj, creatureList, go_check);

            Cell.VisitGridObjects(obj, go_search, radius);
            if (!creatureList.Empty())
            {
                handler.SendSysMessage("Found {0} Creatures.", creatureList.Count);

                uint paths      = 0;
                uint uStartTime = Time.GetMSTime();

                float gx, gy, gz;
                obj.GetPosition(out gx, out gy, out gz);
                foreach (var creature in creatureList)
                {
                    PathGenerator path = new PathGenerator(creature);
                    path.CalculatePath(gx, gy, gz);
                    ++paths;
                }

                uint uPathLoadTime = Time.GetMSTimeDiffToNow(uStartTime);
                handler.SendSysMessage("Generated {0} paths in {1} ms", paths, uPathLoadTime);
            }
            else
            {
                handler.SendSysMessage("No creatures in {0} yard range.", radius);
            }

            return(true);
        }