Advertisement
Guest User

KerbalGreenscreen - Source Code

a guest
Sep 23rd, 2015
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.80 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using UnityEngine;
  7. using KSP;
  8. using System.Text.RegularExpressions;
  9.  
  10. namespace KerbalGreenscreen
  11. {
  12.     [KSPAddon(KSPAddon.Startup.Flight, false)]
  13.     public class greenscreen : MonoBehaviour
  14.     {
  15.         private Camera[] cameras;
  16.         private float screenDistance = 100;
  17.         private float[] greenscreenRGB;
  18.         private bool greenscreenActivated = false;
  19.         private float[] defaultFarClipPlane;
  20.         private CameraClearFlags[] defaultCameraClearFlags;
  21.  
  22.         public void Start()
  23.         {
  24.             cameras = new Camera[3];
  25.             cameras[0] = GameObject.Find("Camera 00").GetComponent<Camera>();
  26.             cameras[1] = GameObject.Find("Camera 01").GetComponent<Camera>();
  27.             cameras[2] = GameObject.Find("Camera ScaledSpace").GetComponent<Camera>();
  28.             defaultFarClipPlane = new float[2];
  29.             defaultCameraClearFlags = new CameraClearFlags[2];
  30.             defaultFarClipPlane[0] = cameras[0].farClipPlane;
  31.             defaultFarClipPlane[1] = cameras[1].farClipPlane;
  32.             defaultCameraClearFlags[0] = cameras[0].clearFlags;
  33.             defaultCameraClearFlags[1] = cameras[1].clearFlags;
  34.             greenscreenRGB = new float[3];
  35.             greenscreenRGB[0] = 255;
  36.             SgreenscreenRGB = new string[3];
  37.             SgreenscreenRGB[0] = "0";
  38.             SgreenscreenRGB[1] = "255";
  39.             SgreenscreenRGB[2] = "0";
  40.             initStyles();
  41.         }
  42.  
  43.         public void Update()
  44.         {
  45.             if (Input.GetKey(KeyCode.LeftAlt) && Input.GetKeyDown(KeyCode.Backslash))
  46.             {
  47.                 windowActive = !windowActive;
  48.             }
  49.  
  50.             if (greenscreenActivated && !MapView.MapIsEnabled)
  51.             {
  52.  
  53.                 if (screenDistance < defaultFarClipPlane[0])
  54.                 {
  55.                     cameras[0].farClipPlane = screenDistance;
  56.                     cameras[1].farClipPlane = screenDistance;
  57.                     cameras[0].clearFlags = CameraClearFlags.SolidColor;
  58.                     cameras[1].clearFlags = CameraClearFlags.SolidColor;
  59.                 }
  60.                 else
  61.                 {
  62.                     cameras[0].farClipPlane = defaultFarClipPlane[0];
  63.                     cameras[1].farClipPlane = screenDistance;
  64.                     cameras[0].clearFlags = defaultCameraClearFlags[0];
  65.                     cameras[1].clearFlags = CameraClearFlags.SolidColor;
  66.                 }
  67.  
  68.                 cameras[2].enabled = false;
  69.  
  70.                 cameras[0].backgroundColor = new Color(greenscreenRGB[0] / 255, greenscreenRGB[1] / 255, greenscreenRGB[2] / 255, 1);
  71.                 cameras[1].backgroundColor = new Color(greenscreenRGB[0] / 255, greenscreenRGB[1] / 255, greenscreenRGB[2] / 255, 1);
  72.             }
  73.             else
  74.             {
  75.                 cameras[0].farClipPlane = defaultFarClipPlane[0];
  76.                 cameras[1].farClipPlane = defaultFarClipPlane[1];
  77.                 cameras[0].clearFlags = defaultCameraClearFlags[0];
  78.                 cameras[1].clearFlags = defaultCameraClearFlags[1];
  79.                 cameras[2].enabled = true;
  80.             }
  81.  
  82.             for (int i = 0; i < 3; i++)
  83.             {
  84.                 if (SgreenscreenRGB[i] != "") greenscreenRGB[i] = float.Parse(SgreenscreenRGB[i]);
  85.                 else greenscreenRGB[i] = 0;
  86.  
  87.                 if (greenscreenRGB[i] > 255)
  88.                 {
  89.                     greenscreenRGB[i] = 255;
  90.                     SgreenscreenRGB[i] = "255";
  91.                 }
  92.                 if (greenscreenRGB[i] < 0)
  93.                 {
  94.                     greenscreenRGB[i] = 0;
  95.                     SgreenscreenRGB[i] = "0";
  96.                 }
  97.             }
  98.  
  99.             if (greenscreenDistance != "") screenDistance = int.Parse(greenscreenDistance);
  100.             else screenDistance = 0;
  101.             if (screenDistance > 10000)
  102.             {
  103.                 screenDistance = 10000;
  104.                 greenscreenDistance = "10000";
  105.             }
  106.         }
  107.  
  108.         private Rect windowRect = new Rect(8, 50, 0, 0);
  109.         private GUIStyle windowStyle, labelStyle, titleLabelStyle, textFieldStyle, boxStyle, toggleStyle;
  110.         private string greenscreenDistance = "100";
  111.         private string[] SgreenscreenRGB;
  112.         private bool windowActive = false;
  113.  
  114.         void OnGUI()
  115.         {
  116.             if (windowActive && !MapView.MapIsEnabled) windowRect = GUILayout.Window(13, windowRect, WindowFunction, "Greenscreen Settings", windowStyle);
  117.         }
  118.  
  119.         void WindowFunction(int windowID)
  120.         {
  121.             greenscreenActivated = GUILayout.Toggle(greenscreenActivated, "Enable Greenscreen", HighLogic.Skin.toggle);
  122.             GUILayout.BeginVertical(boxStyle);
  123.             GUILayout.Label("Distance", titleLabelStyle);
  124.             GUILayout.BeginHorizontal("", GUIStyle.none);
  125.             greenscreenDistance = GUILayout.TextField(greenscreenDistance, 5, HighLogic.Skin.textField);
  126.             greenscreenDistance = Regex.Replace(greenscreenDistance, "[^0-9]", "");
  127.             GUILayout.EndHorizontal();
  128.             GUILayout.EndVertical();
  129.  
  130.             GUILayout.BeginVertical(boxStyle);
  131.             GUILayout.Label("Colour", titleLabelStyle);
  132.             GUILayout.BeginHorizontal("", GUIStyle.none);
  133.             GUILayout.Label("R:", labelStyle);
  134.             SgreenscreenRGB[0] = GUILayout.TextField(SgreenscreenRGB[0],3,textFieldStyle);
  135.             SgreenscreenRGB[0] = Regex.Replace(SgreenscreenRGB[0], "[^0-9]", "");
  136.             GUILayout.Label("G:", labelStyle);
  137.             SgreenscreenRGB[1] = GUILayout.TextField(SgreenscreenRGB[1],3,textFieldStyle);
  138.             SgreenscreenRGB[1] = Regex.Replace(SgreenscreenRGB[1], "[^0-9]", "");
  139.             GUILayout.Label("B:", labelStyle);
  140.             SgreenscreenRGB[2] = GUILayout.TextField(SgreenscreenRGB[2],3,textFieldStyle);
  141.             SgreenscreenRGB[2] = Regex.Replace(SgreenscreenRGB[2], "[^0-9]", "");
  142.             GUILayout.EndHorizontal();
  143.             GUILayout.EndVertical();
  144.  
  145.             GUI.DragWindow();
  146.         }
  147.  
  148.         void initStyles()
  149.         {
  150.             windowStyle = new GUIStyle(HighLogic.Skin.window);
  151.             windowStyle.fixedWidth = 210;
  152.             windowStyle.fixedHeight = 180;
  153.             labelStyle = new GUIStyle(HighLogic.Skin.label);
  154.             titleLabelStyle = new GUIStyle(HighLogic.Skin.label);
  155.             titleLabelStyle.stretchWidth = true;
  156.             titleLabelStyle.alignment = TextAnchor.MiddleCenter;
  157.             textFieldStyle = new GUIStyle(HighLogic.Skin.textField);
  158.             textFieldStyle.fixedWidth = 42;
  159.             textFieldStyle.margin.bottom = 5;
  160.             boxStyle = new GUIStyle(HighLogic.Skin.box);
  161.             boxStyle.fixedHeight = 58;
  162.         }
  163.     }
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement