Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using UnityEngine;
- using KSP;
- using System.Text.RegularExpressions;
- namespace KerbalGreenscreen
- {
- [KSPAddon(KSPAddon.Startup.Flight, false)]
- public class greenscreen : MonoBehaviour
- {
- private Camera[] cameras;
- private float screenDistance = 100;
- private float[] greenscreenRGB;
- private bool greenscreenActivated = false;
- private float[] defaultFarClipPlane;
- private CameraClearFlags[] defaultCameraClearFlags;
- public void Start()
- {
- cameras = new Camera[3];
- cameras[0] = GameObject.Find("Camera 00").GetComponent<Camera>();
- cameras[1] = GameObject.Find("Camera 01").GetComponent<Camera>();
- cameras[2] = GameObject.Find("Camera ScaledSpace").GetComponent<Camera>();
- defaultFarClipPlane = new float[2];
- defaultCameraClearFlags = new CameraClearFlags[2];
- defaultFarClipPlane[0] = cameras[0].farClipPlane;
- defaultFarClipPlane[1] = cameras[1].farClipPlane;
- defaultCameraClearFlags[0] = cameras[0].clearFlags;
- defaultCameraClearFlags[1] = cameras[1].clearFlags;
- greenscreenRGB = new float[3];
- greenscreenRGB[0] = 255;
- SgreenscreenRGB = new string[3];
- SgreenscreenRGB[0] = "0";
- SgreenscreenRGB[1] = "255";
- SgreenscreenRGB[2] = "0";
- initStyles();
- }
- public void Update()
- {
- if (Input.GetKey(KeyCode.LeftAlt) && Input.GetKeyDown(KeyCode.Backslash))
- {
- windowActive = !windowActive;
- }
- if (greenscreenActivated && !MapView.MapIsEnabled)
- {
- if (screenDistance < defaultFarClipPlane[0])
- {
- cameras[0].farClipPlane = screenDistance;
- cameras[1].farClipPlane = screenDistance;
- cameras[0].clearFlags = CameraClearFlags.SolidColor;
- cameras[1].clearFlags = CameraClearFlags.SolidColor;
- }
- else
- {
- cameras[0].farClipPlane = defaultFarClipPlane[0];
- cameras[1].farClipPlane = screenDistance;
- cameras[0].clearFlags = defaultCameraClearFlags[0];
- cameras[1].clearFlags = CameraClearFlags.SolidColor;
- }
- cameras[2].enabled = false;
- cameras[0].backgroundColor = new Color(greenscreenRGB[0] / 255, greenscreenRGB[1] / 255, greenscreenRGB[2] / 255, 1);
- cameras[1].backgroundColor = new Color(greenscreenRGB[0] / 255, greenscreenRGB[1] / 255, greenscreenRGB[2] / 255, 1);
- }
- else
- {
- cameras[0].farClipPlane = defaultFarClipPlane[0];
- cameras[1].farClipPlane = defaultFarClipPlane[1];
- cameras[0].clearFlags = defaultCameraClearFlags[0];
- cameras[1].clearFlags = defaultCameraClearFlags[1];
- cameras[2].enabled = true;
- }
- for (int i = 0; i < 3; i++)
- {
- if (SgreenscreenRGB[i] != "") greenscreenRGB[i] = float.Parse(SgreenscreenRGB[i]);
- else greenscreenRGB[i] = 0;
- if (greenscreenRGB[i] > 255)
- {
- greenscreenRGB[i] = 255;
- SgreenscreenRGB[i] = "255";
- }
- if (greenscreenRGB[i] < 0)
- {
- greenscreenRGB[i] = 0;
- SgreenscreenRGB[i] = "0";
- }
- }
- if (greenscreenDistance != "") screenDistance = int.Parse(greenscreenDistance);
- else screenDistance = 0;
- if (screenDistance > 10000)
- {
- screenDistance = 10000;
- greenscreenDistance = "10000";
- }
- }
- private Rect windowRect = new Rect(8, 50, 0, 0);
- private GUIStyle windowStyle, labelStyle, titleLabelStyle, textFieldStyle, boxStyle, toggleStyle;
- private string greenscreenDistance = "100";
- private string[] SgreenscreenRGB;
- private bool windowActive = false;
- void OnGUI()
- {
- if (windowActive && !MapView.MapIsEnabled) windowRect = GUILayout.Window(13, windowRect, WindowFunction, "Greenscreen Settings", windowStyle);
- }
- void WindowFunction(int windowID)
- {
- greenscreenActivated = GUILayout.Toggle(greenscreenActivated, "Enable Greenscreen", HighLogic.Skin.toggle);
- GUILayout.BeginVertical(boxStyle);
- GUILayout.Label("Distance", titleLabelStyle);
- GUILayout.BeginHorizontal("", GUIStyle.none);
- greenscreenDistance = GUILayout.TextField(greenscreenDistance, 5, HighLogic.Skin.textField);
- greenscreenDistance = Regex.Replace(greenscreenDistance, "[^0-9]", "");
- GUILayout.EndHorizontal();
- GUILayout.EndVertical();
- GUILayout.BeginVertical(boxStyle);
- GUILayout.Label("Colour", titleLabelStyle);
- GUILayout.BeginHorizontal("", GUIStyle.none);
- GUILayout.Label("R:", labelStyle);
- SgreenscreenRGB[0] = GUILayout.TextField(SgreenscreenRGB[0],3,textFieldStyle);
- SgreenscreenRGB[0] = Regex.Replace(SgreenscreenRGB[0], "[^0-9]", "");
- GUILayout.Label("G:", labelStyle);
- SgreenscreenRGB[1] = GUILayout.TextField(SgreenscreenRGB[1],3,textFieldStyle);
- SgreenscreenRGB[1] = Regex.Replace(SgreenscreenRGB[1], "[^0-9]", "");
- GUILayout.Label("B:", labelStyle);
- SgreenscreenRGB[2] = GUILayout.TextField(SgreenscreenRGB[2],3,textFieldStyle);
- SgreenscreenRGB[2] = Regex.Replace(SgreenscreenRGB[2], "[^0-9]", "");
- GUILayout.EndHorizontal();
- GUILayout.EndVertical();
- GUI.DragWindow();
- }
- void initStyles()
- {
- windowStyle = new GUIStyle(HighLogic.Skin.window);
- windowStyle.fixedWidth = 210;
- windowStyle.fixedHeight = 180;
- labelStyle = new GUIStyle(HighLogic.Skin.label);
- titleLabelStyle = new GUIStyle(HighLogic.Skin.label);
- titleLabelStyle.stretchWidth = true;
- titleLabelStyle.alignment = TextAnchor.MiddleCenter;
- textFieldStyle = new GUIStyle(HighLogic.Skin.textField);
- textFieldStyle.fixedWidth = 42;
- textFieldStyle.margin.bottom = 5;
- boxStyle = new GUIStyle(HighLogic.Skin.box);
- boxStyle.fixedHeight = 58;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement