Binary files /dev/null and b/GameData/VOID/Plugins/VOID.dll differ
Binary files /dev/null and b/GameData/VOID/Plugins/VesselSimulator.dll differ
ACTIVE_TEXTURE_MANAGER_CONFIG | |
{ | |
folder = VOID | |
enabled = true | |
OVERRIDES | |
{ | |
VOID/.* | |
{ | |
compress = true | |
mipmaps = false | |
scale = 1 | |
max_size = 0 | |
} | |
} | |
} | |
Binary files /dev/null and b/GameData/VOID/Textures/fundsgreen.png differ
Binary files /dev/null and b/GameData/VOID/Textures/fundsred.png differ
Binary files /dev/null and b/GameData/VOID/Textures/repgreen.png differ
Binary files /dev/null and b/GameData/VOID/Textures/repred.png differ
Binary files /dev/null and b/GameData/VOID/Textures/science.png differ
Binary files /dev/null and b/GameData/VOID/Textures/void_appIcon_dark.png differ
Binary files /dev/null and b/GameData/VOID/Textures/void_appIcon_dark_glow.png differ
Binary files /dev/null and b/GameData/VOID/Textures/void_appIcon_light.png differ
Binary files /dev/null and b/GameData/VOID/Textures/void_appIcon_light_glow.png differ
Binary files /dev/null and b/GameData/VOID/Textures/void_icon_dark.png differ
Binary files /dev/null and b/GameData/VOID/Textures/void_icon_dark_glow.png differ
Binary files /dev/null and b/GameData/VOID/Textures/void_icon_light.png differ
Binary files /dev/null and b/GameData/VOID/Textures/void_icon_light_glow.png differ
// VOID | // VOID |
// | // |
// AssemblyInfo.cs | // AssemblyInfo.cs |
// | // |
// Copyright © 2014, toadicus | // Copyright © 2014, toadicus |
// All rights reserved. | // All rights reserved. |
// | // |
// Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, |
// are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: |
// | // |
// 1. Redistributions of source code must retain the above copyright notice, | // 1. Redistributions of source code must retain the above copyright notice, |
// this list of conditions and the following disclaimer. | // this list of conditions and the following disclaimer. |
// | // |
// 2. Redistributions in binary form must reproduce the above copyright notice, | // 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 | // this list of conditions and the following disclaimer in the documentation and/or other |
// materials provided with the distribution. | // materials provided with the distribution. |
// | // |
// 3. Neither the name of the copyright holder nor the names of its contributors may be used | // 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. | // 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, | // 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 | // 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, | // 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 | // 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, | // 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 | // 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. | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
using System.Reflection; | using System.Reflection; |
using System.Runtime.CompilerServices; | using System.Runtime.CompilerServices; |
[assembly: KSPAssemblyDependency("ToadicusTools", 0, 0)] | [assembly: KSPAssemblyDependency("ToadicusTools", 0, 0)] |
[assembly: KSPAssemblyDependency("VesselSimulator", 0, 0)] | [assembly: KSPAssemblyDependency("VesselSimulator", 0, 0)] |
// Information about this assembly is defined by the following attributes. | // Information about this assembly is defined by the following attributes. |
// Change them to the values specific to your project. | // Change them to the values specific to your project. |
[assembly: AssemblyTitle("VOID")] | [assembly: AssemblyTitle("VOID")] |
[assembly: AssemblyDescription("A KSP mod that provides at-a-glance information about Vessels, Orbits, and their states.")] | [assembly: AssemblyDescription("A KSP mod that provides at-a-glance information about Vessels, Orbits, and their states.")] |
[assembly: AssemblyCopyright("toadicus")] | [assembly: AssemblyCopyright("toadicus")] |
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". | // The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". |
// The form "{Major}.{Minor}.*" will automatically update the build and revision, | // The form "{Major}.{Minor}.*" will automatically update the build and revision, |
// and "{Major}.{Minor}.{Build}.*" will update just the revision. | // and "{Major}.{Minor}.{Build}.*" will update just the revision. |
[assembly: AssemblyVersion("0.16.*")] | [assembly: AssemblyVersion("0.16.4.*")] |
// The following attributes are used to specify the signing key for the assembly, | // The following attributes are used to specify the signing key for the assembly, |
// if desired. See the Mono documentation for more information about signing. | // if desired. See the Mono documentation for more information about signing. |
//[assembly: AssemblyDelaySign(false)] | //[assembly: AssemblyDelaySign(false)] |
//[assembly: AssemblyKeyFile("")] | //[assembly: AssemblyKeyFile("")] |
<?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> |
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> | <PropertyGroup> |
<Configuration Condition=" '$(Configuration)' == '' ">Debug_win</Configuration> | <Configuration Condition=" '$(Configuration)' == '' ">Debug_win</Configuration> |
<ProductVersion>8.0.30703</ProductVersion> | <ProductVersion>8.0.30703</ProductVersion> |
<SchemaVersion>2.0</SchemaVersion> | <SchemaVersion>2.0</SchemaVersion> |
<ProjectGuid>{45ACC1CC-942C-4A66-BFC7-8BE375938B18}</ProjectGuid> | <ProjectGuid>{45ACC1CC-942C-4A66-BFC7-8BE375938B18}</ProjectGuid> |
<OutputType>Library</OutputType> | <OutputType>Library</OutputType> |
<RootNamespace>VOID</RootNamespace> | <RootNamespace>VOID</RootNamespace> |
<AssemblyName>VOID</AssemblyName> | <AssemblyName>VOID</AssemblyName> |
<CodePage>65001</CodePage> | <CodePage>65001</CodePage> |
<UseMSBuildEngine>False</UseMSBuildEngine> | <UseMSBuildEngine>False</UseMSBuildEngine> |
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion> | <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> |
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
<ReleaseVersion>0.11</ReleaseVersion> | <ReleaseVersion>0.11</ReleaseVersion> |
<SynchReleaseVersion>false</SynchReleaseVersion> | <SynchReleaseVersion>false</SynchReleaseVersion> |
</PropertyGroup> | </PropertyGroup> |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug_win|AnyCPU' "> | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug_win|AnyCPU' "> |
<DebugSymbols>true</DebugSymbols> | <DebugSymbols>true</DebugSymbols> |
<DebugType>full</DebugType> | <DebugType>full</DebugType> |
<Optimize>false</Optimize> | <Optimize>false</Optimize> |
<OutputPath>bin\Debug</OutputPath> | <OutputPath>bin\Debug</OutputPath> |
<DefineConstants>DEBUG; TRACE</DefineConstants> | <DefineConstants>DEBUG; TRACE</DefineConstants> |
<ErrorReport>prompt</ErrorReport> | <ErrorReport>prompt</ErrorReport> |
<WarningLevel>4</WarningLevel> | <WarningLevel>4</WarningLevel> |
<ConsolePause>false</ConsolePause> | <ConsolePause>false</ConsolePause> |
<CustomCommands> | <CustomCommands> |
<CustomCommands> | <CustomCommands> |
<Command type="AfterBuild" command="xcopy /Y ${TargetFile} ..\..\..\Games\KSP_win\GameData\VOID\Plugins\" /> | <Command type="AfterBuild" command="xcopy /Y ${TargetFile} ..\..\..\Games\KSP_win\GameData\VOID\Plugins\" /> |
</CustomCommands> | </CustomCommands> |
</CustomCommands> | </CustomCommands> |
</PropertyGroup> | </PropertyGroup> |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release_win|AnyCPU' "> | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release_win|AnyCPU' "> |
<Optimize>false</Optimize> | <Optimize>false</Optimize> |
<OutputPath>bin\Release</OutputPath> | <OutputPath>bin\Release</OutputPath> |
<ErrorReport>prompt</ErrorReport> | <ErrorReport>prompt</ErrorReport> |
<WarningLevel>4</WarningLevel> | <WarningLevel>4</WarningLevel> |
<ConsolePause>false</ConsolePause> | <ConsolePause>false</ConsolePause> |
<DefineConstants>TRACE</DefineConstants> | <DefineConstants>TRACE</DefineConstants> |
<CustomCommands> | <CustomCommands> |
<CustomCommands> | <CustomCommands> |
<Command type="AfterBuild" command="xcopy /Y ${TargetFile} ..\..\..\Games\KSP_win\GameData\VOID\Plugins\" /> | <Command type="AfterBuild" command="xcopy /Y ${TargetFile} ..\..\..\Games\KSP_win\GameData\VOID\Plugins\" /> |
</CustomCommands> | </CustomCommands> |
</CustomCommands> | </CustomCommands> |
</PropertyGroup> | </PropertyGroup> |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug_linux|AnyCPU' "> | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug_linux|AnyCPU' "> |
<DebugSymbols>true</DebugSymbols> | <DebugSymbols>true</DebugSymbols> |
<DebugType>full</DebugType> | <DebugType>full</DebugType> |
<Optimize>false</Optimize> | <Optimize>false</Optimize> |
<OutputPath>bin\Debug</OutputPath> | <OutputPath>bin\Debug</OutputPath> |
<DefineConstants>DEBUG; TRACE</DefineConstants> | <DefineConstants>DEBUG; TRACE</DefineConstants> |
<ErrorReport>prompt</ErrorReport> | <ErrorReport>prompt</ErrorReport> |
<WarningLevel>4</WarningLevel> | <WarningLevel>4</WarningLevel> |
<ConsolePause>false</ConsolePause> | <ConsolePause>false</ConsolePause> |
<CustomCommands> | <CustomCommands> |
<CustomCommands> | <CustomCommands> |
<Command type="AfterBuild" command="cp -afv ${TargetFile} /opt/games/KSP_linux/GameData/${ProjectName}/Plugins/" /> | <Command type="AfterBuild" command="cp -afv ${TargetFile} ${ProjectDir}/GameData/${ProjectName}/Plugins/" /> |
</CustomCommands> | </CustomCommands> |
</CustomCommands> | </CustomCommands> |
</PropertyGroup> | </PropertyGroup> |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release_linux|AnyCPU' "> | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release_linux|AnyCPU' "> |
<Optimize>false</Optimize> | <Optimize>false</Optimize> |
<OutputPath>bin\Release</OutputPath> | <OutputPath>bin\Release</OutputPath> |
<DefineConstants>TRACE</DefineConstants> | <DefineConstants>TRACE</DefineConstants> |
<ErrorReport>prompt</ErrorReport> | <ErrorReport>prompt</ErrorReport> |
<WarningLevel>4</WarningLevel> | <WarningLevel>4</WarningLevel> |
<ConsolePause>false</ConsolePause> | <ConsolePause>false</ConsolePause> |
<CustomCommands> | <CustomCommands> |
<CustomCommands> | <CustomCommands> |
<Command type="AfterBuild" command="cp -afv ${TargetFile} /opt/games/KSP_linux/GameData/${ProjectName}/Plugins/" /> | <Command type="AfterBuild" command="cp -afv ${TargetFile} ${ProjectDir}/GameData/${ProjectName}/Plugins/" /> |
</CustomCommands> | </CustomCommands> |
</CustomCommands> | </CustomCommands> |
</PropertyGroup> | </PropertyGroup> |
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> | <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> |
<ItemGroup> | <ItemGroup> |
<Compile Include="IVOID_Module.cs" /> | <Compile Include="IVOID_Module.cs" /> |
<Compile Include="VOIDFlightMaster.cs" /> | <Compile Include="VOIDFlightMaster.cs" /> |
<Compile Include="VOID_Core.cs" /> | <Compile Include="VOID_Core.cs" /> |
<Compile Include="VOID_Module.cs" /> | <Compile Include="VOID_Module.cs" /> |
<Compile Include="VOID_HUD.cs" /> | <Compile Include="VOID_HUD.cs" /> |
<Compile Include="VOID_SaveValue.cs" /> | <Compile Include="VOID_SaveValue.cs" /> |
<Compile Include="VOID_Orbital.cs" /> | <Compile Include="VOID_Orbital.cs" /> |
<Compile Include="VOID_SurfAtmo.cs" /> | <Compile Include="VOID_SurfAtmo.cs" /> |
<Compile Include="VOID_VesselInfo.cs" /> | <Compile Include="VOID_VesselInfo.cs" /> |
<Compile Include="VOID_Transfer.cs" /> | <Compile Include="VOID_Transfer.cs" /> |
<Compile Include="VOID_CBInfoBrowser.cs" /> | <Compile Include="VOID_CBInfoBrowser.cs" /> |
<Compile Include="VOID_Rendezvous.cs" /> | <Compile Include="VOID_Rendezvous.cs" /> |
<Compile Include="VOID_VesselRegister.cs" /> | <Compile Include="VOID_VesselRegister.cs" /> |
<Compile Include="VOID_DataLogger.cs" /> | <Compile Include="VOID_DataLogger.cs" /> |
<Compile Include="VOID_EditorCore.cs" /> | <Compile Include="VOID_EditorCore.cs" /> |
<Compile Include="VOID_EditorHUD.cs" /> | <Compile Include="VOID_EditorHUD.cs" /> |
<Compile Include="VOID_DataValue.cs" /> | <Compile Include="VOID_DataValue.cs" /> |
<Compile Include="VOIDEditorMaster.cs" /> | <Compile Include="VOIDEditorMaster.cs" /> |
<Compile Include="VOID_Tools.cs" /> | <Compile Include="VOID_Tools.cs" /> |
<Compile Include="VOID_Localization.cs" /> | <Compile Include="VOID_Localization.cs" /> |
<Compile Include="Properties\AssemblyInfo.cs" /> | <Compile Include="Properties\AssemblyInfo.cs" /> |
<Compile Include="VOID_HUDAdvanced.cs" /> | <Compile Include="VOID_HUDAdvanced.cs" /> |
<Compile Include="VOID_TWR.cs" /> | <Compile Include="VOID_TWR.cs" /> |
<Compile Include="VOID_CareerStatus.cs" /> | <Compile Include="VOID_CareerStatus.cs" /> |
<Compile Include="VOID_StageInfo.cs" /> | <Compile Include="VOID_StageInfo.cs" /> |
<Compile Include="VOID_Styles.cs" /> | <Compile Include="VOID_Styles.cs" /> |
<Compile Include="VOID_Data.cs" /> | <Compile Include="VOID_Data.cs" /> |
<Compile Include="VOID_HUDModule.cs" /> | <Compile Include="VOID_HUDModule.cs" /> |
</ItemGroup> | </ItemGroup> |
<ProjectExtensions> | <ProjectExtensions> |
<MonoDevelop> | <MonoDevelop> |
<Properties> | <Properties> |
<Policies> | <Policies> |
<TextStylePolicy FileWidth="120" TabsToSpaces="False" EolMarker="Unix" inheritsSet="VisualStudio" inheritsScope="text/plain" scope="text/plain" /> | <TextStylePolicy FileWidth="120" TabsToSpaces="False" EolMarker="Unix" inheritsSet="VisualStudio" inheritsScope="text/plain" scope="text/plain" /> |
</Policies> | </Policies> |
</Properties> | </Properties> |
</MonoDevelop> | </MonoDevelop> |
</ProjectExtensions> | </ProjectExtensions> |
<ItemGroup> | <ItemGroup> |
<Reference Include="System"> | <Reference Include="System"> |
<HintPath>..\_KSPAssemblies\System.dll</HintPath> | <HintPath>..\_KSPAssemblies\System.dll</HintPath> |
</Reference> | </Reference> |
<Reference Include="Assembly-CSharp"> | <Reference Include="Assembly-CSharp"> |
<HintPath>..\_KSPAssemblies\Assembly-CSharp.dll</HintPath> | <HintPath>..\_KSPAssemblies\Assembly-CSharp.dll</HintPath> |
</Reference> | </Reference> |
<Reference Include="UnityEngine"> | <Reference Include="UnityEngine"> |
<HintPath>..\_KSPAssemblies\UnityEngine.dll</HintPath> | <HintPath>..\_KSPAssemblies\UnityEngine.dll</HintPath> |
</Reference> | </Reference> |
</ItemGroup> | </ItemGroup> |
<ItemGroup> | <ItemGroup> |
<ProjectReference Include="..\ToadicusTools\ToadicusTools.csproj"> | <ProjectReference Include="..\ToadicusTools\ToadicusTools.csproj"> |
<Project>{D48A5542-6655-4149-BC27-B27DF0466F1C}</Project> | <Project>{D48A5542-6655-4149-BC27-B27DF0466F1C}</Project> |
<Name>ToadicusTools</Name> | <Name>ToadicusTools</Name> |
</ProjectReference> | </ProjectReference> |
<ProjectReference Include="..\VesselSimulator\VesselSimulator.csproj"> | <ProjectReference Include="..\VesselSimulator\VesselSimulator.csproj"> |
<Project>{30FD6C0B-D36E-462F-B0FF-F0FAC9C666CF}</Project> | <Project>{30FD6C0B-D36E-462F-B0FF-F0FAC9C666CF}</Project> |
<Name>VesselSimulator</Name> | <Name>VesselSimulator</Name> |
</ProjectReference> | </ProjectReference> |
</ItemGroup> | </ItemGroup> |
<ItemGroup> | |
<None Include="GameData\VOID\Textures\ATM_VOID.cfg" /> | |
</ItemGroup> | |
</Project> | </Project> |
// VOID | // VOID |
// | // |
// VOID_Core.cs | // VOID_Core.cs |
// | // |
// Copyright © 2014, toadicus | // Copyright © 2014, toadicus |
// All rights reserved. | // All rights reserved. |
// | // |
// Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, |
// are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: |
// | // |
// 1. Redistributions of source code must retain the above copyright notice, | // 1. Redistributions of source code must retain the above copyright notice, |
// this list of conditions and the following disclaimer. | // this list of conditions and the following disclaimer. |
// | // |
// 2. Redistributions in binary form must reproduce the above copyright notice, | // 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 | // this list of conditions and the following disclaimer in the documentation and/or other |
// materials provided with the distribution. | // materials provided with the distribution. |
// | // |
// 3. Neither the name of the copyright holder nor the names of its contributors may be used | // 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. | // 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, | // 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 | // 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, | // 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 | // 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, | // 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 | // 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. | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
using KerbalEngineer.VesselSimulator; | using KerbalEngineer.VesselSimulator; |
using KSP; | using KSP; |
using System; | using System; |
using System.Collections.Generic; | using System.Collections.Generic; |
using System.Linq; | using System.Linq; |
using System.Text; | using System.Text; |
using ToadicusTools; | using ToadicusTools; |
using UnityEngine; | using UnityEngine; |
namespace VOID | namespace VOID |
{ | { |
public class VOID_Core : VOID_Module, IVOID_Module | public class VOID_Core : VOID_Module, IVOID_Module |
{ | { |
#region Singleton Members | #region Singleton Members |
/* | /* |
* Static Members | * Static Members |
* */ | * */ |
protected static bool _initialized = false; | protected static bool _initialized = false; |
public static bool Initialized | public static bool Initialized |
{ | { |
get | get |
{ | { |
return _initialized; | return _initialized; |
} | } |
} | } |
protected static VOID_Core _instance; | protected static VOID_Core _instance; |
public static VOID_Core Instance | public static VOID_Core Instance |
{ | { |
get | get |
{ | { |
if (_instance == null) | if (_instance == null) |
{ | { |
_instance = new VOID_Core(); | _instance = new VOID_Core(); |
_initialized = true; | _initialized = true; |
} | } |
return _instance; | return _instance; |
} | } |
} | } |
public static void Reset() | public static void Reset() |
{ | { |
_instance.StopGUI(); | _instance.StopGUI(); |
_instance.Dispose(); | _instance.Dispose(); |
_instance = null; | _instance = null; |
_initialized = false; | _initialized = false; |
} | } |
#endregion | #endregion |
public static readonly double Constant_G = 6.674e-11; | public static readonly double Constant_G = 6.674e-11; |
/* | /* |
* Fields | * Fields |
* */ | * */ |
protected string VoidName = "VOID"; | protected string VoidName = "VOID"; |
protected string VoidVersion; | protected string VoidVersion; |
protected bool _factoryReset = false; | protected bool _factoryReset = false; |
[AVOID_SaveValue("configValue")] | [AVOID_SaveValue("configValue")] |
protected VOID_SaveValue<int> configVersion = 1; | protected VOID_SaveValue<int> configVersion = 1; |
protected List<IVOID_Module> _modules = new List<IVOID_Module>(); | protected List<IVOID_Module> _modules = new List<IVOID_Module>(); |
protected bool _modulesLoaded = false; | protected bool _modulesLoaded = false; |
[AVOID_SaveValue("mainWindowPos")] | [AVOID_SaveValue("mainWindowPos")] |
protected VOID_SaveValue<Rect> mainWindowPos = new Rect(475, 575, 10f, 10f); | protected VOID_SaveValue<Rect> mainWindowPos = new Rect(475, 575, 10f, 10f); |
[AVOID_SaveValue("mainGuiMinimized")] | [AVOID_SaveValue("mainGuiMinimized")] |
protected VOID_SaveValue<bool> mainGuiMinimized = false; | protected VOID_SaveValue<bool> mainGuiMinimized = false; |
[AVOID_SaveValue("configWindowPos")] | [AVOID_SaveValue("configWindowPos")] |
protected VOID_SaveValue<Rect> configWindowPos = new Rect(825, 625, 10f, 10f); | protected VOID_SaveValue<Rect> configWindowPos = new Rect(825, 625, 10f, 10f); |
[AVOID_SaveValue("configWindowMinimized")] | [AVOID_SaveValue("configWindowMinimized")] |
protected VOID_SaveValue<bool> configWindowMinimized = true; | protected VOID_SaveValue<bool> configWindowMinimized = true; |
[AVOID_SaveValue("VOIDIconPos")] | [AVOID_SaveValue("VOIDIconPos")] |
protected VOID_SaveValue<Rect> VOIDIconPos = new Rect(Screen.width / 2 - 200, Screen.height - 32, 32f, 32f); | protected VOID_SaveValue<Rect> VOIDIconPos = new Rect(Screen.width / 2 - 200, Screen.height - 32, 32f, 32f); |
protected Texture2D VOIDIconTexture; | protected Texture2D VOIDIconTexture; |
protected string VOIDIconOnActivePath; | protected string VOIDIconOnActivePath; |
protected string VOIDIconOnInactivePath; | protected string VOIDIconOnInactivePath; |
protected string VOIDIconOffActivePath; | protected string VOIDIconOffActivePath; |
protected string VOIDIconOffInactivePath; | protected string VOIDIconOffInactivePath; |
protected bool VOIDIconLocked = true; | protected bool VOIDIconLocked = true; |
protected GUIStyle iconStyle; | protected GUIStyle iconStyle; |
protected int windowBaseID = -96518722; | protected int windowBaseID = -96518722; |
protected int _windowID = 0; | protected int _windowID = 0; |
protected bool GUIStylesLoaded = false; | protected bool GUIStylesLoaded = false; |
protected CelestialBody _homeBody; | protected CelestialBody _homeBody; |
[AVOID_SaveValue("togglePower")] | [AVOID_SaveValue("togglePower")] |
public VOID_SaveValue<bool> togglePower = true; | public VOID_SaveValue<bool> togglePower = true; |
public bool powerAvailable = true; | public bool powerAvailable = true; |
[AVOID_SaveValue("consumeResource")] | [AVOID_SaveValue("consumeResource")] |
protected VOID_SaveValue<bool> consumeResource = false; | protected VOID_SaveValue<bool> consumeResource = false; |
[AVOID_SaveValue("resourceName")] | [AVOID_SaveValue("resourceName")] |
protected VOID_SaveValue<string> resourceName = "ElectricCharge"; | protected VOID_SaveValue<string> resourceName = "ElectricCharge"; |
[AVOID_SaveValue("resourceRate")] | [AVOID_SaveValue("resourceRate")] |
protected VOID_SaveValue<float> resourceRate = 0.2f; | protected VOID_SaveValue<float> resourceRate = 0.2f; |
[AVOID_SaveValue("updatePeriod")] | [AVOID_SaveValue("updatePeriod")] |
protected VOID_SaveValue<double> _updatePeriod = 1001f / 15000f; | protected VOID_SaveValue<double> _updatePeriod = 1001f / 15000f; |
protected float _updateTimer = 0f; | protected float _updateTimer = 0f; |
protected string stringFrequency; | protected string stringFrequency; |
[AVOID_SaveValue("vesselSimActive")] | [AVOID_SaveValue("vesselSimActive")] |
protected VOID_SaveValue<bool> vesselSimActive; | protected VOID_SaveValue<bool> vesselSimActive; |
// Vessel Type Housekeeping | // Vessel Type Housekeeping |
protected List<VesselType> _allVesselTypes = new List<VesselType>(); | protected List<VesselType> _allVesselTypes = new List<VesselType>(); |
protected bool vesselTypesLoaded = false; | protected bool vesselTypesLoaded = false; |
public float saveTimer = 0; | public float saveTimer = 0; |
protected string defaultSkin = "KSP window 2"; | protected string defaultSkin = "KSP window 2"; |
[AVOID_SaveValue("defaultSkin")] | [AVOID_SaveValue("defaultSkin")] |
protected VOID_SaveValue<string> _skinName; | protected VOID_SaveValue<string> _skinName; |
protected int _skinIdx; | protected int _skinIdx; |
protected Dictionary<string, GUISkin> validSkins; | protected Dictionary<string, GUISkin> validSkins; |
protected string[] skinNames; | protected string[] skinNames; |
protected string[] forbiddenSkins = | protected string[] forbiddenSkins = |
{ | { |
"PlaqueDialogSkin", | "PlaqueDialogSkin", |
"FlagBrowserSkin", | "FlagBrowserSkin", |
"SSUITextAreaDefault", | "SSUITextAreaDefault", |
"ExperimentsDialogSkin", | "ExperimentsDialogSkin", |
"ExpRecoveryDialogSkin", | "ExpRecoveryDialogSkin", |
"KSP window 5", | "KSP window 5", |
"KSP window 6", | "KSP window 6", |
"PartTooltipSkin", | "PartTooltipSkin", |
"KSCContextMenuSkin" | "KSCContextMenuSkin" |
}; | }; |
protected bool skinsLoaded = false; | protected bool skinsLoaded = false; |
public bool configDirty; | public bool configDirty; |
[AVOID_SaveValue("UseBlizzyToolbar")] | [AVOID_SaveValue("UseBlizzyToolbar")] |
protected VOID_SaveValue<bool> _UseToolbarManager; | protected VOID_SaveValue<bool> _UseToolbarManager; |
internal IButton ToolbarButton; | internal IButton ToolbarButton; |
internal ApplicationLauncherButton AppLauncherButton; | internal ApplicationLauncherButton AppLauncherButton; |
/* | /* |
* Events | * Events |
* */ | * */ |
public delegate void VOIDEventHandler(object sender); | public delegate void VOIDEventHandler(object sender); |
public event VOIDEventHandler onApplicationQuit; | public event VOIDEventHandler onApplicationQuit; |
/* | /* |
* Properties | * Properties |
* */ | * */ |
public bool factoryReset | public bool factoryReset |
{ | { |
get | get |
{ | { |
return this._factoryReset; | return this._factoryReset; |
} | } |
} | } |
public List<IVOID_Module> Modules | public List<IVOID_Module> Modules |
{ | { |
get | get |
{ | { |
return this._modules; | return this._modules; |
} | } |
} | } |
public GUISkin Skin | public GUISkin Skin |
{ | { |
get | get |
{ | { |
if (this.skinsLoaded) | if (this.skinsLoaded) |
{ | { |
try | try |
{ | { |
return this.validSkins[this._skinName]; | return this.validSkins[this._skinName]; |
} | } |
catch | catch |
{ | { |
} | } |
} | } |
return AssetBase.GetGUISkin(this.defaultSkin); | return AssetBase.GetGUISkin(this.defaultSkin); |
} | } |
} | } |
public int windowID | public int windowID |
{ | { |
get | get |
{ | { |
if (this._windowID == 0) | if (this._windowID == 0) |
{ | { |
this._windowID = this.windowBaseID; | this._windowID = this.windowBaseID; |
} | } |
return this._windowID++; | return this._windowID++; |
} | } |
} | } |
public List<CelestialBody> allBodies | public List<CelestialBody> allBodies |
{ | { |
get | get |
{ | { |
return FlightGlobals.Bodies; | return FlightGlobals.Bodies; |
} | } |
} | } |
public List<CelestialBody> sortedBodyList | public List<CelestialBody> sortedBodyList |
{ | { |
get; | get; |
private set; | private set; |
} | } |
public CelestialBody HomeBody | public CelestialBody HomeBody |
{ | { |
get | get |
{ | { |
if (this._homeBody == null) | if (this._homeBody == null) |
{ | { |
if (Planetarium.fetch != null) | if (Planetarium.fetch != null) |
{ | { |
this._homeBody = Planetarium.fetch.Home; | this._homeBody = Planetarium.fetch.Home; |
} | } |
} | } |
return this._homeBody; | return this._homeBody; |
} | } |
} | } |
public List<VesselType> allVesselTypes | public List<VesselType> allVesselTypes |
{ | { |
get | get |
{ | { |
return this._allVesselTypes; | return this._allVesselTypes; |
} | } |
} | } |
public float updateTimer | public float updateTimer |
{ | { |
get | get |
{ | { |
return this._updateTimer; | return this._updateTimer; |
} | } |
} | } |
public double updatePeriod | public double updatePeriod |
{ | { |
get | get |
{ | { |
return this._updatePeriod; | return this._updatePeriod; |
} | } |
} | } |
public Stage[] Stages | public Stage[] Stages |
{ | { |
get; | get; |
protected set; | protected set; |
} | } |
public Stage LastStage | public Stage LastStage |
{ | { |
get; | get; |
protected set; | protected set; |
} | } |
protected IconState powerState | protected IconState powerState |
{ | { |
get | get |
{ | { |
if (this.togglePower && this.powerAvailable) | if (this.togglePower && this.powerAvailable) |
{ | { |
return IconState.PowerOn; | return IconState.PowerOn; |
} | } |
else | else |
{ | { |
return IconState.PowerOff; | return IconState.PowerOff; |
} | } |
} | } |
} | } |
protected IconState activeState | protected IconState activeState |
{ | { |
get | get |
{ | { |
if (this.mainGuiMinimized) | if (this.mainGuiMinimized) |
{ | { |
return IconState.Inactive; | return IconState.Inactive; |
} | } |
else | else |
{ | { |
return IconState.Active; | return IconState.Active; |
} | } |
} | } |
} | } |
protected bool UseToolbarManager | protected bool UseToolbarManager |
{ | { |
get | get |
{ | { |
return _UseToolbarManager & ToolbarManager.ToolbarAvailable; | return _UseToolbarManager & ToolbarManager.ToolbarAvailable; |
} | } |
set | set |
{ | { |
if (this._UseToolbarManager == value) | if (this._UseToolbarManager == value) |
{ | { |
return; | return; |
} | } |
if (value == false && this.ToolbarButton != null) | if (value == false && this.ToolbarButton != null) |
{ | { |
this.ToolbarButton.Destroy(); | this.ToolbarButton.Destroy(); |
this.ToolbarButton = null; | this.ToolbarButton = null; |
} | } |
if (value == true) | if (value == true) |
{ | { |
if (this.AppLauncherButton != null) | if (this.AppLauncherButton != null) |
{ | { |
ApplicationLauncher.Instance.RemoveModApplication(this.AppLauncherButton); | ApplicationLauncher.Instance.RemoveModApplication(this.AppLauncherButton); |
this.AppLauncherButton = null; | this.AppLauncherButton = null; |
} | } |
this.InitializeToolbarButton(); | this.InitializeToolbarButton(); |
} | } |
_UseToolbarManager.value = value; | _UseToolbarManager.value = value; |
} | } |
} | } |
protected virtual ApplicationLauncher.AppScenes appIconVisibleScenes | protected virtual ApplicationLauncher.AppScenes appIconVisibleScenes |
{ | { |
get | get |
{ | { |
return ApplicationLauncher.AppScenes.FLIGHT; | return ApplicationLauncher.AppScenes.FLIGHT; |
} | } |
} | } |
/* | /* |
* Methods | * Methods |
* */ | * */ |
public override void DrawGUI() | public override void DrawGUI() |
{ | { |
this._windowID = this.windowBaseID; | this._windowID = this.windowBaseID; |
if (!this._modulesLoaded) | if (!this._modulesLoaded) |
{ | { |
this.LoadModulesOfType<IVOID_Module>(); | this.LoadModulesOfType<IVOID_Module>(); |
} | } |
if (!this.skinsLoaded) | if (!this.skinsLoaded) |
{ | { |
this.LoadSkins(); | this.LoadSkins(); |
} | } |
GUI.skin = this.Skin; | GUI.skin = this.Skin; |
if (!this.GUIStylesLoaded) | if (!this.GUIStylesLoaded) |
{ | { |
this.LoadGUIStyles(); | this.LoadGUIStyles(); |
Tools.PostDebugMessage( | Tools.PostDebugMessage( |
this, | this, |
"ToolbarAvailable: {0}, UseToobarManager: {1}", | "ToolbarAvailable: {0}, UseToobarManager: {1}", |
ToolbarManager.ToolbarAvailable, | ToolbarManager.ToolbarAvailable, |
this.UseToolbarManager); | this.UseToolbarManager); |
} | } |
if (!this.UseToolbarManager) | if (!this.UseToolbarManager) |
{ | { |
if (this.AppLauncherButton == null) | if (this.AppLauncherButton == null) |
{ | { |
Tools.PostDebugMessage(this, | Tools.PostDebugMessage(this, |
"UseToolbarManager = false (ToolbarAvailable = {0}) and " + | "UseToolbarManager = false (ToolbarAvailable = {0}) and " + |
"AppLauncherButton is null, making AppLauncher button.", | "AppLauncherButton is null, making AppLauncher button.", |
ToolbarManager.ToolbarAvailable | ToolbarManager.ToolbarAvailable |
); | ); |
this.InitializeAppLauncherButton(); | this.InitializeAppLauncherButton(); |
} | } |
} | } |
else if (this.ToolbarButton == null) | else if (this.ToolbarButton == null) |
{ | { |
Tools.PostDebugMessage(this, | Tools.PostDebugMessage(this, |
"UseToolbarManager = true (ToolbarAvailable = {0}) and " + | "UseToolbarManager = true (ToolbarAvailable = {0}) and " + |
"ToolbarButton is null, making Toolbar button.", | "ToolbarButton is null, making Toolbar button.", |
ToolbarManager.ToolbarAvailable | ToolbarManager.ToolbarAvailable |
); | ); |
this.InitializeToolbarButton(); | this.InitializeToolbarButton(); |
} | } |
if (!this.mainGuiMinimized) | if (!this.mainGuiMinimized) |
{ | { |
Rect _mainWindowPos = this.mainWindowPos; | Rect _mainWindowPos = this.mainWindowPos; |
_mainWindowPos = GUILayout.Window( | _mainWindowPos = GUILayout.Window( |
this.windowID, | this.windowID, |
_mainWindowPos, | _mainWindowPos, |
VOID_Tools.GetWindowHandler(this.VOIDMainWindow), | VOID_Tools.GetWindowHandler(this.VOIDMainWindow), |
string.Join(" ", new string[] { this.VoidName, this.VoidVersion }), | string.Join(" ", new string[] { this.VoidName, this.VoidVersion }), |
GUILayout.Width(250), | GUILayout.Width(250), |
GUILayout.Height(50) | GUILayout.Height(50) |
); | ); |
if (HighLogic.LoadedSceneIsEditor) | if (HighLogic.LoadedSceneIsEditor) |
{ | { |
_mainWindowPos = Tools.ClampRectToEditorPad(_mainWindowPos); | _mainWindowPos = Tools.ClampRectToEditorPad(_mainWindowPos); |
} | } |
else | else |
{ | { |
_mainWindowPos = Tools.ClampRectToScreen(_mainWindowPos); | _mainWindowPos = Tools.ClampRectToScreen(_mainWindowPos); |
} | } |
if (_mainWindowPos != this.mainWindowPos) | if (_mainWindowPos != this.mainWindowPos) |
{ | { |
this.mainWindowPos = _mainWindowPos; | this.mainWindowPos = _mainWindowPos; |
} | } |
} | } |
if (!this.configWindowMinimized && !this.mainGuiMinimized) | if (!this.configWindowMinimized && !this.mainGuiMinimized) |
{ | { |
Rect _configWindowPos = this.configWindowPos; | Rect _configWindowPos = this.configWindowPos; |
_configWindowPos = GUILayout.Window( | _configWindowPos = GUILayout.Window( |
this.windowID, | this.windowID, |
_configWindowPos, | _configWindowPos, |
VOID_Tools.GetWindowHandler(this.VOIDConfigWindow), | VOID_Tools.GetWindowHandler(this.VOIDConfigWindow), |
string.Join(" ", new string[] { this.VoidName, "Configuration" }), | string.Join(" ", new string[] { this.VoidName, "Configuration" }), |
GUILayout.Width(250), | GUILayout.Width(250), |
GUILayout.Height(50) | GUILayout.Height(50) |
); | ); |
if (HighLogic.LoadedSceneIsEditor) | if (HighLogic.LoadedSceneIsEditor) |
{ | { |
_configWindowPos = Tools.ClampRectToEditorPad(_configWindowPos); | _configWindowPos = Tools.ClampRectToEditorPad(_configWindowPos); |
} | } |
else | else |
{ | { |
_configWindowPos = Tools.ClampRectToScreen(_configWindowPos); | _configWindowPos = Tools.ClampRectToScreen(_configWindowPos); |
} | } |
if (_configWindowPos != this.configWindowPos) | if (_configWindowPos != this.configWindowPos) |
{ | { |
this.configWindowPos = _configWindowPos; | this.configWindowPos = _configWindowPos; |
} | } |
} | } |
} | } |
public virtual void OnGUI() | public virtual void OnGUI() |
{ | { |
if (Event.current.type == EventType.Repaint) | if (Event.current.type == EventType.Repaint) |
{ | { |
return; | return; |
} | } |
/* | /* |
Tools.PostDebugMessage(string.Format( | Tools.PostDebugMessage(string.Format( |
"Event.current.type: {0}" + | "Event.current.type: {0}" + |
"\nthis.VOIDIconLocked: {1}" + | "\nthis.VOIDIconLocked: {1}" + |
"\nEvent.current.mousePosition: {2}" + | "\nEvent.current.mousePosition: {2}" + |
"\nVOIDIconPos: ({3}, {4}),({5}, {6})", | "\nVOIDIconPos: ({3}, {4}),({5}, {6})", |
Event.current.type, | Event.current.type, |
this.VOIDIconLocked, | this.VOIDIconLocked, |
Event.current.mousePosition, | Event.current.mousePosition, |
this.VOIDIconPos.value.xMin, | this.VOIDIconPos.value.xMin, |
this.VOIDIconPos.value.yMin, | this.VOIDIconPos.value.yMin, |
this.VOIDIconPos.value.xMax, | this.VOIDIconPos.value.xMax, |
this.VOIDIconPos.value.yMax | this.VOIDIconPos.value.yMax |
)); | )); |
*/ | */ |
if (!this.VOIDIconLocked && | if (!this.VOIDIconLocked && |
VOIDIconPos.value.Contains(Event.current.mousePosition) | VOIDIconPos.value.Contains(Event.current.mousePosition) |
&& Event.current.type == EventType.mouseDrag) | && Event.current.type == EventType.mouseDrag) |
{ | { |
Tools.PostDebugMessage(string.Format( | Tools.PostDebugMessage(string.Format( |
"Event.current.type: {0}" + | "Event.current.type: {0}" + |
"\ndelta.x: {1}; delta.y: {2}", | "\ndelta.x: {1}; delta.y: {2}", |
Event.current.type, | Event.current.type, |
Event.current.delta.x, | Event.current.delta.x, |
Event.current.delta.y | Event.current.delta.y |
)); | )); |
Rect tmp = new Rect(VOIDIconPos); | Rect tmp = new Rect(VOIDIconPos); |
tmp.x = Event.current.mousePosition.x - tmp.width / 2; | tmp.x = Event.current.mousePosition.x - tmp.width / 2; |
tmp.y = Event.current.mousePosition.y - tmp.height / 2; | tmp.y = Event.current.mousePosition.y - tmp.height / 2; |
if (tmp.x > Screen.width - tmp.width) | if (tmp.x > Screen.width - tmp.width) |
{ | { |
tmp.x = Screen.width - tmp.width; | tmp.x = Screen.width - tmp.width; |
} | } |
if (tmp.y > Screen.height - tmp.height) | if (tmp.y > Screen.height - tmp.height) |
{ | { |
tmp.y = Screen.height - tmp.height; | tmp.y = Screen.height - tmp.height; |
} | } |
VOIDIconPos = tmp; | VOIDIconPos = tmp; |
} | } |
} | } |
public virtual void Update() | public virtual void Update() |
{ | { |
this.LoadBeforeUpdate(); | this.LoadBeforeUpdate(); |
if (this.vessel != null && this.vesselSimActive) | if (this.vessel != null && this.vesselSimActive) |
{ | { |
Tools.PostDebugMessage(this, "Updating SimManager."); | Tools.PostDebugMessage(this, "Updating SimManager."); |
this.UpdateSimManager(); | this.UpdateSimManager(); |
} | } |
if (!this.guiRunning) | if (!this.guiRunning) |
{ | { |
this.StartGUI(); | this.StartGUI(); |
} | } |
if (!HighLogic.LoadedSceneIsFlight && this.guiRunning) | if (!HighLogic.LoadedSceneIsFlight && this.guiRunning) |
{ | { |
this.StopGUI(); | this.StopGUI(); |
} | } |
foreach (IVOID_Module module in this.Modules) | foreach (IVOID_Module module in this.Modules) |
{ | { |
if (!module.guiRunning && module.toggleActive) | if (!module.guiRunning && module.toggleActive) |
{ | { |
module.StartGUI(); | module.StartGUI(); |
} | } |
if (module.guiRunning && !module.toggleActive || | if (module.guiRunning && !module.toggleActive || |
!this.togglePower || | !this.togglePower || |
!HighLogic.LoadedSceneIsFlight || | !HighLogic.LoadedSceneIsFlight || |
this.factoryReset) | this.factoryReset) |
{ | { |
module.StopGUI(); | module.StopGUI(); |
} | } |
if (module is IVOID_BehaviorModule) | if (module is IVOID_BehaviorModule) |
{ | { |
((IVOID_BehaviorModule)module).Update(); | ((IVOID_BehaviorModule)module).Update(); |
} | } |
} | } |
this.CheckAndSave(); | this.CheckAndSave(); |
this._updateTimer += Time.deltaTime; | this._updateTimer += Time.deltaTime; |
} | } |
public virtual void FixedUpdate() | public virtual void FixedUpdate() |
{ | { |
bool newPowerState = this.powerAvailable; | bool newPowerState = this.powerAvailable; |
if (this.togglePower && this.consumeResource && | if (this.togglePower && this.consumeResource && |
this.vessel.vesselType != VesselType.EVA && | this.vessel.vesselType != VesselType.EVA && |
TimeWarp.deltaTime != 0) | TimeWarp.deltaTime != 0) |
{ | { |
float powerReceived = this.vessel.rootPart.RequestResource( | float powerReceived = this.vessel.rootPart.RequestResource( |
this.resourceName, | this.resourceName, |
this.resourceRate * TimeWarp.fixedDeltaTime | this.resourceRate * TimeWarp.fixedDeltaTime |
); | ); |
if (powerReceived > 0) | if (powerReceived > 0) |
{ | { |
newPowerState = true; | newPowerState = true; |
} | } |
else | else |
{ | { |
newPowerState = false; | newPowerState = false; |
} | } |
if (this.powerAvailable != newPowerState) | if (this.powerAvailable != newPowerState) |
{ | { |
this.powerAvailable = newPowerState; | this.powerAvailable = newPowerState; |
this.SetIconTexture(this.powerState | this.activeState); | this.SetIconTexture(this.powerState | this.activeState); |
} | } |
} | } |
foreach (IVOID_Module module in this.Modules) | foreach (IVOID_Module module in this.Modules) |
{ | { |
if (module is IVOID_BehaviorModule) | if (module is IVOID_BehaviorModule) |
{ | { |
((IVOID_BehaviorModule)module).FixedUpdate(); | ((IVOID_BehaviorModule)module).FixedUpdate(); |
} | } |
} | } |
} | } |
public void OnDestroy() | public void OnDestroy() |
{ | { |
foreach (IVOID_Module module in this.Modules) | foreach (IVOID_Module module in this.Modules) |
{ | { |
if (module is IVOID_BehaviorModule) | if (module is IVOID_BehaviorModule) |
{ | { |
((IVOID_BehaviorModule)module).OnDestroy(); | ((IVOID_BehaviorModule)module).OnDestroy(); |
} | } |
} | } |
} | } |
public void OnApplicationQuit() | public void OnApplicationQuit() |
{ | { |
this.onApplicationQuit(this); | this.onApplicationQuit(this); |
} | } |
public void ResetGUI() | public void ResetGUI() |
{ | { |
this.StopGUI(); | this.StopGUI(); |
foreach (IVOID_Module module in this.Modules) | foreach (IVOID_Module module in this.Modules) |
{ | { |
module.StopGUI(); | module.StopGUI(); |
module.StartGUI(); | module.StartGUI(); |
} | } |
this.StartGUI(); | this.StartGUI(); |
} | } |
public void VOIDMainWindow(int _) | public void VOIDMainWindow(int _) |
{ | { |
GUILayout.BeginVertical(); | GUILayout.BeginVertical(); |
if (this.powerAvailable || HighLogic.LoadedSceneIsEditor) | if (this.powerAvailable || HighLogic.LoadedSceneIsEditor) |
{ | { |
if (!HighLogic.LoadedSceneIsEditor) | if (!HighLogic.LoadedSceneIsEditor) |
{ | { |
string str = string.Intern("ON"); | string str = string.Intern("ON"); |
if (togglePower) | if (togglePower) |
str = string.Intern("OFF"); | str = string.Intern("OFF"); |
if (GUILayout.Button("Power " + str)) | if (GUILayout.Button("Power " + str)) |
{ | { |
togglePower.value = !togglePower; | togglePower.value = !togglePower; |
this.SetIconTexture(this.powerState | this.activeState); | this.SetIconTexture(this.powerState | this.activeState); |
} | } |
} | } |
if (togglePower || HighLogic.LoadedSceneIsEditor) | if (togglePower || HighLogic.LoadedSceneIsEditor) |
{ | { |
foreach (IVOID_Module module in this.Modules) | foreach (IVOID_Module module in this.Modules) |
{ | { |
module.toggleActive = GUILayout.Toggle(module.toggleActive, module.Name); | module.toggleActive = GUILayout.Toggle(module.toggleActive, module.Name); |
} | } |
} | } |
} | } |
else | else |
{ | { |
GUILayout.Label("-- POWER LOST --", VOID_Styles.labelRed); | GUILayout.Label("-- POWER LOST --", VOID_Styles.labelRed); |
} | } |
this.configWindowMinimized.value = !GUILayout.Toggle(!this.configWindowMinimized, "Configuration"); | this.configWindowMinimized.value = !GUILayout.Toggle(!this.configWindowMinimized, "Configuration"); |
GUILayout.EndVertical(); | GUILayout.EndVertical(); |
GUI.DragWindow(); | GUI.DragWindow(); |
} | } |
public void VOIDConfigWindow(int _) | public void VOIDConfigWindow(int _) |
{ | { |
GUILayout.BeginVertical(); | GUILayout.BeginVertical(); |
this.DrawConfigurables(); | this.DrawConfigurables(); |
GUILayout.EndVertical(); | GUILayout.EndVertical(); |
GUI.DragWindow(); | GUI.DragWindow(); |
} | } |
public override void DrawConfigurables() | public override void DrawConfigurables() |
{ | { |
GUIContent _content; | GUIContent _content; |
if (HighLogic.LoadedSceneIsFlight) | if (HighLogic.LoadedSceneIsFlight) |
{ | { |
this.consumeResource.value = GUILayout.Toggle(this.consumeResource, "Consume Resources"); | this.consumeResource.value = GUILayout.Toggle(this.consumeResource, "Consume Resources"); |
this.VOIDIconLocked = GUILayout.Toggle(this.VOIDIconLocked, "Lock Icon Position"); | this.VOIDIconLocked = GUILayout.Toggle(this.VOIDIconLocked, "Lock Icon Position"); |
} | } |
this.UseToolbarManager = GUILayout.Toggle(this.UseToolbarManager, "Use Blizzy's Toolbar If Available"); | this.UseToolbarManager = GUILayout.Toggle(this.UseToolbarManager, "Use Blizzy's Toolbar If Available"); |
this.vesselSimActive.value = GUILayout.Toggle(this.vesselSimActive.value, | this.vesselSimActive.value = GUILayout.Toggle(this.vesselSimActive.value, |
"Enable Engineering Calculations"); | "Enable Engineering Calculations"); |
GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); | GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); |
GUILayout.Label("Skin:", GUILayout.ExpandWidth(false)); | GUILayout.Label("Skin:", GUILayout.ExpandWidth(false)); |
_content = new GUIContent(); | _content = new GUIContent(); |
_content.text = "◄"; | _content.text = "◄"; |
_content.tooltip = "Select previous skin"; | _content.tooltip = "Select previous skin"; |
if (GUILayout.Button(_content, GUILayout.ExpandWidth(true))) | if (GUILayout.Button(_content, GUILayout.ExpandWidth(true))) |
{ | { |
this._skinIdx--; | this._skinIdx--; |
Tools.PostDebugMessage(string.Format( | Tools.PostDebugMessage(string.Format( |
"{0}: new this._skinIdx = {1} :: skin_list.Count = {2}", | "{0}: new this._skinIdx = {1} :: skin_list.Count = {2}", |
this.GetType().Name, | this.GetType().Name, |
this._skinName, | this._skinName, |
this.validSkins.Count | this.validSkins.Count |
)); | )); |
} | } |
_content.text = this.Skin.name; | _content.text = this.Skin.name; |
_content.tooltip = "Current skin"; | _content.tooltip = "Current skin"; |
GUILayout.Label(_content, VOID_Styles.labelCenter, GUILayout.ExpandWidth(true)); | GUILayout.Label(_content, VOID_Styles.labelCenter, GUILayout.ExpandWidth(true)); |
_content.text = "►"; | _content.text = "►"; |
_content.tooltip = "Select next skin"; | _content.tooltip = "Select next skin"; |
if (GUILayout.Button(_content, GUILayout.ExpandWidth(true))) | if (GUILayout.Button(_content, GUILayout.ExpandWidth(true))) |
{ | { |
this._skinIdx++; | this._skinIdx++; |
Tools.PostDebugMessage(string.Format( | Tools.PostDebugMessage(string.Format( |
"{0}: new this._skinIdx = {1} :: skin_list.Count = {2}", | "{0}: new this._skinIdx = {1} :: skin_list.Count = {2}", |
this.GetType().Name, | this.GetType().Name, |
this._skinName, | this._skinName, |
this.validSkins.Count | this.validSkins.Count |
)); | )); |
} | } |
this._skinIdx %= this.skinNames.Length; | this._skinIdx %= this.skinNames.Length; |
if (this._skinIdx < 0) | if (this._skinIdx < 0) |
{ | { |
this._skinIdx += this.skinNames.Length; | this._skinIdx += this.skinNames.Length; |
} | } |
if (this._skinName != skinNames[this._skinIdx]) | if (this._skinName != skinNames[this._skinIdx]) |
{ | { |
this._skinName.value = skinNames[this._skinIdx]; | this._skinName.value = skinNames[this._skinIdx]; |
this.GUIStylesLoaded = false; | this.GUIStylesLoaded = false; |
} | } |
GUILayout.EndHorizontal(); | GUILayout.EndHorizontal(); |
GUILayout.BeginHorizontal(); | GUILayout.BeginHorizontal(); |
GUILayout.Label("Update Rate (Hz):"); | GUILayout.Label("Update Rate (Hz):"); |
if (this.stringFrequency == null) | if (this.stringFrequency == null) |
{ | { |
this.stringFrequency = (1f / this.updatePeriod).ToString(); | this.stringFrequency = (1f / this.updatePeriod).ToString(); |
} | } |
this.stringFrequency = GUILayout.TextField(this.stringFrequency.ToString(), 5, GUILayout.ExpandWidth(true)); | this.stringFrequency = GUILayout.TextField(this.stringFrequency.ToString(), 5, GUILayout.ExpandWidth(true)); |
if (GUILayout.Button("Apply")) | if (GUILayout.Button("Apply")) |
{ | { |
double updateFreq = 1f / this.updatePeriod; | double updateFreq = 1f / this.updatePeriod; |
double.TryParse(stringFrequency, out updateFreq); | double.TryParse(stringFrequency, out updateFreq); |
this._updatePeriod = 1 / updateFreq; | this._updatePeriod = 1 / updateFreq; |
} | } |
GUILayout.EndHorizontal(); | GUILayout.EndHorizontal(); |
foreach (IVOID_Module mod in this.Modules) | foreach (IVOID_Module mod in this.Modules) |
{ | { |
mod.DrawConfigurables(); | mod.DrawConfigurables(); |
} | } |
this._factoryReset = GUILayout.Toggle(this._factoryReset, "Factory Reset"); | this._factoryReset = GUILayout.Toggle(this._factoryReset, "Factory Reset"); |
} | } |
protected void UpdateSimManager() | protected void UpdateSimManager() |
{ | { |
if (SimManager.ResultsReady()) | if (SimManager.ResultsReady()) |
{ | { |
Tools.PostDebugMessage(this, "VesselSimulator results ready, setting Stages."); | Tools.PostDebugMessage(this, "VesselSimulator results ready, setting Stages."); |
this.Stages = SimManager.Stages; | this.Stages = SimManager.Stages; |
if (this.Stages != null) | if (this.Stages != null) |
{ | { |
this.LastStage = this.Stages.Last(); | this.LastStage = this.Stages.Last(); |
} | } |
if (HighLogic.LoadedSceneIsEditor) | if (HighLogic.LoadedSceneIsEditor) |
{ | { |
SimManager.Gravity = VOID_Data.KerbinGee; | SimManager.Gravity = VOID_Data.KerbinGee; |
} | } |
else | else |
{ | { |
double radius = this.vessel.Radius(); | double radius = this.vessel.Radius(); |
SimManager.Gravity = this.vessel.mainBody.gravParameter / (radius * radius); | SimManager.Gravity = this.vessel.mainBody.gravParameter / (radius * radius); |
} | } |
SimManager.minSimTime = new TimeSpan(0, 0, 0, 0, (int)(this.updatePeriod * 1000d)); | SimManager.minSimTime = new TimeSpan(0, 0, 0, 0, (int)(this.updatePeriod * 1000d)); |
SimManager.TryStartSimulation(); | SimManager.TryStartSimulation(); |
} | } |
#if DEBUG | #if DEBUG |
else | else |
{ | { |
Tools.PostDebugMessage(this, "VesselSimulator results not ready."); | Tools.PostDebugMessage(this, "VesselSimulator results not ready."); |
} | } |
#endif | #endif |
} | } |
protected void LoadModulesOfType<T>() | protected void LoadModulesOfType<T>() |
{ | { |
StringBuilder sb = new StringBuilder("Loading modules..."); | StringBuilder sb = new StringBuilder("Loading modules..."); |
sb.AppendLine(); | sb.AppendLine(); |
foreach (AssemblyLoader.LoadedAssembly assy in AssemblyLoader.loadedAssemblies) | foreach (AssemblyLoader.LoadedAssembly assy in AssemblyLoader.loadedAssemblies) |
{ | { |
foreach (Type loadedType in assy.assembly.GetExportedTypes()) | foreach (Type loadedType in assy.assembly.GetExportedTypes()) |
{ | { |
if ( | if ( |
loadedType.IsInterface || | loadedType.IsInterface || |
loadedType.IsAbstract || | loadedType.IsAbstract || |
!typeof(T).IsAssignableFrom(loadedType) || | !typeof(T).IsAssignableFrom(loadedType) || |
this.GetType().IsAssignableFrom(loadedType) | this.GetType().IsAssignableFrom(loadedType) |
) | ) |
{ | { |
continue; | continue; |
} | } |
// HACK: This stops editor modules from loading in flight. It is a dirty hack and should be fixed. | // HACK: This stops editor modules from loading in flight. It is a dirty hack and should be fixed. |
if (!HighLogic.LoadedSceneIsEditor && typeof(IVOID_EditorModule).IsAssignableFrom(loadedType)) | if (!HighLogic.LoadedSceneIsEditor && typeof(IVOID_EditorModule).IsAssignableFrom(loadedType)) |
{ | { |
continue; | continue; |
} | } |
sb.AppendFormat("Loading IVOID_Module type {0}...", loadedType.Name); | sb.AppendFormat("Loading IVOID_Module type {0}...", loadedType.Name); |
try | try |
{ | { |
this.LoadModule(loadedType); | this.LoadModule(loadedType); |
sb.AppendLine("Success."); | sb.AppendLine("Success."); |
} | } |
catch (Exception ex) | catch (Exception ex) |
{ | { |
sb.AppendFormat("Failed, caught {0}", ex.GetType().Name); | sb.AppendFormat("Failed, caught {0}", ex.GetType().Name); |
sb.AppendLine(); | sb.AppendLine(); |
#if DEBUG | #if DEBUG |
Debug.LogException(ex); | Debug.LogException(ex); |
#endif | #endif |
} | } |
} | } |
} | } |
this._modulesLoaded = true; | this._modulesLoaded = true; |
sb.AppendFormat("Loaded {0} modules.", this.Modules.Count); | sb.AppendFormat("Loaded {0} modules.", this.Modules.Count); |
sb.AppendLine(); | sb.AppendLine(); |
} | } |
protected void LoadModule(Type T) | protected void LoadModule(Type T) |
{ | { |
var existingModules = this._modules.Where(mod => mod.GetType().Name == T.Name); | var existingModules = this._modules.Where(mod => mod.GetType().Name == T.Name); |
if (existingModules.Any()) | if (existingModules.Any()) |
{ | { |
Tools.PostDebugMessage(string.Format( | Tools.PostDebugMessage(string.Format( |
"{0}: refusing to load {1}: already loaded", | "{0}: refusing to load {1}: already loaded", |
this.GetType().Name, | this.GetType().Name, |
T.Name | T.Name |
)); | )); |
return; | return; |
} | } |
IVOID_Module module = Activator.CreateInstance(T) as IVOID_Module; | IVOID_Module module = Activator.CreateInstance(T) as IVOID_Module; |
module.LoadConfig(); | module.LoadConfig(); |
this._modules.Add(module); | this._modules.Add(module); |
Tools.PostDebugMessage(string.Format( | Tools.PostDebugMessage(string.Format( |
"{0}: loaded module {1}.", | "{0}: loaded module {1}.", |
this.GetType().Name, | this.GetType().Name, |
T.Name | T.Name |
)); | )); |
} | } |
protected void LoadSkins() | protected void LoadSkins() |
{ | { |
Tools.PostDebugMessage("AssetBase has skins: \n" + | Tools.PostDebugMessage("AssetBase has skins: \n" + |
string.Join("\n\t", | string.Join("\n\t", |
Resources.FindObjectsOfTypeAll(typeof(GUISkin)) | Resources.FindObjectsOfTypeAll(typeof(GUISkin)) |
.Select(s => s.ToString()) | .Select(s => s.ToString()) |
.ToArray() | .ToArray() |
) | ) |
); | ); |
this.validSkins = Resources.FindObjectsOfTypeAll(typeof(GUISkin)) | this.validSkins = Resources.FindObjectsOfTypeAll(typeof(GUISkin)) |
.Where(s => !this.forbiddenSkins.Contains(s.name)) | .Where(s => !this.forbiddenSkins.Contains(s.name)) |
.Select(s => s as GUISkin) | .Select(s => s as GUISkin) |
.GroupBy(s => s.name) | .GroupBy(s => s.name) |
.Select(g => g.First()) | .Select(g => g.First()) |
.ToDictionary(s => s.name); | .ToDictionary(s => s.name); |
Tools.PostDebugMessage(string.Format( | Tools.PostDebugMessage(string.Format( |
"{0}: loaded {1} GUISkins.", | "{0}: loaded {1} GUISkins.", |
this.GetType().Name, | this.GetType().Name, |
this.validSkins.Count | this.validSkins.Count |
)); | )); |
this.skinNames = this.validSkins.Keys.ToArray(); | this.skinNames = this.validSkins.Keys.ToArray(); |
Array.Sort(this.skinNames); | Array.Sort(this.skinNames); |
int defaultIdx = int.MinValue; | int defaultIdx = int.MinValue; |
for (int i = 0; i < this.skinNames.Length; i++) | for (int i = 0; i < this.skinNames.Length; i++) |
{ | { |
if (this.skinNames[i] == this._skinName) | if (this.skinNames[i] == this._skinName) |
{ | { |
this._skinIdx = i; | this._skinIdx = i; |
} | } |
if (this.skinNames[i] == this.defaultSkin) | if (this.skinNames[i] == this.defaultSkin) |
{ | { |
defaultIdx = i; | defaultIdx = i; |
} | } |
if (this._skinIdx != int.MinValue && defaultIdx != int.MinValue) | if (this._skinIdx != int.MinValue && defaultIdx != int.MinValue) |
{ | { |
break; | break; |
} | } |
} | } |
if (this._skinIdx == int.MinValue) | if (this._skinIdx == int.MinValue) |
{ | { |
this._skinIdx = defaultIdx; | this._skinIdx = defaultIdx; |
} | } |
Tools.PostDebugMessage(string.Format( | Tools.PostDebugMessage(string.Format( |
"{0}: _skinIdx = {1}.", | "{0}: _skinIdx = {1}.", |
this.GetType().Name, | this.GetType().Name, |
this._skinName.ToString() | this._skinName.ToString() |
)); | )); |
this.skinsLoaded = true; | this.skinsLoaded = true; |
} | } |
protected void LoadGUIStyles() | protected void LoadGUIStyles() |
{ | { |
VOID_Styles.OnSkinChanged(); | VOID_Styles.OnSkinChanged(); |
this.GUIStylesLoaded = true; | this.GUIStylesLoaded = true; |
} | } |
protected void LoadVesselTypes() | protected void LoadVesselTypes() |
{ | { |
this._allVesselTypes = Enum.GetValues(typeof(VesselType)).OfType<VesselType>().ToList(); | this._allVesselTypes = Enum.GetValues(typeof(VesselType)).OfType<VesselType>().ToList(); |
this.vesselTypesLoaded = true; | this.vesselTypesLoaded = true; |
} | } |
protected void LoadBeforeUpdate() | protected void LoadBeforeUpdate() |
{ | { |
if (!this.vesselTypesLoaded) | if (!this.vesselTypesLoaded) |
{ | { |
this.LoadVesselTypes(); | this.LoadVesselTypes(); |
} | } |
if (this.sortedBodyList == null && FlightGlobals.Bodies != null && FlightGlobals.Bodies.Count > 0) | if (this.sortedBodyList == null && FlightGlobals.Bodies != null && FlightGlobals.Bodies.Count > 0) |
{ | { |
this.sortedBodyList = new List<CelestialBody>(FlightGlobals.Bodies); | this.sortedBodyList = new List<CelestialBody>(FlightGlobals.Bodies); |
this.sortedBodyList.Sort(new CBListComparer()); | this.sortedBodyList.Sort(new CBListComparer()); |
this.sortedBodyList.Reverse(); | this.sortedBodyList.Reverse(); |
Debug.Log(string.Format("sortedBodyList: {0}", string.Join("\n\t", this.sortedBodyList.Select(b => b.bodyName).ToArray()))); | Debug.Log(string.Format("sortedBodyList: {0}", string.Join("\n\t", this.sortedBodyList.Select(b => b.bodyName).ToArray()))); |
} | } |
} | } |
protected void InitializeToolbarButton() | protected void InitializeToolbarButton() |
{ | { |
// Do nothing if (the Toolbar is not available. | // Do nothing if (the Toolbar is not available. |
if (!ToolbarManager.ToolbarAvailable) | if (!ToolbarManager.ToolbarAvailable) |
{ | { |
Tools.PostDebugMessage(this, "Refusing to make a ToolbarButton: ToolbarAvailable = false"); | Tools.PostDebugMessage(this, "Refusing to make a ToolbarButton: ToolbarAvailable = false"); |
return; | return; |
} | } |
this.ToolbarButton = ToolbarManager.Instance.add(this.VoidName, "coreToggle"); | this.ToolbarButton = ToolbarManager.Instance.add(this.VoidName, "coreToggle"); |
this.ToolbarButton.Text = this.VoidName; | this.ToolbarButton.Text = this.VoidName; |
this.SetIconTexture(this.powerState | this.activeState); | this.SetIconTexture(this.powerState | this.activeState); |
this.ToolbarButton.Visibility = new GameScenesVisibility(GameScenes.EDITOR, GameScenes.FLIGHT); | this.ToolbarButton.Visibility = new GameScenesVisibility(GameScenes.EDITOR, GameScenes.FLIGHT); |
this.ToolbarButton.OnClick += | this.ToolbarButton.OnClick += |
(e) => | (e) => |
{ | { |
this.ToggleMainWindow(); | this.ToggleMainWindow(); |
}; | }; |
Tools.PostDebugMessage(string.Format("{0}: Toolbar Button initialized.", this.GetType().Name)); | Tools.PostDebugMessage(string.Format("{0}: Toolbar Button initialized.", this.GetType().Name)); |
} | } |
protected void InitializeAppLauncherButton() | protected void InitializeAppLauncherButton() |
{ | { |
if (ApplicationLauncher.Ready) | if (ApplicationLauncher.Ready) |
{ | { |
this.AppLauncherButton = ApplicationLauncher.Instance.AddModApplication( | this.AppLauncherButton = ApplicationLauncher.Instance.AddModApplication( |
this.ToggleMainWindow, this.ToggleMainWindow, | this.ToggleMainWindow, this.ToggleMainWindow, |
this.appIconVisibleScenes, | this.appIconVisibleScenes, |
this.VOIDIconTexture | this.VOIDIconTexture |
); | ); |
Tools.PostDebugMessage( | Tools.PostDebugMessage( |
this, | this, |
"AppLauncherButton initialized in {0}", | "AppLauncherButton initialized in {0}", |
Enum.GetName( | Enum.GetName( |
typeof(GameScenes), | typeof(GameScenes), |
HighLogic.LoadedScene | HighLogic.LoadedScene |
) | ) |
); | ); |
} | } |
} | } |
protected void ToggleMainWindow() | protected void ToggleMainWindow() |
{ | { |
this.mainGuiMinimized = !this.mainGuiMinimized; | this.mainGuiMinimized = !this.mainGuiMinimized; |
this.SetIconTexture(this.powerState | this.activeState); | this.SetIconTexture(this.powerState | this.activeState); |
} | } |
protected void SetIconTexture(IconState state) | protected void SetIconTexture(IconState state) |
{ | { |
switch (state) | switch (state) |
{ | { |
case (IconState.PowerOff | IconState.Inactive): | case (IconState.PowerOff | IconState.Inactive): |
this.SetIconTexture(this.VOIDIconOffInactivePath); | this.SetIconTexture(this.VOIDIconOffInactivePath); |
break; | break; |
case (IconState.PowerOff | IconState.Active): | case (IconState.PowerOff | IconState.Active): |
this.SetIconTexture(this.VOIDIconOffActivePath); | this.SetIconTexture(this.VOIDIconOffActivePath); |
break; | break; |
case (IconState.PowerOn | IconState.Inactive): | case (IconState.PowerOn | IconState.Inactive): |
this.SetIconTexture(this.VOIDIconOnInactivePath); | this.SetIconTexture(this.VOIDIconOnInactivePath); |
break; | break; |
case (IconState.PowerOn | IconState.Active): | case (IconState.PowerOn | IconState.Active): |
this.SetIconTexture(this.VOIDIconOnActivePath); | this.SetIconTexture(this.VOIDIconOnActivePath); |
break; | break; |
default: | default: |
throw new NotImplementedException(); | throw new NotImplementedException(); |
} | } |
} | } |
protected void SetIconTexture(string texturePath) | protected void SetIconTexture(string texturePath) |
{ | { |
if (this.ToolbarButton != null) | if (this.ToolbarButton != null) |
{ | { |
this.ToolbarButton.TexturePath = texturePath; | this.ToolbarButton.TexturePath = texturePath; |
} | } |
this.VOIDIconTexture = GameDatabase.Instance.GetTexture(texturePath.Replace("icon", "appIcon"), false); | this.VOIDIconTexture = GameDatabase.Instance.GetTexture(texturePath.Replace("icon", "appIcon"), false); |
if (this.AppLauncherButton != null) | if (this.AppLauncherButton != null) |
{ | { |
this.AppLauncherButton.SetTexture(VOIDIconTexture); | this.AppLauncherButton.SetTexture(VOIDIconTexture); |
} | } |
} | } |
protected void CheckAndSave() | protected void CheckAndSave() |
{ | { |
this.saveTimer += Time.deltaTime; | this.saveTimer += Time.deltaTime; |
if (this.saveTimer > 2f) | if (this.saveTimer > 2f) |
{ | { |
if (!this.configDirty) | if (!this.configDirty) |
{ | { |
return; | return; |
} | } |
Tools.PostDebugMessage(string.Format( | Tools.PostDebugMessage(string.Format( |
"{0}: Time to save, checking if configDirty: {1}", | "{0}: Time to save, checking if configDirty: {1}", |
this.GetType().Name, | this.GetType().Name, |
this.configDirty | this.configDirty |
)); | )); |
this.SaveConfig(); | this.SaveConfig(); |
this.saveTimer = 0; | this.saveTimer = 0; |
} | } |
} | } |
public override void LoadConfig() | public override void LoadConfig() |
{ | { |
base.LoadConfig(); | base.LoadConfig(); |
foreach (IVOID_Module module in this.Modules) | foreach (IVOID_Module module in this.Modules) |
{ | { |
module.LoadConfig(); | module.LoadConfig(); |
} | } |
} | } |
public void SaveConfig() | public void SaveConfig() |
{ | { |
var config = KSP.IO.PluginConfiguration.CreateForType<VOID_Core>(); | var config = KSP.IO.PluginConfiguration.CreateForType<VOID_Core>(); |
config.load(); | config.load(); |
this._SaveToConfig(config); | this._SaveToConfig(config); |
foreach (IVOID_Module module in this.Modules) | foreach (IVOID_Module module in this.Modules) |
{ | { |
module._SaveToConfig(config); | module._SaveToConfig(config); |
} | } |
config.save(); | config.save(); |
this.configDirty = false; | this.configDirty = false; |
} | } |
protected VOID_Core() | protected VOID_Core() |
{ | { |
this._Name = "VOID Core"; | this._Name = "VOID Core"; |
System.Version version = this.GetType().Assembly.GetName().Version; | System.Version version = this.GetType().Assembly.GetName().Version; |
this.VoidVersion = string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.MajorRevision); | this.VoidVersion = string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.MajorRevision); |
this.toggleActive = true; | this.toggleActive = true; |
this._skinName = this.defaultSkin; | this._skinName = this.defaultSkin; |
this._skinIdx = int.MinValue; | this._skinIdx = int.MinValue; |
this.VOIDIconOnInactivePath = "VOID/Textures/void_icon_light_glow"; | this.VOIDIconOnInactivePath = "VOID/Textures/void_icon_light_glow"; |
this.VOIDIconOnActivePath = "VOID/Textures/void_icon_dark_glow"; | this.VOIDIconOnActivePath = "VOID/Textures/void_icon_dark_glow"; |
this.VOIDIconOffInactivePath = "VOID/Textures/void_icon_light"; | this.VOIDIconOffInactivePath = "VOID/Textures/void_icon_light"; |
this.VOIDIconOffActivePath = "VOID/Textures/void_icon_dark"; | this.VOIDIconOffActivePath = "VOID/Textures/void_icon_dark"; |
this.vesselSimActive = true; | this.vesselSimActive = true; |
this.UseToolbarManager = false; | this.UseToolbarManager = ToolbarManager.ToolbarAvailable; |
this.LoadConfig(); | this.LoadConfig(); |
this.SetIconTexture(this.powerState | this.activeState); | this.SetIconTexture(this.powerState | this.activeState); |
} | } |
public virtual void Dispose() | public virtual void Dispose() |
{ | { |
if (this.AppLauncherButton != null) | if (this.AppLauncherButton != null) |
{ | { |
ApplicationLauncher.Instance.RemoveModApplication(this.AppLauncherButton); | ApplicationLauncher.Instance.RemoveModApplication(this.AppLauncherButton); |
this.AppLauncherButton = null; | this.AppLauncherButton = null; |
} | } |
if (this.ToolbarButton != null) | if (this.ToolbarButton != null) |
{ | { |
this.ToolbarButton.Destroy(); | this.ToolbarButton.Destroy(); |
this.ToolbarButton = null; | this.ToolbarButton = null; |
} | } |
} | } |
protected enum IconState | protected enum IconState |
{ | { |
PowerOff = 1, | PowerOff = 1, |
PowerOn = 2, | PowerOn = 2, |
Inactive = 4, | Inactive = 4, |
Active = 8 | Active = 8 |
} | } |
} | } |
} | } |
// VOID | // VOID |
// | // |
// VOID_EditorHUD.cs | // VOID_EditorHUD.cs |
// | // |
// Copyright © 2014, toadicus | // Copyright © 2014, toadicus |
// All rights reserved. | // All rights reserved. |
// | // |
// Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, |
// are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: |
// | // |
// 1. Redistributions of source code must retain the above copyright notice, | // 1. Redistributions of source code must retain the above copyright notice, |
// this list of conditions and the following disclaimer. | // this list of conditions and the following disclaimer. |
// | // |
// 2. Redistributions in binary form must reproduce the above copyright notice, | // 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 | // this list of conditions and the following disclaimer in the documentation and/or other |
// materials provided with the distribution. | // materials provided with the distribution. |
// | // |
// 3. Neither the name of the copyright holder nor the names of its contributors may be used | // 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. | // 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, | // 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 | // 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, | // 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 | // 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, | // 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 | // 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. | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
using KerbalEngineer.VesselSimulator; | using KerbalEngineer.VesselSimulator; |
using KSP; | using KSP; |
using System; | using System; |
using System.Collections.Generic; | using System.Collections.Generic; |
using System.Linq; | using System.Linq; |
using System.Text; | using System.Text; |
using ToadicusTools; | using ToadicusTools; |
using UnityEngine; | using UnityEngine; |
namespace VOID | namespace VOID |
{ | { |
public class VOID_EditorHUD : VOID_HUDModule, IVOID_EditorModule | public class VOID_EditorHUD : VOID_HUDModule, IVOID_EditorModule |
{ | { |
/* | /* |
* Fields | * Fields |
* */ | * */ |
[AVOID_SaveValue("ehudWindowPos")] | |
protected VOID_SaveValue<Rect> ehudWindowPos; | |
protected HUDWindow ehudWindow; | protected HUDWindow ehudWindow; |
protected EditorVesselOverlays _vesselOverlays; | protected EditorVesselOverlays _vesselOverlays; |
[AVOID_SaveValue("snapToLeft")] | |
protected VOID_SaveValue<bool> snapToLeft; | |
/* | /* |
* Properties | * Properties |
* */ | * */ |
protected EditorVesselOverlays vesselOverlays | protected EditorVesselOverlays vesselOverlays |
{ | { |
get | get |
{ | { |
if (this._vesselOverlays == null) | if (this._vesselOverlays == null) |
{ | { |
this._vesselOverlays = (EditorVesselOverlays)Resources | this._vesselOverlays = (EditorVesselOverlays)Resources |
.FindObjectsOfTypeAll(typeof(EditorVesselOverlays)) | .FindObjectsOfTypeAll(typeof(EditorVesselOverlays)) |
.FirstOrDefault(); | .FirstOrDefault(); |
} | } |
return this._vesselOverlays; | return this._vesselOverlays; |
} | } |
} | } |
protected EditorMarker_CoM CoMmarker | protected EditorMarker_CoM CoMmarker |
{ | { |
get | get |
{ | { |
if (this.vesselOverlays == null) | if (this.vesselOverlays == null) |
{ | { |
return null; | return null; |
} | } |
return this.vesselOverlays.CoMmarker; | return this.vesselOverlays.CoMmarker; |
} | } |
} | } |
protected EditorMarker_CoT CoTmarker | protected EditorMarker_CoT CoTmarker |
{ | { |
get | get |
{ | { |
if (this.vesselOverlays == null) | if (this.vesselOverlays == null) |
{ | { |
return null; | return null; |
} | } |
return this.vesselOverlays.CoTmarker; | return this.vesselOverlays.CoTmarker; |
} | } |
} | } |
/* | /* |
* Methods | * Methods |
* */ | * */ |
public VOID_EditorHUD() : base() | public VOID_EditorHUD() : base() |
{ | { |
this._Name = "Heads-Up Display"; | this._Name = "Heads-Up Display"; |
this.toggleActive = true; | this.toggleActive = true; |
this.snapToLeft.value = true; | |
this.ehudWindow = new HUDWindow( | this.ehudWindow = new HUDWindow( |
"editorHUD", | |
this.ehudWindowFunc, | this.ehudWindowFunc, |
new Rect(EditorPanels.Instance.partsPanelWidth + 10f, 125f, 300f, 64f) | new Rect(EditorPanels.Instance.partsPanelWidth + 10f, 125f, 300f, 64f) |
); | ); |
this.Windows.Add(this.ehudWindow); | this.Windows.Add(this.ehudWindow); |
this.ehudWindowPos = this.ehudWindow.WindowPos; | |
Tools.PostDebugMessage (this.GetType().Name + ": Constructed."); | Tools.PostDebugMessage (this.GetType().Name + ": Constructed."); |
} | } |
public void ehudWindowFunc(int id) | public void ehudWindowFunc(int id) |
{ | { |
StringBuilder hudString = new StringBuilder(); | StringBuilder hudString = new StringBuilder(); |
if (this.core.LastStage == null) | if (this.core.LastStage == null) |
{ | { |
return; | return; |
} | } |
// GUI.skin = AssetBase.GetGUISkin("KSP window 2"); | VOID_Styles.labelHud.alignment = TextAnchor.UpperLeft; |
hudString.Append("Total Mass: "); | hudString.Append("Total Mass: "); |
hudString.Append(this.core.LastStage.totalMass.ToString("F3")); | hudString.Append(this.core.LastStage.totalMass.ToString("F3")); |
hudString.Append('t'); | hudString.Append('t'); |
hudString.Append(' '); | hudString.Append(' '); |
hudString.Append("Part Count: "); | hudString.Append("Part Count: "); |
hudString.Append(EditorLogic.SortedShipList.Count); | hudString.Append(EditorLogic.SortedShipList.Count); |
hudString.Append('\n'); | hudString.Append('\n'); |
hudString.Append("Total Delta-V: "); | hudString.Append("Total Delta-V: "); |
hudString.Append(Tools.MuMech_ToSI(this.core.LastStage.totalDeltaV)); | hudString.Append(Tools.MuMech_ToSI(this.core.LastStage.totalDeltaV)); |
hudString.Append("m/s"); | hudString.Append("m/s"); |
hudString.Append('\n'); | hudString.Append('\n'); |
hudString.Append("Bottom Stage Delta-V"); | hudString.Append("Bottom Stage Delta-V"); |
hudString.Append(Tools.MuMech_ToSI(this.core.LastStage.deltaV)); | hudString.Append(Tools.MuMech_ToSI(this.core.LastStage.deltaV)); |
hudString.Append("m/s"); | hudString.Append("m/s"); |
hudString.Append('\n'); | hudString.Append('\n'); |
hudString.Append("Bottom Stage T/W Ratio: "); | hudString.Append("Bottom Stage T/W Ratio: "); |
hudString.Append(this.core.LastStage.thrustToWeight.ToString("F3")); | hudString.Append(this.core.LastStage.thrustToWeight.ToString("F3")); |
Tools.PostDebugMessage(this, | |
"CoMmarker.gameObject.activeInHierarchy: {0};" + | |
"CoTmarker.gameObject.activeInHierarchy: {1}", | |
this.CoMmarker.gameObject.activeInHierarchy, | |
this.CoTmarker.gameObject.activeInHierarchy | |
); | |
if (this.CoMmarker.gameObject.activeInHierarchy && this.CoTmarker.gameObject.activeInHierarchy) | if (this.CoMmarker.gameObject.activeInHierarchy && this.CoTmarker.gameObject.activeInHierarchy) |
{ | { |
Tools.PostDebugMessage(this, "CoM and CoT markers are active, doing thrust offset."); | |
hudString.Append('\n'); | hudString.Append('\n'); |
hudString.Append("Thrust Offset: "); | hudString.Append("Thrust Offset: "); |
hudString.Append( | hudString.Append( |
Vector3.Cross( | Vector3.Cross( |
this.CoTmarker.dirMarkerObject.transform.forward, | this.CoTmarker.dirMarkerObject.transform.forward, |
this.CoMmarker.posMarkerObject.transform.position - this.CoTmarker.posMarkerObject.transform.position | this.CoMmarker.posMarkerObject.transform.position - this.CoTmarker.posMarkerObject.transform.position |
).ToString("F3")); | ).ToString("F3")); |
} | } |
#if DEBUG | |
GUILayout.Label(hudString.ToString(), VOID_Styles.labelHud, GUILayout.ExpandWidth(true)); | else |
{ | |
Tools.PostDebugMessage(this, "CoM and CoT markers are not active, thrust offset skipped."); | |
} | |
#endif | |
GUILayout.Label( | |
hudString.ToString(), | |
VOID_Styles.labelHud, | |
GUILayout.ExpandWidth(true), | |
GUILayout.ExpandHeight(true) | |
); | |
if (!this.positionsLocked) | if (!this.positionsLocked) |
{ | { |
GUI.DragWindow(); | GUI.DragWindow(); |
} | } |
GUI.BringWindowToBack(id); | GUI.BringWindowToBack(id); |
} | } |
public override void DrawGUI() | public override void DrawGUI() |
{ | { |
float hudLeft; | float hudLeft; |
if (EditorLogic.fetch.editorScreen == EditorScreen.Parts) | if (EditorLogic.fetch.editorScreen == EditorScreen.Parts) |
{ | { |
hudLeft = EditorPanels.Instance.partsPanelWidth + 10f; | hudLeft = EditorPanels.Instance.partsPanelWidth + 10f; |
hudLeft += EditorPartList.Instance.transformTopLeft.position.x - | hudLeft += EditorPartList.Instance.transformTopLeft.position.x - |
EditorPartList.Instance.transformTopLeft.parent.parent.position.x - | EditorPartList.Instance.transformTopLeft.parent.parent.position.x - |
72f; | 72f; |
} | } |
else if (EditorLogic.fetch.editorScreen == EditorScreen.Actions) | else if (EditorLogic.fetch.editorScreen == EditorScreen.Actions) |
{ | { |
hudLeft = EditorPanels.Instance.actionsPanelWidth + 10f; | hudLeft = EditorPanels.Instance.actionsPanelWidth + 10f; |
} | } |
else | else |
{ | { |
return; | return; |
} | } |
bool snapToEdge = Mathf.Abs(this.ehudWindowPos.value.xMin - hudLeft) < 15f; | |
Tools.PostDebugMessage(this, | Tools.PostDebugMessage(this, |
"EditorPartList topLeft.parent.parent.position: {0}\n" + | "EditorPartList topLeft.parent.parent.position: {0}\n" + |
"EditorPartList topLeft.parent.position: {1}\n" + | "EditorPartList topLeft.parent.position: {1}\n" + |
"EditorPartList topLeft.position: {2}\n" + | "EditorPartList topLeft.position: {2}\n" + |
"snapToEdge: {3} (pos.Xmin: {4}; hudLeft: {5})", | "snapToEdge: {3} (pos.Xmin: {4}; hudLeft: {5})", |
EditorPartList.Instance.transformTopLeft.parent.parent.position, | EditorPartList.Instance.transformTopLeft.parent.parent.position, |
EditorPartList.Instance.transformTopLeft.parent.position, | EditorPartList.Instance.transformTopLeft.parent.position, |
EditorPartList.Instance.transformTopLeft.position, | EditorPartList.Instance.transformTopLeft.position, |
snapToEdge, this.ehudWindowPos.value.xMin, hudLeft | this.snapToLeft, this.ehudWindow.WindowPos.xMin, hudLeft |
); | ); |
base.DrawGUI(); | base.DrawGUI(); |
Rect hudPos = this.ehudWindow.WindowPos; | Rect hudPos = this.ehudWindow.WindowPos; |
hudPos.xMin = hudLeft; | if (this.snapToLeft && this.positionsLocked) |
{ | |
hudPos.xMin = hudLeft; | |
} | |
else | |
{ | |
hudPos.xMin = Mathf.Max(hudLeft, hudPos.xMin); | |
} | |
hudPos.width = this.ehudWindow.defaultWindowPos.width; | hudPos.width = this.ehudWindow.defaultWindowPos.width; |
this.ehudWindowPos.value = hudPos; | this.ehudWindow.WindowPos = hudPos; |
this.ehudWindow.WindowPos = this.ehudWindowPos; | this.snapToLeft = Mathf.Abs(this.ehudWindow.WindowPos.xMin - hudLeft) < 15f; |
} | } |
} | } |
} | } |
// VOID | // VOID |
// | // |
// VOID_HUD.cs | // VOID_HUD.cs |
// | // |
// Copyright © 2014, toadicus | // Copyright © 2014, toadicus |
// All rights reserved. | // All rights reserved. |
// | // |
// Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, |
// are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: |
// | // |
// 1. Redistributions of source code must retain the above copyright notice, | // 1. Redistributions of source code must retain the above copyright notice, |
// this list of conditions and the following disclaimer. | // this list of conditions and the following disclaimer. |
// | // |
// 2. Redistributions in binary form must reproduce the above copyright notice, | // 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 | // this list of conditions and the following disclaimer in the documentation and/or other |
// materials provided with the distribution. | // materials provided with the distribution. |
// | // |
// 3. Neither the name of the copyright holder nor the names of its contributors may be used | // 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. | // 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, | // 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 | // 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, | // 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 | // 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, | // 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 | // 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. | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
using KerbalEngineer.VesselSimulator; | using KerbalEngineer.VesselSimulator; |
using KSP; | using KSP; |
using System; | using System; |
using System.Collections.Generic; | using System.Collections.Generic; |
using System.Text; | using System.Text; |
using ToadicusTools; | using ToadicusTools; |
using UnityEngine; | using UnityEngine; |
namespace VOID | namespace VOID |
{ | { |
public class VOID_HUD : VOID_HUDModule, IVOID_Module | public class VOID_HUD : VOID_HUDModule, IVOID_Module |
{ | { |
/* | /* |
* Fields | * Fields |
* */ | * */ |
[AVOID_SaveValue("leftHUDPos")] | protected HUDWindow leftHUD; |
protected VOID_SaveValue<Rect> leftHUDPos; | protected HUDWindow rightHUD; |
[AVOID_SaveValue("rightHUDPos")] | |
protected VOID_SaveValue<Rect> rightHUDPos; | |
protected HUDWindow leftWindow; | |
protected HUDWindow rightWindow; | |
/* | /* |
* Properties | * Properties |
* */ | * */ |
/* | /* |
* Methods | * Methods |
* */ | * */ |
public VOID_HUD() : base() | public VOID_HUD() : base() |
{ | { |
this._Name = "Heads-Up Display"; | this._Name = "Heads-Up Display"; |
this.toggleActive = true; | this.toggleActive = true; |
this.leftWindow = new HUDWindow(this.leftHUDWindow, new Rect(Screen.width * .375f - 300f, 0f, 300f, 90f)); | this.leftHUD = new HUDWindow("leftHUD", this.leftHUDWindow, new Rect(Screen.width * .375f - 300f, 0f, 300f, 90f)); |
this.Windows.Add(this.leftWindow); | this.Windows.Add(this.leftHUD); |
this.leftHUDPos = this.leftWindow.WindowPos; | this.rightHUD = new HUDWindow("rightHUD", this.rightHUDWindow, new Rect(Screen.width * .625f, 0f, 300f, 90f)); |
this.Windows.Add(this.rightHUD); | |
this.rightWindow = new HUDWindow(this.rightHUDWindow, new Rect(Screen.width * .625f, 0f, 300f, 90f)); | |
this.Windows.Add(this.rightWindow); | |
this.rightHUDPos = this.rightWindow.WindowPos; | |
Tools.PostDebugMessage ("VOID_HUD: Constructed."); | Tools.PostDebugMessage ("VOID_HUD: Constructed."); |
} | |
public override void DrawGUI() | |
{ | |
base.DrawGUI(); | |
this.leftHUDPos.value = this.leftWindow.WindowPos; | |
this.rightHUDPos.value = this.rightWindow.WindowPos; | |
} | } |
protected void leftHUDWindow(int id) | protected void leftHUDWindow(int id) |
{ | { |
StringBuilder leftHUD; | StringBuilder leftHUD; |
leftHUD = new StringBuilder(); | leftHUD = new StringBuilder(); |
VOID_Styles.labelHud.alignment = TextAnchor.UpperRight; | VOID_Styles.labelHud.alignment = TextAnchor.UpperRight; |
if (this.core.powerAvailable) | if (this.core.powerAvailable) |
{ | { |
leftHUD.AppendFormat("Primary: {0} Inc: {1}", | leftHUD.AppendFormat("Primary: {0} Inc: {1}", |
VOID_Data.primaryName.ValueUnitString(), | VOID_Data.primaryName.ValueUnitString(), |
VOID_Data.orbitInclination.ValueUnitString("F3") | VOID_Data.orbitInclination.ValueUnitString("F3") |
); | ); |
leftHUD.AppendFormat("\nObt Alt: {0} Obt Vel: {1}", | leftHUD.AppendFormat("\nObt Alt: {0} Obt Vel: {1}", |
VOID_Data.orbitAltitude.ToSIString(), | VOID_Data.orbitAltitude.ToSIString(), |
VOID_Data.orbitVelocity.ToSIString() | VOID_Data.orbitVelocity.ToSIString() |
); | ); |
leftHUD.AppendFormat("\nAp: {0} ETA {1}", | leftHUD.AppendFormat("\nAp: {0} ETA {1}", |
VOID_Data.orbitApoAlt.ToSIString(), | VOID_Data.orbitApoAlt.ToSIString(), |
VOID_Data.timeToApo.ValueUnitString() | VOID_Data.timeToApo.ValueUnitString() |
); | ); |
leftHUD.AppendFormat("\nPe: {0} ETA {1}", | leftHUD.AppendFormat("\nPe: {0} ETA {1}", |
VOID_Data.oribtPeriAlt.ToSIString(), | VOID_Data.oribtPeriAlt.ToSIString(), |
VOID_Data.timeToPeri.ValueUnitString() | VOID_Data.timeToPeri.ValueUnitString() |
); | ); |
leftHUD.AppendFormat("\nTot Δv: {0} Stg Δv: {1}", | leftHUD.AppendFormat("\nTot Δv: {0} Stg Δv: {1}", |
VOID_Data.totalDeltaV.ToSIString(2), | VOID_Data.totalDeltaV.ToSIString(2), |
VOID_Data.stageDeltaV.ToSIString(2) | VOID_Data.stageDeltaV.ToSIString(2) |
); | ); |
} | } |
else | else |
{ | { |
VOID_Styles.labelHud.normal.textColor = Color.red; | VOID_Styles.labelHud.normal.textColor = Color.red; |
leftHUD.Append(string.Intern("-- POWER LOST --")); | leftHUD.Append(string.Intern("-- POWER LOST --")); |
} | } |
GUILayout.Label(leftHUD.ToString(), VOID_Styles.labelHud, GUILayout.ExpandWidth(true)); | GUILayout.Label( |
leftHUD.ToString(), | |
VOID_Styles.labelHud, | |
GUILayout.ExpandWidth(true), | |
GUILayout.ExpandHeight(true) | |
); | |
if (!this.positionsLocked) | if (!this.positionsLocked) |
{ | { |
GUI.DragWindow(); | GUI.DragWindow(); |
} | } |
GUI.BringWindowToBack(id); | GUI.BringWindowToBack(id); |
} | } |
protected void rightHUDWindow(int id) | protected void rightHUDWindow(int id) |
{ | { |
StringBuilder rightHUD; | StringBuilder rightHUD; |
rightHUD = new StringBuilder(); | rightHUD = new StringBuilder(); |
VOID_Styles.labelHud.alignment = TextAnchor.UpperLeft; | VOID_Styles.labelHud.alignment = TextAnchor.UpperLeft; |
if (this.core.powerAvailable) | if (this.core.powerAvailable) |
{ | { |
rightHUD.AppendFormat("Biome: {0} Sit: {1}", | rightHUD.AppendFormat("Biome: {0} Sit: {1}", |
VOID_Data.currBiome.ValueUnitString(), | VOID_Data.currBiome.ValueUnitString(), |
VOID_Data.expSituation.ValueUnitString() | VOID_Data.expSituation.ValueUnitString() |
); | ); |
rightHUD.AppendFormat("\nSrf Alt: {0} Srf Vel: {1}", | rightHUD.AppendFormat("\nSrf Alt: {0} Srf Vel: {1}", |
VOID_Data.trueAltitude.ToSIString(), | VOID_Data.trueAltitude.ToSIString(), |
VOID_Data.surfVelocity.ToSIString() | VOID_Data.surfVelocity.ToSIString() |
); | ); |
rightHUD.AppendFormat("\nVer: {0} Hor: {1}", | rightHUD.AppendFormat("\nVer: {0} Hor: {1}", |
VOID_Data.vertVelocity.ToSIString(), | VOID_Data.vertVelocity.ToSIString(), |
VOID_Data.horzVelocity.ToSIString() | VOID_Data.horzVelocity.ToSIString() |
); | ); |
rightHUD.AppendFormat("\nLat: {0} Lon: {1}", | rightHUD.AppendFormat("\nLat: {0} Lon: {1}", |
VOID_Data.surfLatitude.ValueUnitString(), | VOID_Data.surfLatitude.ValueUnitString(), |
VOID_Data.surfLongitude.ValueUnitString() | VOID_Data.surfLongitude.ValueUnitString() |
); | ); |
rightHUD.AppendFormat("\nHdg: {0} Pit: {1}", | rightHUD.AppendFormat("\nHdg: {0} Pit: {1}", |
VOID_Data.vesselHeading.ValueUnitString(), | VOID_Data.vesselHeading.ValueUnitString(), |
VOID_Data.vesselPitch.ToSIString(2) | VOID_Data.vesselPitch.ToSIString(2) |
); | ); |
if ( | if ( |
this.core.vessel.mainBody == this.core.HomeBody && | this.core.vessel.mainBody == this.core.HomeBody && |
( | ( |
this.core.vessel.situation == Vessel.Situations.FLYING || | this.core.vessel.situation == Vessel.Situations.FLYING || |
this.core.vessel.situation == Vessel.Situations.SUB_ORBITAL || | this.core.vessel.situation == Vessel.Situations.SUB_ORBITAL || |
this.core.vessel.situation == Vessel.Situations.LANDED || | this.core.vessel.situation == Vessel.Situations.LANDED || |
this.core.vessel.situation == Vessel.Situations.SPLASHED | this.core.vessel.situation == Vessel.Situations.SPLASHED |
) | ) |
) | ) |
{ | { |
rightHUD.AppendFormat("\nRange to KSC: {0}", VOID_Data.downrangeDistance.ValueUnitString(2)); | rightHUD.AppendFormat("\nRange to KSC: {0}", VOID_Data.downrangeDistance.ValueUnitString(2)); |
} | } |
} | } |
else | else |
{ | { |
VOID_Styles.labelHud.normal.textColor = Color.red; | VOID_Styles.labelHud.normal.textColor = Color.red; |
rightHUD.Append(string.Intern("-- POWER LOST --")); | rightHUD.Append(string.Intern("-- POWER LOST --")); |
} | } |
GUILayout.Label(rightHUD.ToString(), VOID_Styles.labelHud, GUILayout.ExpandWidth(true)); | GUILayout.Label( |
rightHUD.ToString(), | |
VOID_Styles.labelHud, | |
GUILayout.ExpandWidth(true), | |
GUILayout.ExpandHeight(true) | |
); | |
if (!this.positionsLocked) | if (!this.positionsLocked) |
{ | { |
GUI.DragWindow(); | GUI.DragWindow(); |
} | } |
GUI.BringWindowToBack(id); | GUI.BringWindowToBack(id); |
} | } |
} | } |
} | } |
// VOID | // VOID |
// | // |
// VOID_HUD.cs | // VOID_HUD.cs |
// | // |
// Copyright © 2014, toadicus | // Copyright © 2014, toadicus |
// All rights reserved. | // All rights reserved. |
// | // |
// Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, |
// are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: |
// | // |
// 1. Redistributions of source code must retain the above copyright notice, | // 1. Redistributions of source code must retain the above copyright notice, |
// this list of conditions and the following disclaimer. | // this list of conditions and the following disclaimer. |
// | // |
// 2. Redistributions in binary form must reproduce the above copyright notice, | // 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 | // this list of conditions and the following disclaimer in the documentation and/or other |
// materials provided with the distribution. | // materials provided with the distribution. |
// | // |
// 3. Neither the name of the copyright holder nor the names of its contributors may be used | // 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. | // 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, | // 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 | // 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, | // 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 | // 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, | // 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 | // 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. | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
using KerbalEngineer.VesselSimulator; | using KerbalEngineer.VesselSimulator; |
using KSP; | using KSP; |
using System; | using System; |
using System.Collections.Generic; | using System.Collections.Generic; |
using System.Linq; | using System.Linq; |
using System.Text; | using System.Text; |
using ToadicusTools; | using ToadicusTools; |
using UnityEngine; | using UnityEngine; |
namespace VOID | namespace VOID |
{ | { |
public class VOID_HUDAdvanced : VOID_HUDModule, IVOID_Module | public class VOID_HUDAdvanced : VOID_HUDModule, IVOID_Module |
{ | { |
/* | /* |
* Fields | * Fields |
* */ | * */ |
protected VOID_HUD primaryHUD; | protected VOID_HUD primaryHUD; |
protected HUDWindow leftHUD; | protected HUDWindow leftHUD; |
protected HUDWindow rightHUD; | protected HUDWindow rightHUD; |
[AVOID_SaveValue("leftHUDPos")] | |
protected VOID_SaveValue<Rect> leftHUDPos; | |
[AVOID_SaveValue("rightHUDPos")] | |
protected VOID_SaveValue<Rect> rightHUDPos; | |
/* | /* |
* Properties | * Properties |
* */ | * */ |
public override int ColorIndex | public override int ColorIndex |
{ | { |
get | get |
{ | { |
if (this.primaryHUD != null) | if (this.primaryHUD != null) |
{ | { |
return this.primaryHUD.ColorIndex; | return this.primaryHUD.ColorIndex; |
} | } |
return base.ColorIndex; | return base.ColorIndex; |
} | } |
set | set |
{ | { |
base.ColorIndex = value; | base.ColorIndex = value; |
} | } |
} | } |
/* | /* |
* Methods | * Methods |
* */ | * */ |
public VOID_HUDAdvanced() : base() | public VOID_HUDAdvanced() : base() |
{ | { |
this._Name = "Advanced Heads-Up Display"; | this._Name = "Advanced Heads-Up Display"; |
this.toggleActive = true; | this.toggleActive = true; |
this.leftHUD = new HUDWindow(this.leftHUDWindow, new Rect( | this.leftHUD = new HUDWindow("leftHUD", |
Screen.width * .5f - (float)GameSettings.UI_SIZE * .25f - 300f, | this.leftHUDWindow, |
Screen.height - 200f, | new Rect( |
300f, 90f) | Screen.width * .5f - (float)GameSettings.UI_SIZE * .25f - 300f, |
Screen.height - 200f, | |
300f, 90f) | |
); | ); |
this.Windows.Add(this.leftHUD); | this.Windows.Add(this.leftHUD); |
this.leftHUDPos = this.leftHUD.WindowPos; | this.rightHUD = new HUDWindow( |
"rightHUD", | |
this.rightHUD = new HUDWindow(this.rightHUDWindow, new Rect( | this.rightHUDWindow, |
Screen.width * .5f + (float)GameSettings.UI_SIZE * .25f, | new Rect( |
Screen.height - 200f, | Screen.width * .5f + (float)GameSettings.UI_SIZE * .25f, |
300f, 90f) | Screen.height - 200f, |
300f, 90f) | |
); | ); |
this.Windows.Add(this.rightHUD); | this.Windows.Add(this.rightHUD); |
this.rightHUDPos = this.rightHUD.WindowPos; | |
this.positionsLocked = true; | this.positionsLocked = true; |
Tools.PostDebugMessage (this, "Constructed."); | Tools.PostDebugMessage (this, "Constructed."); |
} | } |
protected void leftHUDWindow(int id) | protected void leftHUDWindow(int id) |
{ | { |
StringBuilder leftHUD; | StringBuilder leftHUD; |
leftHUD = new StringBuilder(); | leftHUD = new StringBuilder(); |
VOID_Styles.labelHud.alignment = TextAnchor.UpperRight; | VOID_Styles.labelHud.alignment = TextAnchor.UpperRight; |
if (this.core.powerAvailable) | if (this.core.powerAvailable) |
{ | { |
leftHUD.AppendFormat( | leftHUD.AppendFormat( |
string.Intern("Mass: {0}\n"), | string.Intern("Mass: {0}\n"), |
VOID_Data.totalMass.ToSIString(2) | VOID_Data.totalMass.ToSIString(2) |
); | ); |
if (VOID_Data.vesselCrewCapacity > 0) | if (VOID_Data.vesselCrewCapacity > 0) |
{ | { |
leftHUD.AppendFormat( | leftHUD.AppendFormat( |
string.Intern("Crew: {0} / {1}\n"), | string.Intern("Crew: {0} / {1}\n"), |
VOID_Data.vesselCrewCount.Value, | VOID_Data.vesselCrewCount.Value, |
VOID_Data.vesselCrewCapacity.Value | VOID_Data.vesselCrewCapacity.Value |
); | ); |
} | } |
leftHUD.AppendFormat( | leftHUD.AppendFormat( |
string.Intern("Acc: {0} T:W: {1}\n"), | string.Intern("Acc: {0} T:W: {1}\n"), |
VOID_Data.vesselAccel.ToSIString(2), | VOID_Data.vesselAccel.ToSIString(2), |
VOID_Data.currThrustWeight.Value.ToString("f2") | VOID_Data.currThrustWeight.Value.ToString("f2") |
); | ); |
leftHUD.AppendFormat( | leftHUD.AppendFormat( |
string.Intern("Ang Vel: {0}\n"), | string.Intern("Ang Vel: {0}\n"), |
VOID_Data.vesselAngularVelocity.ToSIString(2) | VOID_Data.vesselAngularVelocity.ToSIString(2) |
); | ); |
if (VOID_Data.stageNominalThrust != 0d) | if (VOID_Data.stageNominalThrust != 0d) |
{ | { |
leftHUD.AppendFormat( | leftHUD.AppendFormat( |
string.Intern("Thrust Offset: {0}\n"), | string.Intern("Thrust Offset: {0}\n"), |
VOID_Data.vesselThrustOffset.Value.ToString("F1") | VOID_Data.vesselThrustOffset.Value.ToString("F1") |
); | ); |
} | } |
} | } |
else | else |
{ | { |
VOID_Styles.labelHud.normal.textColor = Color.red; | VOID_Styles.labelHud.normal.textColor = Color.red; |
leftHUD.Append(string.Intern("-- POWER LOST --")); | leftHUD.Append(string.Intern("-- POWER LOST --")); |
} | } |
GUILayout.Label(leftHUD.ToString(), VOID_Styles.labelHud, GUILayout.ExpandWidth(true)); | GUILayout.Label( |
leftHUD.ToString(), | |
VOID_Styles.labelHud, | |
GUILayout.ExpandWidth(true), | |
GUILayout.ExpandHeight(true) | |
); | |
if (!this.positionsLocked) | if (!this.positionsLocked) |
{ | { |
GUI.DragWindow(); | GUI.DragWindow(); |
} | } |
GUI.BringWindowToBack(id); | GUI.BringWindowToBack(id); |
} | } |
protected void rightHUDWindow(int id) | protected void rightHUDWindow(int id) |
{ | { |
StringBuilder rightHUD; | StringBuilder rightHUD; |
rightHUD = new StringBuilder(); | rightHUD = new StringBuilder(); |
VOID_Styles.labelHud.alignment = TextAnchor.UpperLeft; | VOID_Styles.labelHud.alignment = TextAnchor.UpperLeft; |
if (this.core.powerAvailable) | if (this.core.powerAvailable) |
{ | { |
rightHUD.AppendFormat( | rightHUD.AppendFormat( |
"Burn Δv (Rem/Tot): {0} / {1}\n", | "Burn Δv (Rem/Tot): {0} / {1}\n", |
VOID_Data.currManeuverDVRemaining.ValueUnitString("f2"), | VOID_Data.currManeuverDVRemaining.ValueUnitString("f2"), |
VOID_Data.currManeuverDeltaV.ValueUnitString("f2") | VOID_Data.currManeuverDeltaV.ValueUnitString("f2") |
); | ); |
if (VOID_Data.upcomingManeuverNodes > 1) | if (VOID_Data.upcomingManeuverNodes > 1) |
{ | { |
rightHUD.AppendFormat("Next Burn Δv: {0}\n", | rightHUD.AppendFormat("Next Burn Δv: {0}\n", |
VOID_Data.nextManeuverDeltaV.ValueUnitString("f2") | VOID_Data.nextManeuverDeltaV.ValueUnitString("f2") |
); | ); |
} | } |
rightHUD.AppendFormat("Burn Time (Rem/Total): {0} / {1}\n", | rightHUD.AppendFormat("Burn Time (Rem/Total): {0} / {1}\n", |
VOID_Tools.FormatInterval(VOID_Data.currentNodeBurnRemaining.Value), | VOID_Tools.FormatInterval(VOID_Data.currentNodeBurnRemaining.Value), |
VOID_Tools.FormatInterval(VOID_Data.currentNodeBurnDuration.Value) | VOID_Tools.FormatInterval(VOID_Data.currentNodeBurnDuration.Value) |
); | ); |
if (VOID_Data.burnTimeDoneAtNode.Value != string.Empty) | if (VOID_Data.burnTimeDoneAtNode.Value != string.Empty) |
{ | { |
rightHUD.AppendFormat("{0} (done @ node)\n", | rightHUD.AppendFormat("{0} (done @ node)\n", |
VOID_Data.burnTimeDoneAtNode.Value | VOID_Data.burnTimeDoneAtNode.Value |
); | ); |
rightHUD.AppendFormat("{0} (½ done @ node)", | rightHUD.AppendFormat("{0} (½ done @ node)", |
VOID_Data.burnTimeHalfDoneAtNode.Value | VOID_Data.burnTimeHalfDoneAtNode.Value |
); | ); |
} | } |
else | else |
{ | { |
rightHUD.Append("Node is past"); | rightHUD.Append("Node is past"); |
} | } |
} | } |
else | else |
{ | { |
VOID_Styles.labelHud.normal.textColor = Color.red; | VOID_Styles.labelHud.normal.textColor = Color.red; |
rightHUD.Append(string.Intern("-- POWER LOST --")); | rightHUD.Append(string.Intern("-- POWER LOST --")); |
} | } |
GUILayout.Label(rightHUD.ToString(), VOID_Styles.labelHud, GUILayout.ExpandWidth(true)); | GUILayout.Label( |
rightHUD.ToString(), | |
VOID_Styles.labelHud, | |
GUILayout.ExpandWidth(true), | |
GUILayout.ExpandHeight(true) | |
); | |
if (!this.positionsLocked) | if (!this.positionsLocked) |
{ | { |
GUI.DragWindow(); | GUI.DragWindow(); |
} | } |
GUI.BringWindowToBack(id); | GUI.BringWindowToBack(id); |
} | } |
public override void DrawGUI() | public override void DrawGUI() |
{ | { |
if (this.primaryHUD == null) | if (this.primaryHUD == null) |
{ | { |
foreach (IVOID_Module module in this.core.Modules) | foreach (IVOID_Module module in this.core.Modules) |
{ | { |
if (module is VOID_HUD) | if (module is VOID_HUD) |
{ | { |
this.primaryHUD = module as VOID_HUD; | this.primaryHUD = module as VOID_HUD; |
} | } |
} | } |
} | } |
if (VOID_Data.upcomingManeuverNodes < 1 && this.Windows.Contains(this.rightHUD)) | |
{ | |
this.Windows.Remove(this.rightHUD); | |
} | |
else if (VOID_Data.upcomingManeuverNodes > 0 && !this.Windows.Contains(this.rightHUD)) | |
{ | |
this.Windows.Add(this.rightHUD); | |
} | |
base.DrawGUI(); | base.DrawGUI(); |
this.leftHUDPos.value = this.leftHUD.WindowPos; | |
this.rightHUDPos.value = this.rightHUD.WindowPos; | |
} | } |
public override void DrawConfigurables() | public override void DrawConfigurables() |
{ | { |
if (GUILayout.Button(string.Intern("Reset Advanced HUD Positions"), GUILayout.ExpandWidth(false))) | |
{ | |
foreach (HUDWindow window in this.Windows) | |
{ | |
window.WindowPos = new Rect(window.defaultWindowPos); | |
} | |
} | |
this.positionsLocked = GUILayout.Toggle(this.positionsLocked, | this.positionsLocked = GUILayout.Toggle(this.positionsLocked, |
string.Intern("Lock Advanced HUD Positions"), | string.Intern("Lock Advanced HUD Positions"), |
GUILayout.ExpandWidth(false)); | GUILayout.ExpandWidth(false)); |
} | } |
} | } |
} | } |
// VOID | // VOID |
// | // |
// VOID_HUDModule.cs | // VOID_HUDModule.cs |
// | // |
// Copyright © 2014, toadicus | // Copyright © 2014, toadicus |
// All rights reserved. | // All rights reserved. |
// | // |
// Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, |
// are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: |
// | // |
// 1. Redistributions of source code must retain the above copyright notice, | // 1. Redistributions of source code must retain the above copyright notice, |
// this list of conditions and the following disclaimer. | // this list of conditions and the following disclaimer. |
// | // |
// 2. Redistributions in binary form must reproduce the above copyright notice, | // 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 | // this list of conditions and the following disclaimer in the documentation and/or other |
// materials provided with the distribution. | // materials provided with the distribution. |
// | // |
// 3. Neither the name of the copyright holder nor the names of its contributors may be used | // 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. | // 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, | // 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 | // 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, | // 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 | // 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, | // 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 | // 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. | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
using KerbalEngineer.VesselSimulator; | using KerbalEngineer.VesselSimulator; |
using KSP; | using KSP; |
using System; | using System; |
using System.Collections.Generic; | using System.Collections.Generic; |
using System.Text; | using System.Text; |
using ToadicusTools; | using ToadicusTools; |
using UnityEngine; | using UnityEngine; |
namespace VOID | namespace VOID |
{ | { |
public abstract class VOID_HUDModule : VOID_Module | public abstract class VOID_HUDModule : VOID_Module |
{ | { |
[AVOID_SaveValue("colorIndex")] | [AVOID_SaveValue("colorIndex")] |
protected VOID_SaveValue<int> _colorIndex; | protected VOID_SaveValue<int> _colorIndex; |
protected List<Color> textColors; | protected List<Color> textColors; |
[AVOID_SaveValue("positionsLocked")] | [AVOID_SaveValue("positionsLocked")] |
protected VOID_SaveValue<bool> positionsLocked; | protected VOID_SaveValue<bool> positionsLocked; |
public virtual int ColorIndex | public virtual int ColorIndex |
{ | { |
get | get |
{ | { |
return this._colorIndex; | return this._colorIndex; |
} | } |
set | set |
{ | { |
if (this._colorIndex >= this.textColors.Count - 1) | if (this._colorIndex >= this.textColors.Count - 1) |
{ | { |
this._colorIndex = 0; | this._colorIndex = 0; |
return; | return; |
} | } |
this._colorIndex = value; | this._colorIndex = value; |
} | } |
} | } |
public virtual List<HUDWindow> Windows | public virtual List<HUDWindow> Windows |
{ | { |
get; | get; |
protected set; | protected set; |
} | } |
public VOID_HUDModule() : base() | public VOID_HUDModule() : base() |
{ | { |
this._colorIndex = 0; | this._colorIndex = 0; |
this.textColors = new List<Color>(); | this.textColors = new List<Color>(); |
this.textColors.Add(Color.green); | this.textColors.Add(Color.green); |
this.textColors.Add(Color.black); | this.textColors.Add(Color.black); |
this.textColors.Add(Color.white); | this.textColors.Add(Color.white); |
this.textColors.Add(Color.red); | this.textColors.Add(Color.red); |
this.textColors.Add(Color.blue); | this.textColors.Add(Color.blue); |
this.textColors.Add(Color.yellow); | this.textColors.Add(Color.yellow); |
this.textColors.Add(Color.gray); | this.textColors.Add(Color.gray); |
this.textColors.Add(Color.cyan); | this.textColors.Add(Color.cyan); |
this.textColors.Add(Color.magenta); | this.textColors.Add(Color.magenta); |
this.positionsLocked = true; | this.positionsLocked = true; |
this.Windows = new List<HUDWindow>(); | this.Windows = new List<HUDWindow>(); |
} | } |
public override void DrawGUI() | public override void DrawGUI() |
{ | { |
VOID_Styles.labelHud.normal.textColor = textColors [ColorIndex]; | VOID_Styles.labelHud.normal.textColor = textColors [ColorIndex]; |
GUI.skin = this.core.Skin; | GUI.skin = this.core.Skin; |
if (HighLogic.LoadedSceneIsEditor || | if (HighLogic.LoadedSceneIsEditor || |
(TimeWarp.WarpMode == TimeWarp.Modes.LOW) || (TimeWarp.CurrentRate <= TimeWarp.MaxPhysicsRate) | (TimeWarp.WarpMode == TimeWarp.Modes.LOW) || (TimeWarp.CurrentRate <= TimeWarp.MaxPhysicsRate) |
) | ) |
{ | { |
SimManager.RequestSimulation(); | SimManager.RequestSimulation(); |
} | } |
foreach (HUDWindow window in this.Windows) | foreach (HUDWindow window in this.Windows) |
{ | { |
window.WindowPos = GUI.Window( | window.WindowPos = GUILayout.Window( |
this.core.windowID, | this.core.windowID, |
window.WindowPos, | window.WindowPos, |
VOID_Tools.GetWindowHandler(window.WindowFunction), | VOID_Tools.GetWindowHandler(window.WindowFunction), |
GUIContent.none, | GUIContent.none, |
GUIStyle.none | GUIStyle.none |
); | ); |
} | } |
} | } |
public override void DrawConfigurables() | public override void DrawConfigurables() |
{ | { |
if (GUILayout.Button (string.Intern("Change HUD color"), GUILayout.ExpandWidth (false))) | if (GUILayout.Button (string.Intern("Change HUD color"), GUILayout.ExpandWidth (false))) |
{ | { |
++this.ColorIndex; | ++this.ColorIndex; |
} | } |
if (GUILayout.Button(string.Intern("Reset HUD Positions"), GUILayout.ExpandWidth(false))) | if (GUILayout.Button(string.Intern("Reset HUD Positions"), GUILayout.ExpandWidth(false))) |
{ | { |
foreach (HUDWindow window in this.Windows) | foreach (HUDWindow window in this.Windows) |
{ | { |
window.WindowPos = new Rect(window.defaultWindowPos); | window.WindowPos = new Rect(window.defaultWindowPos); |
} | } |
} | } |
this.positionsLocked = GUILayout.Toggle(this.positionsLocked, | this.positionsLocked = GUILayout.Toggle(this.positionsLocked, |
string.Intern("Lock HUD Positions"), | string.Intern("Lock HUD Positions"), |
GUILayout.ExpandWidth(false)); | GUILayout.ExpandWidth(false)); |
} | } |
public override void LoadConfig() | |
{ | |
base.LoadConfig(); | |
var config = KSP.IO.PluginConfiguration.CreateForType<VOID_Core>(); | |
config.load(); | |
foreach (HUDWindow window in this.Windows) | |
{ | |
string saveName = string.Format("{0}_{1}", this.GetType().Name, window.WindowName); | |
Rect loadedPos = config.GetValue(saveName, window.defaultWindowPos); | |
window.WindowPos = loadedPos; | |
} | |
} | |
public override void _SaveToConfig(KSP.IO.PluginConfiguration config) | |
{ | |
base._SaveToConfig(config); | |
foreach (HUDWindow window in this.Windows) | |
{ | |
string saveName = string.Format("{0}_{1}", this.GetType().Name, window.WindowName); | |
config.SetValue(saveName, window.WindowPos); | |
} | |
} | |
} | } |
public class HUDWindow | public class HUDWindow |
{ | { |
public readonly Rect defaultWindowPos; | public readonly Rect defaultWindowPos; |
private Rect _windowPos; | |
public Action<int> WindowFunction | public Action<int> WindowFunction |
{ | { |
get; | get; |
private set; | private set; |
} | } |
public Rect WindowPos | public Rect WindowPos |
{ | { |
get | |
{ | |
return this._windowPos; | |
} | |
set | |
{ | |
if (value != this._windowPos) | |
{ | |
this._windowPos = value; | |
if (VOID_Data.core != null) | |
{ | |
VOID_Data.core.configDirty = true; | |
} | |
} | |
} | |
} | |
public string WindowName | |
{ | |
get; | get; |
set; | private set; |
} | } |
private HUDWindow() {} | private HUDWindow() {} |
public HUDWindow(Action<int> windowFunc, Rect defaultPos) | public HUDWindow(string name, Action<int> windowFunc, Rect defaultPos) |
{ | { |
this.WindowName = name; | |
this.WindowFunction = windowFunc; | this.WindowFunction = windowFunc; |
this.defaultWindowPos = defaultPos; | this.defaultWindowPos = defaultPos; |
this.WindowPos = new Rect(this.defaultWindowPos); | this.WindowPos = new Rect(this.defaultWindowPos); |
} | } |
} | } |
} | } |