public bool IsVisibleInRoom(Room room, Camera cam) { var polys = Polygons; if (room.Frustum.Count == 0) { var ins = true; foreach (var polygon in polys) { var t = polygon.Plane.Distance(EngineCamera.Position); if (t > 0 && EngineCamera.Frustum.IsPolyVisible(polygon, cam)) { return true; } if (ins && t > 0) { ins = false; } } return ins; } return room.Frustum.Any(frustum => (from polygon in polys let t = polygon.Plane.Distance(cam.Position) where t > 0 && frustum.IsPolyVisible(polygon, cam) select polygon).Any()); }
public override void TransferToRoom(Room room) { }
public virtual void TransferToRoom(Room room) { if(Self.Room != null && !Self.Room.IsOverlapped(room)) { Self.Room.RemoveEntity(this); room?.AddEntity(this); } }