예제 #1
0
    private void Start()
    {
        flipXYZ   = new bool3(true, false, false);
        wasVSync  = false;
        meshPaths = GetFilePaths();

        resolutionX = Screen.width;
        resolutionY = Screen.height;

        renderManager = new RenderManager();

        worldLODs = new World[LOD_LEVELS];

        GameObject child = new GameObject("fake-cam");

        child.transform.SetParent(transform);
        child.transform.localPosition = Vector3.zero;
        child.transform.localRotation = Quaternion.identity;
        fakeCamera = child.AddComponent <Camera>();
        fakeCamera.CopyFrom(GetComponent <Camera>());
        fakeCamera.enabled = false;

        renderMode = ERenderMode.ScreenBuffer;
        ApplyRenderMode();
    }
예제 #2
0
        private void OnMenuClickRenderMode(Object sender, EventArgs e)
        {
            ToolStripItem item = (ToolStripItem)sender;

            ERenderMode rm = (ERenderMode)(Enum.Parse(typeof(ERenderMode), item.Text));

            m_view.RenderMode = rm;
        }
예제 #3
0
        public void applyGraphicsSettings()
        {
            if (Dedicator.isDedicated)
            {
                return;
            }
            if (GraphicsSettings.blend)
            {
                ERenderMode renderMode = GraphicsSettings.renderMode;
                if (renderMode != ERenderMode.FORWARD)
                {
                    if (renderMode != ERenderMode.DEFERRED)
                    {
                        this.terrain.materialTemplate = null;
                        Debug.LogError("Unknown render mode: " + GraphicsSettings.renderMode);
                    }
                    else
                    {
                        this.terrain.materialTemplate = Resources.Load <Material>("Materials/Landscapes/Landscape_Deferred");
                    }
                }
                else
                {
                    this.terrain.materialTemplate = Resources.Load <Material>("Materials/Landscapes/Landscape_Forward");
                }
                this.terrain.basemapDistance = 512f;
            }
            else
            {
                this.terrain.materialTemplate = Resources.Load <Material>("Materials/Landscapes/Landscape_Classic");
                this.terrain.basemapDistance  = 256f;
            }
            switch (GraphicsSettings.terrainQuality)
            {
            case EGraphicQuality.LOW:
                this.terrain.heightmapPixelError = 64f;
                break;

            case EGraphicQuality.MEDIUM:
                this.terrain.heightmapPixelError = 32f;
                break;

            case EGraphicQuality.HIGH:
                this.terrain.heightmapPixelError = 16f;
                break;

            case EGraphicQuality.ULTRA:
                this.terrain.heightmapPixelError = 8f;
                break;
            }
        }
예제 #4
0
		public static void mapify()
		{
			RenderTexture temporary = RenderTexture.GetTemporary((int)Level.size, (int)Level.size, 32);
			temporary.name = "Texture";
			Level.mapper.GetComponent<Camera>().targetTexture = temporary;
			bool fog = RenderSettings.fog;
			AmbientMode ambientMode = RenderSettings.ambientMode;
			Color ambientSkyColor = RenderSettings.ambientSkyColor;
			Color ambientEquatorColor = RenderSettings.ambientEquatorColor;
			Color ambientGroundColor = RenderSettings.ambientGroundColor;
			float heightmapPixelError = 0f;
			float heightmapPixelError2 = 0f;
			float basemapDistance = 0f;
			float basemapDistance2 = 0f;
			if (LevelGround.terrain != null)
			{
				heightmapPixelError = LevelGround.terrain.heightmapPixelError;
				heightmapPixelError2 = LevelGround.terrain2.heightmapPixelError;
				basemapDistance = LevelGround.terrain.basemapDistance;
				basemapDistance2 = LevelGround.terrain2.basemapDistance;
			}
			float lodBias = QualitySettings.lodBias;
			float @float = LevelLighting.sea.GetFloat("_Shininess");
			Color color = LevelLighting.sea.GetColor("_SpecularColor");
			ERenderMode renderMode = GraphicsSettings.renderMode;
			GraphicsSettings.renderMode = ERenderMode.FORWARD;
			GraphicsSettings.apply();
			RenderSettings.fog = false;
			RenderSettings.ambientMode = 1;
			RenderSettings.ambientSkyColor = Palette.AMBIENT;
			RenderSettings.ambientEquatorColor = Palette.AMBIENT;
			RenderSettings.ambientGroundColor = Palette.AMBIENT;
			if (LevelGround.terrain != null)
			{
				LevelGround.terrain.heightmapPixelError = 1f;
				LevelGround.terrain2.heightmapPixelError = 1f;
				LevelGround.terrain.basemapDistance = 8192f;
				LevelGround.terrain2.basemapDistance = 8192f;
			}
			LevelLighting.sea.SetFloat("_Shininess", 500f);
			LevelLighting.sea.SetColor("_SpecularColor", Color.black);
			QualitySettings.lodBias = float.MaxValue;
			for (byte b = 0; b < Regions.WORLD_SIZE; b += 1)
			{
				for (byte b2 = 0; b2 < Regions.WORLD_SIZE; b2 += 1)
				{
					if (!LevelObjects.regions[(int)b, (int)b2])
					{
						List<LevelObject> list = LevelObjects.objects[(int)b, (int)b2];
						for (int i = 0; i < list.Count; i++)
						{
							list[i].enableCollision();
							list[i].enableVisual();
							list[i].disableSkybox();
						}
					}
					if (!LevelGround.regions[(int)b, (int)b2])
					{
						List<ResourceSpawnpoint> list2 = LevelGround.trees[(int)b, (int)b2];
						for (int j = 0; j < list2.Count; j++)
						{
							list2[j].enable();
						}
					}
				}
			}
			Level.mapper.GetComponent<Camera>().Render();
			for (byte b3 = 0; b3 < Regions.WORLD_SIZE; b3 += 1)
			{
				for (byte b4 = 0; b4 < Regions.WORLD_SIZE; b4 += 1)
				{
					if (!LevelObjects.regions[(int)b3, (int)b4])
					{
						List<LevelObject> list3 = LevelObjects.objects[(int)b3, (int)b4];
						for (int k = 0; k < list3.Count; k++)
						{
							list3[k].disableCollision();
							list3[k].disableVisual();
							if (list3[k].isLandmarkQualityMet)
							{
								list3[k].enableSkybox();
							}
						}
					}
					if (!LevelGround.regions[(int)b3, (int)b4])
					{
						List<ResourceSpawnpoint> list4 = LevelGround.trees[(int)b3, (int)b4];
						for (int l = 0; l < list4.Count; l++)
						{
							list4[l].disable();
						}
					}
				}
			}
			GraphicsSettings.renderMode = renderMode;
			GraphicsSettings.apply();
			RenderSettings.fog = fog;
			RenderSettings.ambientMode = ambientMode;
			RenderSettings.ambientSkyColor = ambientSkyColor;
			RenderSettings.ambientEquatorColor = ambientEquatorColor;
			RenderSettings.ambientGroundColor = ambientGroundColor;
			if (LevelGround.terrain != null)
			{
				LevelGround.terrain.heightmapPixelError = heightmapPixelError;
				LevelGround.terrain2.heightmapPixelError = heightmapPixelError2;
				LevelGround.terrain.basemapDistance = basemapDistance;
				LevelGround.terrain2.basemapDistance = basemapDistance2;
			}
			LevelLighting.sea.SetFloat("_Shininess", @float);
			LevelLighting.sea.SetColor("_SpecularColor", color);
			QualitySettings.lodBias = lodBias;
			RenderTexture.active = temporary;
			Texture2D texture2D = new Texture2D(temporary.width, temporary.height);
			texture2D.name = "Mapify";
			texture2D.hideFlags = 61;
			texture2D.filterMode = 2;
			texture2D.ReadPixels(new Rect(0f, 0f, (float)temporary.width, (float)temporary.height), 0, 0);
			for (int m = 0; m < texture2D.width; m++)
			{
				for (int n = 0; n < texture2D.height; n++)
				{
					Color pixel = texture2D.GetPixel(m, n);
					if (pixel.a < 1f)
					{
						pixel.a = 1f;
						texture2D.SetPixel(m, n, pixel);
					}
				}
			}
			texture2D.Apply();
			byte[] bytes = texture2D.EncodeToPNG();
			ReadWrite.writeBytes(Level.info.path + "/Map.png", false, false, bytes);
			Object.DestroyImmediate(texture2D);
		}
예제 #5
0
    private void Update()
    {
        if (benchmarkTime >= 0f)
        {
            if (Input.GetKeyDown(KeyCode.Escape))
            {
                benchmarkTime     = -1f;
                MouseLook.enabled = true;
                return;
            }

            BenchmarkPath.SampleAnimation(gameObject, benchmarkTime / 40f);
            gameObject.transform.position = gameObject.transform.position * (float3)worldLODs[0].Dimensions;
            benchmarkTime += Time.deltaTime;
            benchmarkFrames++;

            if (benchmarkTime > BenchmarkPath.length * 40f)
            {
                lastBenchmarkResultFPS = benchmarkFrames / (BenchmarkPath.length * 40f);
                benchmarkTime          = -1f;
                MouseLook.enabled      = true;
            }
            return;
        }

        if (Input.GetKeyDown(KeyCode.Escape))
        {
            MouseLook.IsControlled = !MouseLook.IsControlled;
        }
        if (MouseLook.IsControlled)
        {
            MouseLook.DoUpdate();
        }

        if (Input.GetKey(KeyCode.W))
        {
            transform.position += transform.forward * Time.deltaTime * moveSpeed;
        }
        if (Input.GetKey(KeyCode.S))
        {
            transform.position -= transform.forward * Time.deltaTime * moveSpeed;
        }
        if (Input.GetKey(KeyCode.A))
        {
            transform.position -= transform.right * Time.deltaTime * moveSpeed;
        }
        if (Input.GetKey(KeyCode.D))
        {
            transform.position += transform.right * Time.deltaTime * moveSpeed;
        }

        if (Screen.fullScreenMode <= FullScreenMode.FullScreenWindow)
        {
            var main = Display.main;
            if (Screen.width != main.systemWidth || Screen.height != main.systemHeight)
            {
                Screen.SetResolution(main.systemWidth, main.systemHeight, true);
            }
        }

        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            renderMode = ERenderMode.ScreenBuffer;
            ApplyRenderMode();
        }
        else if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            renderMode = ERenderMode.RayBufferTopDown;
            ApplyRenderMode();
        }
        else if (Input.GetKeyDown(KeyCode.Alpha3))
        {
            renderMode = ERenderMode.RayBufferLeftRight;
            ApplyRenderMode();
        }
        else if (Input.GetKeyDown(KeyCode.Alpha4))
        {
            resolutionX *= 2;
            resolutionY *= 2;
        }
        else if (Input.GetKeyDown(KeyCode.Alpha5))
        {
            resolutionX /= 2;
            resolutionY /= 2;
        }
        else if (Input.GetKeyDown(KeyCode.Alpha6))
        {
            benchmarkTime     = 0f;
            benchmarkFrames   = 0;
            MouseLook.enabled = false;
            renderMode        = ERenderMode.ScreenBuffer;
        }

        float scroll = Input.mouseScrollDelta.y;

        if (scroll < 0f)
        {
            moveSpeed *= 0.9f;
        }
        else if (scroll > 0f)
        {
            moveSpeed *= 1.1f;
        }

        if (resolutionX > Screen.width)
        {
            resolutionX = Screen.width;
        }
        if (resolutionY > Screen.height)
        {
            resolutionY = Screen.height;
        }
    }