Пример #1
0
        } // UpdateTasks

        #endregion

        #region Render Tasks

        /// <summary>
        /// Tasks before the engine render.
        /// Some tasks are more related to the frame rendering than the update,
        /// or maybe the update frequency is too high to waste time in this kind of tasks,
        /// for that reason the pre render task exists.
        /// For example, is more correct to update the HUD information here because is related with the rendering.
        /// </summary>
        protected override void PreRenderTasks()
        {
            if (Keyboard.KeyPressed(Keys.T))
            {
                dude.ModelAnimations.LocalBoneTransforms[7] = dude.ModelAnimations.LocalBoneTransforms[7] * Matrix.CreateFromYawPitchRoll(0.3f, 0, 0);
                dude.ModelAnimations.UpdateLocalBoneTransforms();
            }
            if (Keyboard.KeyPressed(Keys.G))
            {
                dude.ModelAnimations.LocalBoneTransforms[7] = dude.ModelAnimations.LocalBoneTransforms[7] * Matrix.CreateFromYawPitchRoll(-0.3f, 0, 0);
                dude.ModelAnimations.UpdateLocalBoneTransforms();
            }

            // Rifle placement.
            // The rifle matchs the 30th bone transformation.
            // But before I made some matrix modifications because of a problem with the content creation tool, a problem not related with the engine.
            rifle.Transform.LocalMatrix = Matrix.Identity;
            rifle.Transform.Translate(new Vector3(1.2767f, 0.5312f, 0.0045f));
            rifle.Transform.Rotate(new Vector3(0, 45, 90));
            rifle.Transform.Translate(new Vector3(0, 1.1081f, -0.3243f));
            rifle.Transform.Rotate(new Vector3(0, 45, 0));
            rifle.Transform.LocalScale  = new Vector3(16, 16, 16f);
            rifle.Transform.LocalMatrix = rifle.Transform.LocalMatrix * dude.ModelAnimations.WorldBoneTransforms[30] * dude.Transform.WorldMatrix;
        } // PreRenderTasks
        } // Load

        #endregion

        #region Update Tasks

        /// <summary>
        /// Tasks executed during the update.
        /// This is the place to put the application logic.
        /// </summary>
        protected override void UpdateTasks()
        {
            // Show or hide statistics graph.
            if (Button.JustPressed("Show Statistics"))
            {
                Layer.GetLayerByNumber(26).Visible = !Layer.GetLayerByNumber(26).Visible;
            }
            // If the scene is executing...
            if (mainSceneExecuting)
            {
                // Starts the video...
                if (Time.ApplicationTime > 1 && !videoStarted)
                {
                    introVideo.VideoRenderer.Play();
                    videoStarted = true;
                }
                if (videoStarted && Keyboard.KeyPressed(Keys.Escape))
                {
                    introVideo.VideoRenderer.Stop();
                }
                // If the video is over...
                if (introVideo.VideoRenderer.State == MediaState.Stopped && videoStarted)
                {
                    Layer.GetLayerByNumber(25).Visible = true;
                    demoLegend.Transform.Position      = new Vector3(20, Screen.Height - 35f, 0f);
                    if (finalEngineLogo.Transform.Position.X < -6)
                    {
                        finalEngineLogo.Transform.Translate(Time.SmoothFrameTime * 50, 0, 0);
                        xnaLogo.Transform.Translate(Time.SmoothFrameTime * 50, 0, 0);
                    }
                    else
                    {
                        xnaLogo.Transform.Position         = new Vector3(-6, 6, 0);
                        finalEngineLogo.Transform.Position = new Vector3(-6, 6, 0);
                    }
                    if (examplesLogo.Transform.Position.X > 1.3f)
                    {
                        examplesLogo.Transform.Translate(-Time.SmoothFrameTime * 70, 0, 0);
                    }
                    else
                    {
                        examplesLogo.Transform.Position = new Vector3(1.3f, 5.7f, 0);
                    }
                    if (selectOneScene.Transform.Position.Y < -5)
                    {
                        selectOneScene.Transform.Translate(0, Time.SmoothFrameTime * 65, 0);
                    }
                    else
                    {
                        selectOneScene.Transform.Position = new Vector3(6, -5, 0);
                    }
                    // Handle input...
                    if (Button.JustPressed("Next Scene"))
                    {
                        currentScene++;
                    }
                    if (Button.JustPressed("Previous Scene"))
                    {
                        currentScene--;
                    }
                    if (currentScene >= exampleImage.Length)
                    {
                        currentScene = 0;
                    }
                    if (currentScene < 0)
                    {
                        currentScene = exampleImage.Length - 1;
                    }
                    if (Button.JustPressed("Load Scene"))
                    {
                        loading.ModelRenderer.Enabled = true;
                        mainSceneExecuting            = false;
                    }
                }
                // Set as visible only the current scene.
                for (int i = 0; i < exampleImage.Length; i++)
                {
                    if (i == currentScene)
                    {
                        exampleImage[i].Active = true;
                        exampleTitle[i].Active = true;
                        exampleText[i].Active  = true;
                        // Center the scenes information.
                        int offsetx = (Screen.Width - 1100) / 2;
                        int offsety = (Screen.Height - 400) / 2;
                        exampleImage[i].Transform.Position = new Vector3(offsetx, offsety + 50, 0);
                        exampleTitle[i].Transform.Position = new Vector3(425 + offsetx, offsety, 0);
                        exampleText[i].Transform.Position  = new Vector3(425 + offsetx, offsety + 50, 0);
                    }
                    else
                    {
                        exampleImage[i].Active = false;
                        exampleTitle[i].Active = false;
                        exampleText[i].Active  = false;
                    }
                }
            }
            else
            {
                Layer.GetLayerByNumber(25).Visible = false;
                if (loadedScene == null)
                {
                    loading.ModelRenderer.Enabled = false;
                    switch (currentScene)
                    {
                    case 0:
                        loadedScene = new WarehouseScene();
                        break;

                    case 1:
                        loadedScene = new PhysicsTestScene();
                        break;

                    case 2:
                        loadedScene = new AnimationScene();
                        break;

                    case 3:
                        loadedScene = new HelloWorldScene();
                        break;
                    }
                }
                if (Button.JustPressed("Back To Menu"))
                {
                    loadedScene.Dispose();
                    loadedScene        = null;
                    mainSceneExecuting = true;
                }
            }
        } // UpdateTasks