Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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();

             }
        }