private MySystemItem IsInsideRing(Vector3D position) { foreach (MySystemItem p in SystemGenerator.Static.m_objects) { if (p.Type == SystemObjectType.PLANET) { MyPlanetItem planet = (MyPlanetItem)p; if (planet.PlanetRing == null) { continue; } AsteroidRingShape shape = AsteroidRingShape.CreateFromRingItem(planet.PlanetRing); if (shape.Contains(position) == ContainmentType.Contains) { return(planet.PlanetRing); } } else if (p.Type == SystemObjectType.BELT) { MySystemBeltItem belt = (MySystemBeltItem)p; AsteroidBeltShape shape = AsteroidBeltShape.CreateFromRingItem(belt); if (shape.Contains(position) == ContainmentType.Contains) { return(belt); } } } return(null); }
private bool ObstructedPlace(Vector3D position, List <Vector3D> other, float minDistance, MyPlanetRingItem ring) { foreach (var obj in other) { if (Vector3D.Subtract(position, obj).Length() < minDistance) { return(true); } if (ring != null) { AsteroidRingShape shape = AsteroidRingShape.CreateFromRingItem(ring); return(shape.Contains(position) != ContainmentType.Disjoint); } } return(false); }
public void UpdateGps(MyEntityTracker tracker) { foreach (MySystemItem p in SystemGenerator.Static.m_objects) { if (p.Type != SystemObjectType.PLANET || ((MyPlanetItem)p).PlanetRing == null) { continue; } MyPlanetRingItem ring = ((MyPlanetItem)p).PlanetRing; Vector3D entityPos = tracker.Entity.PositionComp.GetPosition(); string pre = ((MyPlanetItem)p).DisplayName; var center = ((MyPlanetItem)p).CenterPosition; int l = (int)(Math.Sqrt(center.X * center.X + center.Y * center.Y + center.Z * center.Z)) % 1000; pre = Regex.Replace(pre, @"-[\d\w]+$| \d+ \d+ - \w+$", " " + l.ToString()); string name = pre + " Ring"; if (Vector3D.Subtract(ring.Center, entityPos).Length() > 5000000) { GlobalGpsManager.Static.RemoveDynamicGps(name, ((MyCharacter)tracker.Entity).GetPlayerIdentityId()); continue; } AsteroidRingShape shape = AsteroidRingShape.CreateFromRingItem(ring); if (shape.Contains(tracker.LastPosition) == ContainmentType.Contains) { GlobalGpsManager.Static.RemoveDynamicGps(name, ((MyCharacter)tracker.Entity).GetPlayerIdentityId()); continue; } Vector3D pos = shape.ClosestPointAtRingCenter(entityPos); GlobalGpsManager.Static.AddOrUpdateDynamicGps(name, ((MyCharacter)tracker.Entity).GetPlayerIdentityId(), pos, Color.Gold); } }