//Constructor which sets up the whole game world scene public GameWorld(GameLoop Loop, ContentArchive Content) { //Store references from the GameLoop class ApplicationWindow = Loop.Window; UserInput = Loop.Input; //Assign the camera reference ObservationCamera.SetCamera(Loop); this.Content = Content; TimeSamples = new SimulationTimeSamples(512, Loop.Pool); UserControls = Controls.Default; //Load font from the content archive var FontContent = Content.Load <FontContent>(@"Carlito-Regular.ttf"); UIFont = new Font(Loop.Surface.Device, Loop.Surface.Context, FontContent); //Position the camera ObservationCamera.PositionCamera(new Vector3(2.7f, 6.48f, 9.76f)); ObservationCamera.FaceCamera(0.269f, 0.15899f); //Setup character controller and world simulation BufferPool = new BufferPool(); ThreadDispatcher = new SimpleThreadDispatcher(Environment.ProcessorCount); World = Simulation.Create(BufferPool, new CharacterNarrowphaseCallbacks(new CharacterControllers(BufferPool)), new ScenePoseIntegratorCallbacks(new Vector3(0, -10, 0))); //Initialize the mesh loader MeshManager.Initialize(Content, BufferPool); //Load in the numbers display the direction of the X/Z axes AxisMarkers.LoadModels(); AxisMarkers.AddModels(World); //Load in the PVP arena ArenaMeshHandle = MeshManager.LoadMesh(@"Arena.obj", new Vector3(1)); //Define its starting position and location Vector3 ArenaPosition = new Vector3(29.82f, 3.62f, 0.94f); Quaternion ArenaRotation = Quaternion.CreateFromAxisAngle(new Vector3(0, 1, 0), Trig.DegreesToRadians(180)); //Use those to add it into the world MeshManager.AddStatic(World, ArenaMeshHandle, ArenaPosition, ArenaRotation); //Place the jumping cubes World.Statics.Add(new StaticDescription(new Vector3(1.299f, 2.3f, -31.24f), new CollidableDescription(World.Shapes.Add(new Box(5, 5, 5)), 0.1f))); World.Statics.Add(new StaticDescription(new Vector3(-26.56f, 2.3f, -35.2f), new CollidableDescription(World.Shapes.Add(new Box(5, 5, 5)), 0.1f))); World.Statics.Add(new StaticDescription(new Vector3(-33.12f, 2.3f, -21.65f), new CollidableDescription(World.Shapes.Add(new Box(5, 5, 5)), 0.1f))); World.Statics.Add(new StaticDescription(new Vector3(-26.05f, 2.3f, -9.38f), new CollidableDescription(World.Shapes.Add(new Box(5, 5, 5)), 0.1f))); World.Statics.Add(new StaticDescription(new Vector3(-10.31f, 2.3f, -5.62f), new CollidableDescription(World.Shapes.Add(new Box(5, 5, 5)), 0.1f))); World.Statics.Add(new StaticDescription(new Vector3(1.94f, 2.3f, -15.88f), new CollidableDescription(World.Shapes.Add(new Box(5, 5, 5)), 0.1f))); World.Statics.Add(new StaticDescription(new Vector3(-11.3f, 2.3f, -37.44f), new CollidableDescription(World.Shapes.Add(new Box(5, 5, 5)), 0.1f))); //Place a ground plane to walk on World.Statics.Add(new StaticDescription(new Vector3(0, -0.5f, 0), new CollidableDescription(World.Shapes.Add(new Box(100, 1, 100)), 0.1f))); //Setup the command executor CommandInputField.Initialize(); //Make sure the window size is correct relative to the current resolution OnResize(ApplicationWindow.Resolution); }