Inheritance: MonoBehaviour
        public void Render(SceneProperties sceneProperties)
        {
            carMaterial.SetVariable("DecalTexture", 1);
            carMaterial.SetVariable("ReflectionTexture", 2);
            carMaterial.SetVariable("MainLightPos", new Vector3(0, 4, 0));
            carMaterial.SetVariable("MainLightTint", Color4.White);
            carMaterial.SetVariable("MainLightConstant", 0.5f);
            carMaterial.SetVariable("MainLightLinear", 0.001f);
            carMaterial.SetVariable("MainLightQuadratic", 0.1f);
            carMaterial.SetVariable("Rotation", currentEuler);
            carMaterial.SetVariable("AmbientLightStrength", sceneProperties.AmbientLightStrength);
            var renderRotation = Quaternion.FromEulerAngles(new Vector3(currentEuler)
            {
                Y = -currentEuler.Y
            });
            var wheelRenderRotation = Quaternion.FromEulerAngles(new Vector3(currentEuler)
            {
                Y = -currentEuler.Y
            });

            decalTexture?.Bind();
            for (int i = 0; i < data.wheelPositions.Length; ++i)
            {
                Render3D.DrawMesh(wheelMesh,
                                  data.wheelPositions[i] + position * -1.0f,
                                  new Vector3(0.19f, 0.19f, 0.19f) * ((i % 2 == 0) ? -1 : 1),
                                  wheelRenderRotation,
                                  Quaternion.Identity,
                                  testTexture);
            }

            Render3D.DrawMesh(testMesh, position * -1.0f, new Vector3(0.2f, 0.2f, 0.2f), renderRotation, Quaternion.Identity, testTexture, carMaterial);
        }
Exemplo n.º 2
0
        public void Render(SceneProperties sceneProperties)
        {
            Vector3[] wheelPositions = new Vector3[4]
            {
                new Vector3(-1.65f, 0.2f, 1.0f),
                new Vector3(-1.65f, 0.2f, -1.0f),
                new Vector3(1.65f, 0.2f, 1.0f),
                new Vector3(1.65f, 0.2f, -1.0f)
            };
            carMaterial.SetVariable("DecalTexture", 1);
            carMaterial.SetVariable("ReflectionTexture", 2);
            carMaterial.SetVariable("MainLightPos", new Vector3(0, 4, 0));
            carMaterial.SetVariable("MainLightTint", Color4.White);
            carMaterial.SetVariable("MainLightConstant", 0.5f);
            carMaterial.SetVariable("MainLightLinear", 0.001f);
            carMaterial.SetVariable("MainLightQuadratic", 0.1f);
            carMaterial.SetVariable("Rotation", currentEuler);
            carMaterial.SetVariable("AmbientLightStrength", sceneProperties.AmbientLightStrength);
            var renderRotation = Quaternion.FromEulerAngles(new Vector3(currentEuler)
            {
                Y = -currentEuler.Y
            });
            var wheelRenderRotation = Quaternion.FromEulerAngles(new Vector3(currentEuler)
            {
                Y = -currentEuler.Y
            });

            decalTexture?.Bind();
            for (int w = 0; w < wheelPositions.Length; ++w)
            {
                Render3D.DrawMesh(wheelMesh,
                                  (wheelPositions[w] + position + new Vector3(0, -0.35f, 0)) * -1.0f,
                                  new Vector3(0.19f, 0.19f, 0.19f) * ((w % 2 == 1) ? -1 : 1),
                                  wheelRenderRotation,
                                  Quaternion.FromEulerAngles(new Vector3(-currentAccel * Time.currentTime * 10.0f, 0, 0)) * Quaternion.FromEulerAngles(new Vector3(0, ((w >= 2) ? -turningWeight / 180.0f : 0), 0)),
                                  testTexture);
            }
            Render3D.DrawMesh(testMesh, position * -1.0f, new Vector3(0.2f, 0.2f, 0.2f), renderRotation, Quaternion.FromEulerAngles(new Vector3(-currentAccel / 100.0f, 0, turningWeight / 1080.0f)), testTexture, carMaterial);
        }
Exemplo n.º 3
0
        public override void Init()
        {
            carController = new CarController();
            carController.Init();
            sceneProperties = new SceneProperties();
            Dictionary <string, string> texturesToLoad = new Dictionary <string, string>()
            {
                { "floor", @"Content\Tracks\grid.png" },
                { "building", @"Content\Tracks\buildinguv.png" },
                { "building2", @"Content\Tracks\buildinguv.png" },
                { "sky", @"Content\vpsky.png" },
                { "reflection", @"Content\Cars\reflection2.png" },
                { "test", @"Content\advisorbg.png" },
                { "road", @"Content\Tracks\road.png" },
            };
            Dictionary <string, string> meshesToLoad = new Dictionary <string, string>()
            {
                { "floor", @"Content\Tracks\circuit01.obj" },
                { "sky", @"Content\vpsky.obj" },
                { "building", @"Content\Tracks\building2.obj" },
                { "road", @"Content\Tracks\road01.obj" },
                { "cube", @"Content\sky.obj" },
            };

            foreach (var texture in texturesToLoad)
            {
                textures.Add(texture.Key, TextureLoader.LoadAsset(texture.Value));
            }
            foreach (var mesh in meshesToLoad)
            {
                meshes.Add(mesh.Key, MeshLoader.LoadAsset(mesh.Value));
            }

            //reflectionTexture.textureUnit = TextureUnit.Texture2;
            standardMat = new MaterialBuilder()
                          .Build()
                          .SetName("Standard Object Material")
                          .Attach(new Shader("Shaders\\Standard\\vert.glsl", ShaderType.VertexShader))
                          .Attach(new Shader("Shaders\\Standard\\frag.glsl", ShaderType.FragmentShader))
                          .Link()
                          .GetMaterial();
            unlitMat = new MaterialBuilder()
                       .Build()
                       .SetName("Standard Object Material")
                       .Attach(new Shader("Shaders\\Unlit\\vert.glsl", ShaderType.VertexShader))
                       .Attach(new Shader("Shaders\\Unlit\\frag.glsl", ShaderType.FragmentShader))
                       .Link()
                       .GetMaterial();
            materials.Add(standardMat);
            materials.Add(unlitMat);
            materials.Add(Render3D.defaultMaterial);
            materials.Add(Render2D.defaultSpriteMaterial);
            materials.Add(carController.carMaterial);
            RenderShared.renderResolution = new Vector2(320, 240);


            for (int x = -10; x < 10; ++x)
            {
                for (int y = -10; y < 10; ++y)
                {
                    if (x != 0 && y != 0)
                    {
                        sceneObjects.Add(new SceneObject("Building", meshes["building"], new Vector3(40 * y, 0, 40 * x), new Vector3(-2, 2, 2) * Math.Max((((float)Math.Sin(x * y) + 2.0f) / 2.0f), 1.0f), Quaternion.Identity, Quaternion.FromEulerAngles(new Vector3(0, 90 * ((x * y) % 4), 0)), (x * y % 2 == 0) ? textures["building"] : textures["building2"], standardMat));
                    }
                }
            }


            sceneObjects.Add(new SceneObject("Floor", meshes["floor"], new Vector3(0, -0.2f, 0), new Vector3(10, 1, 10), Quaternion.Identity, Quaternion.Identity, textures["floor"], standardMat));

            for (int i = -10; i < 10; ++i)
            {
                sceneObjects.Add(new SceneObject("Road " + (i + 11), meshes["road"], new Vector3(-i * 32, -0.18f, 0), new Vector3(1, 1, 1), Quaternion.Identity, Quaternion.Identity, textures["road"], standardMat));
            }
        }
        public void Update(SceneProperties sceneProperties)
        {
            DebugHook.ClearDebugData();
            delta = (float)Time.lastFrameTime / 20;


            // Acceleration
            if (InputHandler.GetStatus().keyboardKeys[OpenTK.Input.Key.W])
            {
                userRpm += data.engineIncr;
            }
            else if (rpm > 0)
            {
                userRpm -= data.engineDecr;
            }
            else if (rpm != 0)
            {
                userRpm = 0;
            }

            rpm = userRpm * data.gearRatios[gear] * data.differentialRatio * data.transmissionEfficiency;
            rpm = Math.Min(rpm, 6400);


            Vector3 drag = -data.drag * velocity * velocity.Length;
            Vector3 rollingResistance = -data.rollingResistance * velocity;

            // Braking
            if (InputHandler.GetStatus().keyboardKeys[OpenTK.Input.Key.Space] && velocity.LengthWithSign() > 0)
            {
                velocity = -forward * data.brake;
            }

            if (velocity.Length < 0)
            {
                velocity = Vector3.Zero; // TODO: reverse
            }
            Vector3 traction          = forward * GetTorqueCurve() * data.gearRatios[gear] * data.differentialRatio * data.transmissionEfficiency * MULT_CONST;
            Vector3 longitudinalForce = traction + drag + rollingResistance;
            Vector3 acceleration      = longitudinalForce / data.mass;

            velocity = velocity + (delta * acceleration);

            if (rpm > data.gearChangeUpperThreshold && gear < 4)
            {
                rpmAtGearChanges += gear + " -> " + (gear + 1) + " @ " + rpm + "\n";
                gear++;
            }
            else if (rpm < data.gearChangeLowerThreshold && gear > 0)
            {
                rpmAtGearChanges += gear + " -> " + (gear - 1) + " @ " + rpm + "\n";
                gear--;
            }
            //var enginePitch = Math.Min(Math.Max(0.2f + (Math.Min(rpm / 6400, 0.8f)), 0.5f), 1.0f);
            //engineSound.SetPitch(enginePitch);

            Dictionary <string, Any> debugData = new Dictionary <string, Any>()
            {
                { "= = = = Transform properties", "= = =" },
                { "Velocity", velocity },
                { "Position", position },

                { "= = = = Engine Logic", "= = =" },
                { "Traction", traction },
                { "Drag", drag },
                { "Rolling resistance", rollingResistance },
                { "Longitudinal force", longitudinalForce },
                { "Acceleration", acceleration },


                { "= = = = Car Logic", "= = =" },
                { "Gear", gear },
                { "Current gear ratio", data.gearRatios[gear] },
                { "Current torque", GetTorqueCurve() },
                { "RPM", rpm },
                { "Input RPM", userRpm },
                { "Gear change @ RPM", rpmAtGearChanges },
                { "Speed (MPH)", (velocity.Length / 100) * MPH_CONST },


                { "= = = = Constants", "= = =" },
                { "Car name", data.name },
                { "Constant drag", data.drag },
                { "Constant rolling resistance", data.rollingResistance },
                { "Constant mass", data.mass },
                { "Transmission efficiency", data.transmissionEfficiency },
                { "Differential ratio", data.differentialRatio }
            };

            foreach (KeyValuePair <string, Any> a in debugData)
            {
                DebugHook.PushDebugData(a.Key, a.Value);
            }

            position = position + (delta * velocity);



            Render3D.sceneCamera.position      = new Vector3(6, 2, 0);
            Render3D.sceneCamera.vAngle        = -currentEuler.Y;
            Render3D.sceneCamera.worldPosition = position;
            Render3D.sceneCamera.fieldOfView   = 55;
        }
Exemplo n.º 5
0
    public void instantiateButtonTemplates()
    {
        for (int i = 0; i < templateParent.transform.childCount; i++)
        {
            Debug.Log("Destroy");
            Destroy(templateParent.transform.GetChild(i).gameObject);
            for (int j = 0; j < navigationCanvas.transform.childCount; j++)
            {
                SceneProperties sp = navigationCanvas.transform.GetChild(j).transform.GetComponent <SceneProperties> ();
                sp.initialTime.Clear();
            }
        }

        player   = DomeObject.transform.GetComponent <VideoPlayer> ();
        duration = player.frameCount / player.frameRate;
        if (DomeObject.transform.GetComponent <VideoPlayer> ().isActiveAndEnabled)
        {
            for (int i = 0; i < navigationCanvas.transform.childCount; i++)
            {
                if (navigationCanvas.transform.GetChild(i).gameObject.activeSelf)
                {
                    for (int j = 0; j < navigationCanvas.transform.GetChild(i).childCount; j++)
                    {
                        GameObject temp = Instantiate(timelineTemplate);
                        temp.transform.GetChild(1).transform.GetComponent <Text> ().text = navigationCanvas.transform.GetChild(i).transform.GetChild(j).name;
                        if (navigationCanvas.transform.GetChild(i).transform.GetChild(j).GetComponent <MenuHotspot> ())
                        {
                            temp.transform.GetChild(0).transform.GetComponent <Image> ().color = Color.blue;
                            temp.transform.GetChild(2).transform.GetChild(2).transform.GetChild(0).GetComponent <Image>().color = Color.blue;
                            temp.transform.GetChild(3).transform.GetChild(2).transform.GetChild(0).GetComponent <Image>().color = Color.blue;
                        }
                        if (navigationCanvas.transform.GetChild(i).transform.GetChild(j).GetComponent <navigateActionHotspot> ())
                        {
                            temp.transform.GetChild(0).transform.GetComponent <Image> ().color = new Color(255f, 255f, 0f);
                            temp.transform.GetChild(2).transform.GetChild(2).transform.GetChild(0).GetComponent <Image>().color = new Color(255f, 255f, 0f);
                            temp.transform.GetChild(3).transform.GetChild(2).transform.GetChild(0).GetComponent <Image>().color = new Color(255f, 255f, 0f);
                        }
                        if (navigationCanvas.transform.GetChild(i).transform.GetChild(j).GetComponent <MediaHotspot> ())
                        {
                            temp.transform.GetChild(0).transform.GetComponent <Image> ().color = purpleObject.GetComponent <Image> ().color;
                            temp.transform.GetChild(2).transform.GetChild(2).transform.GetChild(0).GetComponent <Image>().color = purpleObject.GetComponent <Image> ().color;
                            temp.transform.GetChild(3).transform.GetChild(2).transform.GetChild(0).GetComponent <Image>().color = purpleObject.GetComponent <Image> ().color;
                        }
                        if (navigationCanvas.transform.GetChild(i).transform.GetChild(j).GetComponent <textActionHotspot> ())
                        {
                            temp.transform.GetChild(0).transform.GetComponent <Image> ().color = new Color(255f, 0f, 0f);
                            temp.transform.GetChild(2).transform.GetChild(2).transform.GetChild(0).GetComponent <Image>().color = new Color(255f, 0f, 0f);
                            temp.transform.GetChild(3).transform.GetChild(2).transform.GetChild(0).GetComponent <Image>().color = new Color(255f, 0f, 0f);
                        }
                        if (navigationCanvas.transform.GetChild(i).transform.GetChild(j).GetComponent <NewActionHotspot> ())
                        {
                            temp.transform.GetChild(0).transform.GetComponent <Image> ().color = Color.green;
                            temp.transform.GetChild(2).transform.GetChild(2).transform.GetChild(0).GetComponent <Image> ().color = Color.green;
                            temp.transform.GetChild(3).transform.GetChild(2).transform.GetChild(0).GetComponent <Image>().color  = Color.green;
                        }
                        if (navigationCanvas.transform.GetChild(i).transform.GetChild(j).GetComponent <helpActionHotspot> ())
                        {
                            temp.transform.GetChild(0).transform.GetComponent <Image> ().color = new Color(0f, 223f, 255f);
                            temp.transform.GetChild(2).transform.GetChild(2).transform.GetChild(0).GetComponent <Image>().color = new Color(0f, 223f, 255f);
                            temp.transform.GetChild(3).transform.GetChild(2).transform.GetChild(0).GetComponent <Image>().color = new Color(0f, 223f, 255f);
                        }
                        temp.transform.parent     = templateParent.transform;
                        temp.transform.localScale = new Vector3(1f, 1f, 1f);
                        temp.GetComponent <RectTransform>().localPosition = new Vector3(0f, 0f, 0f);
                        SceneProperties sp = navigationCanvas.transform.GetChild(i).transform.GetComponent <SceneProperties> ();
                        sp.initialTime.Add(0f);
                        Debug.Log("duration is" + duration);
                        sp.finalTime.Add(duration);
                        temp.transform.GetComponent <templateTimelineScript> ().takeInfo(sp, j, duration);
                    }
                }
            }
        }
    }
Exemplo n.º 6
0
        public override void Init()
        {
            // IPlayerMovementFunction movementFunction;
            var sceneProperties = new SceneProperties();
            var themeData = contentLoader.LoadAsset<ThemeData>("Themes/CampaignWorld1");
            var sceneData = contentLoader.LoadAsset<SceneData>("Scenarios/Campaign/Level1");

            Scene scene = new Scene(sceneData);
            ITheme theme = new Theme(themeData);
            ICollisionMap collistionMap = new CollisionMap(scene);

            var playerPresentation = objectsFactory.CreateAnimatedSprite("Sprites/Hero/Sprites");
            player.Init(scene2d, playerPresentation as IAnimatedObject, sceneProperties, collistionMap);
            player.SetRelativePosition(new Vector2(sceneProperties.TileSize));
            player.AddChild(playerPresentation);

            IMovementFunction movementFunction = functionsFactory.CreatePlayerMovement(player);
            movementFunction.RegisterMovmentListener(player);

            scene2d.Init(camera, theme, sceneProperties, scene, player);
        }
Exemplo n.º 7
0
 public void takeInfo(SceneProperties sceneProp, int i, float dur)
 {
     sp            = sceneProp;
     buttonIdIndex = i;
     duration      = dur;
 }
Exemplo n.º 8
0
        public void Update(SceneProperties sceneProperties)
        {
            Vector3 force = Vector3.Zero;

            delta = (float)Time.lastFrameTime / 20;
            if (InputHandler.GetStatus().keyboardKeys[OpenTK.Input.Key.F1] && !debugKeyPressedLastFrame)
            {
                currentEuler = Vector3.Zero;
                sceneProperties.cameraMode = (CameraMode)(((int)sceneProperties.cameraMode + 1) % 4);
                debugKeyPressedLastFrame   = true;
            }
            else if (!InputHandler.GetStatus().keyboardKeys[OpenTK.Input.Key.F1] && debugKeyPressedLastFrame)
            {
                debugKeyPressedLastFrame = false;
            }
            if (Time.currentTime - lastUpdate >= 1)
            {
                Logging.Write((currentAccel * MILES_PER_HOUR) + "MPH");
                lastUpdate = Time.currentTime;
            }
            if (InputHandler.GetStatus().keyboardKeys[OpenTK.Input.Key.W])
            {
                if (currentAccel < maxAccel)
                {
                    force += new Vector3(accel, 0, 0);
                    Accelerate(accel);
                }
            }
            else
            {
                if (currentAccel > 0)
                {
                    force -= new Vector3(decel, 0, 0);
                    Accelerate(-decel);
                }
            }

            force *= 100000;

            acceleration = force / data.mass;
            velocity     = velocity + (delta * acceleration);
            //position = position + (delta * velocity);

            position -= forward * currentAccel;

            if (InputHandler.GetStatus().keyboardKeys[OpenTK.Input.Key.A] && Math.Round(currentAccel, 2) != 0)
            {
                if (turningWeight < 0)
                {
                    turningWeight += turningSensitivity * delta * currentAccel * turningDecreaseMultiplier;
                }
                else
                {
                    turningWeight += turningSensitivity * delta * currentAccel;
                }
            }
            else if (InputHandler.GetStatus().keyboardKeys[OpenTK.Input.Key.D] && Math.Round(currentAccel, 2) != 0)
            {
                if (turningWeight > 0)
                {
                    turningWeight -= turningSensitivity * delta * currentAccel * turningDecreaseMultiplier;
                }
                else
                {
                    turningWeight -= turningSensitivity * delta * currentAccel;
                }
            }
            else
            {
                if (turningWeight > 0)
                {
                    turningWeight -= turningSensitivity * delta * turningDecreaseMultiplier;
                }
                if (turningWeight < 0)
                {
                    turningWeight += turningSensitivity * delta * turningDecreaseMultiplier;
                }
            }

            if (turningWeight > turningLimit)
            {
                turningWeight = turningLimit;
            }
            if (turningWeight < -turningLimit)
            {
                turningWeight = -turningLimit;
            }
            Turn(turningWeight);
            Rotate(new Vector3(0, 1, 0) * turningWeight);

            Render3D.sceneCamera.worldPosition = position;
            Render3D.sceneCamera.fieldOfView   = 50 + (currentAccel * 10);
            switch (sceneProperties.cameraMode)
            {
            case CameraMode.Bonnet:
                Render3D.sceneCamera.position = new Vector3(-1.5f, 1, 0);
                Render3D.sceneCamera.vAngle   = -currentEuler.Y;
                break;

            case CameraMode.Follow:
                if (InputHandler.GetStatus().keyboardKeys[OpenTK.Input.Key.E])
                {
                    Render3D.sceneCamera.position  = new Vector3(9, 2, 0) - new Vector3(currentAccel, 0, 0);
                    Render3D.sceneCamera.lookAtPos = new Vector3(-10, 3, 0);
                }
                else
                {
                    Render3D.sceneCamera.position  = new Vector3(-9, 2, 0) + new Vector3(currentAccel, 0, 0);
                    Render3D.sceneCamera.lookAtPos = new Vector3(10, 3, 0);
                }
                Render3D.sceneCamera.vAngle = -currentEuler.Y + (-turningWeight / 280.0f);
                break;

            case CameraMode.FollowDebug:
                Render3D.sceneCamera.hAngle   = -currentEuler.Y + InputHandler.GetStatus().mousePosition.Y / 100.0f;
                Render3D.sceneCamera.position = new Vector3(10, 2, 0) + new Vector3(currentAccel, 0, 0);
                if (InputHandler.GetStatus().mouseButtonLeft)
                {
                    Render3D.sceneCamera.vAngle += (InputHandler.GetStatus().mouseDelta.X);
                }
                break;

            case CameraMode.Freecam:
                if (InputHandler.GetStatus().keyboardKeys[OpenTK.Input.Key.Up])
                {
                    cameraDebugPos += new Vector3(1, 0, 0);
                }
                if (InputHandler.GetStatus().keyboardKeys[OpenTK.Input.Key.Down])
                {
                    cameraDebugPos -= new Vector3(1, 0, 0);
                }
                if (InputHandler.GetStatus().keyboardKeys[OpenTK.Input.Key.Left])
                {
                    cameraDebugPos += new Vector3(0, 0, 1);
                }
                if (InputHandler.GetStatus().keyboardKeys[OpenTK.Input.Key.Right])
                {
                    cameraDebugPos -= new Vector3(0, 0, 1);
                }
                if (InputHandler.GetStatus().keyboardKeys[OpenTK.Input.Key.Q])
                {
                    cameraDebugPos += new Vector3(0, 1, 0);
                }
                if (InputHandler.GetStatus().keyboardKeys[OpenTK.Input.Key.E])
                {
                    cameraDebugPos -= new Vector3(0, 1, 0);
                }
                //Render3D.sceneCamera.worldPosition = Vector3.Zero;
                Render3D.sceneCamera.position  = cameraDebugPos;
                Render3D.sceneCamera.lookAtPos = cameraDebugPos + new Vector3(-10, 0, 0);
                Render3D.sceneCamera.hAngle    = InputHandler.GetStatus().mousePosition.Y / 100.0f;
                Render3D.sceneCamera.vAngle    = InputHandler.GetStatus().mousePosition.X / 100.0f;
                break;

            default:
                break;
            }
        }