From: cybutek Date: Sun, 06 Mar 2016 17:33:14 +0000 Subject: Created a base CanvasGroupFader component to handle GUI object fading. X-Git-Url: http://git.toad.homelinux.net/projects/VesselSimulator.git/commitdiff/2825917 --- Created a base CanvasGroupFader component to handle GUI object fading. --- --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,11 @@ # Build Folders (you can keep bin if you'd like, to store dlls and pdbs) [Bb]in/ [Oo]bj/ + +# Unity specific +[Ll]ibrary/ +[Tt]emp/ +*.unityproj # mstest test results TestResults --- /dev/null +++ b/Assets/Prefabs/flight-menu.prefab @@ -1,1 +1,793 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &116014 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22475412} + - 222: {fileID: 22223226} + - 114: {fileID: 11409704} + - 114: {fileID: 11424646} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &122098 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22401100} + - 222: {fileID: 22201528} + - 114: {fileID: 11404586} + - 114: {fileID: 11496484} + - 114: {fileID: 11461688} + m_Layer: 5 + m_Name: ControlBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &126098 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22476196} + - 222: {fileID: 22270862} + - 114: {fileID: 11423044} + - 114: {fileID: 11485532} + m_Layer: 5 + m_Name: flight-menu + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &133376 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22478174} + - 114: {fileID: 11443382} + m_Layer: 5 + m_Name: TopControls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &137786 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22444606} + - 222: {fileID: 22267348} + - 114: {fileID: 11465882} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &138760 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22409936} + - 222: {fileID: 22255938} + - 114: {fileID: 11403342} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &156848 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22483410} + - 222: {fileID: 22267572} + - 114: {fileID: 11463504} + - 114: {fileID: 11453198} + m_Layer: 5 + m_Name: Titlebar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &172308 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22401786} + - 222: {fileID: 22247322} + - 114: {fileID: 11439582} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &194088 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22469574} + - 222: {fileID: 22281674} + - 114: {fileID: 11498756} + - 114: {fileID: 11454510} + - 114: {fileID: 11451984} + m_Layer: 5 + m_Name: ShowEngineer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &11403342 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 138760} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 12 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SHOW ENGINEER +--- !u!114 &11404586 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 122098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: .800000072, g: 1, b: 0, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11409704 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 116014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: .313725501, g: .313725501, b: .313725501, a: .70588237} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11423044 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 126098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &11424646 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 116014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 +--- !u!114 &11439582 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 172308} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: .800000072, g: 1, b: 0, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 12 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: FLIGHT ENGINEER +--- !u!114 &11443382 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133376} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 25 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 +--- !u!114 &11451984 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 194088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 20 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 +--- !u!114 &11453198 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 156848} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 20 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 +--- !u!114 &11454510 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 194088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: .960784316, g: .960784316, b: .960784316, a: 1} + m_PressedColor: {r: .784313738, g: .784313738, b: .784313738, a: 1} + m_DisabledColor: {r: .784313738, g: .784313738, b: .784313738, a: .501960814} + m_ColorMultiplier: 1 + m_FadeDuration: .100000001 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 11498756} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11461688 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 122098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 20 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 +--- !u!114 &11463504 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 156848} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: .183823526, g: .183823526, b: .183823526, a: .90196079} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11465882 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 137786} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 12 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: CONTROL BAR +--- !u!114 &11485532 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 126098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 +--- !u!114 &11496484 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 122098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: .960784316, g: .960784316, b: .960784316, a: 1} + m_PressedColor: {r: .784313738, g: .784313738, b: .784313738, a: 1} + m_DisabledColor: {r: .784313738, g: .784313738, b: .784313738, a: .501960814} + m_ColorMultiplier: 1 + m_FadeDuration: .100000001 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 11404586} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11498756 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 194088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: .800000072, g: 1, b: 0, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &22201528 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 122098} +--- !u!222 &22223226 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 116014} +--- !u!222 &22247322 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 172308} +--- !u!222 &22255938 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 138760} +--- !u!222 &22267348 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 137786} +--- !u!222 &22267572 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 156848} +--- !u!222 &22270862 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 126098} +--- !u!222 &22281674 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 194088} +--- !u!224 &22401100 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 122098} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22444606} + m_Father: {fileID: 22478174} + m_RootOrder: 1 + m_AnchorMin: {x: .5, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -.5, y: 0} + m_SizeDelta: {x: -3, y: -4} + m_Pivot: {x: .5, y: .5} +--- !u!224 &22401786 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 172308} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22483410} + m_RootOrder: 0 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 2.5, y: 0} + m_SizeDelta: {x: -5, y: 0} + m_Pivot: {x: .5, y: .5} +--- !u!224 &22409936 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 138760} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22469574} + m_RootOrder: 0 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: .5, y: .5} +--- !u!224 &22444606 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 137786} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22401100} + m_RootOrder: 0 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: .5, y: .5} +--- !u!224 &22469574 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 194088} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22409936} + m_Father: {fileID: 22478174} + m_RootOrder: 0 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: .5, y: 1} + m_AnchoredPosition: {x: .5, y: 0} + m_SizeDelta: {x: -3, y: -4} + m_Pivot: {x: .5, y: .5} +--- !u!224 &22475412 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 116014} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22478174} + m_Father: {fileID: 22476196} + m_RootOrder: 1 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: .5, y: .5} +--- !u!224 &22476196 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 126098} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22483410} + - {fileID: 22475412} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_AnchorMin: {x: .5, y: .5} + m_AnchorMax: {x: .5, y: .5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 250, y: 0} + m_Pivot: {x: 1, y: 0} +--- !u!224 &22478174 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133376} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22469574} + - {fileID: 22401100} + m_Father: {fileID: 22475412} + m_RootOrder: 0 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: .5, y: .5} +--- !u!224 &22483410 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 156848} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22401786} + m_Father: {fileID: 22476196} + m_RootOrder: 0 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: .5, y: 1} +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 126098} + m_IsPrefabParent: 1 --- /dev/null +++ b/Assets/Scenes/main.unity @@ -1,1 +1,629 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +SceneSettings: + m_ObjectHideFlags: 0 + m_PVSData: + m_PVSObjectsArray: [] + m_PVSPortalsArray: [] + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: .25 + backfaceThreshold: 100 +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 6 + m_Fog: 0 + m_FogColor: {r: .5, g: .5, b: .5, a: 1} + m_FogMode: 3 + m_FogDensity: .00999999978 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: .211999997, g: .226999998, b: .259000003, a: 1} + m_AmbientEquatorColor: {r: .114, g: .125, b: .133000001, a: 1} + m_AmbientGroundColor: {r: .0469999984, g: .0430000015, b: .0350000001, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: .5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_GIWorkflowMode: 1 + m_LightmapsMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 3 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AOMaxDistance: 1 + m_Padding: 2 + m_CompAOExponent: 0 + m_LightmapParameters: {fileID: 0} + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_LightmapSnapshot: {fileID: 0} + m_RuntimeCPUUsage: 25 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentRadius: .5 + agentHeight: 2 + agentSlope: 45 + agentClimb: .400000006 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + accuratePlacement: 0 + minRegionArea: 2 + cellSize: .166666672 + manualCellSize: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &476101859 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 476101860} + - 222: {fileID: 476101862} + - 114: {fileID: 476101861} + m_Layer: 5 + m_Name: Background-Flight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &476101860 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 476101859} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1866791882} + m_RootOrder: 1 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: .5, y: .5} +--- !u!114 &476101861 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 476101859} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 0115c816d260a0947976c8ea804febbc, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &476101862 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 476101859} +--- !u!224 &1026898450 stripped +RectTransform: + m_PrefabParentObject: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, + type: 2} + m_PrefabInternal: {fileID: 1995265978} +--- !u!1 &1398276586 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1398276590} + - 114: {fileID: 1398276589} + - 114: {fileID: 1398276588} + - 114: {fileID: 1398276587} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1398276587 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1398276586} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1997211142, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ForceModuleActive: 0 +--- !u!114 &1398276588 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1398276586} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: .5 + m_ForceModuleActive: 0 +--- !u!114 &1398276589 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1398276586} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1398276590 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1398276586} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 +--- !u!1 &1866791878 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 1866791882} + - 223: {fileID: 1866791881} + - 114: {fileID: 1866791880} + - 114: {fileID: 1866791879} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1866791879 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1866791878} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1866791880 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1866791878} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1866791881 +Canvas: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1866791878} + m_Enabled: 1 + serializedVersion: 2 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!224 &1866791882 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1866791878} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 2037475081} + - {fileID: 476101860} + - {fileID: 1026898450} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1001 &1995265978 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1866791882} + m_Modifications: + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_SizeDelta.x + value: 250 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_SizeDelta.y + value: 45 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchorMin.x + value: .5 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchorMin.y + value: .5 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchorMax.x + value: .5 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchorMax.y + value: .5 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_Pivot.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchoredPosition.x + value: 125 + objectReference: {fileID: 0} + - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchoredPosition.y + value: -12.5 + objectReference: {fileID: 0} + - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_SizeDelta.x + value: 250 + objectReference: {fileID: 0} + - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_SizeDelta.y + value: 25 + objectReference: {fileID: 0} + - target: {fileID: 22483410, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22483410, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22483410, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchoredPosition.x + value: 125 + objectReference: {fileID: 0} + - target: {fileID: 22483410, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_SizeDelta.x + value: 250 + objectReference: {fileID: 0} + - target: {fileID: 22483410, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_SizeDelta.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchoredPosition.x + value: 125 + objectReference: {fileID: 0} + - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_AnchoredPosition.y + value: -32.5 + objectReference: {fileID: 0} + - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_SizeDelta.x + value: 250 + objectReference: {fileID: 0} + - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + propertyPath: m_SizeDelta.y + value: 25 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2} + m_IsPrefabParent: 0 +--- !u!1 &2037475080 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 2037475081} + - 222: {fileID: 2037475083} + - 114: {fileID: 2037475082} + m_Layer: 5 + m_Name: Background-Editor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2037475081 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2037475080} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1866791882} + m_RootOrder: 0 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: .5, y: .5} +--- !u!114 &2037475082 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2037475080} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: b0e2a09d07dbbcb40b0d4db43cd044f9, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &2037475083 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2037475080} +--- !u!1 &2134872726 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 2134872731} + - 20: {fileID: 2134872730} + - 92: {fileID: 2134872729} + - 124: {fileID: 2134872728} + - 81: {fileID: 2134872727} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2134872727 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2134872726} + m_Enabled: 1 +--- !u!124 &2134872728 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2134872726} + m_Enabled: 1 +--- !u!92 &2134872729 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2134872726} + m_Enabled: 1 +--- !u!20 &2134872730 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2134872726} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: .0196078438} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: .300000012 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: .0219999999 + m_StereoMirrorMode: 0 +--- !u!4 &2134872731 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2134872726} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 --- /dev/null +++ b/Assets/Scripts/Editor/BuildAssetBundles.cs @@ -1,1 +1,11 @@ +using UnityEditor; +using UnityEngine; +public class BuildAssetBundles : MonoBehaviour +{ + [MenuItem("Assets/Build Asset Bundles")] + public static void Build() + { + BuildPipeline.BuildAssetBundles(Application.dataPath + "/../Output/KerbalEngineer", BuildAssetBundleOptions.UncompressedAssetBundle); + } +} --- a/Documents/CHANGES.txt +++ b/Documents/CHANGES.txt @@ -1,3 +1,41 @@ + Changed: Thermal flux is now correctly indicated in kilowatts. + +1.0.19.4, 12-02-16 + Fixed: Only 'STAGE_STACK_FLOW' and 'STAGE_STACK_FLOW_BALANCE' resources include surface mounted parts as fuel targets. + Fixed: Fairing mass being doubled in the VAB (removed workaround for a KSP bug which has been fixed). + +1.0.19.3, 09-02-16 + Fixed: Fuel cross-feed from surface attached parts. + +1.0.19.2, 19-11-15 + Rebuild for KSP 1.0.5.1028 silent update. + +1.0.19.1, 09-11-15 + Added: Key binding editor accessible under 'Settings' on the Build Engineer. + Added: Added current vessel name readout. (antplant) + Added: 'Relative Radial Velocity' and 'Time To Rendezvous' readouts. (itwtx) + Added: Readout help strings. (harryyoung) + Changed: The 'Torque' value in the editor is now precise to two decimal places. + Changed: Time formatting reference (Kerbin/Earth) is now based on the in-game setting. + Changed: Eccentric Anomaly, Mean Anomaly and Mean Anomaly At Epoc now display in degrees rather than radians. + Fixed: Optimised time formatting. (itwtx) + Fixed: TimeToAtmosphere checks that the Apoapsis is outside atmosphere. (Kerbas-ad-astra) + Fixed: Issue with stage priority flow. Caused Rapier calculations to fail if LF and O are drawn from different tanks. (Padishar) + Fixed: Issue with angle to prograde/retrograde calculations on highly inclined orbits. + Fixed: Editor input locks not being reset when a scene change is forced (e.g. via Kerbal Construction Time). + Fixed: Roll axis readout now shows the correct sign. + Removed: Time Formatter readout as it's not required anymore. + +1.0.18.0 + Added: Orbital readouts - "Speed at Periapsis" and "Speed at Apoapsis". (Padishar) + Added: Manoeuvre readouts - "Post-burn Apoapsis" and "Post-burn Periapsis". (Padishar) + Added: Orbital readout - "Time to Atmosphere". + Fixed: Synched the minimum simulation time sliders and stopped them from snapping back after 999ms. (saybur) + Fixed: Added workaround for the bug in Vessel.horizontalSrfSpeed (Padishar) + Fixed: Physically insignificant part mass was not being correctly cascaded down through multiple parent parts. + Fixed: Intake air demand calculation not working. + Fixed: Some build engineer settings labels do not scale with UI size. + 1.0.17.0 Added: 'Mach Number' readout under the 'Surface' category and included it on the default surface HUD. Added: Stock sections in the Flight Engineer can now become HUDs. @@ -18,8 +56,8 @@ Changed: Mach on the Build Engineer now accurate to 2 decimal places. Changed: Max mach in the Build Engineer defaults to 1.00 even when no jet engines are present. - Changed: Increased eccentricity readout to 5 decimal places. - Changed: Implemented Sarbian's object pooling. + Changed: Increased eccentricity readout to 5 decimal places. + Changed: Implemented Sarbian's object pooling. Changed: The default selected body is now assigned via 'Planitarium.Home'. Changed: HUDs to clamp fully inside the screen instead of allowing them to run off the edge by a certain amount. Fixed: Physically insignificant part mass is now associated with the parent part. @@ -73,7 +111,7 @@ 1.0.15.1, 13-02-2015 Rebuild - + 1.0.15.0, 08-02-2015 Padishar's Fixes: Added: Support KIDS ISP thrust correction. @@ -83,7 +121,7 @@ 1.0.14.1, 28-12-2014 Fixed: Missing texture on the ER-7500 model. - + 1.0.14.0, 28-12-2014 Added: Career mode that limits the Flight Engineer by: - Requiring an Engineer Kerbal of any level, or placement of an Engineer Chip or ER-7500 part. @@ -203,7 +241,7 @@ Added: New readout to the surface category: - Vertical Acceleration - Horizontal Acceleration - + Changed: Atmospheric efficiency readout now shows as a percentage. Changed: Atmospheric settings (pressure/velocity) in the editor condensed onto a single line. Fixed: Bug where the overlays in the editor would stay open outside of parts screen. @@ -360,6 +398,7 @@ Added: Stock toolbar support in the Flight Engineer. Changed: Orbital Period has higher precision. Fixed: Various NullRefs in editor window and overlay. - + 1.0.0.0, 24-07-2014 Initial release for public testing. + --- /dev/null +++ b/KerbalEngineer.CSharp.Editor.csproj @@ -1,1 +1,124 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {D7B7C6CE-6B5A-CE40-5B7C-9D0E6583E469} + Library + Assembly-CSharp-Editor + 512 + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + .NETFramework + v3.5 + Unity Full v3.5 + + Editor:5 + StandaloneWindows:5 + 5.2.4f1 + + 4 + + + pdbonly + false + Temp\UnityVS_bin\Debug\ + Temp\UnityVS_obj\Debug\ + prompt + 4 + DEBUG;TRACE;UNITY_5_2_4;UNITY_5_2;UNITY_5;ENABLE_NEW_BUGREPORTER;ENABLE_2D_PHYSICS;ENABLE_4_6_FEATURES;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_FRAME_DEBUGGER;ENABLE_GENERICS;ENABLE_HOME_SCREEN;ENABLE_IMAGEEFFECTS;ENABLE_LIGHT_PROBES_LEGACY;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_PLUGIN_INSPECTOR;ENABLE_SHADOWS;ENABLE_SINGLE_INSTANCE_BUILD_SETTING;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_REFLECTION_BUFFERS;INCLUDE_DYNAMIC_GI;INCLUDE_GI;INCLUDE_IL2CPP;INCLUDE_DIRECTX12;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_LOCALIZATION;ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_TEXTUREID_MAP;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_LOG_MIXED_STACKTRACE;ENABLE_UNITYWEBREQUEST;ENABLE_EVENT_QUEUE;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN + false + + + pdbonly + false + Temp\UnityVS_bin\Release\ + Temp\UnityVS_obj\Release\ + prompt + 4 + TRACE;UNITY_5_2_4;UNITY_5_2;UNITY_5;ENABLE_NEW_BUGREPORTER;ENABLE_2D_PHYSICS;ENABLE_4_6_FEATURES;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_FRAME_DEBUGGER;ENABLE_GENERICS;ENABLE_HOME_SCREEN;ENABLE_IMAGEEFFECTS;ENABLE_LIGHT_PROBES_LEGACY;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_PLUGIN_INSPECTOR;ENABLE_SHADOWS;ENABLE_SINGLE_INSTANCE_BUILD_SETTING;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_REFLECTION_BUFFERS;INCLUDE_DYNAMIC_GI;INCLUDE_GI;INCLUDE_IL2CPP;INCLUDE_DIRECTX12;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_LOCALIZATION;ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_TEXTUREID_MAP;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_LOG_MIXED_STACKTRACE;ENABLE_UNITYWEBREQUEST;ENABLE_EVENT_QUEUE;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN + false + + + + + + + + + + + + Library\UnityAssemblies\UnityEngine.dll + + + Library\UnityAssemblies\UnityEditor.dll + + + Library\UnityAssemblies\UnityEditor.Advertisements.dll + + + Library\UnityAssemblies\UnityEngine.UI.dll + + + Library\UnityAssemblies\UnityEditor.UI.dll + + + Library\UnityAssemblies\UnityEngine.Networking.dll + + + Library\UnityAssemblies\UnityEditor.Networking.dll + + + Library\UnityAssemblies\UnityEditor.Graphs.dll + + + Library\UnityAssemblies\UnityEditor.Android.Extensions.dll + + + Library\UnityAssemblies\UnityEditor.iOS.Extensions.dll + + + Library\UnityAssemblies\UnityEditor.WP8.Extensions.dll + + + Library\UnityAssemblies\UnityEditor.Metro.Extensions.dll + + + Library\UnityAssemblies\UnityEditor.Tizen.Extensions.dll + + + Library\UnityAssemblies\UnityEditor.SamsungTV.Extensions.dll + + + Library\UnityAssemblies\UnityEditor.WebGL.Extensions.dll + + + Library\UnityAssemblies\UnityEditor.LinuxStandalone.Extensions.dll + + + Library\UnityAssemblies\UnityEditor.WindowsStandalone.Extensions.dll + + + Library\UnityAssemblies\UnityEditor.OSXStandalone.Extensions.dll + + + Library\UnityAssemblies\SyntaxTree.VisualStudio.Unity.Bridge.dll + + + Library\UnityAssemblies\Mono.Cecil.dll + + + Library\UnityAssemblies\UnityEditor.iOS.Extensions.Xcode.dll + + + Assets\Plugins\KerbalEngineer.Unity.dll + + + + + + + --- /dev/null +++ b/KerbalEngineer.CSharp.csproj @@ -1,1 +1,76 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {26D24EAD-1AF6-6749-D9C8-C47AEC4E6A98} + Library + Assembly-CSharp + 512 + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + .NETFramework + v3.5 + Unity Subset v3.5 + + Game:1 + StandaloneWindows:5 + 5.3.3p2 + + 4 + + + pdbonly + false + Temp\UnityVS_bin\Debug\ + Temp\UnityVS_obj\Debug\ + prompt + 4 + DEBUG;TRACE;UNITY_5_3_3;UNITY_5_3;UNITY_5;ENABLE_NEW_BUGREPORTER;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_FRAME_DEBUGGER;ENABLE_GENERICS;ENABLE_HOME_SCREEN;ENABLE_IMAGEEFFECTS;ENABLE_LIGHT_PROBES_LEGACY;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_PLUGIN_INSPECTOR;ENABLE_SHADOWS;ENABLE_SINGLE_INSTANCE_BUILD_SETTING;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_SPRITE_POLYGON;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;INCLUDE_IL2CPP;INCLUDE_DIRECTX12;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_LOCALIZATION;ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION;ENABLE_EDITOR_TESTS_RUNNER;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_TEXTUREID_MAP;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_LOG_MIXED_STACKTRACE;ENABLE_UNITYWEBREQUEST;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN + false + + + pdbonly + false + Temp\UnityVS_bin\Release\ + Temp\UnityVS_obj\Release\ + prompt + 4 + TRACE;UNITY_5_3_3;UNITY_5_3;UNITY_5;ENABLE_NEW_BUGREPORTER;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_FRAME_DEBUGGER;ENABLE_GENERICS;ENABLE_HOME_SCREEN;ENABLE_IMAGEEFFECTS;ENABLE_LIGHT_PROBES_LEGACY;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_PLUGIN_INSPECTOR;ENABLE_SHADOWS;ENABLE_SINGLE_INSTANCE_BUILD_SETTING;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_SPRITE_POLYGON;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;INCLUDE_IL2CPP;INCLUDE_DIRECTX12;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_LOCALIZATION;ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION;ENABLE_EDITOR_TESTS_RUNNER;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_TEXTUREID_MAP;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_LOG_MIXED_STACKTRACE;ENABLE_UNITYWEBREQUEST;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN + false + + + + + + + + + + + + Library\UnityAssemblies\UnityEngine.dll + + + Library\UnityAssemblies\UnityEngine.UI.dll + + + Library\UnityAssemblies\UnityEngine.Networking.dll + + + Library\UnityAssemblies\UnityEngine.Networking.dll + + + Library\UnityAssemblies\UnityEngine.UI.dll + + + Library\UnityAssemblies\UnityEditor.dll + + + + + + + --- /dev/null +++ b/KerbalEngineer.Unity/CanvasGroupFader.cs @@ -1,1 +1,78 @@ +namespace KerbalEngineer.Unity +{ + using System; + using System.Collections; + using UnityEngine; + [RequireComponent(typeof(CanvasGroup))] + public class CanvasGroupFader : MonoBehaviour + { + private CanvasGroup m_CanvasGroup; + private IEnumerator m_FadeCoroutine; + + /// + /// Fades the canvas group to a specified alpha value with optional callback. + /// + public void FadeTo(float alpha, Action callback = null) + { + if (m_CanvasGroup == null || gameObject.activeInHierarchy == false) + { + return; + } + + Fade(m_CanvasGroup.alpha, alpha, callback); + } + + /// + /// Sets the alpha value of the canvas group. + /// + public void SetAlpha(float alpha) + { + if (m_CanvasGroup == null) + { + return; + } + + alpha = Mathf.Clamp01(alpha); + m_CanvasGroup.alpha = alpha; + m_CanvasGroup.interactable = !(alpha < 1.0f); + } + + protected virtual void Awake() + { + // cache components + m_CanvasGroup = GetComponent(); + } + + /// + /// Starts a fade from one alpha value to another with callback. + /// + private void Fade(float from, float to, Action callback) + { + if (m_FadeCoroutine != null) + { + StopCoroutine(m_FadeCoroutine); + } + + m_FadeCoroutine = FadeCoroutine(from, to, callback); + StartCoroutine(m_FadeCoroutine); + } + + /// + /// Coroutine that handles the fading. + /// + private IEnumerator FadeCoroutine(float from, float to, Action callback) + { + float progress = 0.0f; + + while (progress <= 1.0f) + { + progress += Time.deltaTime; + SetAlpha(Mathf.Lerp(from, to, progress)); + yield return null; + } + + callback?.Invoke(); + } + } +} --- /dev/null +++ b/KerbalEngineer.Unity/KerbalEngineer.Unity.csproj @@ -1,1 +1,69 @@ - + + + + + Debug + AnyCPU + {5387BB1E-32B1-4BAC-B03F-100570B9554C} + Library + Properties + KerbalEngineer.Unity + KerbalEngineer.Unity + v3.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + none + true + ..\Output\KerbalEngineer\ + + + prompt + 4 + + + + + + + + ..\..\game\KSP_Data\Managed\System.dll + False + + + ..\..\game\KSP_Data\Managed\UnityEngine.dll + False + + + ..\..\game\KSP_Data\Managed\UnityEngine.UI.dll + False + + + + + {39806613-e0b7-46e0-89a6-a569ec538cbb} + KerbalEngineer + False + + + + + copy "$(TargetPath)" "$(SolutionDir)Assets\Plugins" /Y + + + --- /dev/null +++ b/KerbalEngineer.Unity/Properties/AssemblyInfo.cs @@ -1,1 +1,10 @@ +using System.Reflection; +using System.Runtime.InteropServices; +[assembly: AssemblyTitle("KerbalEngineer.Unity")] +[assembly: AssemblyProduct("KerbalEngineer.Unity")] +[assembly: AssemblyCopyright("Copyright © CYBUTEK 2016")] +[assembly: ComVisible(false)] +[assembly: Guid("5387bb1e-32b1-4bac-b03f-100570b9554c")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] --- a/KerbalEngineer.sln +++ b/KerbalEngineer.sln @@ -1,9 +1,11 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.30110.0 -MinimumVisualStudioVersion = 10.0.40219.1 +# Visual Studio 2015 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerbalEngineer.CSharp.Editor", "KerbalEngineer.CSharp.Editor.csproj", "{D7B7C6CE-6B5A-CE40-5B7C-9D0E6583E469}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerbalEngineer", "KerbalEngineer\KerbalEngineer.csproj", "{39806613-E0B7-46E0-89A6-A569EC538CBB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerbalEngineer.Unity", "KerbalEngineer.Unity\KerbalEngineer.Unity.csproj", "{5387BB1E-32B1-4BAC-B03F-100570B9554C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -11,10 +13,18 @@ Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D7B7C6CE-6B5A-CE40-5B7C-9D0E6583E469}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D7B7C6CE-6B5A-CE40-5B7C-9D0E6583E469}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7B7C6CE-6B5A-CE40-5B7C-9D0E6583E469}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D7B7C6CE-6B5A-CE40-5B7C-9D0E6583E469}.Release|Any CPU.Build.0 = Release|Any CPU {39806613-E0B7-46E0-89A6-A569EC538CBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {39806613-E0B7-46E0-89A6-A569EC538CBB}.Debug|Any CPU.Build.0 = Debug|Any CPU {39806613-E0B7-46E0-89A6-A569EC538CBB}.Release|Any CPU.ActiveCfg = Release|Any CPU {39806613-E0B7-46E0-89A6-A569EC538CBB}.Release|Any CPU.Build.0 = Release|Any CPU + {5387BB1E-32B1-4BAC-B03F-100570B9554C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5387BB1E-32B1-4BAC-B03F-100570B9554C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5387BB1E-32B1-4BAC-B03F-100570B9554C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5387BB1E-32B1-4BAC-B03F-100570B9554C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE --- /dev/null +++ b/KerbalEngineer/AppLauncherButton.cs @@ -1,1 +1,206 @@ - +// +// Kerbal Engineer Redux +// +// Copyright (C) 2016 CYBUTEK +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +namespace KerbalEngineer +{ + using KSP.UI; + using KSP.UI.Screens; + using UnityEngine; + + public class AppLauncherButton : MonoBehaviour + { + private static Texture m_IconTexture; + private ApplicationLauncherButton m_Button; + + /// + /// Gets or sets the toggle button state. + /// + public bool isOn + { + get + { + return m_Button != null && + m_Button.toggleButton.Button.interactable && + m_Button.toggleButton.CurrentState == UIRadioButton.State.True; + } + set + { + if (m_Button == null) + { + return; + } + + if (value) + { + SetOn(); + } + else + { + SetOff(); + } + } + } + + /// + /// Disables the button if not already disabled. + /// + public void Disable() + { + if (m_Button != null && m_Button.toggleButton.Button.interactable) + { + m_Button.Disable(); + } + } + + /// + /// Enables the button if not already enabled. + /// + public void Enable() + { + if (m_Button != null && m_Button.toggleButton.Button.interactable == false) + { + m_Button.Enable(); + } + } + + /// + /// Gets the anchor position for pop-up content. + /// + public Vector3 GetAnchor() + { + if (m_Button == null) + { + return Vector3.zero; + } + + Vector3 anchor = m_Button.GetAnchor(); + + anchor.x -= 3.0f; + + return anchor; + } + + /// + /// Enables and sets the button to off. + /// + public void SetOff() + { + Enable(); + + if (m_Button != null && m_Button.toggleButton.CurrentState != UIRadioButton.State.False) + { + m_Button.SetTrue(); + } + } + + /// + /// Enables and sets the button to on. + /// + public void SetOn() + { + Enable(); + + if (m_Button != null && m_Button.toggleButton.CurrentState != UIRadioButton.State.True) + { + m_Button.SetTrue(); + } + } + + protected virtual void Awake() + { + // cache icon texture + if (m_IconTexture == null && AssetBundleLoader.images != null) + { + m_IconTexture = AssetBundleLoader.images.LoadAsset("app-launcher-icon"); + } + + // subscribe event listeners + GameEvents.onGUIApplicationLauncherReady.Add(OnGUIApplicationLauncherReady); + GameEvents.onGUIApplicationLauncherUnreadifying.Add(OnGUIApplicationLauncherUnreadifying); + } + + protected virtual void OnDestroy() + { + // unsubscribe event listeners + GameEvents.onGUIApplicationLauncherReady.Remove(OnGUIApplicationLauncherReady); + GameEvents.onGUIApplicationLauncherUnreadifying.Remove(OnGUIApplicationLauncherUnreadifying); + } + + /// + /// Called on button being disabled. + /// + protected virtual void OnDisable() { } + + /// + /// Called on button being enabled. + /// + protected virtual void OnEnable() { } + + /// + /// Called on button being toggled off. + /// + protected virtual void OnFalse() { } + + /// + /// Called on mouse hovering. + /// + protected virtual void OnHover() { } + + /// + /// Called on mouse exiting hover. + /// + protected virtual void OnHoverOut() { } + + /// + /// Called on button being ready. + /// + protected virtual void OnReady() { } + + /// + /// Called after the application launcher is ready and the button created. + /// + protected virtual void OnTrue() { } + + /// + /// Called after the application launcher is unreadified and the button removed. + /// + protected virtual void OnUnreadifying() { } + + private void OnGUIApplicationLauncherReady() + { + // create button + if (ApplicationLauncher.Instance != null) + { + m_Button = ApplicationLauncher.Instance.AddModApplication(OnTrue, OnFalse, OnHover, OnHoverOut, OnEnable, OnDisable, ApplicationLauncher.AppScenes.ALWAYS, m_IconTexture); + } + + OnReady(); + } + + private void OnGUIApplicationLauncherUnreadifying(GameScenes scene) + { + // remove button + if (ApplicationLauncher.Instance != null && m_Button != null) + { + ApplicationLauncher.Instance.RemoveModApplication(m_Button); + } + + OnUnreadifying(); + } + } +} --- /dev/null +++ b/KerbalEngineer/AssetBundleLoader.cs @@ -1,1 +1,41 @@ +namespace KerbalEngineer +{ + using UnityEngine; + [KSPAddon(KSPAddon.Startup.Instantly, false)] + public class AssetBundleLoader : MonoBehaviour + { + private static AssetBundle m_Images; + private static AssetBundle m_Prefabs; + + /// + /// Gets the loaded images asset bundle. + /// + public static AssetBundle images + { + get + { + return m_Images; + } + } + + /// + /// Gets the loaded prefabs asset bundle. + /// + public static AssetBundle prefabs + { + get + { + return m_Prefabs; + } + } + + protected virtual void Awake() + { + string bundlePath = EngineerGlobals.AssemblyPath; + + m_Images = AssetBundle.CreateFromFile(bundlePath + "/images"); + m_Prefabs = AssetBundle.CreateFromFile(bundlePath + "/prefabs"); + } + } +} --- a/KerbalEngineer/Editor/BuildAdvanced.cs +++ b/KerbalEngineer/Editor/BuildAdvanced.cs @@ -1,7 +1,5 @@ // -// Kerbal Engineer Redux -// -// Copyright (C) 2014 CYBUTEK +// Copyright (C) 2015 CYBUTEK // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -19,23 +17,26 @@ namespace KerbalEngineer.Editor { - #region Using Directives using System; using Extensions; using Flight; using Helpers; + using KeyBinding; using Settings; using UIControls; using UnityEngine; using VesselSimulator; - #endregion - [KSPAddon(KSPAddon.Startup.EditorAny, false)] public class BuildAdvanced : MonoBehaviour { - #region Fields - public static float Altitude = 0.0f; + public static float Altitude; + + private static Rect compactModeRect = new Rect(0.0f, 5.0f, 0.0f, 20.0f); + private static Stage stage; + private static int stagesCount; + private static int stagesLength; + private static string title; private GUIStyle areaSettingStyle; private GUIStyle areaStyle; @@ -64,9 +65,7 @@ private GUIStyle titleStyle; private bool visible = true; private GUIStyle windowStyle; - #endregion - - #region Properties + /// /// Gets the current instance if started or returns null. /// @@ -146,14 +145,6 @@ visible = value; } } - #endregion - - #region Methods - private static Rect compactModeRect = new Rect(0.0f, 5.0f, 0.0f, 20.0f); - private static Stage stage; - private static int stagesCount; - private static int stagesLength; - private static string title; protected void Awake() { @@ -179,6 +170,8 @@ /// protected void OnDestroy() { + Logger.Log("BuildAdvanced->OnDestroy"); + try { SettingHandler handler = new SettingHandler(); @@ -198,6 +191,8 @@ { Logger.Exception(ex, "BuildAdvanced.OnDestroy()"); } + + EditorLock(false); } protected void OnGUI() @@ -523,12 +518,12 @@ GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); - GUILayout.Label("Simulate using vectored thrust values:"); + GUILayout.Label("Simulate using vectored thrust values:", settingStyle); SimManager.vectoredThrust = GUILayout.Toggle(SimManager.vectoredThrust, "ENABLED", buttonStyle, GUILayout.Width(100.0f * GuiDisplaySize.Offset)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); - GUILayout.Label("Verbose Simulation Log:"); + GUILayout.Label("Verbose Simulation Log:", settingStyle); SimManager.logOutput = GUILayout.Toggle(SimManager.logOutput, "ENABLED", buttonStyle, GUILayout.Width(100.0f * GuiDisplaySize.Offset)); GUILayout.EndHorizontal(); @@ -552,6 +547,14 @@ GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); + GUILayout.Label("Key Bindings:", settingStyle); + if (GUILayout.Button("EDIT KEY BINDINGS", buttonStyle, GUILayout.Width(200.0f * GuiDisplaySize.Offset))) + { + KeyBinder.Show(); + } + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); GUILayout.Label("GUI Size: " + GuiDisplaySize.Increment, settingStyle); if (GUILayout.Button("<", buttonStyle, GUILayout.Width(100.0f * GuiDisplaySize.Offset))) { @@ -563,9 +566,10 @@ } GUILayout.EndHorizontal(); - GUILayout.Label("Minimum delay between simulations: " + SimManager.minSimTime.Milliseconds + "ms", settingStyle); + GUILayout.Label("Minimum delay between simulations: " + SimManager.minSimTime.TotalMilliseconds + "ms", settingStyle); GUI.skin = HighLogic.Skin; - SimManager.minSimTime = new TimeSpan(0, 0, 0, 0, (int)GUILayout.HorizontalSlider(SimManager.minSimTime.Milliseconds, 0, 2000.0f)); + SimManager.minSimTime = TimeSpan.FromMilliseconds(GUILayout.HorizontalSlider((float)SimManager.minSimTime.TotalMilliseconds, 0, 2000.0f)); + GUI.skin = null; } @@ -706,7 +710,7 @@ fontSize = (int)(11 * GuiDisplaySize.Offset), fontStyle = FontStyle.Bold, alignment = TextAnchor.MiddleCenter, - stretchWidth = true, + stretchWidth = true }; infoStyle = new GUIStyle(HighLogic.Skin.label) @@ -884,6 +888,5 @@ Logger.Exception(ex, "BuildAdvanced.Window()"); } } - #endregion } } --- /dev/null +++ b/KerbalEngineer/Editor/BuildAppLauncher.cs @@ -1,1 +1,59 @@ +// +// Kerbal Engineer Redux +// +// Copyright (C) 2016 CYBUTEK +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +namespace KerbalEngineer.Editor +{ + [KSPAddon(KSPAddon.Startup.EditorAny, false)] + public class BuildAppLauncher : AppLauncherButton + { + protected override void OnFalse() + { + if (BuildAdvanced.Instance != null) + { + BuildAdvanced.Instance.Visible = false; + } + } + + protected override void OnTrue() + { + if (BuildAdvanced.Instance != null) + { + BuildAdvanced.Instance.Visible = true; + } + } + + protected virtual void Update() + { + if (BuildAdvanced.Instance == null) + { + return; + } + + // check if vessel is currently under construction with the presence of a root part + if (EditorLogic.RootPart != null) + { + // set button state based on existing visibility + isOn = BuildAdvanced.Instance.Visible; + } + else + { + Disable(); + } + } + } +} --- a/KerbalEngineer/Editor/BuildOverlayPartInfo.cs +++ b/KerbalEngineer/Editor/BuildOverlayPartInfo.cs @@ -28,7 +28,7 @@ public class BuildOverlayPartInfo : MonoBehaviour { private static bool clickToOpen = true; - private static ModuleGenerator.GeneratorResource generatorResource; + private static ModuleResource generatorResource; private static ModuleAlternator moduleAlternator; private static ModuleDataTransmitter moduleDataTransmitter; private static ModuleDeployableSolarPanel moduleDeployableSolarPanel; @@ -131,7 +131,7 @@ position.x = Input.mousePosition.x - 3 - position.width; } - part = EditorLogic.fetch.ship.parts.Find(p => p.stackIcon.highlightIcon) ?? EditorLogic.SelectedPart; + part = EditorLogic.fetch.ship.parts.Find(p => p.stackIcon.Highlighted) ?? EditorLogic.SelectedPart; if (part != null) { if (!part.Equals(selectedPart)) --- a/KerbalEngineer/Editor/BuildToolbar.cs +++ /dev/null @@ -1,120 +1,1 @@ -// -// Kerbal Engineer Redux -// -// Copyright (C) 2014 CYBUTEK -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -#region Using Directives - -using System; - -using UnityEngine; - -#endregion - -namespace KerbalEngineer.Editor -{ - [KSPAddon(KSPAddon.Startup.EditorAny, false)] - public class BuildToolbar : MonoBehaviour - { - #region Fields - - private ApplicationLauncherButton button; - - #endregion - - #region Methods: private - - private void Awake() - { - GameEvents.onGUIApplicationLauncherReady.Add(this.OnGuiAppLauncherReady); - Logger.Log("BuildToolbar->Awake"); - } - - private void Start() - { - if (button == null) - { - OnGuiAppLauncherReady(); - } - } - - private void OnDestroy() - { - GameEvents.onGUIApplicationLauncherReady.Remove(this.OnGuiAppLauncherReady); - if (this.button != null) - { - ApplicationLauncher.Instance.RemoveModApplication(this.button); - } - Logger.Log("BuildToolbar->OnDestroy"); - } - - private void OnGuiAppLauncherReady() - { - try - { - this.button = ApplicationLauncher.Instance.AddModApplication( - () => BuildAdvanced.Instance.Visible = true, - () => BuildAdvanced.Instance.Visible = false, - null, - null, - null, - null, - ApplicationLauncher.AppScenes.ALWAYS, - GameDatabase.Instance.GetTexture("KerbalEngineer/Textures/ToolbarIcon", false) - ); - Logger.Log("BuildToolbar->OnGuiAppLauncherReady"); - } - catch (Exception ex) - { - Logger.Exception(ex, "BuildToolbar->OnGuiAppLauncherReady"); - } - } - - private void Update() - { - try - { - if (this.button == null) - { - return; - } - - if (EditorLogic.fetch != null && EditorLogic.fetch.ship.parts.Count > 0) - { - if (BuildAdvanced.Instance.Visible && this.button.State != RUIToggleButton.ButtonState.TRUE) - { - this.button.SetTrue(); - } - else if (!BuildAdvanced.Instance.Visible && this.button.State != RUIToggleButton.ButtonState.FALSE) - { - this.button.SetFalse(); - } - } - else if (this.button.State != RUIToggleButton.ButtonState.DISABLED) - { - this.button.Disable(); - } - } - catch (Exception ex) - { - Logger.Exception(ex, "BuildToolbar->Update"); - } - } - - #endregion - } -} --- a/KerbalEngineer/EngineerGlobals.cs +++ b/KerbalEngineer/EngineerGlobals.cs @@ -25,11 +25,12 @@ /// /// Current version of the Kerbal Engineer assembly. /// - public const string ASSEMBLY_VERSION = "1.0.17.0"; + public const string ASSEMBLY_VERSION = "1.0.19.4"; private static string assemblyFile; private static string assemblyName; private static string assemblyPath; + private static string settingsPath; /// /// Gets the Kerbal Engineer assembly's path including the file name. @@ -63,5 +64,20 @@ return assemblyPath ?? (assemblyPath = AssemblyFile.Replace(new FileInfo(AssemblyFile).Name, "")); } } + + /// + /// Gets the settings directory path. + /// + public static string SettingsPath + { + get + { + if (string.IsNullOrEmpty(settingsPath)) + { + settingsPath = Path.Combine(AssemblyPath, "Settings"); + } + return settingsPath; + } + } } } --- a/KerbalEngineer/Extensions/OrbitExtensions.cs +++ b/KerbalEngineer/Extensions/OrbitExtensions.cs @@ -61,12 +61,15 @@ return 0.0; } - var angle = AngleHelper.GetAngleBetweenVectors(orbit.getRelativePositionAtUT(universalTime), - Vector3d.Exclude(orbit.GetOrbitNormal(), orbit.referenceBody.orbit.getRelativePositionAtUT(universalTime))); + Vector3d orbitVector = orbit.getRelativePositionAtUT(universalTime); + orbitVector.z = 0.0; - angle = AngleHelper.Clamp360(angle - 90.0); + Vector3d bodyVector = orbit.referenceBody.orbit.getOrbitalVelocityAtUT(universalTime); + bodyVector.z = 0.0; - return orbit.inclination > 90.0 ? angle : 360.0 - angle; + double angle = AngleHelper.GetAngleBetweenVectors(bodyVector, orbitVector); + + return AngleHelper.Clamp360(orbit.inclination < 90.0 ? angle : 360.0 - angle); } public static double GetAngleToRetrograde(this Orbit orbit) @@ -81,12 +84,15 @@ return 0.0; } - var angle = AngleHelper.GetAngleBetweenVectors(orbit.getRelativePositionAtUT(universalTime), - Vector3d.Exclude(orbit.GetOrbitNormal(), orbit.referenceBody.orbit.getRelativePositionAtUT(universalTime))); + Vector3d orbitVector = orbit.getRelativePositionAtUT(universalTime); + orbitVector.z = 0.0; - angle = AngleHelper.Clamp360(angle + 90.0); + Vector3d bodyVector = orbit.referenceBody.orbit.getOrbitalVelocityAtUT(universalTime); + bodyVector.z = 0.0; - return orbit.inclination > 90.0 ? angle : 360.0 - angle; + double angle = AngleHelper.GetAngleBetweenVectors(-bodyVector, orbitVector); + + return AngleHelper.Clamp360(orbit.inclination < 90.0 ? angle : 360.0 - angle); } public static double GetAngleToTrueAnomaly(this Orbit orbit, double trueAnomaly) --- a/KerbalEngineer/Flight/ActionMenu.cs +++ b/KerbalEngineer/Flight/ActionMenu.cs @@ -27,10 +27,12 @@ namespace KerbalEngineer.Flight { + using KSP.UI.Screens; + /// /// Graphical controller for section interaction in the form of a menu system. /// - [KSPAddon(KSPAddon.Startup.Flight, false)] + //[KSPAddon(KSPAddon.Startup.Flight, false)] public class ActionMenu : MonoBehaviour { #region Fields @@ -90,11 +92,11 @@ { return; } - if (FlightEngineerCore.IsDisplayable && this.button.State == RUIToggleButton.ButtonState.DISABLED) + if (FlightEngineerCore.IsDisplayable && this.button.toggleButton.Interactable == false) { this.button.Enable(); } - else if (!FlightEngineerCore.IsDisplayable && this.button.State != RUIToggleButton.ButtonState.DISABLED) + else if (!FlightEngineerCore.IsDisplayable && this.button.toggleButton.Interactable) { this.button.Disable(); } --- a/KerbalEngineer/Flight/DisplayStack.cs +++ b/KerbalEngineer/Flight/DisplayStack.cs @@ -33,6 +33,7 @@ namespace KerbalEngineer.Flight { + using KeyBinding; using Upgradeables; /// --- /dev/null +++ b/KerbalEngineer/Flight/FlightAppLauncher.cs @@ -1,1 +1,47 @@ +namespace KerbalEngineer.Flight +{ + using UnityEngine; + [KSPAddon(KSPAddon.Startup.Flight, false)] + public class FlightAppLauncher : AppLauncherButton + { + private GameObject m_MenuObject; + private GameObject m_MenuPrefab; + + protected override void Awake() + { + base.Awake(); + + if (m_MenuPrefab == null && AssetBundleLoader.prefabs != null) + { + m_MenuPrefab = AssetBundleLoader.prefabs.LoadAsset("flight-menu"); + } + } + + protected override void OnFalse() + { + if (m_MenuObject == null) + { + return; + } + + Destroy(m_MenuObject); + } + + protected override void OnTrue() + { + if (m_MenuPrefab == null) + { + return; + } + + m_MenuObject = Instantiate(m_MenuPrefab, GetAnchor(), Quaternion.identity) as GameObject; + if (m_MenuObject == null) + { + return; + } + + m_MenuObject.transform.SetParent(MainCanvasUtil.MainCanvas.transform); + } + } +} --- a/KerbalEngineer/Flight/Readouts/Miscellaneous/Separator.cs +++ b/KerbalEngineer/Flight/Readouts/Miscellaneous/Separator.cs @@ -45,7 +45,7 @@ { this.Name = "Separator"; this.Category = ReadoutCategory.GetCategory("Miscellaneous"); - this.HelpString = String.Empty; + this.HelpString = "Creats a line to help seperate subsections in a module."; this.IsDefault = false; this.Cloneable = true; --- a/KerbalEngineer/Flight/Readouts/Miscellaneous/SimulationDelay.cs +++ b/KerbalEngineer/Flight/Readouts/Miscellaneous/SimulationDelay.cs @@ -51,7 +51,7 @@ GUILayout.BeginHorizontal(); GUILayout.Label("Sim Delay", this.NameStyle); GUI.skin = HighLogic.Skin; - SimManager.minSimTime = new TimeSpan(0, 0, 0, 0, (int)GUILayout.HorizontalSlider(SimManager.minSimTime.Milliseconds, 0, 1000.0f)); + SimManager.minSimTime = TimeSpan.FromMilliseconds(GUILayout.HorizontalSlider((float)SimManager.minSimTime.TotalMilliseconds, 0, 2000.0f)); GUI.skin = null; GUILayout.EndHorizontal(); } --- a/KerbalEngineer/Flight/Readouts/Miscellaneous/SystemTime.cs +++ b/KerbalEngineer/Flight/Readouts/Miscellaneous/SystemTime.cs @@ -40,7 +40,7 @@ { this.Name = "System Time"; this.Category = ReadoutCategory.GetCategory("Miscellaneous"); - this.HelpString = String.Empty; + this.HelpString = "Shows the System Time in 12 hour format (AM/PM)"; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Miscellaneous/TimeReference.cs +++ /dev/null @@ -1,66 +1,1 @@ -// -// Kerbal Engineer Redux -// -// Copyright (C) 2014 CYBUTEK -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -#region Using Directives - -using System; - -using KerbalEngineer.Flight.Sections; -using KerbalEngineer.Helpers; - -using UnityEngine; - -#endregion - -namespace KerbalEngineer.Flight.Readouts.Miscellaneous -{ - public class TimeReference : ReadoutModule - { - #region Constructors - - public TimeReference() - { - this.Name = "Time Reference Adjuster"; - this.Category = ReadoutCategory.GetCategory("Miscellaneous"); - this.HelpString = String.Empty; - this.IsDefault = false; - } - - #endregion - - #region Methods: public - - public override void Draw(SectionModule section) - { - GUILayout.BeginHorizontal(); - GUILayout.Label("Time Ref.: " + TimeFormatter.Reference, this.NameStyle); - if (GUILayout.Button("Earth", this.ButtonStyle)) - { - TimeFormatter.SetReference(); - } - if (GUILayout.Button("Kerbin", this.ButtonStyle)) - { - TimeFormatter.SetReference(PSystemManager.Instance.localBodies.Find(body => body.bodyName.Equals("Kerbin"))); - } - GUILayout.EndHorizontal(); - } - - #endregion - } -} --- a/KerbalEngineer/Flight/Readouts/Orbital/AngleToEquatorialAscendingNode.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/AngleToEquatorialAscendingNode.cs @@ -34,7 +34,7 @@ { this.Name = "Angle to Equ. AN"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = string.Empty; + this.HelpString = "Angular Distance from the vessel to crossing the Equator of the central body, going north of it."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Orbital/AngleToEquatorialDescendingNode.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/AngleToEquatorialDescendingNode.cs @@ -34,7 +34,7 @@ { this.Name = "Angle to Equ. DN"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = string.Empty; + this.HelpString = "Angular Distance from the vessel to crossing the Equator of the central body, going south of it."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Orbital/AngleToPrograde.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/AngleToPrograde.cs @@ -36,7 +36,7 @@ { this.Name = "Angle to Prograde"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; + this.HelpString = "Angular Distance from the vessel to crossing the Orbit of the central body on it's retrograde side."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Orbital/AngleToRetrograde.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/AngleToRetrograde.cs @@ -36,7 +36,7 @@ { this.Name = "Angle to Retrograde"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; + this.HelpString = "Angular Distance from the vessel to crossing the Orbit of the central body on it's retrograde side."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Orbital/ApoapsisHeight.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/ApoapsisHeight.cs @@ -34,7 +34,7 @@ { this.Name = "Apoapsis Height"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = "Shows the vessel's apoapsis height relative to sea level. (Apoapsis is the highest point of an orbit.)"; + this.HelpString = "Shows the vessel's apoapsis height relative to sea level. (Apoapsis is the highest point of an orbit.)"; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Orbital/EccentricAnomaly.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/EccentricAnomaly.cs @@ -1,7 +1,7 @@ // // Kerbal Engineer Redux // -// Copyright (C) 2014 CYBUTEK +// Copyright (C) 2015 CYBUTEK // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -17,38 +17,25 @@ // along with this program. If not, see . // -#region Using Directives - -using System; - -using KerbalEngineer.Extensions; -using KerbalEngineer.Flight.Sections; - -#endregion - namespace KerbalEngineer.Flight.Readouts.Orbital { + using Extensions; + using Helpers; + using Sections; + public class EccentricAnomaly : ReadoutModule { - #region Constructors - public EccentricAnomaly() { - this.Name = "Eccentric Anomaly"; - this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; - this.IsDefault = false; + Name = "Eccentric Anomaly"; + Category = ReadoutCategory.GetCategory("Orbital"); + HelpString = string.Empty; + IsDefault = false; } - - #endregion - - #region Methods: public public override void Draw(SectionModule section) { - this.DrawLine(FlightGlobals.ship_orbit.eccentricAnomaly.ToAngle(), section.IsHud); + DrawLine((FlightGlobals.ship_orbit.eccentricAnomaly * Units.RAD_TO_DEG).ToAngle(), section.IsHud); } - - #endregion } } --- a/KerbalEngineer/Flight/Readouts/Orbital/Inclination.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/Inclination.cs @@ -34,7 +34,7 @@ { this.Name = "Inclination"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = "Shows the vessel's orbital inclination."; + this.HelpString = "Shows the vessel's orbital inclination relative to the Equator."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/ManoeuvreProcessor.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/ManoeuvreProcessor.cs @@ -63,6 +63,10 @@ public static double NormalDeltaV { get; private set; } + public static double PostBurnAp { get; private set; } + + public static double PostBurnPe { get; private set; } + public static double ProgradeDeltaV { get; private set; } public static double RadialDeltaV { get; private set; } @@ -110,6 +114,8 @@ NormalDeltaV = deltaV.y; RadialDeltaV = deltaV.x; TotalDeltaV = node.GetBurnVector(FlightGlobals.ship_orbit).magnitude; + PostBurnAp = node.nextPatch != null ? node.nextPatch.ApA : 0; + PostBurnPe = node.nextPatch != null ? node.nextPatch.PeA : 0; UniversalTime = FlightGlobals.ActiveVessel.patchedConicSolver.maneuverNodes[0].UT; AngleToPrograde = FlightGlobals.ActiveVessel.patchedConicSolver.maneuverNodes[0].patch.GetAngleToPrograde(UniversalTime); --- a/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeAngleToPrograde.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeAngleToPrograde.cs @@ -36,7 +36,7 @@ { this.Name = "Manoeuvre Node Angle to Prograde"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; + this.HelpString = "Angular Distance from the Node to crossing the Orbit of the central body on it's prograde side."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeAngleToRetrograde.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeAngleToRetrograde.cs @@ -36,7 +36,7 @@ { this.Name = "Manoeuvre Node Angle to Retrograde"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; + this.HelpString = "Angular Distance from the Node to crossing the Orbit of the central body on it's retrograde side."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeBurnTime.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeBurnTime.cs @@ -36,7 +36,7 @@ { this.Name = "Manoeuvre Node Burn Time"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; + this.HelpString = "The burn's total duration."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeHalfBurnTime.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeHalfBurnTime.cs @@ -36,7 +36,7 @@ { this.Name = "Manoeuvre Node Half Burn Time"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; + this.HelpString = "Half of the burn's total duration."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeNormalDeltaV.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeNormalDeltaV.cs @@ -36,7 +36,7 @@ { this.Name = "Manoeuvre Node DeltaV (Normal)"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; + this.HelpString = "Normal component of the total change in velocity."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeProgradeDeltaV.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeProgradeDeltaV.cs @@ -36,7 +36,7 @@ { this.Name = "Manoeuvre Node DeltaV (Prograde)"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; + this.HelpString = "Prograde/Retrograde component of the total change in velocity."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeRadialDeltaV.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeRadialDeltaV.cs @@ -36,7 +36,7 @@ { this.Name = "Manoeuvre Node DeltaV (Radial)"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; + this.HelpString = "Radial component of the total change in velocity."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeTimeToHalfBurn.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeTimeToHalfBurn.cs @@ -36,7 +36,7 @@ { this.Name = "Time to Manoeuvre Burn"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; + this.HelpString = "Time until the Manoeuvre should be started."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeTimeToManoeuvre.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeTimeToManoeuvre.cs @@ -36,7 +36,7 @@ { this.Name = "Time to Manoeuvre Node"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; + this.HelpString = "Time until the vessel reaches the position of the Manoeuvre Node."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeTotalDeltaV.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/NodeTotalDeltaV.cs @@ -36,7 +36,7 @@ { this.Name = "Manoeuvre Node DeltaV (Total)"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; + this.HelpString = "Total change in velocity during the burn."; this.IsDefault = true; } --- /dev/null +++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/PostBurnApoapsis.cs @@ -1,1 +1,69 @@ +// +// Kerbal Engineer Redux +// +// Copyright (C) 2014 CYBUTEK +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +#region Using Directives + +using System; + +using KerbalEngineer.Extensions; +using KerbalEngineer.Flight.Sections; + +#endregion + +namespace KerbalEngineer.Flight.Readouts.Orbital.ManoeuvreNode +{ + public class PostBurnApoapsis : ReadoutModule + { + #region Constructors + + public PostBurnApoapsis() + { + this.Name = "Post-burn Apoapsis"; + this.Category = ReadoutCategory.GetCategory("Orbital"); + this.HelpString = "Farthest point of the vessel's ofbit after the burn."; + this.IsDefault = false; + } + + #endregion + + #region Methods: public + + public override void Draw(SectionModule section) + { + if (!ManoeuvreProcessor.ShowDetails) + { + return; + } + + this.DrawLine("Post-burn Apoapsis", ManoeuvreProcessor.PostBurnAp.ToDistance(), section.IsHud); + } + + public override void Reset() + { + ManoeuvreProcessor.Reset(); + } + + public override void Update() + { + ManoeuvreProcessor.RequestUpdate(); + } + + #endregion + } +} --- /dev/null +++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/PostBurnPeriapsis.cs @@ -1,1 +1,69 @@ +// +// Kerbal Engineer Redux +// +// Copyright (C) 2014 CYBUTEK +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +#region Using Directives + +using System; + +using KerbalEngineer.Extensions; +using KerbalEngineer.Flight.Sections; + +#endregion + +namespace KerbalEngineer.Flight.Readouts.Orbital.ManoeuvreNode +{ + public class PostBurnPeriapsis : ReadoutModule + { + #region Constructors + + public PostBurnPeriapsis() + { + this.Name = "Post-burn Periapsis"; + this.Category = ReadoutCategory.GetCategory("Orbital"); + this.HelpString = "Closest point of the vessel's ofbit after the burn."; + this.IsDefault = false; + } + + #endregion + + #region Methods: public + + public override void Draw(SectionModule section) + { + if (!ManoeuvreProcessor.ShowDetails) + { + return; + } + + this.DrawLine("Post-burn Periapsis", ManoeuvreProcessor.PostBurnPe.ToDistance(), section.IsHud); + } + + public override void Reset() + { + ManoeuvreProcessor.Reset(); + } + + public override void Update() + { + ManoeuvreProcessor.RequestUpdate(); + } + + #endregion + } +} --- a/KerbalEngineer/Flight/Readouts/Orbital/MeanAnomaly.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/MeanAnomaly.cs @@ -1,7 +1,7 @@ // // Kerbal Engineer Redux // -// Copyright (C) 2014 CYBUTEK +// Copyright (C) 2015 CYBUTEK // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -17,38 +17,25 @@ // along with this program. If not, see . // -#region Using Directives - -using System; - -using KerbalEngineer.Extensions; -using KerbalEngineer.Flight.Sections; - -#endregion - namespace KerbalEngineer.Flight.Readouts.Orbital { + using Extensions; + using Helpers; + using Sections; + public class MeanAnomaly : ReadoutModule { - #region Constructors - public MeanAnomaly() { - this.Name = "Mean Anomaly"; - this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; - this.IsDefault = false; + Name = "Mean Anomaly"; + Category = ReadoutCategory.GetCategory("Orbital"); + HelpString = string.Empty; + IsDefault = false; } - - #endregion - - #region Methods: public public override void Draw(SectionModule section) { - this.DrawLine(FlightGlobals.ship_orbit.meanAnomaly.ToAngle(), section.IsHud); + DrawLine((FlightGlobals.ship_orbit.meanAnomaly * Units.RAD_TO_DEG).ToAngle(), section.IsHud); } - - #endregion } } --- a/KerbalEngineer/Flight/Readouts/Orbital/MeanAnomalyAtEpoc.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/MeanAnomalyAtEpoc.cs @@ -1,7 +1,7 @@ // // Kerbal Engineer Redux // -// Copyright (C) 2014 CYBUTEK +// Copyright (C) 2015 CYBUTEK // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -17,38 +17,25 @@ // along with this program. If not, see . // -#region Using Directives - -using System; - -using KerbalEngineer.Extensions; -using KerbalEngineer.Flight.Sections; - -#endregion - namespace KerbalEngineer.Flight.Readouts.Orbital { + using Extensions; + using Helpers; + using Sections; + public class MeanAnomalyAtEpoc : ReadoutModule { - #region Constructors - public MeanAnomalyAtEpoc() { - this.Name = "Mean Anomaly at Epoc"; - this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = String.Empty; - this.IsDefault = false; + Name = "Mean Anomaly at Epoc"; + Category = ReadoutCategory.GetCategory("Orbital"); + HelpString = string.Empty; + IsDefault = false; } - - #endregion - - #region Methods: public public override void Draw(SectionModule section) { - this.DrawLine(FlightGlobals.ship_orbit.meanAnomalyAtEpoch.ToAngle(), section.IsHud); + DrawLine((FlightGlobals.ship_orbit.meanAnomalyAtEpoch * Units.RAD_TO_DEG).ToAngle(), section.IsHud); } - - #endregion } } --- a/KerbalEngineer/Flight/Readouts/Orbital/PeriapsisHeight.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/PeriapsisHeight.cs @@ -34,7 +34,7 @@ { this.Name = "Periapsis Height"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = "Shows the vessel's periapsis height relative to sea level. (Periapsis is the lowest point of an orbit."; + this.HelpString = "Shows the vessel's periapsis height relative to sea level. (Periapsis is the lowest point of an orbit.)"; this.IsDefault = true; } --- /dev/null +++ b/KerbalEngineer/Flight/Readouts/Orbital/SpeedAtApoapsis.cs @@ -1,1 +1,68 @@ +// +// Kerbal Engineer Redux +// +// Copyright (C) 2014 CYBUTEK +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +#region Using Directives + +using System; +using KerbalEngineer.Flight.Sections; +using KerbalEngineer.Helpers; +using KerbalEngineer.Extensions; + +#endregion + +namespace KerbalEngineer.Flight.Readouts.Orbital +{ + public class SpeedAtApoapsis : ReadoutModule + { + #region Constructors + + public SpeedAtApoapsis() + { + this.Name = "Speed at Apoapsis"; + this.Category = ReadoutCategory.GetCategory("Orbital"); + this.HelpString = "Shows the orbital speed of the vessel when at apoapsis, the highest point of the orbit."; + this.IsDefault = false; + } + + #endregion + + #region Methods: public + + public override void Draw(SectionModule section) + { + // Vis-viva: v^2 = GM(2/r - 1/a) + // All this is easily got from the ships orbit (and reference body) + String str; + Orbit orbit = FlightGlobals.ship_orbit; + if (orbit.eccentricity > 1.0) + str = "---m/s"; + else + { + double speedsqr = orbit.referenceBody.gravParameter * ((2 / orbit.ApR) - (1 / orbit.semiMajorAxis)); + if (Double.IsNaN(speedsqr) || speedsqr < 0) + str = "---m/s"; // Don't think this is possible barring bugs in the Orbit class + else + str = Math.Sqrt(speedsqr).ToSpeed(); + } + this.DrawLine(str, section.IsHud); + } + + #endregion + } +} --- /dev/null +++ b/KerbalEngineer/Flight/Readouts/Orbital/SpeedAtPeriapsis.cs @@ -1,1 +1,64 @@ +// +// Kerbal Engineer Redux +// +// Copyright (C) 2014 CYBUTEK +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +#region Using Directives + +using System; +using KerbalEngineer.Flight.Sections; +using KerbalEngineer.Helpers; +using KerbalEngineer.Extensions; + +#endregion + +namespace KerbalEngineer.Flight.Readouts.Orbital +{ + public class SpeedAtPeriapsis : ReadoutModule + { + #region Constructors + + public SpeedAtPeriapsis() + { + this.Name = "Speed at Periapsis"; + this.Category = ReadoutCategory.GetCategory("Orbital"); + this.HelpString = "Shows the orbital speed of the vessel when at periapsis, the lowest point of the orbit."; + this.IsDefault = false; + } + + #endregion + + #region Methods: public + + public override void Draw(SectionModule section) + { + // Vis-viva: v^2 = GM(2/r - 1/a) + // All this is easily got from the ships orbit (and reference body) + String str; + Orbit orbit = FlightGlobals.ship_orbit; + double oneovera = (orbit.eccentricity == 1) ? 0 : (1 / orbit.semiMajorAxis); + double speedsqr = orbit.referenceBody.gravParameter * ((2 / orbit.PeR) - oneovera); + if (Double.IsNaN(speedsqr) || speedsqr < 0) + str = "---m/s"; + else + str = Math.Sqrt(speedsqr).ToSpeed(); + this.DrawLine(str, section.IsHud); + } + + #endregion + } +} --- /dev/null +++ b/KerbalEngineer/Flight/Readouts/Orbital/TimeToAtmosphere.cs @@ -1,1 +1,99 @@ +// +// Kerbal Engineer Redux +// +// Copyright (C) 2014 CYBUTEK +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +#region Using Directives + +using System; +using KerbalEngineer.Flight.Sections; +using KerbalEngineer.Helpers; + +#endregion + +namespace KerbalEngineer.Flight.Readouts.Orbital +{ + public class TimeToAtmosphere : ReadoutModule + { + //private LogMsg log = new LogMsg(); + + #region Constructors + + public TimeToAtmosphere() + { + this.Name = "Time to Atmosphere"; + this.Category = ReadoutCategory.GetCategory("Orbital"); + this.HelpString = "Shows the time until the vessel enters or leaves the atmosphere."; + this.IsDefault = false; + } + + #endregion + + #region Methods: public + + public override void Draw(SectionModule section) + { + String str; + Orbit orbit = FlightGlobals.ship_orbit; + + if (orbit.referenceBody.atmosphere && orbit.PeA < orbit.referenceBody.atmosphereDepth && orbit.ApA > orbit.referenceBody.atmosphereDepth) + { + double tA = orbit.TrueAnomalyAtRadius(orbit.referenceBody.atmosphereDepth + orbit.referenceBody.Radius); + //log.buf.AppendFormat("tA = {0}\n", tA); + double utTime = Planetarium.GetUniversalTime(); + //log.buf.AppendFormat("utTime = {0}\n", utTime); + double timeAtRad1 = orbit.GetUTforTrueAnomaly(tA, orbit.period * 0.5); + //log.buf.AppendFormat("timeAtRad1 = {0}\n", timeAtRad1); + if (timeAtRad1 < utTime) + { + timeAtRad1 += orbit.period; + //log.buf.AppendFormat("timeAtRad1 = {0}\n", timeAtRad1); + } + double timeAtRad2 = orbit.GetUTforTrueAnomaly(-tA, orbit.period * 0.5); + //log.buf.AppendFormat("timeAtRad2 = {0}\n", timeAtRad2); + if (timeAtRad2 < utTime) + { + timeAtRad2 += orbit.period; + //log.buf.AppendFormat("timeAtRad2 = {0}\n", timeAtRad2); + } + double time = Math.Min(timeAtRad1, timeAtRad2) - utTime; + //log.buf.AppendFormat("time = {0}\n", time); + + if (Double.IsNaN(time)) + { + str = "---s"; + //log.buf.AppendLine("time is NaN"); + } + else + { + str = TimeFormatter.ConvertToString(time); + //log.buf.AppendFormat("str = {0}\n", str); + } + } + else + { + str = "---s"; + //log.buf.AppendLine("no atmosphere, pe > atmosphere, or ap < atmosphere"); + } + + //log.Flush(); + this.DrawLine(str, section.IsHud); + } + + #endregion + } +} --- a/KerbalEngineer/Flight/Readouts/Orbital/TimeToEquatorialAscendingNode.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/TimeToEquatorialAscendingNode.cs @@ -35,7 +35,7 @@ { this.Name = "Time to Equ. AN"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = string.Empty; + this.HelpString = "Shows the time until the vessel corsses the Equator, going north of it."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Orbital/TimeToEquatorialDescendingNode.cs +++ b/KerbalEngineer/Flight/Readouts/Orbital/TimeToEquatorialDescendingNode.cs @@ -35,7 +35,7 @@ { this.Name = "Time to Equ. DN"; this.Category = ReadoutCategory.GetCategory("Orbital"); - this.HelpString = string.Empty; + this.HelpString = "Shows the time until the vessel corsses the Equator, going south of it."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/ReadoutLibrary.cs +++ b/KerbalEngineer/Flight/Readouts/ReadoutLibrary.cs @@ -91,6 +91,11 @@ readouts.Add(new NodeTimeToHalfBurn()); readouts.Add(new NodeAngleToPrograde()); readouts.Add(new NodeAngleToRetrograde()); + readouts.Add(new PostBurnApoapsis()); + readouts.Add(new PostBurnPeriapsis()); + readouts.Add(new SpeedAtApoapsis()); + readouts.Add(new SpeedAtPeriapsis()); + readouts.Add(new TimeToAtmosphere()); // Surface readouts.Add(new AltitudeSeaLevel()); @@ -115,6 +120,7 @@ readouts.Add(new ImpactBiome()); // Vessel + readouts.Add(new Name()); readouts.Add(new DeltaVStaged()); readouts.Add(new DeltaVCurrent()); readouts.Add(new DeltaVTotal()); @@ -162,6 +168,8 @@ readouts.Add(new Rendezvous.OrbitalPeriod()); readouts.Add(new Rendezvous.SemiMajorAxis()); readouts.Add(new Rendezvous.SemiMinorAxis()); + readouts.Add(new Rendezvous.RelativeRadialVelocity()); + readouts.Add(new Rendezvous.TimeToRendezvous()); // Thermal readouts.Add(new InternalFlux()); @@ -182,7 +190,6 @@ readouts.Add(new Separator()); readouts.Add(new GuiSizeAdjustor()); readouts.Add(new SimulationDelay()); - readouts.Add(new TimeReference()); readouts.Add(new VectoredThrustToggle()); readouts.Add(new SystemTime()); --- a/KerbalEngineer/Flight/Readouts/Rendezvous/AltitudeSeaLevel.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/AltitudeSeaLevel.cs @@ -34,7 +34,7 @@ { this.Name = "Altitude (Sea Level)"; this.Category = ReadoutCategory.GetCategory("Rendezvous"); - this.HelpString = string.Empty; + this.HelpString = "Shows the target's altitude above sea level."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Rendezvous/AngleToRelativeAscendingNode.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/AngleToRelativeAscendingNode.cs @@ -34,7 +34,7 @@ { this.Name = "Angle to Rel. AN"; this.Category = ReadoutCategory.GetCategory("Rendezvous"); - this.HelpString = string.Empty; + this.HelpString = "Angular Distance from the vessel to crossing the orbit of the target object, going north of it."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Rendezvous/AngleToRelativeDescendingNode.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/AngleToRelativeDescendingNode.cs @@ -34,7 +34,7 @@ { this.Name = "Angle to Rel. DN"; this.Category = ReadoutCategory.GetCategory("Rendezvous"); - this.HelpString = string.Empty; + this.HelpString = "Angular Distance from the vessel to crossing the orbit of the target object, going south of it."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Rendezvous/ApoapsisHeight.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/ApoapsisHeight.cs @@ -34,7 +34,7 @@ { this.Name = "Apoapsis Height"; this.Category = ReadoutCategory.GetCategory("Rendezvous"); - this.HelpString = string.Empty; + this.HelpString = "Shows the targets's apoapsis height relative to sea level. (Apoapsis is the highest point of an orbit.)"; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Rendezvous/Distance.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/Distance.cs @@ -34,7 +34,7 @@ { this.Name = "Distance"; this.Category = ReadoutCategory.GetCategory("Rendezvous"); - this.HelpString = string.Empty; + this.HelpString = "Current distance between the vessel and the target object."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Rendezvous/OrbitalPeriod.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/OrbitalPeriod.cs @@ -34,7 +34,7 @@ { this.Name = "Orbital Period"; this.Category = ReadoutCategory.GetCategory("Rendezvous"); - this.HelpString = string.Empty; + this.HelpString = "Shows the amount of time it will take the target object to complete a full orbit."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Rendezvous/PeriapsisHeight.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/PeriapsisHeight.cs @@ -34,7 +34,7 @@ { this.Name = "Periapsis Height"; this.Category = ReadoutCategory.GetCategory("Rendezvous"); - this.HelpString = string.Empty; + this.HelpString = "Shows the targets's periapsis height relative to sea level. (Periapsis is the lowest point of an orbit.)"; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Rendezvous/PhaseAngle.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/PhaseAngle.cs @@ -34,7 +34,7 @@ { this.Name = "Phase Angle"; this.Category = ReadoutCategory.GetCategory("Rendezvous"); - this.HelpString = string.Empty; + this.HelpString = "Angular distance of the vessel relative to the target object."; this.IsDefault = true; } --- /dev/null +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/RelativeRadialVelocity.cs @@ -1,1 +1,66 @@ +// +// Kerbal Engineer Redux +// +// Copyright (C) 2014 CYBUTEK +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +#region Using Directives + +using KerbalEngineer.Extensions; +using KerbalEngineer.Flight.Sections; + +#endregion + +namespace KerbalEngineer.Flight.Readouts.Rendezvous +{ + public class RelativeRadialVelocity : ReadoutModule + { + #region Constructors + + public RelativeRadialVelocity() + { + this.Name = "Relative Radial Velocity"; + this.Category = ReadoutCategory.GetCategory("Rendezvous"); + this.HelpString = "Relative radial velocity between your vessel and the target object"; + this.IsDefault = false; + } + + #endregion + + #region Methods: public + + public override void Draw(SectionModule section) + { + if (RendezvousProcessor.ShowDetails) + { + this.DrawLine(RendezvousProcessor.RelativeRadialVelocity.ToSpeed(), section.IsHud); + } + } + + public override void Reset() + { + FlightEngineerCore.Instance.AddUpdatable(RendezvousProcessor.Instance); + } + + public override void Update() + { + RendezvousProcessor.RequestUpdate(); + } + + #endregion + } +} + --- a/KerbalEngineer/Flight/Readouts/Rendezvous/RendezvousProcessor.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/RendezvousProcessor.cs @@ -135,6 +135,16 @@ /// Gets the target's time to periapsis. /// public static double TimeToPeriapsis { get; private set; } + + /// + /// Gets the relative radial velocity. + /// + public static double RelativeRadialVelocity { get; private set; } + + /// + /// Gets approximate (linearly) time to the minimum distance between objects. + /// + public static double TimeToRendezvous { get; private set; } /// /// Gets and sets whether the updatable object should be updated. @@ -193,6 +203,14 @@ Distance = Vector3d.Distance(targetOrbit.pos, originOrbit.pos); OrbitalPeriod = targetOrbit.period; + + // beware that the order/sign of coordinates is inconsistent across different exposed variables + // in particular, v below does not equal to FlightGlobals.ship_tgtVelocity + Vector3d x = targetOrbit.pos - originOrbit.pos; + Vector3d v = targetOrbit.vel - originOrbit.vel; + double xv = Vector3d.Dot(x, v); + TimeToRendezvous = - xv / Vector3d.SqrMagnitude(v); + RelativeRadialVelocity = xv / Vector3d.Magnitude(x); } private double CalcInterceptAngle() --- a/KerbalEngineer/Flight/Readouts/Rendezvous/SemiMajorAxis.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/SemiMajorAxis.cs @@ -36,7 +36,7 @@ { this.Name = "Semi-major Axis"; this.Category = ReadoutCategory.GetCategory("Rendezvous"); - this.HelpString = String.Empty; + this.HelpString = "Shows the distance from the centre of the target's orbit to the farthest edge."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Rendezvous/SemiMinorAxis.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/SemiMinorAxis.cs @@ -36,7 +36,7 @@ { this.Name = "Semi-minor Axis"; this.Category = ReadoutCategory.GetCategory("Rendezvous"); - this.HelpString = String.Empty; + this.HelpString = "Shows the distance from the centre of the target's orbit to the nearest edge."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Rendezvous/TimeToApoapsis.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/TimeToApoapsis.cs @@ -34,7 +34,7 @@ { this.Name = "Time to Apoapsis"; this.Category = ReadoutCategory.GetCategory("Rendezvous"); - this.HelpString = string.Empty; + this.HelpString = "Shows the time until the target reaches apoapsis, the highest point of the orbit."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Rendezvous/TimeToPeriapsis.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/TimeToPeriapsis.cs @@ -34,7 +34,7 @@ { this.Name = "Time to Periapsis"; this.Category = ReadoutCategory.GetCategory("Rendezvous"); - this.HelpString = string.Empty; + this.HelpString = "Shows the time until the target reaches periapsis, the lowest point of the orbit."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Rendezvous/TimeToRelativeAscendingNode.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/TimeToRelativeAscendingNode.cs @@ -34,7 +34,7 @@ { this.Name = "Time to Rel. AN"; this.Category = ReadoutCategory.GetCategory("Rendezvous"); - this.HelpString = string.Empty; + this.HelpString = "Time until the vessel crosses the target's orbit, going north."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Rendezvous/TimeToRelativeDescendingNode.cs +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/TimeToRelativeDescendingNode.cs @@ -34,7 +34,7 @@ { this.Name = "Time to Rel. DN"; this.Category = ReadoutCategory.GetCategory("Rendezvous"); - this.HelpString = string.Empty; + this.HelpString = "Time until the vessel crosses the target's orbit, going south."; this.IsDefault = true; } --- /dev/null +++ b/KerbalEngineer/Flight/Readouts/Rendezvous/TimeToRendezvous.cs @@ -1,1 +1,65 @@ +// +// Kerbal Engineer Redux +// +// Copyright (C) 2014 CYBUTEK +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +#region Using Directives + +using KerbalEngineer.Flight.Sections; +using KerbalEngineer.Helpers; + +#endregion + +namespace KerbalEngineer.Flight.Readouts.Rendezvous +{ + public class TimeToRendezvous : ReadoutModule + { + #region Constructors + + public TimeToRendezvous() + { + this.Name = "Time to Rendezvous"; + this.Category = ReadoutCategory.GetCategory("Rendezvous"); + this.HelpString = "Approximate (linearly) time to the minimum distance between objects."; + this.IsDefault = false; + } + + #endregion + + #region Methods: public + + public override void Draw(SectionModule section) + { + if (RendezvousProcessor.ShowDetails) + { + this.DrawLine(TimeFormatter.ConvertToString(RendezvousProcessor.TimeToRendezvous), section.IsHud); + } + } + + public override void Reset() + { + FlightEngineerCore.Instance.AddUpdatable(RendezvousProcessor.Instance); + } + + public override void Update() + { + RendezvousProcessor.RequestUpdate(); + } + + #endregion + } +} --- a/KerbalEngineer/Flight/Readouts/Surface/HorizontalSpeed.cs +++ b/KerbalEngineer/Flight/Readouts/Surface/HorizontalSpeed.cs @@ -21,6 +21,7 @@ using KerbalEngineer.Extensions; using KerbalEngineer.Flight.Sections; +using System; #endregion @@ -44,7 +45,11 @@ public override void Draw(SectionModule section) { - this.DrawLine(FlightGlobals.ActiveVessel.horizontalSrfSpeed.ToSpeed(), section.IsHud); + // Used to do this but the bug-fix to horizontalSrfSpeed in KSP 1.0.3 actually made it worse so workaround + //this.DrawLine(FlightGlobals.ActiveVessel.horizontalSrfSpeed.ToSpeed(), section.IsHud); + var ves = FlightGlobals.ActiveVessel; + double horizSpeed = Math.Sqrt(ves.srfSpeed * ves.srfSpeed - ves.verticalSpeed * ves.verticalSpeed); + this.DrawLine(horizSpeed.ToSpeed(), section.IsHud); } #endregion --- a/KerbalEngineer/Flight/Readouts/Surface/ImpactAltitude.cs +++ b/KerbalEngineer/Flight/Readouts/Surface/ImpactAltitude.cs @@ -34,7 +34,7 @@ { this.Name = "Impact Altitude"; this.Category = ReadoutCategory.GetCategory("Surface"); - this.HelpString = string.Empty; + this.HelpString = "Altitude at which the Vessel will impact."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Surface/ImpactBiome.cs +++ b/KerbalEngineer/Flight/Readouts/Surface/ImpactBiome.cs @@ -33,7 +33,7 @@ { this.Name = "Impact Biome"; this.Category = ReadoutCategory.GetCategory("Surface"); - this.HelpString = string.Empty; + this.HelpString = "Biome the Vessel will impact in."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Surface/ImpactLatitude.cs +++ b/KerbalEngineer/Flight/Readouts/Surface/ImpactLatitude.cs @@ -34,7 +34,7 @@ { this.Name = "Impact Latitude"; this.Category = ReadoutCategory.GetCategory("Surface"); - this.HelpString = string.Empty; + this.HelpString = "Latitude of the impact position."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Surface/ImpactLongitude.cs +++ b/KerbalEngineer/Flight/Readouts/Surface/ImpactLongitude.cs @@ -34,7 +34,7 @@ { this.Name = "Impact Longitude"; this.Category = ReadoutCategory.GetCategory("Surface"); - this.HelpString = string.Empty; + this.HelpString = "Longditude of the impact position."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Surface/ImpactTime.cs +++ b/KerbalEngineer/Flight/Readouts/Surface/ImpactTime.cs @@ -34,7 +34,7 @@ { this.Name = "Impact Time"; this.Category = ReadoutCategory.GetCategory("Surface"); - this.HelpString = string.Empty; + this.HelpString = "Shows time until the vessel impacts the central object."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Surface/Latitude.cs +++ b/KerbalEngineer/Flight/Readouts/Surface/Latitude.cs @@ -34,7 +34,7 @@ { this.Name = "Latitude"; this.Category = ReadoutCategory.GetCategory("Surface"); - this.HelpString = "Shows the vessel's latitude position around the celestial body. Latitude is the angle from the equator to poles."; + this.HelpString = "Shows the vessel's latitude position around the celestial body. Latitude is the angle from the equator to poles."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Surface/Longitude.cs +++ b/KerbalEngineer/Flight/Readouts/Surface/Longitude.cs @@ -28,7 +28,7 @@ { Name = "Longitude"; Category = ReadoutCategory.GetCategory("Surface"); - HelpString = "Shows the vessel's longitude around a celestial body. Longitude is the angle from the bodies prime meridian."; + HelpString = "Shows the vessel's longitude around a celestial body. Longitude is the angle from the bodies prime meridian."; IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Surface/Situation.cs +++ b/KerbalEngineer/Flight/Readouts/Surface/Situation.cs @@ -33,7 +33,7 @@ { this.Name = "Situation"; this.Category = ReadoutCategory.GetCategory("Surface"); - this.HelpString = string.Empty; + this.HelpString = "Shows the vessel's current scientific situation. (Landed, Splashed, Flying Low/High, In Space Low/High)"; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Thermal/CoolestPart.cs +++ b/KerbalEngineer/Flight/Readouts/Thermal/CoolestPart.cs @@ -27,7 +27,7 @@ { Name = "Coolest Part"; Category = ReadoutCategory.GetCategory("Thermal"); - HelpString = string.Empty; + HelpString = "The part of the vessel that is enduring the lowest temperature."; IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Thermal/CoolestSkinTemperature.cs +++ b/KerbalEngineer/Flight/Readouts/Thermal/CoolestSkinTemperature.cs @@ -28,7 +28,7 @@ { Name = "Coolest Skin Temperature"; Category = ReadoutCategory.GetCategory("Thermal"); - HelpString = string.Empty; + HelpString = "Lowest external Temperature on the Vessel."; IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Thermal/CoolestTemperature.cs +++ b/KerbalEngineer/Flight/Readouts/Thermal/CoolestTemperature.cs @@ -28,7 +28,7 @@ { Name = "Coolest Temperature"; Category = ReadoutCategory.GetCategory("Thermal"); - HelpString = string.Empty; + HelpString = "Lowest internal Temperature on the Vessel."; IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Thermal/CriticalPart.cs +++ b/KerbalEngineer/Flight/Readouts/Thermal/CriticalPart.cs @@ -27,7 +27,7 @@ { Name = "Critical Part"; Category = ReadoutCategory.GetCategory("Thermal"); - HelpString = string.Empty; + HelpString = "This part is structually most critical. If it endures too high temperature there is a high chance for major structual failure!"; IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Thermal/CriticalSkinTemperature.cs +++ b/KerbalEngineer/Flight/Readouts/Thermal/CriticalSkinTemperature.cs @@ -28,7 +28,7 @@ { Name = "Critical Skin Temperature"; Category = ReadoutCategory.GetCategory("Thermal"); - HelpString = string.Empty; + HelpString = "Highest external Temperature on the part of the Vessel that is structually most critical."; IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Thermal/CriticalTemperature.cs +++ b/KerbalEngineer/Flight/Readouts/Thermal/CriticalTemperature.cs @@ -28,7 +28,7 @@ { Name = "Critical Temperature"; Category = ReadoutCategory.GetCategory("Thermal"); - HelpString = string.Empty; + HelpString = "Internal Temperature on the part of the Vessel that is structually most critical."; IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Thermal/CriticalThermalPercentage.cs +++ b/KerbalEngineer/Flight/Readouts/Thermal/CriticalThermalPercentage.cs @@ -28,7 +28,7 @@ { Name = "Critical Thermal Percentage"; Category = ReadoutCategory.GetCategory("Thermal"); - HelpString = string.Empty; + HelpString = "Shows how high a temperature the critical Part is enduring relative to it's maximal temperature."; IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Thermal/HottestPart.cs +++ b/KerbalEngineer/Flight/Readouts/Thermal/HottestPart.cs @@ -27,7 +27,7 @@ { Name = "Hottest Part"; Category = ReadoutCategory.GetCategory("Thermal"); - HelpString = string.Empty; + HelpString = "The part of the vessel that is enduring the highest temperature."; IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Thermal/HottestSkinTemperature.cs +++ b/KerbalEngineer/Flight/Readouts/Thermal/HottestSkinTemperature.cs @@ -28,7 +28,7 @@ { Name = "Hottest Skin Temperature"; Category = ReadoutCategory.GetCategory("Thermal"); - HelpString = string.Empty; + HelpString = "Highest external Temperature on the Vessel."; IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Thermal/HottestTemperature.cs +++ b/KerbalEngineer/Flight/Readouts/Thermal/HottestTemperature.cs @@ -28,7 +28,7 @@ { Name = "Hottest Temperature"; Category = ReadoutCategory.GetCategory("Thermal"); - HelpString = string.Empty; + HelpString = "Highest internal Temperature on the Vessel."; IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Vessel/Acceleration.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/Acceleration.cs @@ -34,7 +34,7 @@ { this.Name = "Acceleration"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Shows the current and maximum acceleration of the craft."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Vessel/AttitudeProcessor.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/AttitudeProcessor.cs @@ -110,8 +110,8 @@ ? 360.0f - this.surfaceRotation.eulerAngles.x : -this.surfaceRotation.eulerAngles.x; this.roll = this.surfaceRotation.eulerAngles.z > 180.0f - ? this.surfaceRotation.eulerAngles.z - 360.0f - : this.surfaceRotation.eulerAngles.z; + ? 360.0f - this.surfaceRotation.eulerAngles.z + : -this.surfaceRotation.eulerAngles.z; this.headingRate = this.heading - this.previousHeading; this.pitchRate = this.pitch - this.previousPitch; --- a/KerbalEngineer/Flight/Readouts/Vessel/Heading.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/Heading.cs @@ -34,7 +34,7 @@ { this.Name = "Heading"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Shows the current Heading."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Vessel/HeadingRate.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/HeadingRate.cs @@ -34,7 +34,7 @@ { this.Name = "Heading Rate"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Shows the current change in Heading."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Vessel/IntakeAirDemand.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/IntakeAirDemand.cs @@ -39,7 +39,7 @@ { this.Name = "Intake Air (Demand)"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Displays the Amount of Intake Air required."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Vessel/IntakeAirDemandSupply.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/IntakeAirDemandSupply.cs @@ -42,7 +42,7 @@ { this.Name = "Intake Air (D/S)"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Displays the Ration between required and available Intake Air."; this.IsDefault = false; } @@ -55,10 +55,11 @@ var demand = 0.0; foreach (var part in FlightGlobals.ActiveVessel.Parts) { - if (part.Modules.Contains("ModuleEngines")) + for (int i = 0; i < part.Modules.Count; i++) { - var engine = part.Modules["ModuleEngines"] as ModuleEngines; - if (engine.isOperational) + PartModule partmod = part.Modules[i]; + var engine = partmod as ModuleEngines; + if (engine != null && engine.isOperational) { demand += engine.propellants .Where(p => p.name == "IntakeAir") --- a/KerbalEngineer/Flight/Readouts/Vessel/IntakeAirSupply.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/IntakeAirSupply.cs @@ -39,7 +39,7 @@ { this.Name = "Intake Air (Supply)"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Displays the available Intake Air."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Vessel/IntakeAirUsage.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/IntakeAirUsage.cs @@ -42,7 +42,7 @@ { this.Name = "Intake Air (Usage)"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Displays the consumption of Intake Air."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Vessel/Mass.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/Mass.cs @@ -34,7 +34,7 @@ { this.Name = "Mass"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Displays the total Mass of the Vessel."; this.IsDefault = true; } --- /dev/null +++ b/KerbalEngineer/Flight/Readouts/Vessel/Name.cs @@ -1,1 +1,55 @@ +// +// Kerbal Engineer Redux +// +// Copyright (C) 2014 CYBUTEK +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +#region Using Directives + +using KerbalEngineer.Flight.Sections; +using KerbalEngineer.Helpers; + +#endregion + +namespace KerbalEngineer.Flight.Readouts.Vessel +{ + public class Name : ReadoutModule + { + #region Constructors + + public Name() + { + Name = "Name"; + Category = ReadoutCategory.GetCategory("Vessel"); + HelpString = "Displays the name of the current vessel."; + IsDefault = true; + } + + #endregion + + #region Methods: public + + public override void Draw(SectionModule section) + { + if (SimulationProcessor.ShowDetails) + { + DrawLine(FlightGlobals.ActiveVessel.vesselName); + } + } + + #endregion + } +} --- a/KerbalEngineer/Flight/Readouts/Vessel/PartCount.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/PartCount.cs @@ -34,7 +34,7 @@ { this.Name = "Part Count"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Shows the total number of Parts the current and next stage."; this.IsDefault = true; } --- a/KerbalEngineer/Flight/Readouts/Vessel/Pitch.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/Pitch.cs @@ -34,7 +34,7 @@ { this.Name = "Pitch"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Shows the current Pitch angle."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Vessel/PitchRate.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/PitchRate.cs @@ -34,7 +34,7 @@ { this.Name = "Pitch Rate"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Shows the current Pitch speed."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Vessel/Roll.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/Roll.cs @@ -34,7 +34,7 @@ { this.Name = "Roll"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Shows the current Roll angle."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Vessel/RollRate.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/RollRate.cs @@ -34,7 +34,7 @@ { this.Name = "Roll Rate"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Shows the current Roll speed."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Vessel/SpecificImpulse.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/SpecificImpulse.cs @@ -33,7 +33,7 @@ { this.Name = "Specific Impulse"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Shows the average Specific Impulse of all engines in the current stage."; this.IsDefault = false; } --- a/KerbalEngineer/Flight/Readouts/Vessel/Thrust.cs +++ b/KerbalEngineer/Flight/Readouts/Vessel/Thrust.cs @@ -34,7 +34,7 @@ { this.Name = "Thrust"; this.Category = ReadoutCategory.GetCategory("Vessel"); - this.HelpString = string.Empty; + this.HelpString = "Shows the current and maximum thrust the vessel can put out."; this.IsDefault = true; } --- a/KerbalEngineer/Helpers/TimeFormatter.cs +++ b/KerbalEngineer/Helpers/TimeFormatter.cs @@ -1,7 +1,5 @@ // -// Kerbal Engineer Redux -// -// Copyright (C) 2014 CYBUTEK +// Copyright (C) 2015 CYBUTEK // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -17,147 +15,46 @@ // along with this program. If not, see . // -#region Using Directives - -using System; - -using KerbalEngineer.Settings; - -#endregion - namespace KerbalEngineer.Helpers { public static class TimeFormatter { - #region Constructors - - static TimeFormatter() - { - SetReference(false); - Load(); - } - - #endregion - - #region Properties - - public static string Reference { get; set; } - - public static double SecondsPerDay { get; set; } - - public static double SecondsPerHour { get; set; } - - public static double SecondsPerMinute { get; set; } - - public static double SecondsPerYear { get; set; } - - #endregion - - #region Methods: public - public static string ConvertToString(double seconds, string format = "F1") { - var years = 0; - while (seconds >= SecondsPerYear) + int years = 0; + int days = 0; + int hours = 0; + int minutes = 0; + + if (seconds > 0.0) { - years++; - seconds -= SecondsPerYear; - } + years = (int)(seconds / KSPUtil.dateTimeFormatter.Year); + seconds -= years * KSPUtil.dateTimeFormatter.Year; - var days = 0; - while (seconds >= SecondsPerDay) - { - days++; - seconds -= SecondsPerDay; - } + days = (int)(seconds / KSPUtil.dateTimeFormatter.Day); + seconds -= days * KSPUtil.dateTimeFormatter.Day; - var hours = 0; - while (seconds >= SecondsPerHour) - { - hours++; - seconds -= SecondsPerHour; - } + hours = (int)(seconds / 3600.0); + seconds -= hours * 3600.0; - var minutes = 0; - while (seconds >= SecondsPerMinute) - { - minutes++; - seconds -= SecondsPerMinute; + minutes = (int)(seconds / 60.0); + seconds -= minutes * 60.0; } if (years > 0) { - return String.Format("{0}y {1}d {2}h {3}m {4}s", years, days, hours, minutes, seconds.ToString(format)); + return string.Format("{0}y {1}d {2}h {3}m {4}s", years, days, hours, minutes, seconds.ToString(format)); } if (days > 0) { - return String.Format("{0}d {1}h {2}m {3}s", days, hours, minutes, seconds.ToString(format)); + return string.Format("{0}d {1}h {2}m {3}s", days, hours, minutes, seconds.ToString(format)); } if (hours > 0) { - return String.Format("{0}h {1}m {2}s", hours, minutes, seconds.ToString(format)); + return string.Format("{0}h {1}m {2}s", hours, minutes, seconds.ToString(format)); } - return minutes > 0 ? String.Format("{0}m {1}s", minutes, seconds.ToString(format)) : String.Format("{0}s", seconds.ToString(format)); + return minutes > 0 ? string.Format("{0}m {1}s", minutes, seconds.ToString(format)) : string.Format("{0}s", seconds.ToString(format)); } - - public static void Load() - { - var handler = SettingHandler.Load("TimeFormatter.xml"); - SecondsPerMinute = handler.Get("SecondsPerMinute", SecondsPerMinute); - SecondsPerHour = handler.Get("SecondsPerHour", SecondsPerHour); - SecondsPerDay = handler.Get("SecondsPerDay", SecondsPerDay); - SecondsPerYear = handler.Get("SecondsPerYear", SecondsPerYear); - Reference = handler.Get("Reference", Reference); - } - - public static void Save() - { - var handler = SettingHandler.Load("TimeFormatter.xml"); - handler.Set("SecondsPerMinute", SecondsPerMinute); - handler.Set("SecondsPerHour", SecondsPerHour); - handler.Set("SecondsPerDay", SecondsPerDay); - handler.Set("SecondsPerYear", SecondsPerYear); - handler.Set("Reference", Reference); - handler.Save("TimeFormatter.xml"); - } - - public static void SetReference(bool save = true) - { - const double minute = 60.0; - const double hour = minute * 60.0; - const double day = hour * 24.0; - const double year = day * 365.0; - SetReference(minute, hour, day, year, "Earth", save); - } - - public static void SetReference(CelestialBody body, bool save = true) - { - SetReference(SecondsPerMinute, SecondsPerHour, body.rotationPeriod, body.orbit.period, body.bodyName, save); - } - - public static void SetReference(double minute, double hour, double day, double year, string reference, bool save = true) - { - SecondsPerMinute = minute; - SecondsPerHour = hour; - SecondsPerDay = day; - SecondsPerYear = year; - Reference = reference; - - if (save) - { - Save(); - } - } - - public new static string ToString() - { - return String.Format("SecondsPerMinute: {0}", SecondsPerMinute) + Environment.NewLine + - String.Format("SecondsPerHour: {0}", SecondsPerHour) + Environment.NewLine + - String.Format("SecondsPerDay: {0}", SecondsPerDay) + Environment.NewLine + - String.Format("SecondsPerYear: {0}", SecondsPerYear) + Environment.NewLine; - } - - #endregion } } --- a/KerbalEngineer/Helpers/Units.cs +++ b/KerbalEngineer/Helpers/Units.cs @@ -24,6 +24,8 @@ public static class Units { public const double GRAVITY = 9.80665; + public const double RAD_TO_DEG = 180.0 / Math.PI; + public const double DEG_TO_RAD = Math.PI / 180.0; public static string Concat(int value1, int value2) { @@ -91,7 +93,7 @@ int min = (int)Math.Floor(rem * 60); rem -= ((double)min / 60); int sec = (int)Math.Floor(rem * 3600); - return String.Format("{0:0}° {1:00}' {2:00}\"", deg, min, sec); + return string.Format("{0:0}° {1:00}' {2:00}\"", deg, min, sec); } public static string ToDistance(double value, int decimals = 1) @@ -125,18 +127,18 @@ public static string ToFlux(double value) { - return value.ToString("#,0.00") + "W"; + return value.ToString("#,0.00") + "kW"; } public static string ToForce(double value) { - return value.ToString((value < 100000.0) ? (value < 10000.0) ? (value < 100.0) ? (Math.Abs(value) < Double.Epsilon) ? "N0" : "N3" : "N2" : "N1" : "N0") + "kN"; + return value.ToString((value < 100000.0) ? (value < 10000.0) ? (value < 100.0) ? (Math.Abs(value) < double.Epsilon) ? "N0" : "N3" : "N2" : "N1" : "N0") + "kN"; } public static string ToForce(double value1, double value2) { - string format1 = (value1 < 100000.0) ? (value1 < 10000.0) ? (value1 < 100.0) ? (Math.Abs(value1) < Double.Epsilon) ? "N0" : "N3" : "N2" : "N1" : "N0"; - string format2 = (value2 < 100000.0) ? (value2 < 10000.0) ? (value2 < 100.0) ? (Math.Abs(value2) < Double.Epsilon) ? "N0" : "N3" : "N2" : "N1" : "N0"; + string format1 = (value1 < 100000.0) ? (value1 < 10000.0) ? (value1 < 100.0) ? (Math.Abs(value1) < double.Epsilon) ? "N0" : "N3" : "N2" : "N1" : "N0"; + string format2 = (value2 < 100000.0) ? (value2 < 10000.0) ? (value2 < 100.0) ? (Math.Abs(value2) < double.Epsilon) ? "N0" : "N3" : "N2" : "N1" : "N0"; return value1.ToString(format1) + " / " + value2.ToString(format2) + "kN"; } @@ -205,7 +207,7 @@ public static string ToTorque(double value) { - return value.ToString((value < 100.0) ? (Math.Abs(value) < Double.Epsilon) ? "N0" : "N1" : "N0") + "kNm"; + return value.ToString((value < 100.0) ? (Math.Abs(value) < double.Epsilon) ? "N0" : "N2" : "N0") + "kNm"; } } } --- /dev/null +++ b/KerbalEngineer/Helpers/XmlHelper.cs @@ -1,1 +1,67 @@ +namespace KerbalEngineer.Helpers +{ + using System; + using System.IO; + using System.Text; + using System.Xml.Serialization; + public static class XmlHelper + { + /// + /// Loads an object from disk. + /// + public static T LoadObject(string path) + { + T obj = default(T); + + if (File.Exists(path)) + { + try + { + using (StreamReader stream = new StreamReader(path, Encoding.UTF8)) + { + obj = (T)new XmlSerializer(typeof(T)).Deserialize(stream); + } + } + catch (Exception ex) + { + Logger.Exception(ex); + } + } + + return obj; + } + + /// + /// Loads and object from disk. + /// + public static bool LoadObject(string path, out T obj) + { + obj = LoadObject(path); + return (obj != null); + } + + /// + /// Saves an object to disk. + /// + public static void SaveObject(string path, T obj) + { + if (obj == null || string.IsNullOrEmpty(path)) + { + return; + } + + try + { + using (StreamWriter stream = new StreamWriter(path, false, Encoding.UTF8)) + { + new XmlSerializer(typeof(T)).Serialize(stream, obj); + } + } + catch (Exception ex) + { + Logger.Exception(ex); + } + } + } +} --- a/KerbalEngineer/KerbalEngineer.csproj +++ b/KerbalEngineer/KerbalEngineer.csproj @@ -34,26 +34,28 @@ false + + + - + - @@ -71,11 +73,21 @@ + + + + Code + + + + Code + + @@ -105,6 +117,7 @@ + @@ -138,8 +151,10 @@ - + + + @@ -161,7 +176,6 @@ - @@ -212,6 +226,7 @@ + @@ -221,10 +236,28 @@ + + - ..\Game\KSP_Data\Managed\Assembly-CSharp.dll + ..\..\Game\KSP_Data\Managed\Assembly-CSharp.dll + False + + + ..\..\game\KSP_Data\Managed\Assembly-CSharp-firstpass.dll + False + + + ..\..\game\KSP_Data\Managed\KSPAssets.dll + False + + + ..\..\game\KSP_Data\Managed\KSPCore.dll + False + + + ..\..\game\KSP_Data\Managed\KSPUtil.dll False @@ -236,7 +269,11 @@ False - ..\Game\KSP_Data\Managed\UnityEngine.dll + ..\..\Game\KSP_Data\Managed\UnityEngine.dll + False + + + ..\..\game\KSP_Data\Managed\UnityEngine.UI.dll False @@ -255,7 +292,7 @@ $(PostBuildEventDependsOn); PostBuildMacros; - xcopy "$(SolutionDir)Output\*" "$(SolutionDir)Game\GameData\*" /E /Y + xcopy "$(SolutionDir)Output\*" "$(SolutionDir)..\Game\GameData\*" /E /Y del "$(SolutionDir)Release\*" /Q xcopy "$(SolutionDir)Documents\*" "$(SolutionDir)Release\Documents\*" /E /Y 7z.exe a -tzip -mx3 "$(SolutionDir)Release\$(ProjectName)-@(VersionNumber).zip" "$(SolutionDir)Output\*" --- a/KerbalEngineer/KeyBinder.cs +++ /dev/null @@ -1,35 +1,1 @@ -// -// Kerbal Engineer Redux -// -// Copyright (C) 2014 CYBUTEK -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -using UnityEngine; - -namespace KerbalEngineer -{ - public class KeyBinder - { - public static KeyCode EditorShowHide { get; set; } - - public static KeyCode FlightShowHide { get; set; } - - static KeyBinder() - { - EditorShowHide = FlightShowHide = KeyCode.Backslash; - } - } -} --- /dev/null +++ b/KerbalEngineer/KeyBinding/KeyBindPopup.cs @@ -1,1 +1,247 @@ - +// +// Kerbal Engineer Redux +// +// Copyright (C) 2015 CYBUTEK +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +namespace KerbalEngineer.KeyBinding +{ + using System; + using Extensions; + using UnityEngine; + + public class KeyBindPopup : MonoBehaviour + { + private const string LOCK_ID = "KER_KeyBindPopup"; + private static Rect position = new Rect(Screen.width, Screen.height, 250.0f, 0.0f); + private static bool hasCentred; + private static KeyBindPopup instance; + private readonly Array availableBindings = Enum.GetValues(typeof(KeyCode)); + + /// + /// Gets the delegate to be invoked when accepted button is clicked. + /// + public Action AcceptClicked { get; private set; } + + /// + /// Gets the name of the binding to change. + /// + public string Name { get; private set; } + + /// + /// Gets the selected binding. + /// + public KeyCode Binding { get; private set; } + + /// + /// Gets whether a key bind popup is already open. + /// + public static bool IsOpen + { + get + { + return (instance != null); + } + } + + /// + /// Gets and sets the input lock state. + /// + public bool InputLock + { + get + { + return InputLockManager.GetControlLock(LOCK_ID) != ControlTypes.None; + } + set + { + if (value) + { + InputLockManager.SetControlLock(ControlTypes.All, LOCK_ID); + } + else + { + InputLockManager.SetControlLock(ControlTypes.None, LOCK_ID); + } + } + } + + /// + /// Shows a key bind popup allowing the user to select a key for binding. + /// + public static void Show(string name, KeyCode currentBinding, Action acceptClicked) + { + if (instance == null) + { + instance = new GameObject("SelectKeyBind").AddComponent(); + } + + instance.Name = name; + instance.Binding = currentBinding; + instance.AcceptClicked = acceptClicked; + } + + /// + /// Handles the accept button click event. + /// + public void OnAccept() + { + if (AcceptClicked != null) + { + AcceptClicked.Invoke(Binding); + } + Destroy(gameObject); + } + + /// + /// Handles the cancel button click event. + /// + public void OnCancel() + { + Destroy(gameObject); + } + + /// + /// Called by unity when the component is created. + /// + protected virtual void Awake() + { + if (instance == null) + { + instance = this; + } + else if (instance != this) + { + OnCancel(); + } + } + + /// + /// Called by unity when the component is destroyed. + /// + protected virtual void OnDestroy() + { + InputLock = false; + } + + /// + /// Called by unity each frame to render the GUI. + /// + protected virtual void OnGUI() + { + position = GUILayout.Window(GetInstanceID(), position, RenderWindow, "Select Key Bind", HighLogic.Skin.window).ClampToScreen(); + CentreWindow(); + } + + /// + /// Called by unity every frame. + /// + protected virtual void Update() + { + CentreWindow(); + UpdateBinding(); + UpdateInputLock(); + } + + /// + /// Centres the window on the screen. + /// + private static void CentreWindow() + { + if (hasCentred == false && position.width > 0.0f && position.height > 0.0f) + { + hasCentred = true; + position.center = new Vector2(Screen.width * 0.5f, Screen.height * 0.5f); + } + } + + /// + /// Renders the window content. + /// + private void RenderWindow(int id) + { + GUILayout.Label("Press the desired key to change it."); + + // Binding labels. + GUILayout.BeginVertical(HighLogic.Skin.textArea); + GUILayout.Label("Key Bind: " + Name); + GUILayout.Label("Selected: " + Binding); + if (GUILayout.Button("Clear", HighLogic.Skin.button)) + { + Binding = KeyCode.None; + } + GUILayout.EndVertical(); + + // Window buttons. + GUILayout.BeginHorizontal(); + if (GUILayout.Button("Cancel", HighLogic.Skin.button)) + { + OnCancel(); + } + + if (GUILayout.Button("Accept", HighLogic.Skin.button)) + { + OnAccept(); + } + GUILayout.EndHorizontal(); + + // Make the window to be draggable. + GUI.DragWindow(); + } + + /// + /// Updates the binding selected by the user. + /// + private void UpdateBinding() + { + for (int i = 0; i < availableBindings.Length; ++i) + { + KeyCode keyCode = (KeyCode)availableBindings.GetValue(i); + + if (keyCode == KeyCode.Mouse0) + { + continue; + } + + if (Input.GetKeyDown(keyCode)) + { + if (Input.GetKeyDown(keyCode)) + { + Binding = keyCode; + } + } + } + } + + /// + /// Updates the input lock. + /// + private void UpdateInputLock() + { + bool mouseOver = position.MouseIsOver(); + bool inputLock = InputLock; + + if (mouseOver && inputLock == false) + { + InputLock = true; + } + else if (mouseOver == false && inputLock) + { + InputLock = false; + } + } + } +} --- /dev/null +++ b/KerbalEngineer/KeyBinding/KeyBinder.cs @@ -1,1 +1,255 @@ - +// +// Kerbal Engineer Redux +// +// Copyright (C) 2015 CYBUTEK +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +namespace KerbalEngineer.KeyBinding +{ + using System; + using System.IO; + using Extensions; + using Helpers; + using UnityEngine; + + public class KeyBinder : MonoBehaviour + { + private const string LOCK_ID = "KER_KeyBinder"; + private static readonly string filePath = Path.Combine(EngineerGlobals.SettingsPath, "KeyBinds.xml"); + private static KeyBindingsObject bindings; + private static Rect position = new Rect(Screen.width, Screen.height, 500.0f, 0.0f); + private static bool hasCentred; + + static KeyBinder() + { + Load(); + } + + /// + /// Gets whether the key binder window is open. + /// + public static bool IsOpen { get; private set; } + + /// + /// Gets and sets the key bindings object. + /// + public static KeyBindingsObject Bindings + { + get + { + if (bindings == null) + { + bindings = new KeyBindingsObject(); + } + return bindings; + } + private set + { + if (value != null) + { + bindings = value; + } + } + } + + /// + /// Gets and sets the editor show/hide binding. + /// + public static KeyCode EditorShowHide + { + get + { + return Bindings.EditorShowHide; + } + set + { + Bindings.EditorShowHide = value; + Save(); + } + } + + /// + /// Gets and sets the flight show/hide binding. + /// + public static KeyCode FlightShowHide + { + get + { + return Bindings.FlightShowHide; + } + set + { + Bindings.FlightShowHide = value; + Save(); + } + } + + /// + /// Gets and sets the input lock state. + /// + public bool InputLock + { + get + { + return InputLockManager.GetControlLock(LOCK_ID) != ControlTypes.None; + } + set + { + if (value) + { + InputLockManager.SetControlLock(ControlTypes.All, LOCK_ID); + } + else + { + InputLockManager.SetControlLock(ControlTypes.None, LOCK_ID); + } + } + } + + /// + /// Loads the key bindings from disk. + /// + public static void Load() + { + Bindings = XmlHelper.LoadObject(filePath); + } + + /// + /// Saves the key bindings to disk. + /// + public static void Save() + { + XmlHelper.SaveObject(filePath, Bindings); + } + + /// + /// Shows the key binding window. + /// + public static void Show() + { + if (IsOpen) + { + return; + } + + new GameObject("KeyBinder").AddComponent(); + } + + /// + /// Called by unity when component is created. + /// + protected virtual void Awake() + { + if (IsOpen) + { + Destroy(gameObject); + } + else + { + IsOpen = true; + position.height = 0.0f; + } + } + + /// + /// Called by unity when component is destroyed. + /// + protected virtual void OnDestroy() + { + IsOpen = false; + InputLock = false; + } + + /// + /// Called by unity to draw the GUI. + /// + protected virtual void OnGUI() + { + position = GUILayout.Window(GetInstanceID(), position, RenderWindow, "Kerbal Engineer Redux - Key Bindings", HighLogic.Skin.window).ClampToScreen(); + CentreWindow(); + } + + /// + /// Called by unity every frame. + /// + protected virtual void Update() + { + UpdateInputLock(); + } + + /// + /// Renders a key bind option. + /// + private static void RenderKeyBind(string name, KeyCode currentBinding, Action acceptClicked) + { + GUILayout.BeginHorizontal(); + GUILayout.Label(name); + if (GUILayout.Button(currentBinding.ToString(), HighLogic.Skin.button, GUILayout.Width(100.0f))) + { + KeyBindPopup.Show(name, currentBinding, acceptClicked); + } + GUILayout.EndHorizontal(); + } + + /// + /// Centres the window on screen. + /// + private void CentreWindow() + { + if (hasCentred == false && position.width > 0.0f && position.height > 0.0f) + { + hasCentred = true; + position.center = new Vector2(Screen.width * 0.5f, Screen.height * 0.5f); + } + } + + /// + /// Renders the GUI window contents. + /// + private void RenderWindow(int id) + { + GUILayout.BeginVertical(HighLogic.Skin.textArea); + RenderKeyBind("Editor Show/Hide", EditorShowHide, binding => EditorShowHide = binding); + RenderKeyBind("Flight Show/Hide", FlightShowHide, binding => FlightShowHide = binding); + GUILayout.EndVertical(); + + if (GUILayout.Button("Close", HighLogic.Skin.button)) + { + Destroy(gameObject); + } + + GUI.DragWindow(); + } + + /// + /// Updates the input lock. + /// + private void UpdateInputLock() + { + bool mouseOver = position.MouseIsOver(); + bool inputLock = InputLock; + + if (mouseOver && inputLock == false) + { + InputLock = true; + } + else if (mouseOver == false && inputLock) + { + InputLock = false; + } + } + } +} --- /dev/null +++ b/KerbalEngineer/KeyBinding/KeyBindingsObject.cs @@ -1,1 +1,31 @@ +// +// Kerbal Engineer Redux +// +// Copyright (C) 2015 CYBUTEK +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +namespace KerbalEngineer.KeyBinding +{ + using System.Xml.Serialization; + using UnityEngine; + + public class KeyBindingsObject + { + public KeyCode EditorShowHide { get; set; } + + public KeyCode FlightShowHide { get; set; } + } +} --- a/KerbalEngineer/LogMsg.cs +++ b/KerbalEngineer/LogMsg.cs @@ -15,7 +15,8 @@ public void Flush() { - MonoBehaviour.print(this.buf); + if (this.buf.Length > 0) + MonoBehaviour.print(this.buf); this.buf.Length = 0; } } --- a/KerbalEngineer/TapeDriveAnimator.cs +++ b/KerbalEngineer/TapeDriveAnimator.cs @@ -83,6 +83,8 @@ private bool sceneIsEditor; private float speed; private float targetSpeed; + private Renderer renderer; + private Light light; #endregion @@ -120,6 +122,8 @@ public override void OnStart(StartState state) { + renderer = GetComponent(); + this.random = new Random(); this.StopBakedAnimation(); @@ -167,37 +171,37 @@ if (this.Lights1 != "") { this.lights1Transform = this.part.FindModelTransform(this.Lights1); - this.lights1ShaderOff = this.lights1Transform.renderer.material.shader; + this.lights1ShaderOff = renderer.material.shader; } if (this.Lights2 != "") { this.lights2Transform = this.part.FindModelTransform(this.Lights2); - this.lights2ShaderOff = this.lights2Transform.renderer.material.shader; + this.lights2ShaderOff = renderer.material.shader; } if (this.Lights3 != "") { this.lights3Transform = this.part.FindModelTransform(this.Lights3); - this.lights3ShaderOff = this.lights3Transform.renderer.material.shader; + this.lights3ShaderOff = renderer.material.shader; } if (this.Lights4 != "") { this.lights4Transform = this.part.FindModelTransform(this.Lights4); - this.lights4ShaderOff = this.lights4Transform.renderer.material.shader; + this.lights4ShaderOff = renderer.material.shader; } if (this.Lights5 != "") { this.lights5Transform = this.part.FindModelTransform(this.Lights5); - this.lights5ShaderOff = this.lights5Transform.renderer.material.shader; + this.lights5ShaderOff = renderer.material.shader; } if (this.Lights6 != "") { this.lights6Transform = this.part.FindModelTransform(this.Lights6); - this.lights6ShaderOff = this.lights6Transform.renderer.material.shader; + this.lights6ShaderOff = renderer.material.shader; } this.lightsShaderOn = Shader.Find("Unlit/Texture"); @@ -381,7 +385,7 @@ lightsOn = (this.speed == 0); } - lights.renderer.material.shader = lightsOn ? @on : off; + lights.GetComponent().material.shader = lightsOn ? @on : off; } #endregion --- a/KerbalEngineer/VesselSimulator/EngineSim.cs +++ b/KerbalEngineer/VesselSimulator/EngineSim.cs @@ -273,14 +273,36 @@ HashSet visited = new HashSet(); + public void DumpSourcePartSets(String msg) + { + MonoBehaviour.print("DumpSourcePartSets " + msg); + foreach (int type in sourcePartSets.Keys) + { + MonoBehaviour.print("SourcePartSet for " + ResourceContainer.GetResourceName(type)); + HashSet sourcePartSet = sourcePartSets[type]; + if (sourcePartSet.Count > 0) + { + foreach (PartSim partSim in sourcePartSet) + { + MonoBehaviour.print("Part " + partSim.name + ":" + partSim.partId); + } + } + else + { + MonoBehaviour.print("No parts"); + } + } + } + public bool SetResourceDrains(List allParts, List allFuelLines, HashSet drainingParts) { LogMsg log = null; - + //DumpSourcePartSets("before clear"); foreach (HashSet sourcePartSet in sourcePartSets.Values) { sourcePartSet.Clear(); } + //DumpSourcePartSets("after clear"); for (int index = 0; index < this.resourceConsumptions.Types.Count; index++) { @@ -305,6 +327,7 @@ break; case ResourceFlowMode.ALL_VESSEL: + case ResourceFlowMode.ALL_VESSEL_BALANCE: for (int i = 0; i < allParts.Count; i++) { PartSim aPartSim = allParts[i]; @@ -316,6 +339,7 @@ break; case ResourceFlowMode.STAGE_PRIORITY_FLOW: + case ResourceFlowMode.STAGE_PRIORITY_FLOW_BALANCE: foreach (HashSet stagePartSet in stagePartSets.Values) { @@ -338,20 +362,27 @@ maxStage = stage; } - if (!stagePartSets.TryGetValue(stage, out sourcePartSet)) + HashSet tempPartSet; + if (!stagePartSets.TryGetValue(stage, out tempPartSet)) { - sourcePartSet = new HashSet(); - stagePartSets.Add(stage, sourcePartSet); + tempPartSet = new HashSet(); + stagePartSets.Add(stage, tempPartSet); } - sourcePartSet.Add(aPartSim); - } - - for (int j = 0; j <= maxStage; j++) + tempPartSet.Add(aPartSim); + } + + for (int j = maxStage; j >= 0; j--) { HashSet stagePartSet; if (stagePartSets.TryGetValue(j, out stagePartSet) && stagePartSet.Count > 0) { - sourcePartSet = stagePartSet; + // We have to copy the contents of the set here rather than copying the set reference or + // bad things (tm) happen + foreach (PartSim aPartSim in stagePartSet) + { + sourcePartSet.Add(aPartSim); + } + break; } } break; @@ -364,8 +395,24 @@ log = new LogMsg(); log.buf.AppendLine("Find " + ResourceContainer.GetResourceName(type) + " sources for " + partSim.name + ":" + partSim.partId); } - partSim.GetSourceSet(type, allParts, visited, sourcePartSet, log, ""); + partSim.GetSourceSet(type, PhysicsGlobals.Stack_PriUsesSurf, allParts, visited, sourcePartSet, log, ""); + if (SimManager.logOutput && log != null) + { + MonoBehaviour.print(log.buf); + } + break; + + case ResourceFlowMode.STAGE_STACK_FLOW: + case ResourceFlowMode.STAGE_STACK_FLOW_BALANCE: + visited.Clear(); + if (SimManager.logOutput) + { + log = new LogMsg(); + log.buf.AppendLine("Find " + ResourceContainer.GetResourceName(type) + " sources for " + partSim.name + ":" + partSim.partId); + } + partSim.GetSourceSet(type, true, allParts, visited, sourcePartSet, log, ""); + if (SimManager.logOutput && log != null) { MonoBehaviour.print(log.buf); } @@ -376,11 +423,9 @@ break; } - - if (sourcePartSet.Count > 0) - { - sourcePartSets[type] = sourcePartSet; - if (SimManager.logOutput) + if (SimManager.logOutput) + { + if (sourcePartSet.Count > 0) { log = new LogMsg(); log.buf.AppendLine("Source parts for " + ResourceContainer.GetResourceName(type) + ":"); @@ -391,6 +436,8 @@ MonoBehaviour.print(log.buf); } } + + //DumpSourcePartSets("after " + ResourceContainer.GetResourceName(type)); } // If we don't have sources for all the needed resources then return false without setting up any drains @@ -409,6 +456,7 @@ return false; } } + // Now we set the drains on the members of the sets and update the draining parts set for (int i = 0; i < this.resourceConsumptions.Types.Count; i++) { --- a/KerbalEngineer/VesselSimulator/PartSim.cs +++ b/KerbalEngineer/VesselSimulator/PartSim.cs @@ -42,6 +42,7 @@ public int decoupledInStage; public bool fuelCrossFeed; public List fuelTargets = new List(); + public List surfaceMountFuelTargets = new List(); public bool hasModuleEngines; public bool hasMultiModeEngine; @@ -416,11 +417,7 @@ mass += resources.GetResourceMass(resources.Types[i]); } - if (hasVessel == false && isFairing && currentStage > inverseStage) - { - mass += fairingMass; - } - else if (hasVessel && isFairing && currentStage <= inverseStage) + if (isFairing && currentStage <= inverseStage) { mass -= fairingMass; } @@ -451,7 +448,7 @@ // All functions below this point must not rely on the part member (it may be null) // - public void GetSourceSet(int type, List allParts, HashSet visited, HashSet allSources, LogMsg log, String indent) + public void GetSourceSet(int type, bool includeSurfaceMountedParts, List allParts, HashSet visited, HashSet allSources, LogMsg log, String indent) { if (log != null) { @@ -489,7 +486,29 @@ { if (log != null) log.buf.AppendLine(indent + "Adding fuel target as source (" + partSim.name + ":" + partSim.partId + ")"); - partSim.GetSourceSet(type, allParts, visited, allSources, log, indent); + partSim.GetSourceSet(type, includeSurfaceMountedParts, allParts, visited, allSources, log, indent); + } + } + } + + // check surface mounted fuel targets + if (includeSurfaceMountedParts) + { + for (int i = 0; i < surfaceMountFuelTargets.Count; i++) + { + PartSim partSim = this.surfaceMountFuelTargets[i]; + if (partSim != null) + { + if (visited.Contains(partSim)) + { + if (log != null) log.buf.AppendLine(indent + "Fuel target already visited, skipping (" + partSim.name + ":" + partSim.partId + ")"); + } + else + { + if (log != null) log.buf.AppendLine(indent + "Adding fuel target as source (" + partSim.name + ":" + partSim.partId + ")"); + + partSim.GetSourceSet(type, true, allParts, visited, allSources, log, indent); + } } } } @@ -519,9 +538,7 @@ { if (attachSim.nodeType == AttachNode.NodeType.Stack) { - if ( - !(this.noCrossFeedNodeKey != null && this.noCrossFeedNodeKey.Length > 0 && - attachSim.id.Contains(this.noCrossFeedNodeKey))) + if ((string.IsNullOrEmpty(noCrossFeedNodeKey) == false && attachSim.id.Contains(noCrossFeedNodeKey)) == false) { if (visited.Contains(attachSim.attachedPartSim)) { @@ -531,7 +548,7 @@ { if (log != null) log.buf.AppendLine(indent + "Adding attached part as source (" + attachSim.attachedPartSim.name + ":" + attachSim.attachedPartSim.partId + ")"); - attachSim.attachedPartSim.GetSourceSet(type, allParts, visited, allSources, log, indent); + attachSim.attachedPartSim.GetSourceSet(type, includeSurfaceMountedParts, allParts, visited, allSources, log, indent); } } } @@ -549,7 +566,7 @@ // type was not disabled [Experiment]) and it contains fuel, it returns itself. // Rule 6: If the part is fuel container for searched type of fuel (i.e. it has capability to contain that type of fuel and the fuel // type was not disabled) but it does not contain the requested fuel, it returns empty list. [Experiment] - if (resources.HasType(type) && resourceFlowStates[type] != 0) + if (resources.HasType(type) && resourceFlowStates[type] > 0.0) { if (resources[type] > SimManager.RESOURCE_MIN) { @@ -578,7 +595,7 @@ else { lastCount = allSources.Count; - this.parent.GetSourceSet(type, allParts, visited, allSources, log, indent); + this.parent.GetSourceSet(type, includeSurfaceMountedParts, allParts, visited, allSources, log, indent); if (allSources.Count > lastCount) { if (log != null) log.buf.AppendLine(indent + "Returning " + (allSources.Count - lastCount) + " parent sources (" + this.name + ":" + this.partId + ")"); @@ -681,6 +698,11 @@ if (partSimLookup.TryGetValue(part.parent, out parent)) { if (log != null) log.buf.AppendLine("Parent part is " + parent.name + ":" + parent.partId); + if (part.attachMode == AttachModes.SRF_ATTACH && part.attachRules.srfAttach && part.fuelCrossFeed && part.parent.fuelCrossFeed) + { + if (log != null) log.buf.AppendLine("Added " + name + " to " + parent.name + " surface mounted fuel targets."); + parent.surfaceMountFuelTargets.Add(this); + } } else { --- a/KerbalEngineer/VesselSimulator/Simulation.cs +++ b/KerbalEngineer/VesselSimulator/Simulation.cs @@ -30,6 +30,7 @@ namespace KerbalEngineer.VesselSimulator { + using System.ComponentModel; using CompoundParts; using Extensions; using Helpers; @@ -675,21 +676,28 @@ for (int i = 0; i < this.allParts.Count; i++) { PartSim part = this.allParts[i]; - // If the part has a parent - if (part.parent != null) - { - if (part.isNoPhysics) - { - if (part.parent.isNoPhysics && part.parent.parent != null) - { - part.baseMass = 0d; - part.baseMassForCoM = 0d; - } - else - { - part.parent.baseMassForCoM += part.baseMassForCoM; - part.baseMassForCoM = 0d; - } + + // Check if part should pass it's mass onto its parent. + if (part.isNoPhysics && part.parent != null) + { + PartSim partParent = part.parent; + + // Loop through all parents until a physically significant parent is found. + while (partParent != null) + { + // Check if parent is physically significant. + if (partParent.isNoPhysics == false) + { + // Apply the mass to the parent and remove it from the originating part. + partParent.baseMassForCoM += part.baseMassForCoM; + part.baseMassForCoM = 0.0; + + // Break out of the recursive loop. + break; + } + + // Recursively loop through the parent parts. + partParent = partParent.parent; } } } --- /dev/null +++ b/Output/KerbalEngineer/KerbalEngineer.manifest @@ -1,1 +1,10 @@ +ManifestFileVersion: 0 +AssetBundleManifest: + AssetBundleInfos: + Info_0: + Name: prefabs + Dependencies: {} + Info_1: + Name: images + Dependencies: {} --- a/Output/KerbalEngineer/KerbalEngineer.version +++ b/Output/KerbalEngineer/KerbalEngineer.version @@ -1,17 +1,18 @@ { - "NAME":"Kerbal Engineer Redux 1.0", + "NAME":"Kerbal Engineer Redux", "URL":"http://ksp-avc.cybutek.net/version.php?id=6", "VERSION": { "MAJOR":1, "MINOR":0, - "PATCH":17, - "BUILD":0 + "PATCH":19, + "BUILD":4 }, "KSP_VERSION": { "MAJOR":1, "MINOR":0, - "PATCH":4 + "PATCH":5 } } + --- /dev/null +++ b/Output/KerbalEngineer/images.manifest @@ -1,1 +1,21 @@ +ManifestFileVersion: 0 +CRC: 2833314722 +Hashes: + AssetFileHash: + serializedVersion: 2 + Hash: b45648c25b082800bed1fc56179dfff5 + TypeTreeHash: + serializedVersion: 2 + Hash: 00ffc586b3c4c12c72c7fed589b81235 +HashAppended: 0 +ClassTypes: +- Class: 28 + Script: {instanceID: 0} +- Class: 213 + Script: {instanceID: 0} +Assets: +- Assets/Images/ui-drop-down.psd +- Assets/Images/app-launcher-icon.psd +- Assets/Images/flight-menu-background.psd +Dependencies: [] --- /dev/null +++ b/Output/KerbalEngineer/prefabs.manifest @@ -1,1 +1,45 @@ +ManifestFileVersion: 0 +CRC: 3110848426 +Hashes: + AssetFileHash: + serializedVersion: 2 + Hash: 1222d5da945826ed2afaf4cba65a3f5d + TypeTreeHash: + serializedVersion: 2 + Hash: c49d0f1c41a1b57d6af1061f875f232a +HashAppended: 0 +ClassTypes: +- Class: 1 + Script: {instanceID: 0} +- Class: 21 + Script: {instanceID: 0} +- Class: 28 + Script: {instanceID: 0} +- Class: 48 + Script: {instanceID: 0} +- Class: 114 + Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} +- Class: 114 + Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} +- Class: 114 + Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} +- Class: 114 + Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} +- Class: 114 + Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} +- Class: 114 + Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} +- Class: 115 + Script: {instanceID: 0} +- Class: 128 + Script: {instanceID: 0} +- Class: 213 + Script: {instanceID: 0} +- Class: 222 + Script: {instanceID: 0} +- Class: 224 + Script: {instanceID: 0} +Assets: +- Assets/Prefabs/flight-menu.prefab +Dependencies: [] --- /dev/null +++ b/ProjectSettings/AudioManager.asset @@ -1,1 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 0 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_DisableAudio: 0 --- /dev/null +++ b/ProjectSettings/DynamicsManager.asset @@ -1,1 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Gravity: {x: 0, y: -9.81000042, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_SleepThreshold: .00499999989 + m_DefaultContactOffset: .00999999978 + m_SolverIterationCount: 6 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --- /dev/null +++ b/ProjectSettings/EditorBuildSettings.asset @@ -1,1 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: [] --- /dev/null +++ b/ProjectSettings/EditorSettings.asset @@ -1,1 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 3 + m_ExternalVersionControlSupport: Visible Meta Files + m_SerializationMode: 2 + m_WebSecurityEmulationEnabled: 0 + m_WebSecurityEmulationHostUrl: http://www.mydomain.com/mygame.unity3d + m_DefaultBehaviorMode: 1 + m_SpritePackerMode: 2 + m_SpritePackerPaddingPower: 1 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd + m_ProjectGenerationRootNamespace: --- /dev/null +++ b/ProjectSettings/GraphicsSettings.asset @@ -1,1 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_LegacyDeferred: + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10782, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_LightmapStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDirSeparate: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepDynamicDirSeparate: 1 + m_FogStripping: 0 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 --- /dev/null +++ b/ProjectSettings/InputManager.asset @@ -1,1 +1,296 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: .00100000005 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: .00100000005 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: .00100000005 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: .00100000005 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: .00100000005 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: .00100000005 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: .100000001 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: .100000001 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: .100000001 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: .189999998 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: .189999998 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: .00100000005 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: .00100000005 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: .00100000005 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: .00100000005 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: .00100000005 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: .00100000005 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: .00100000005 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 --- /dev/null +++ b/ProjectSettings/NavMeshAreas.asset @@ -1,1 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshAreas: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 --- /dev/null +++ b/ProjectSettings/NetworkManager.asset @@ -1,1 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!149 &1 +NetworkManager: + m_ObjectHideFlags: 0 + m_DebugLevel: 0 + m_Sendrate: 15 + m_AssetToPrefab: {} --- /dev/null +++ b/ProjectSettings/Physics2DSettings.asset @@ -1,1 +1,26 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Gravity: {x: 0, y: -9.81000042} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: .200000003 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_MinPenetrationForPenalty: .00999999978 + m_BaumgarteScale: .200000003 + m_BaumgarteTimeOfImpactScale: .75 + m_TimeToSleep: .5 + m_LinearSleepTolerance: .00999999978 + m_AngularSleepTolerance: 2 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_ChangeStopsCallbacks: 0 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --- /dev/null +++ b/ProjectSettings/ProjectSettings.asset @@ -1,1 +1,487 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 7 + AndroidProfiler: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + targetResolution: 0 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: New Unity Project + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_ShowUnitySplashScreen: 1 + defaultScreenWidth: 1024 + defaultScreenHeight: 768 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + m_ActiveColorSpace: 0 + m_MTRendering: 1 + m_MobileMTRendering: 0 + m_Stereoscopic3D: 0 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + iosAppInBackgroundBehavior: 0 + displayResolutionDialog: 1 + iosAllowHTTPDownload: 1 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + disableDepthAndStencilBuffers: 0 + defaultIsFullScreen: 1 + defaultIsNativeResolution: 1 + runInBackground: 0 + captureSingleScreen: 0 + Override IPod Music: 0 + Prepare IOS For Recording: 0 + submitAnalytics: 1 + usePlayerLog: 1 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + resizableWindow: 0 + useMacAppStoreValidation: 0 + gpuSkinning: 0 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 0 + macFullscreenMode: 2 + d3d9FullscreenMode: 1 + d3d11FullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + n3dsDisableStereoscopicView: 0 + n3dsEnableSharedListOpt: 1 + n3dsEnableVSync: 0 + xboxOneResolution: 0 + ps3SplashScreen: {fileID: 0} + videoMemoryForVertexBuffers: 0 + psp2PowerMode: 0 + psp2AcquireBGM: 1 + wiiUTVResolution: 0 + wiiUGamePadMSAA: 1 + wiiUSupportsNunchuk: 0 + wiiUSupportsClassicController: 0 + wiiUSupportsBalanceBoard: 0 + wiiUSupportsMotionPlus: 0 + wiiUSupportsProController: 0 + wiiUAllowScreenCapture: 1 + wiiUControllerCount: 0 + m_SupportedAspectRatios: + 4:3: 1 + 5:4: 1 + 16:10: 1 + 16:9: 1 + Others: 1 + bundleIdentifier: com.Company.ProductName + bundleVersion: 1.0 + preloadedAssets: [] + metroEnableIndependentInputSource: 0 + metroEnableLowLatencyPresentationAPI: 0 + xboxOneDisableKinectGpuReservation: 0 + virtualRealitySupported: 0 + productGUID: affd9915876e7bc42a4bf20f2a215263 + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 9 + AndroidPreferredInstallLocation: 1 + aotOptions: + apiCompatibilityLevel: 2 + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + iPhoneBuildNumber: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + preloadShaders: 0 + StripUnusedMeshComponents: 0 + VertexChannelCompressionMask: + serializedVersion: 2 + m_Bits: 238 + iPhoneSdkVersion: 988 + iPhoneTargetOSVersion: 22 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + iPhoneSplashScreen: {fileID: 0} + iPhoneHighResSplashScreen: {fileID: 0} + iPhoneTallHighResSplashScreen: {fileID: 0} + iPhone47inSplashScreen: {fileID: 0} + iPhone55inPortraitSplashScreen: {fileID: 0} + iPhone55inLandscapeSplashScreen: {fileID: 0} + iPadPortraitSplashScreen: {fileID: 0} + iPadHighResPortraitSplashScreen: {fileID: 0} + iPadLandscapeSplashScreen: {fileID: 0} + iPadHighResLandscapeSplashScreen: {fileID: 0} + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSDeviceRequirements: [] + AndroidTargetDevice: 0 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidTVCompatibility: 1 + AndroidIsGame: 1 + androidEnableBanner: 1 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + resolutionDialogBanner: {fileID: 0} + m_BuildTargetIcons: [] + m_BuildTargetBatching: [] + m_BuildTargetGraphicsAPIs: [] + webPlayerTemplate: APPLICATION:Default + m_TemplateCustomTags: {} + wiiUTitleID: 0005000011000000 + wiiUGroupID: 00010000 + wiiUCommonSaveSize: 4096 + wiiUAccountSaveSize: 2048 + wiiUOlvAccessKey: 0 + wiiUTinCode: 0 + wiiUJoinGameId: 0 + wiiUJoinGameModeMask: 0000000000000000 + wiiUCommonBossSize: 0 + wiiUAccountBossSize: 0 + wiiUAddOnUniqueIDs: [] + wiiUMainThreadStackSize: 3072 + wiiULoaderThreadStackSize: 1024 + wiiUSystemHeapSize: 128 + wiiUTVStartupScreen: {fileID: 0} + wiiUGamePadStartupScreen: {fileID: 0} + wiiUProfilerLibPath: + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + locationUsageDescription: + XboxTitleId: + XboxImageXexPath: + XboxSpaPath: + XboxGenerateSpa: 0 + XboxDeployKinectResources: 0 + XboxSplashScreen: {fileID: 0} + xboxEnableSpeech: 0 + xboxAdditionalTitleMemorySize: 0 + xboxDeployKinectHeadOrientation: 0 + xboxDeployKinectHeadPosition: 0 + ps3TitleConfigPath: + ps3DLCConfigPath: + ps3ThumbnailPath: + ps3BackgroundPath: + ps3SoundPath: + ps3NPAgeRating: 12 + ps3TrophyCommId: + ps3NpCommunicationPassphrase: + ps3TrophyPackagePath: + ps3BootCheckMaxSaveGameSizeKB: 128 + ps3TrophyCommSig: + ps3SaveGameSlots: 1 + ps3TrialMode: 0 + ps3VideoMemoryForAudio: 0 + ps3EnableVerboseMemoryStats: 0 + ps3UseSPUForUmbra: 0 + ps3EnableMoveSupport: 1 + ps3DisableDolbyEncoding: 0 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 1 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutResolution: 4 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4EnterButtonAssignment: 1 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4SocialScreenEnabled: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4IncludedModules: [] + monoEnv: + psp2Splashimage: {fileID: 0} + psp2NPTrophyPackPath: + psp2NPSupportGBMorGJP: 0 + psp2NPAgeRating: 12 + psp2NPTitleDatPath: + psp2NPCommsID: + psp2NPCommunicationsID: + psp2NPCommsPassphrase: + psp2NPCommsSig: + psp2ParamSfxPath: + psp2ManualPath: + psp2LiveAreaGatePath: + psp2LiveAreaBackroundPath: + psp2LiveAreaPath: + psp2LiveAreaTrialPath: + psp2PatchChangeInfoPath: + psp2PatchOriginalPackage: + psp2PackagePassword: F69AzBlax3CF3EDNhm3soLBPh71Yexui + psp2KeystoneFile: + psp2MemoryExpansionMode: 0 + psp2DRMType: 0 + psp2StorageType: 0 + psp2MediaCapacity: 0 + psp2DLCConfigPath: + psp2ThumbnailPath: + psp2BackgroundPath: + psp2SoundPath: + psp2TrophyCommId: + psp2TrophyPackagePath: + psp2PackagedResourcesPath: + psp2SaveDataQuota: 10240 + psp2ParentalLevel: 1 + psp2ShortTitle: Not Set + psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF + psp2Category: 0 + psp2MasterVersion: 01.00 + psp2AppVersion: 01.00 + psp2TVBootMode: 0 + psp2EnterButtonAssignment: 2 + psp2TVDisableEmu: 0 + psp2AllowTwitterDialog: 1 + psp2Upgradable: 0 + psp2HealthWarning: 0 + psp2UseLibLocation: 0 + psp2InfoBarOnStartup: 0 + psp2InfoBarColor: 0 + psmSplashimage: {fileID: 0} + spritePackerPolicy: + scriptingDefineSymbols: {} + metroPackageName: New Unity Project + metroPackageLogo: + metroPackageLogo140: + metroPackageLogo180: + metroPackageLogo240: + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: New Unity Project + metroStoreTileLogo80: + metroStoreTileLogo: + metroStoreTileLogo140: + metroStoreTileLogo180: + metroStoreTileWideLogo80: + metroStoreTileWideLogo: + metroStoreTileWideLogo140: + metroStoreTileWideLogo180: + metroStoreTileSmallLogo80: + metroStoreTileSmallLogo: + metroStoreTileSmallLogo140: + metroStoreTileSmallLogo180: + metroStoreSmallTile80: + metroStoreSmallTile: + metroStoreSmallTile140: + metroStoreSmallTile180: + metroStoreLargeTile80: + metroStoreLargeTile: + metroStoreLargeTile140: + metroStoreLargeTile180: + metroStoreSplashScreenImage: + metroStoreSplashScreenImage140: + metroStoreSplashScreenImage180: + metroPhoneAppIcon: + metroPhoneAppIcon140: + metroPhoneAppIcon240: + metroPhoneSmallTile: + metroPhoneSmallTile140: + metroPhoneSmallTile240: + metroPhoneMediumTile: + metroPhoneMediumTile140: + metroPhoneMediumTile240: + metroPhoneWideTile: + metroPhoneWideTile140: + metroPhoneWideTile240: + metroPhoneSplashScreenImage: + metroPhoneSplashScreenImage140: + metroPhoneSplashScreenImage240: + metroTileShortName: + metroCommandLineArgsFile: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 1 + metroTileBackgroundColor: {r: 0, g: 0, b: 0, a: 1} + metroSplashScreenBackgroundColor: {r: 0, g: 0, b: 0, a: 1} + metroSplashScreenUseBackgroundColor: 0 + platformCapabilities: {} + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + metroCompilationOverrides: 1 + blackberryDeviceAddress: + blackberryDevicePassword: + blackberryTokenPath: + blackberryTokenExires: + blackberryTokenAuthor: + blackberryTokenAuthorId: + blackberryCskPassword: + blackberrySaveLogPath: + blackberrySharedPermissions: 0 + blackberryCameraPermissions: 0 + blackberryGPSPermissions: 0 + blackberryDeviceIDPermissions: 0 + blackberryMicrophonePermissions: 0 + blackberryGamepadSupport: 0 + blackberryBuildId: 0 + blackberryLandscapeSplashScreen: {fileID: 0} + blackberryPortraitSplashScreen: {fileID: 0} + blackberrySquareSplashScreen: {fileID: 0} + tizenProductDescription: + tizenProductURL: + tizenSigningProfileName: + tizenGPSPermissions: 0 + tizenMicrophonePermissions: 0 + n3dsUseExtSaveData: 0 + n3dsCompressStaticMem: 1 + n3dsExtSaveDataNumber: 0x12345 + n3dsStackSize: 131072 + n3dsTargetPlatform: 2 + n3dsRegion: 7 + n3dsMediaSize: 0 + n3dsLogoStyle: 3 + n3dsTitle: GameName + n3dsProductCode: + n3dsApplicationId: 0xFF3FF + stvDeviceAddress: + stvProductDescription: + stvProductAuthor: + stvProductAuthorEmail: + stvProductLink: + stvProductCategory: 0 + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneIsContentPackage: 0 + XboxOneEnableGPUVariability: 0 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + intPropertyNames: + - Android::ScriptingBackend + - Metro::ScriptingBackend + - Standalone::ScriptingBackend + - WP8::ScriptingBackend + - WebGL::ScriptingBackend + - WebGL::audioCompressionFormat + - WebGL::exceptionSupport + - WebGL::memorySize + - WebPlayer::ScriptingBackend + - iOS::Architecture + - iOS::EnableIncrementalBuildSupportForIl2cpp + - iOS::ScriptingBackend + Android::ScriptingBackend: 0 + Metro::ScriptingBackend: 2 + Standalone::ScriptingBackend: 0 + WP8::ScriptingBackend: 2 + WebGL::ScriptingBackend: 1 + WebGL::audioCompressionFormat: 4 + WebGL::exceptionSupport: 1 + WebGL::memorySize: 256 + WebPlayer::ScriptingBackend: 0 + iOS::Architecture: 2 + iOS::EnableIncrementalBuildSupportForIl2cpp: 1 + iOS::ScriptingBackend: 1 + boolPropertyNames: + - WebGL::analyzeBuildSize + - WebGL::dataCaching + - WebGL::useEmbeddedResources + - XboxOne::enus + WebGL::analyzeBuildSize: 0 + WebGL::dataCaching: 0 + WebGL::useEmbeddedResources: 0 + XboxOne::enus: 1 + stringPropertyNames: + - WebGL::emscriptenArgs + - WebGL::template + - additionalIl2CppArgs::additionalIl2CppArgs + WebGL::emscriptenArgs: + WebGL::template: APPLICATION:Default + additionalIl2CppArgs::additionalIl2CppArgs: + firstStreamedSceneWithResources: 0 + cloudProjectId: + projectName: + organizationId: + cloudEnabled: 0 --- /dev/null +++ b/ProjectSettings/ProjectVersion.txt @@ -1,1 +1,3 @@ +m_EditorVersion: 5.2.4f1 +m_StandardAssetsVersion: 0 --- /dev/null +++ b/ProjectSettings/QualitySettings.asset @@ -1,1 +1,173 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 5 + m_QualitySettings: + - serializedVersion: 2 + name: Fastest + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 15 + shadowNearPlaneOffset: 2 + shadowCascade2Split: .333333343 + shadowCascade4Split: {x: .0666666701, y: .200000003, z: .466666669} + blendWeights: 1 + textureQuality: 1 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: .300000012 + maximumLODLevel: 0 + particleRaycastBudget: 4 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Fast + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 2 + shadowCascade2Split: .333333343 + shadowCascade4Split: {x: .0666666701, y: .200000003, z: .466666669} + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: .400000006 + maximumLODLevel: 0 + particleRaycastBudget: 16 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Simple + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 2 + shadowCascade2Split: .333333343 + shadowCascade4Split: {x: .0666666701, y: .200000003, z: .466666669} + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: .699999988 + maximumLODLevel: 0 + particleRaycastBudget: 64 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Good + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 2 + shadowCascade2Split: .333333343 + shadowCascade4Split: {x: .0666666701, y: .200000003, z: .466666669} + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1 + maximumLODLevel: 0 + particleRaycastBudget: 256 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Beautiful + pixelLightCount: 3 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 70 + shadowNearPlaneOffset: 2 + shadowCascade2Split: .333333343 + shadowCascade4Split: {x: .0666666701, y: .200000003, z: .466666669} + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1.5 + maximumLODLevel: 0 + particleRaycastBudget: 1024 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Fantastic + pixelLightCount: 4 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 4 + shadowDistance: 150 + shadowNearPlaneOffset: 2 + shadowCascade2Split: .333333343 + shadowCascade4Split: {x: .0666666701, y: .200000003, z: .466666669} + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 2 + maximumLODLevel: 0 + particleRaycastBudget: 4096 + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 2 + BlackBerry: 2 + GLES Emulation: 5 + Nintendo 3DS: 5 + PS3: 5 + PS4: 5 + PSM: 5 + PSP2: 2 + Samsung TV: 2 + Standalone: 5 + Tizen: 2 + WP8: 5 + Web: 5 + WebGL: 3 + Wii U: 5 + Windows Store Apps: 5 + XBOX360: 5 + XboxOne: 5 + iPhone: 2 --- /dev/null +++ b/ProjectSettings/TagManager.asset @@ -1,1 +1,44 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: [] + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 --- /dev/null +++ b/ProjectSettings/TimeManager.asset @@ -1,1 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: .0199999996 + Maximum Allowed Timestep: .333333343 + m_TimeScale: 1 --- /dev/null +++ b/ProjectSettings/UnityAdsSettings.asset @@ -1,1 +1,12 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!292 &1 +UnityAdsSettings: + m_ObjectHideFlags: 0 + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_EnabledPlatforms: 4294967295 + m_IosGameId: + m_AndroidGameId: --- /dev/null +++ b/ProjectSettings/UnityAnalyticsManager.asset @@ -1,1 +1,11 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!303 &1 +UnityAnalyticsManager: + m_ObjectHideFlags: 0 + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_TestEventUrl: + m_TestConfigUrl: