public void UnregisterObject(WorldObject worldObject) { if (worldObject.Sector != this) throw new ArgumentException("Given object is not registered in this sector.", "worldObject"); if (manager != null) manager.UnregisterObject(worldObject); registeredObjects.Remove(worldObject); ReallyUnregisterObject(worldObject); worldObject.Sector = null; worldObject.TransformationChanged -= worldObject_TransformationChanged; }
public void RegisterObject(WorldObject worldObject) { if (worldObject == null) throw new ArgumentNullException("worldObject"); if (worldObject.Sector != null) throw new ArgumentException("Given object is already registered somewhere.", "worldObject"); if (!BoundingBox.Intersects(boundary, worldObject.WorldBoundary)) throw new ArgumentException("Given object is not in volume of the sector.", "worldObject"); if (manager != null) manager.RegisterObject(worldObject); registeredObjects.Add(worldObject); ReallyRegisterObject(worldObject); worldObject.Sector = this; worldObject.TransformationChanged += worldObject_TransformationChanged; }
protected override void Initialize() { // Setup resource manager ResourceManager.FileSystems.Add(new DiskFileSystem("Content")); // Setup debug blender //Renderer.Blender = new DebugBlender(0, Services); // Add view camera = new Camera(new Vector3(0, 5, 5), new Vector2(-(float)Math.PI / 4f, 0), 3.1415f / 3f, 4f / 3f, 0.1f, 100f); view = Renderer.CreateDefaultView(camera); Renderer.Views.Add(view); // Add sector sector = new ListSector(new BoundingBox(new Vector3(-10), new Vector3(10))); WorldManager.RegisterSector(sector); // Fill world boxObject1 = SimpleObject.CreateCube("Shaders/Test.fx", "Textures/Crate.jpg", "Box1", Services); boxObject1.Position = new Vector3(0.4f, 1, 1.2f); sector.RegisterObject(boxObject1); boxObject2 = SimpleObject.CreateCube("Shaders/Test.fx", "Textures/Crate.jpg", "Box2", Services); boxObject2.Position = new Vector3(-0.4f, 1, -1); sector.RegisterObject(boxObject2); boxObject3 = SimpleObject.CreateCube("Shaders/Test.fx", "Textures/Crate.jpg", "Box3", Services); boxObject3.Position = new Vector3(0, 3.001f, 0); boxObject3.Rotation = Quaternion.RotationAxis(Vector3.UnitY, (float)Math.PI / 3f); sector.RegisterObject(boxObject3); floorObject = SimpleObject.CreatePlane("Shaders/Test.fx", "Textures/Floor.jpg", "Floor", Services, 20, 20); floorObject.Position = new Vector3(0, -0.001f, 0); sector.RegisterObject(floorObject); // Add lighting ambientLighting = new AmbientLightingEffect(Services); //Renderer.VisualEffects.Add(ambientLighting); sunLighting = new DirectionalLightingEffect(Services); Renderer.VisualEffects.Add(sunLighting); // Register input handler InputManager.KeyDown += InputManager_KeyDown; }
protected abstract void ReallyUpdateObject(WorldObject worldObject);
protected abstract void ReallyUnregisterObject(WorldObject worldObject);
protected override void ReallyUpdateObject(WorldObject worldObject) { }
protected override void ReallyUnregisterObject(WorldObject worldObject) { registeredObjects.Remove(worldObject); }
protected override void ReallyRegisterObject(WorldObject worldObject) { registeredObjects.Add(worldObject); }