private void EnterGameLoop(IEcs ecs, Entity geralt) { var renderer = new Renderer.Renderer(ecs, this.boundsX, this.boundsY, new RendererCharacters(), Logger, () => ecs.GetComponent <HasMoney>(geralt).Money); // Simulation loop - 5 updates a second var timer = new Timer(200); timer.Elapsed += async(sender, e) => { timer.Stop(); await ecs.UpdateAsync(); if (ecs.GetSystem <IsActor>().AllComponents().Count(c => c.Type == ActorType.Monster) < 3) { this.CreateEntity(ecs, 5, ActorType.Monster); } renderer.Render(); timer.Start(); }; timer.Start(); // Press a key to quit Console.ReadKey(); }
static void KeyboardHandle(byte key, int x, int y) { SceneCamera sceneCam = scene.Camera; Vector dir = sceneCam.Target - sceneCam.Position; float tar_posDist = dir.Magnitude3(); dir.Normalize3(); Vector right = Vector.Cross3(dir, sceneCam.Up); float camSpeed = 10f; Vector tempVec; float turnSpeed = 0.01f; if (key == (int)NumberKeys.One) { mode = RendererType.OpenGL; Glut.glutPostRedisplay(); } else if (key == (int)NumberKeys.Two) { mode = RendererType.Raytracer; raytraceRenderer.ResetTracer(); transformationRenderer.ResetRenderer(); currentRenderer = raytraceRenderer; Glut.glutPostRedisplay(); } else if (key == (int)NumberKeys.Three) { mode = RendererType.RasterizerWireframe; rendParams.WireFrame = true; transformationRenderer.ResetRenderer(); currentRenderer = transformationRenderer; Glut.glutPostRedisplay(); } else if (key == (int)NumberKeys.Four) { mode = RendererType.Rasterizer; rendParams.WireFrame = false; transformationRenderer.ResetRenderer(); currentRenderer = transformationRenderer; Glut.glutPostRedisplay(); } else if (key == (byte)'w') { scene.Camera.Position += dir * camSpeed; scene.Camera.Target += dir * camSpeed; raytraceRenderer.ResetTracer(); transformationRenderer.ResetRenderer(); Glut.glutPostRedisplay(); } else if (key == (byte)'s') { scene.Camera.Position -= dir * camSpeed; scene.Camera.Target -= dir * camSpeed; raytraceRenderer.ResetTracer(); transformationRenderer.ResetRenderer(); Glut.glutPostRedisplay(); } else if (key == (byte)'a') { scene.Camera.Position -= right * camSpeed; scene.Camera.Target -= right * camSpeed; raytraceRenderer.ResetTracer(); transformationRenderer.ResetRenderer(); Glut.glutPostRedisplay(); } else if (key == (byte)'d') { scene.Camera.Position += right * camSpeed; scene.Camera.Target += right * camSpeed; raytraceRenderer.ResetTracer(); transformationRenderer.ResetRenderer(); Glut.glutPostRedisplay(); } else if (key == (byte)'i') { tempVec = dir + scene.Camera.Up * turnSpeed; tempVec.Normalize3(); scene.Camera.Target = scene.Camera.Position + tempVec * tar_posDist; scene.Camera.Up = Vector.Cross3(right, tempVec); raytraceRenderer.ResetTracer(); transformationRenderer.ResetRenderer(); Glut.glutPostRedisplay(); } else if (key == (byte)'k') { tempVec = dir - scene.Camera.Up * turnSpeed; tempVec.Normalize3(); scene.Camera.Target = scene.Camera.Position + tempVec * tar_posDist; scene.Camera.Up = Vector.Cross3(right, tempVec); raytraceRenderer.ResetTracer(); transformationRenderer.ResetRenderer(); Glut.glutPostRedisplay(); } else if (key == (byte)'j') { tempVec = dir - right * turnSpeed; tempVec.Normalize3(); scene.Camera.Target = scene.Camera.Position + tempVec * tar_posDist; raytraceRenderer.ResetTracer(); transformationRenderer.ResetRenderer(); Glut.glutPostRedisplay(); } else if (key == (byte)'l') { tempVec = dir + right * turnSpeed; tempVec.Normalize3(); scene.Camera.Target = scene.Camera.Position + tempVec * tar_posDist; raytraceRenderer.ResetTracer(); transformationRenderer.ResetRenderer(); Glut.glutPostRedisplay(); } else if (key == (byte)'x') { raytraceRenderer.renderingParameters.EnableRefractions = !raytraceRenderer.renderingParameters.EnableRefractions; raytraceRenderer.ResetTracer(); transformationRenderer.ResetRenderer(); Glut.glutPostRedisplay(); } else if (key == (byte)'z') { raytraceRenderer.renderingParameters.EnableShadows = !raytraceRenderer.renderingParameters.EnableShadows; raytraceRenderer.ResetTracer(); transformationRenderer.ResetRenderer(); Glut.glutPostRedisplay(); } else if (key == (byte)'c') { raytraceRenderer.renderingParameters.EnableAntialias = !raytraceRenderer.renderingParameters.EnableAntialias; raytraceRenderer.ResetTracer(); transformationRenderer.ResetRenderer(); Glut.glutPostRedisplay(); } else if (key == (byte)'v') { rendParams.EnableAntialias = !rendParams.EnableAntialias; if (rendParams.EnableAntialias) Console.WriteLine("Antialising enabled"); else Console.WriteLine("Antialiasing disabled"); raytraceRenderer.ResetTracer(); transformationRenderer.ResetRenderer(); Glut.glutPostRedisplay(); } }