Preliminary port of DataLogger. Parts of the GUI are definitely broken, but the file writes.
[VOID.git] / VOID_DataLogger.cs
blob:a/VOID_DataLogger.cs -> blob:b/VOID_DataLogger.cs
--- a/VOID_DataLogger.cs
+++ b/VOID_DataLogger.cs
@@ -1,26 +1,35 @@
-//
-//  VOID_Orbital.cs
-//
-//  Author:
-//       toadicus <>
-//
-//  Copyright (c) 2013 toadicus
-//
-//  This program is free software: you can redistribute it and/or modify
-//  it under the terms of the GNU General Public License as published by
-//  the Free Software Foundation, either version 3 of the License, or
-//  (at your option) any later version.
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU General Public License
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+// VOID
+//
+// VOID_DataLogger.cs
+//
+// Copyright © 2014, toadicus
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification,
+// are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice,
+//    this list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation and/or other
+//    materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used
+//    to endorse or promote products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 using KSP;
 using System;
 using System.Collections.Generic;
+using ToadicusTools;
 using UnityEngine;
 
 namespace VOID
@@ -30,19 +39,19 @@
 		/*
 		 * Fields
 		 * */
-		protected bool stopwatch1_running = false;
-
-		protected bool csv_logging = false;
-		protected bool first_write = true;
-
-		protected double stopwatch1 = 0;
-
-		protected string csv_log_interval_str = "0.5";
+		protected bool stopwatch1_running;
+
+		protected bool csv_logging;
+		protected bool first_write;
+
+		protected double stopwatch1;
+
+		protected string csv_log_interval_str;
 
 		protected float csv_log_interval;
 
-		protected double csvWriteTimer = 0;
-		protected double csvCollectTimer = 0;
+		protected double csvWriteTimer;
+		protected double csvCollectTimer;
 
 		protected List<string> csvList = new List<string>();
 
@@ -57,21 +66,38 @@
 		public VOID_DataLogger()
 		{
 			this._Name = "CSV Data Logger";
+
+			this.stopwatch1_running = false;
+
+			this.csv_logging = false;
+			this.first_write = true;
+
+			this.stopwatch1 = 0;
+			this.csv_log_interval_str = "0.5";
+
+			this.csvWriteTimer = 0;
+			this.csvCollectTimer = 0;
+
+			this.WindowPos.x = Screen.width - 520;
+			this.WindowPos.y = 85;
 		}
 
 		public override void ModuleWindow(int _)
 		{
 			GUIStyle txt_white = new GUIStyle(GUI.skin.label);
 			txt_white.normal.textColor = txt_white.focused.textColor = Color.white;
+			txt_white.alignment = TextAnchor.UpperRight;
 			GUIStyle txt_green = new GUIStyle(GUI.skin.label);
 			txt_green.normal.textColor = txt_green.focused.textColor = Color.green;
+			txt_green.alignment = TextAnchor.UpperRight;
 			GUIStyle txt_yellow = new GUIStyle(GUI.skin.label);
 			txt_yellow.normal.textColor = txt_yellow.focused.textColor = Color.yellow;
+			txt_yellow.alignment = TextAnchor.UpperRight;
 
 			GUILayout.BeginVertical();
 
 			GUILayout.Label("System time: " + DateTime.Now.ToString("HH:mm:ss"));
-			GUILayout.Label(Tools.ConvertInterval(stopwatch1));
+			GUILayout.Label(VOID_Tools.ConvertInterval(stopwatch1));
 
 			GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
 			if (GUILayout.Button("Start"))
@@ -129,6 +155,24 @@
 				//increment timers
 				csvWriteTimer += Time.deltaTime;
 				csvCollectTimer += Time.deltaTime;
+
+				if (csvCollectTimer >= csv_log_interval && vessel.situation != Vessel.Situations.PRELAUNCH)
+				{
+					//data logging is on, vessel is not prelaunch, and interval has passed
+					//write a line to the list
+					line_to_csvList();  //write to the csv
+				}
+
+				if (csvList.Count != 0 && csvWriteTimer >= 15f)
+				{
+					// csvList is not empty and interval between writings to file has elapsed
+					//write it
+					string[] csvData;
+					csvData = (string[])csvList.ToArray();
+					Innsewerants_writeData(csvData);
+					csvList.Clear();
+					csvWriteTimer = 0f;
+				}
 			}
 			else
 			{
@@ -139,22 +183,9 @@
 				if (csvList.Count > 0) csvList.Clear();
 			}
 
-			if (csv_logging && csvCollectTimer >= csv_log_interval && vessel.situation != Vessel.Situations.PRELAUNCH)
-			{
-				//data logging is on, vessel is not prelaunch, and interval has passed
-				//write a line to the list
-				line_to_csvList();  //write to the csv
-			}
-
-			if (csvList.Count != 0 && csvWriteTimer >= 15f && csv_logging)
-			{
-				// csvList is not empty and interval between writings to file has elapsed
-				//write it
-				string[] csvData;
-				csvData = (string[])csvList.ToArray();
-				Innsewerants_writeData(csvData);
-				csvList.Clear();
-				csvWriteTimer = 0f;
+			if (stopwatch1_running)
+			{
+				stopwatch1 += Time.deltaTime;
 			}
 		}
 
@@ -203,7 +234,7 @@
 			line += vessel.flightIntegrator.getExternalTemperature().ToString("F2") + ";";
 			//gravity
 			double r_vessel = vessel.mainBody.Radius + vessel.mainBody.GetAltitude(vessel.findWorldCenterOfMass());
-			double g_vessel = (VOID_Core.Constant_G * vessel.mainBody.Mass) / Math.Pow(r_vessel, 2);
+			double g_vessel = (VOID_Core.Constant_G * vessel.mainBody.Mass) / (r_vessel * r_vessel);
 			line += g_vessel.ToString("F3") + ";";
 			//atm density
 			line += (vessel.atmDensity * 1000).ToString("F3") + ";";