Save/Load and Main Menu Submenus
Redid all of the property panel UI prefabs (oof) Implemented saving and loading of the game state Moved sector generation to sector constructor (along with loading from save file) Entity settings now separate from player settings Player settings (incl. saved run) now statically accessible from game manager Added animations and submenus to the main menu Unified main menu settings and properties panel styles for prefab reusability
This commit is contained in:
parent
549811f403
commit
b6828a975a
63 changed files with 2007 additions and 1158 deletions
|
|
@ -40,7 +40,7 @@ Material:
|
|||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 2800000, guid: 9025249fbeb4b594680d2749b521bb41, type: 3}
|
||||
m_Texture: {fileID: 2800000, guid: 6c9ab17a8574de140969db991b89994f, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
|
|
|
|||
8
Assets/Prefabs/UI/Properties Panel.meta
Normal file
8
Assets/Prefabs/UI/Properties Panel.meta
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 51b106861158ad342aa0ac02a7ed80c3
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -75,10 +75,10 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 12
|
||||
m_Right: 4
|
||||
m_Top: 6
|
||||
m_Bottom: 6
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 4
|
||||
m_Spacing: 4
|
||||
m_ChildForceExpandWidth: 1
|
||||
|
|
@ -200,7 +200,7 @@ RectTransform:
|
|||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 365, y: 0}
|
||||
m_AnchoredPosition: {x: 335, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 1, y: 0.5}
|
||||
--- !u!114 &7661950294707789148
|
||||
|
|
@ -217,6 +217,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
|
|
@ -278,7 +279,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_MinHeight: 24
|
||||
m_PreferredWidth: 0
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: 2
|
||||
|
|
@ -342,7 +343,7 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Color: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
|
|
@ -425,7 +426,7 @@ MonoBehaviour:
|
|||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: Dolor with very long name that forces expand
|
||||
m_text: Dolor
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 53555f7a2d5e745428813f1b1118734f, type: 2}
|
||||
m_sharedMaterial: {fileID: -2804126062856497447, guid: 53555f7a2d5e745428813f1b1118734f,
|
||||
|
|
@ -435,8 +436,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -75,8 +75,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -227,7 +227,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: 28
|
||||
m_MinHeight: 24
|
||||
m_PreferredWidth: 0
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: 2
|
||||
|
|
@ -247,6 +247,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
|
|
@ -285,7 +286,6 @@ GameObject:
|
|||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6566784227922820063}
|
||||
- component: {fileID: 6566784227922820061}
|
||||
- component: {fileID: 1185277543755028150}
|
||||
- component: {fileID: 6566784227922820057}
|
||||
- component: {fileID: 226212844}
|
||||
|
|
@ -317,26 +317,6 @@ RectTransform:
|
|||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &6566784227922820061
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6566784227922820056}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_PreferredWidth: -1
|
||||
m_PreferredHeight: 32
|
||||
m_FlexibleWidth: 1
|
||||
m_FlexibleHeight: -1
|
||||
m_LayoutPriority: 1
|
||||
--- !u!222 &1185277543755028150
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
@ -373,10 +353,10 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 12
|
||||
m_Right: 4
|
||||
m_Top: 6
|
||||
m_Bottom: 6
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 4
|
||||
m_Spacing: 4
|
||||
m_ChildForceExpandWidth: 1
|
||||
|
|
@ -462,8 +442,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -1,80 +1,5 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &1444953513211870612
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1444953513211870613}
|
||||
- component: {fileID: 1444953513211870611}
|
||||
- component: {fileID: 1444953513211870610}
|
||||
m_Layer: 5
|
||||
m_Name: Image
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1444953513211870613
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1444953513211870612}
|
||||
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: 1444953513611246322}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 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: 0.5, y: 0.5}
|
||||
--- !u!222 &1444953513211870611
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1444953513211870612}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!114 &1444953513211870610
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1444953513211870612}
|
||||
m_Enabled: 0
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.8, g: 0.9333333, b: 1, a: 0.09803922}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 61501af80fabaac44ace015a55851277, type: 3}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &1444953513591056482
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
@ -105,7 +30,7 @@ RectTransform:
|
|||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1444953513611246322}
|
||||
m_RootOrder: 1
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
|
|
@ -150,8 +75,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -241,7 +166,6 @@ RectTransform:
|
|||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children:
|
||||
- {fileID: 1444953513211870613}
|
||||
- {fileID: 1444953513591056483}
|
||||
- {fileID: 1444953514355799430}
|
||||
m_Father: {fileID: 1444953514731475974}
|
||||
|
|
@ -304,7 +228,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: 28
|
||||
m_MinHeight: 24
|
||||
m_PreferredWidth: 0
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: 2
|
||||
|
|
@ -324,6 +248,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
|
|
@ -429,8 +354,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -539,7 +464,7 @@ RectTransform:
|
|||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1444953513611246322}
|
||||
m_RootOrder: 2
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90}
|
||||
m_AnchorMin: {x: 1, y: 0.5}
|
||||
m_AnchorMax: {x: 1, y: 0.5}
|
||||
|
|
@ -567,7 +492,7 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Color: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
|
|
@ -645,7 +570,8 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
Label: {fileID: 1444953513817938007}
|
||||
Dropdown: {fileID: 0}
|
||||
Dropdown: {fileID: 1073031607}
|
||||
DropdownLabel: {fileID: 1444953513591056480}
|
||||
--- !u!114 &4632392883281417793
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
@ -659,7 +585,7 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 12
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
|
|
@ -105,6 +105,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
|
|
@ -187,7 +188,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_MinHeight: 24
|
||||
m_PreferredWidth: 0
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: 2
|
||||
|
|
@ -269,8 +270,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -410,10 +411,10 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 12
|
||||
m_Right: 8
|
||||
m_Top: 6
|
||||
m_Bottom: 6
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 4
|
||||
m_Spacing: 4
|
||||
m_ChildForceExpandWidth: 1
|
||||
|
|
@ -475,7 +476,7 @@ RectTransform:
|
|||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 1, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 2, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 24, y: 0}
|
||||
m_Pivot: {x: 1, y: 0.5}
|
||||
--- !u!222 &5145711774446738166
|
||||
|
|
@ -544,6 +545,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
|
|
@ -648,8 +650,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -673,7 +675,7 @@ MonoBehaviour:
|
|||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 4
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
|
|
@ -9,7 +9,6 @@ GameObject:
|
|||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 23155009655760172}
|
||||
- component: {fileID: 23155009655760174}
|
||||
- component: {fileID: 5404697270043232325}
|
||||
- component: {fileID: 6586910564433979167}
|
||||
- component: {fileID: 1618696626055083012}
|
||||
|
|
@ -41,26 +40,6 @@ RectTransform:
|
|||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &23155009655760174
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 23155009655760171}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_PreferredWidth: -1
|
||||
m_PreferredHeight: 32
|
||||
m_FlexibleWidth: 1
|
||||
m_FlexibleHeight: -1
|
||||
m_LayoutPriority: 1
|
||||
--- !u!222 &5404697270043232325
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
@ -96,10 +75,10 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 12
|
||||
m_Right: 4
|
||||
m_Top: 4
|
||||
m_Bottom: 4
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 4
|
||||
m_Spacing: 4
|
||||
m_ChildForceExpandWidth: 1
|
||||
|
|
@ -185,8 +164,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -316,7 +295,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: 28
|
||||
m_MinHeight: 24
|
||||
m_PreferredWidth: 0
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: 2
|
||||
|
|
@ -466,6 +445,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
|
|
@ -644,8 +624,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294111986
|
||||
m_fontColor: {r: 0.95, g: 0.95, b: 0.95, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -159,7 +159,6 @@ GameObject:
|
|||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3301729265155698787}
|
||||
- component: {fileID: 3301729265155698799}
|
||||
- component: {fileID: 3301729265155698785}
|
||||
- component: {fileID: 256436433275418348}
|
||||
- component: {fileID: 308454102}
|
||||
|
|
@ -191,26 +190,6 @@ RectTransform:
|
|||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &3301729265155698799
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3301729265155698788}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_PreferredWidth: -1
|
||||
m_PreferredHeight: 32
|
||||
m_FlexibleWidth: 1
|
||||
m_FlexibleHeight: -1
|
||||
m_LayoutPriority: 1
|
||||
--- !u!222 &3301729265155698785
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
@ -246,10 +225,10 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 12
|
||||
m_Right: 4
|
||||
m_Top: 6
|
||||
m_Bottom: 6
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 4
|
||||
m_Spacing: 4
|
||||
m_ChildForceExpandWidth: 1
|
||||
|
|
@ -335,8 +314,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -446,10 +425,10 @@ RectTransform:
|
|||
m_Father: {fileID: 8626591645481506733}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 1, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: -10, y: 0}
|
||||
m_SizeDelta: {x: -10, y: 8}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &8579295300066914487
|
||||
GameObject:
|
||||
|
|
@ -504,6 +483,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
|
|
@ -554,7 +534,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_MinHeight: 24
|
||||
m_PreferredWidth: 0
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: 2
|
||||
|
|
@ -33,10 +33,10 @@ RectTransform:
|
|||
m_Father: {fileID: 1613450655389604793}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 192.5, y: -24.16}
|
||||
m_SizeDelta: {x: 361, y: 36.32}
|
||||
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.5, y: 0.5}
|
||||
--- !u!222 &1613450655044732637
|
||||
CanvasRenderer:
|
||||
|
|
@ -151,7 +151,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_MinHeight: 24
|
||||
m_PreferredWidth: 0
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: 2
|
||||
|
|
@ -219,12 +219,12 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 12
|
||||
m_Left: 4
|
||||
m_Right: 4
|
||||
m_Top: 6
|
||||
m_Bottom: 6
|
||||
m_Top: 4
|
||||
m_Bottom: 4
|
||||
m_ChildAlignment: 4
|
||||
m_Spacing: 4
|
||||
m_Spacing: 0
|
||||
m_ChildForceExpandWidth: 1
|
||||
m_ChildForceExpandHeight: 1
|
||||
m_ChildControlWidth: 1
|
||||
|
|
@ -76,8 +76,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -150,7 +150,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_MinHeight: 24
|
||||
m_PreferredWidth: 0
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: 3
|
||||
|
|
@ -231,10 +231,10 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 12
|
||||
m_Right: 8
|
||||
m_Top: 6
|
||||
m_Bottom: 6
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 4
|
||||
m_Spacing: 4
|
||||
m_ChildForceExpandWidth: 1
|
||||
|
|
@ -320,8 +320,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -75,8 +75,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -78,8 +78,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -152,7 +152,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_MinHeight: 24
|
||||
m_PreferredWidth: 0
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: 3
|
||||
|
|
@ -231,10 +231,10 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 12
|
||||
m_Right: 4
|
||||
m_Top: 6
|
||||
m_Bottom: 6
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 4
|
||||
m_Spacing: 4
|
||||
m_ChildForceExpandWidth: 1
|
||||
|
|
@ -32,10 +32,10 @@ RectTransform:
|
|||
m_Father: {fileID: 7146463267720429741}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 1, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 8}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &4073014376677579701
|
||||
CanvasRenderer:
|
||||
|
|
@ -106,10 +106,10 @@ RectTransform:
|
|||
m_Father: {fileID: 7146463267720429741}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 1, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_SizeDelta: {x: -10, y: 16}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &2002492103477548874
|
||||
GameObject:
|
||||
|
|
@ -217,10 +217,10 @@ RectTransform:
|
|||
m_Father: {fileID: 7146463267720429741}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: -5, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 1, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: -10, y: 8}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &3491766746367124251
|
||||
GameObject:
|
||||
|
|
@ -255,10 +255,10 @@ RectTransform:
|
|||
m_Father: {fileID: 3222204141728529077}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.635, y: 0}
|
||||
m_AnchorMax: {x: 0.635, y: 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_SizeDelta: {x: 16, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3123360186942093854
|
||||
CanvasRenderer:
|
||||
|
|
@ -305,7 +305,7 @@ MonoBehaviour:
|
|||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3491766746367124251}
|
||||
m_Enabled: 1
|
||||
m_Enabled: 0
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 86710e43de46f6f4bac7c8e50813a599, type: 3}
|
||||
m_Name:
|
||||
|
|
@ -369,7 +369,7 @@ MonoBehaviour:
|
|||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_PreferredWidth: -1
|
||||
m_PreferredHeight: 32
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: 1
|
||||
m_FlexibleHeight: -1
|
||||
m_LayoutPriority: 1
|
||||
|
|
@ -408,10 +408,10 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 12
|
||||
m_Right: 4
|
||||
m_Top: 6
|
||||
m_Bottom: 6
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 4
|
||||
m_Spacing: 4
|
||||
m_ChildForceExpandWidth: 1
|
||||
|
|
@ -487,7 +487,8 @@ MonoBehaviour:
|
|||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: Slider Field
|
||||
m_text: Slider FieldSlider FieldSlider FieldSlider FieldSlider FieldSlider FieldSlider
|
||||
FieldSlider Field
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 53555f7a2d5e745428813f1b1118734f, type: 2}
|
||||
m_sharedMaterial: {fileID: -2804126062856497447, guid: 53555f7a2d5e745428813f1b1118734f,
|
||||
|
|
@ -497,8 +498,8 @@ MonoBehaviour:
|
|||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
rgba: 4294964185
|
||||
m_fontColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
|
|
@ -664,7 +665,7 @@ MonoBehaviour:
|
|||
m_MinValue: 0
|
||||
m_MaxValue: 1
|
||||
m_WholeNumbers: 0
|
||||
m_Value: 0.635
|
||||
m_Value: 1
|
||||
m_OnValueChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
|
|
@ -682,7 +683,7 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_MinHeight: 24
|
||||
m_PreferredWidth: 0
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: 2
|
||||
214
Assets/Prefabs/UI/Properties Panel/Text Button.prefab
Normal file
214
Assets/Prefabs/UI/Properties Panel/Text Button.prefab
Normal file
|
|
@ -0,0 +1,214 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &3462739465108434284
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3462739465108434285}
|
||||
- component: {fileID: 3462739465108434320}
|
||||
- component: {fileID: 3462739465108434287}
|
||||
- component: {fileID: 3462739465108434286}
|
||||
- component: {fileID: 3462739465108434322}
|
||||
- component: {fileID: 2983484326545269840}
|
||||
m_Layer: 5
|
||||
m_Name: Text Button
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3462739465108434285
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3462739465108434284}
|
||||
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: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 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: 0.5, y: 0.5}
|
||||
--- !u!222 &3462739465108434320
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3462739465108434284}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3462739465108434287
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3462739465108434284}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: This is a button!
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 53555f7a2d5e745428813f1b1118734f, type: 2}
|
||||
m_sharedMaterial: {fileID: -2804126062856497447, guid: 53555f7a2d5e745428813f1b1118734f,
|
||||
type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 16
|
||||
m_fontSizeBase: 16
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 256
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 0
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 1
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!114 &3462739465108434286
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3462739465108434284}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 0.85, g: 0.95199996, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 3462739465108434287}
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!114 &3462739465108434322
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3462739465108434284}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: cd434ac0757d3f24f933a753493df22d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
Button: {fileID: 3462739465108434286}
|
||||
Label: {fileID: 3462739465108434287}
|
||||
AnimationDuration: 0.1
|
||||
HoverSpacing: 8
|
||||
--- !u!114 &2983484326545269840
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3462739465108434284}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 58ab24f16cf869f4d88cd351417103a6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
Label: {fileID: 3462739465108434287}
|
||||
Button: {fileID: 3462739465108434286}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c7113183a38d6f84b8ffe6fa7c342896
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -151,7 +151,7 @@ RectTransform:
|
|||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 62236173}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalPosition: {x: 0, y: 0, z: -1}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1124877095}
|
||||
|
|
@ -890,6 +890,115 @@ MeshFilter:
|
|||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 162042368}
|
||||
m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!1 &240056260
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 240056265}
|
||||
- component: {fileID: 240056264}
|
||||
- component: {fileID: 240056263}
|
||||
- component: {fileID: 240056262}
|
||||
- component: {fileID: 240056261}
|
||||
m_Layer: 0
|
||||
m_Name: IconBackground
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &240056261
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 240056260}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 1281fe44325f9b548aa42dc331b17266, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!64 &240056262
|
||||
MeshCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 240056260}
|
||||
m_Material: {fileID: 0}
|
||||
m_IsTrigger: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 4
|
||||
m_Convex: 0
|
||||
m_CookingOptions: 30
|
||||
m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &240056263
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 240056260}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 76476d467e1cd844dacbcbe00105866e, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!33 &240056264
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 240056260}
|
||||
m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!4 &240056265
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 240056260}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 1}
|
||||
m_LocalScale: {x: 0.044999998, y: 0.044999998, z: 3}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 820952285}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &302169896
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
@ -2121,7 +2230,7 @@ Transform:
|
|||
m_LocalScale: {x: 0.015, y: 0.015, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 820952285}
|
||||
m_RootOrder: 1
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &801092330
|
||||
MonoBehaviour:
|
||||
|
|
@ -2212,6 +2321,7 @@ Transform:
|
|||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children:
|
||||
- {fileID: 1124877095}
|
||||
- {fileID: 240056265}
|
||||
- {fileID: 801092329}
|
||||
m_Father: {fileID: 2067021207}
|
||||
m_RootOrder: 0
|
||||
|
|
@ -2563,6 +2673,7 @@ MonoBehaviour:
|
|||
ZonePrototype: {fileID: 1124877096}
|
||||
LinkPrototype: {fileID: 1955533723}
|
||||
IconPrototype: {fileID: 801092330}
|
||||
IconBackgroundPrototype: {fileID: 240056261}
|
||||
ZonePrimaryMaterial: {fileID: 2100000, guid: 6c332e6d0be83ac459c05a7cf5b90ed1, type: 2}
|
||||
ZoneSecondaryMaterial: {fileID: 2100000, guid: 76476d467e1cd844dacbcbe00105866e,
|
||||
type: 2}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,28 @@ using Random = UnityEngine.Random;
|
|||
|
||||
public class ActionGameManager : MonoBehaviour
|
||||
{
|
||||
public static DirectoryInfo GameDataDirectory
|
||||
{
|
||||
get => _gameDataDirectory ??= new DirectoryInfo(Application.dataPath).Parent.CreateSubdirectory("GameData");
|
||||
}
|
||||
private static DirectoryInfo _gameDataDirectory;
|
||||
|
||||
public static PlayerSettings PlayerSettings
|
||||
{
|
||||
get => _playerSettings ??= File.Exists(_playerSettingsFilePath)
|
||||
? MessagePackSerializer.Deserialize<PlayerSettings>(File.ReadAllBytes(_playerSettingsFilePath))
|
||||
: new PlayerSettings {Name = Environment.UserName};
|
||||
}
|
||||
private static PlayerSettings _playerSettings;
|
||||
private static string _playerSettingsFilePath => Path.Combine(GameDataDirectory.FullName, "PlayerSettings.msgpack");
|
||||
public static void SavePlayerSettings()
|
||||
{
|
||||
File.WriteAllBytes(_playerSettingsFilePath, MessagePackSerializer.Serialize(_playerSettings));
|
||||
}
|
||||
|
||||
public static SavedGame Save;
|
||||
|
||||
|
||||
public GameSettings Settings;
|
||||
public string StarterShipTemplate = "Longinus";
|
||||
public float2 Sensitivity;
|
||||
|
|
@ -67,8 +89,6 @@ public class ActionGameManager : MonoBehaviour
|
|||
// private CinemachineFramingTransposer _transposer;
|
||||
// private CinemachineComposer _composer;
|
||||
|
||||
public PlayerSettings PlayerSettings { get; private set; }
|
||||
private DirectoryInfo _filePath;
|
||||
private DirectoryInfo _loadoutPath;
|
||||
private bool _editMode;
|
||||
private float _time;
|
||||
|
|
@ -84,7 +104,6 @@ public class ActionGameManager : MonoBehaviour
|
|||
private Dictionary<Entity, VisibleHostileIndicator> _visibleHostileIndicators = new Dictionary<Entity, VisibleHostileIndicator>();
|
||||
private List<IDisposable> _shipSubscriptions = new List<IDisposable>();
|
||||
private float _severeHeatstrokePhase;
|
||||
private MarkovNameGenerator _nameGenerator;
|
||||
|
||||
public List<Entity> PlayerEntities { get; } = new List<Entity>();
|
||||
public EquippedDockingBay DockingBay { get; private set; }
|
||||
|
|
@ -119,37 +138,16 @@ public class ActionGameManager : MonoBehaviour
|
|||
AkSoundEngine.RegisterGameObj(gameObject);
|
||||
|
||||
ConsoleController.MessageReceiver = this;
|
||||
_filePath = new DirectoryInfo(Application.dataPath).Parent.CreateSubdirectory("GameData");
|
||||
_loadoutPath = _filePath.CreateSubdirectory("Loadouts");
|
||||
_loadoutPath = GameDataDirectory.CreateSubdirectory("Loadouts");
|
||||
|
||||
ItemData = new DatabaseCache();
|
||||
ItemData.Load(Path.Combine(_filePath.FullName, "AetherDB.msgpack"));
|
||||
ItemData.Load(Path.Combine(GameDataDirectory.FullName, "AetherDB.msgpack"));
|
||||
ItemManager = new ItemManager(ItemData, Settings.GameplaySettings, Debug.Log);
|
||||
SectorRenderer.ItemManager = ItemManager;
|
||||
|
||||
FileInfo playerSettingsFile = new FileInfo(Path.Combine(_filePath.FullName, "PlayerSettings.msgpack"));
|
||||
if (!playerSettingsFile.Exists)
|
||||
{
|
||||
File.WriteAllBytes(playerSettingsFile.FullName, MessagePackSerializer.Serialize(Settings.DefaultPlayerSettings));
|
||||
}
|
||||
PlayerSettings = MessagePackSerializer.Deserialize<PlayerSettings>(
|
||||
File.ReadAllBytes(playerSettingsFile.FullName));
|
||||
|
||||
Loadouts.AddRange(_loadoutPath.EnumerateFiles("*.loadout")
|
||||
.Select(fi => MessagePackSerializer.Deserialize<EntityPack>(File.ReadAllBytes(fi.FullName))));
|
||||
|
||||
var names = new HashSet<string>();
|
||||
var lines = NameFile.text.Split('\n');
|
||||
foreach (var line in lines)
|
||||
{
|
||||
foreach(var word in line.ToUpperInvariant().Split(' ', ',', '.', '"'))
|
||||
if (word.Length >= NameGeneratorMinLength && !names.Contains(word))
|
||||
names.Add(word);
|
||||
}
|
||||
|
||||
_nameGenerator = new MarkovNameGenerator(ref ItemManager.Random, names, NameGeneratorOrder, NameGeneratorMinLength, NameGeneratorMaxLength);
|
||||
//var zoneFile = Path.Combine(_filePath.FullName, "Home.zone");
|
||||
|
||||
#region Input Handling
|
||||
|
||||
_input = new AetheriaInput();
|
||||
|
|
@ -525,7 +523,7 @@ public class ActionGameManager : MonoBehaviour
|
|||
var stationParentPos = Zone.GetOrbitPosition(stationParentOrbit);
|
||||
var stationPos = stationParentPos + ItemManager.Random.NextFloat2Direction() * stationParent.GravityWellRadius.Value * .1f;
|
||||
var stationOrbit = Zone.CreateOrbit(stationParentOrbit, stationPos);
|
||||
var station = new OrbitalEntity(ItemManager, Zone, stationHull, stationOrbit.ID);
|
||||
var station = new OrbitalEntity(ItemManager, Zone, stationHull, stationOrbit.ID, Settings.DefaultEntitySettings);
|
||||
Zone.Entities.Add(station);
|
||||
var dockingBayData = ItemData.GetAll<DockingBayData>().First();
|
||||
var dockingBay = ItemManager.CreateInstance(dockingBayData) as EquippableItem;
|
||||
|
|
@ -745,7 +743,7 @@ public class ActionGameManager : MonoBehaviour
|
|||
}
|
||||
|
||||
public void SaveZone() => File.WriteAllBytes(
|
||||
Path.Combine(_filePath.FullName, $"{Zone.Data.Name}.zone"), MessagePackSerializer.Serialize(Zone.Pack()));
|
||||
Path.Combine(_gameDataDirectory.FullName, $"{Zone.Data.Name}.zone"), MessagePackSerializer.Serialize(Zone.Pack()));
|
||||
|
||||
// public void ToggleEditMode()
|
||||
// {
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ public class GameSettings : ScriptableObject
|
|||
public PlanetSettings PlanetSettings;
|
||||
public ZoneGenerationSettings ZoneSettings;
|
||||
public GameplaySettings GameplaySettings;
|
||||
public PlayerSettings DefaultPlayerSettings;
|
||||
public EntitySettings DefaultEntitySettings;
|
||||
public Color HullHitColor;
|
||||
public Color ArmorHitColor;
|
||||
public Color HardpointHitColor;
|
||||
|
|
|
|||
|
|
@ -1,46 +1,192 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
using UnityEngine.UI;
|
||||
using static Unity.Mathematics.math;
|
||||
|
||||
public class MainMenu : MonoBehaviour
|
||||
{
|
||||
public TextMeshProUGUI Title;
|
||||
public Prototype ButtonPrototype;
|
||||
public bool InGame;
|
||||
public Prototype PanelPrototype;
|
||||
public float FadeTime = .5f;
|
||||
public float FadeDistance = 512;
|
||||
public float FadeAlphaExponent = 2;
|
||||
public float FadePositionExponent = 2;
|
||||
|
||||
private List<Prototype> _contents = new List<Prototype>();
|
||||
private (PropertiesPanel panel, CanvasGroup group) _currentMenu, _nextMenu;
|
||||
private bool _fadeFromRight;
|
||||
private float _fadeLerp;
|
||||
private bool _fading;
|
||||
private Vector3 _panelPosition;
|
||||
private DirectoryInfo _saveDirectory;
|
||||
|
||||
void Start()
|
||||
{
|
||||
RegisterResolver.Register();
|
||||
_panelPosition = PanelPrototype.transform.position;
|
||||
|
||||
var panel1 = PanelPrototype.Instantiate<PropertiesPanel>();
|
||||
_currentMenu = (panel1, panel1.GetComponent<CanvasGroup>());
|
||||
|
||||
var panel2 = PanelPrototype.Instantiate<PropertiesPanel>();
|
||||
_nextMenu = (panel2, panel2.GetComponent<CanvasGroup>());
|
||||
|
||||
_currentMenu.panel.gameObject.SetActive(false);
|
||||
_saveDirectory = ActionGameManager.GameDataDirectory.CreateSubdirectory("Saves");
|
||||
|
||||
ShowMain();
|
||||
Fade(true);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (_fading)
|
||||
{
|
||||
_fadeLerp += Time.deltaTime / FadeTime;
|
||||
|
||||
_currentMenu.panel.transform.position =
|
||||
_panelPosition + (_fadeFromRight ? Vector3.left : Vector3.right) * (FadeDistance * pow(_fadeLerp, FadePositionExponent));
|
||||
_nextMenu.panel.transform.position =
|
||||
_panelPosition + (_fadeFromRight ? Vector3.right : Vector3.left) * (FadeDistance * pow(1-_fadeLerp, FadePositionExponent));
|
||||
_currentMenu.group.alpha = pow(1 - _fadeLerp, FadeAlphaExponent);
|
||||
_nextMenu.group.alpha = pow(_fadeLerp, FadeAlphaExponent);
|
||||
|
||||
if (_fadeLerp > 1)
|
||||
{
|
||||
_fading = false;
|
||||
_currentMenu.panel.gameObject.SetActive(false);
|
||||
var temp = _currentMenu;
|
||||
_currentMenu = _nextMenu;
|
||||
_nextMenu = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private string TitleSubtitle(string title, string subtitle) => $"{title}\n<smallcaps><size=50%>{subtitle}";
|
||||
|
||||
private void Fade(bool fromRight)
|
||||
{
|
||||
_nextMenu.panel.gameObject.SetActive(true);
|
||||
_nextMenu.group.alpha = 0;
|
||||
_fading = true;
|
||||
_fadeLerp = 0;
|
||||
_fadeFromRight = fromRight;
|
||||
}
|
||||
|
||||
private void ShowMain()
|
||||
{
|
||||
Title.text = "aetheria\n<smallcaps><size=50%>terminus";
|
||||
Clear();
|
||||
AddButton("Continue", null);
|
||||
AddButton("New Game", null);
|
||||
AddButton("Load Game", null);
|
||||
AddButton("Settings", null);
|
||||
AddButton("Quit", Application.Quit);
|
||||
_nextMenu.panel.Clear();
|
||||
_nextMenu.panel.Title.text = TitleSubtitle("aetheria", "terminus");
|
||||
if (!InGame)
|
||||
{
|
||||
if(ActionGameManager.PlayerSettings.CurrentRun != null)
|
||||
_nextMenu.panel.AddButton("Continue", () => SceneManager.LoadScene("ARPG"));
|
||||
else
|
||||
_nextMenu.panel.AddButton("Continue", null);
|
||||
}
|
||||
_nextMenu.panel.AddButton("New Game",
|
||||
() =>
|
||||
{
|
||||
// TODO: Initialize Run
|
||||
});
|
||||
_nextMenu.panel.AddButton("Settings",
|
||||
() =>
|
||||
{
|
||||
ShowSettings();
|
||||
Fade(true);
|
||||
});
|
||||
_nextMenu.panel.AddButton("Quit", Application.Quit);
|
||||
}
|
||||
|
||||
private void Clear()
|
||||
private void ShowSettings()
|
||||
{
|
||||
foreach(var item in _contents)
|
||||
item.ReturnToPool();
|
||||
_contents.Clear();
|
||||
_nextMenu.panel.Clear();
|
||||
_nextMenu.panel.Title.text = "settings";
|
||||
_nextMenu.panel.AddButton("Gameplay",
|
||||
() =>
|
||||
{
|
||||
ShowGameplaySettings();
|
||||
Fade(true);
|
||||
});
|
||||
_nextMenu.panel.AddButton("Graphics",
|
||||
() =>
|
||||
{
|
||||
ShowGraphicsSettings();
|
||||
Fade(true);
|
||||
});
|
||||
_nextMenu.panel.AddButton("Input",
|
||||
() =>
|
||||
{
|
||||
ShowInputSettings();
|
||||
Fade(true);
|
||||
});
|
||||
_nextMenu.panel.AddButton("Audio",
|
||||
() =>
|
||||
{
|
||||
ShowAudioSettings();
|
||||
Fade(true);
|
||||
});
|
||||
_nextMenu.panel.AddButton("Back",
|
||||
() =>
|
||||
{
|
||||
ShowMain();
|
||||
Fade(false);
|
||||
});
|
||||
}
|
||||
|
||||
private void ShowGameplaySettings()
|
||||
{
|
||||
_nextMenu.panel.Clear();
|
||||
_nextMenu.panel.Title.text = TitleSubtitle("gameplay", "settings");
|
||||
_nextMenu.panel.AddField("Name",
|
||||
() => ActionGameManager.PlayerSettings.Name,
|
||||
s => ActionGameManager.PlayerSettings.Name = s);
|
||||
_nextMenu.panel.AddButton("Back",
|
||||
() =>
|
||||
{
|
||||
ActionGameManager.SavePlayerSettings();
|
||||
ShowSettings();
|
||||
Fade(false);
|
||||
});
|
||||
}
|
||||
|
||||
private void AddButton(string label, Action onPress)
|
||||
private void ShowGraphicsSettings()
|
||||
{
|
||||
var button = ButtonPrototype.Instantiate<Button>();
|
||||
button.GetComponent<TextMeshProUGUI>().text = label;
|
||||
button.onClick.RemoveAllListeners();
|
||||
button.onClick.AddListener(() => onPress?.Invoke());
|
||||
_contents.Add(button.GetComponent<Prototype>());
|
||||
_nextMenu.panel.Clear();
|
||||
_nextMenu.panel.Title.text = TitleSubtitle("graphics", "settings");
|
||||
_nextMenu.panel.AddButton("Back",
|
||||
() =>
|
||||
{
|
||||
ShowSettings();
|
||||
Fade(false);
|
||||
});
|
||||
}
|
||||
|
||||
private void ShowInputSettings()
|
||||
{
|
||||
_nextMenu.panel.Clear();
|
||||
_nextMenu.panel.Title.text = TitleSubtitle("input", "settings");
|
||||
_nextMenu.panel.AddButton("Back",
|
||||
() =>
|
||||
{
|
||||
ShowSettings();
|
||||
Fade(false);
|
||||
});
|
||||
}
|
||||
|
||||
private void ShowAudioSettings()
|
||||
{
|
||||
_nextMenu.panel.Clear();
|
||||
_nextMenu.panel.Title.text = TitleSubtitle("audio", "settings");
|
||||
_nextMenu.panel.AddButton("Back",
|
||||
() =>
|
||||
{
|
||||
ShowSettings();
|
||||
Fade(false);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ public abstract class Entity
|
|||
{
|
||||
public Zone Zone;
|
||||
public MegaCorporation Faction;
|
||||
public PlayerSettings PlayerSettings;
|
||||
public EquippableItem Hull;
|
||||
|
||||
public float3 Position;
|
||||
|
|
@ -79,6 +78,8 @@ public abstract class Entity
|
|||
}
|
||||
}
|
||||
|
||||
public EntitySettings Settings { get; }
|
||||
|
||||
public bool OverrideShutdown { get; set; }
|
||||
|
||||
public bool Active
|
||||
|
|
@ -155,8 +156,9 @@ public abstract class Entity
|
|||
VisibleHostiles.Clear();
|
||||
}
|
||||
|
||||
public Entity(ItemManager itemManager, Zone zone, EquippableItem hull)
|
||||
public Entity(ItemManager itemManager, Zone zone, EquippableItem hull, EntitySettings settings)
|
||||
{
|
||||
Settings = settings;
|
||||
ItemManager = itemManager;
|
||||
Zone = zone;
|
||||
Hull = hull;
|
||||
|
|
@ -997,7 +999,7 @@ public class EquippedItem
|
|||
var temp = Temperature;
|
||||
ThermalPerformance = Data.Performance(temp);
|
||||
DurabilityPerformance = EquippableItem.Durability / Data.Durability;
|
||||
var performanceThreshold = Entity.PlayerSettings?.ShutdownPerformance ?? _itemManager.GameplaySettings.DefaultShutdownPerformance;
|
||||
var performanceThreshold = Entity.Settings.ShutdownPerformance;
|
||||
Wear = (1 - pow(Data.Performance(temp),
|
||||
(1 - pow(_itemManager.CompoundQuality(EquippableItem), _itemManager.GameplaySettings.QualityWearExponent)) *
|
||||
_itemManager.GameplaySettings.ThermalWearExponent)
|
||||
|
|
|
|||
|
|
@ -13,8 +13,17 @@ public static class EntitySerializer
|
|||
{
|
||||
EntityPack pack;
|
||||
if (entity is OrbitalEntity orbital)
|
||||
pack = new OrbitalEntityPack {Orbit = orbital.OrbitData};
|
||||
else pack = new ShipPack();
|
||||
pack = new OrbitalEntityPack
|
||||
{
|
||||
Orbit = orbital.OrbitData
|
||||
};
|
||||
else if (entity is Ship ship)
|
||||
pack = new ShipPack
|
||||
{
|
||||
Position = ship.Position,
|
||||
Direction = ship.Direction
|
||||
};
|
||||
else throw new ArgumentException("Attempted to pack an instance of abstract class Entity!");
|
||||
|
||||
// Filter item behavior collections by those with any persistent behaviors
|
||||
// For each item create an object containing the item position and a list of persistent behaviors
|
||||
|
|
@ -37,7 +46,6 @@ public static class EntitySerializer
|
|||
pack.Armor = entity.Armor;
|
||||
pack.Temperature = entity.Temperature;
|
||||
pack.Conductivity = entity.HullConductivity;
|
||||
var hullData = entity.ItemManager.GetData(entity.Hull) as HullData;
|
||||
pack.Children = entity.Children.Select(Pack).ToArray();
|
||||
return pack;
|
||||
}
|
||||
|
|
@ -51,30 +59,30 @@ public static class EntitySerializer
|
|||
_ => null
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public static Ship Unpack(ItemManager itemManager, Zone zone, ShipPack pack, bool instantiate = false)
|
||||
|
||||
private static Ship Unpack(ItemManager itemManager, Zone zone, ShipPack pack, bool instantiate = false)
|
||||
{
|
||||
var entity = new Ship(itemManager, zone, instantiate ? (EquippableItem) itemManager.Instantiate(pack.Hull) : pack.Hull);
|
||||
var entity = new Ship(itemManager, zone, instantiate ? (EquippableItem) itemManager.Instantiate(pack.Hull) : pack.Hull, pack.Settings);
|
||||
Restore(itemManager, zone, pack, entity, instantiate);
|
||||
return entity;
|
||||
}
|
||||
|
||||
public static OrbitalEntity Unpack(ItemManager itemManager, Zone zone, OrbitalEntityPack pack, bool instantiate = false)
|
||||
private static OrbitalEntity Unpack(ItemManager itemManager, Zone zone, OrbitalEntityPack pack, bool instantiate = false)
|
||||
{
|
||||
var entity = new OrbitalEntity(itemManager, zone, instantiate ? (EquippableItem) itemManager.Instantiate(pack.Hull) : pack.Hull, pack.Orbit);
|
||||
var entity = new OrbitalEntity(itemManager, zone, instantiate ? (EquippableItem) itemManager.Instantiate(pack.Hull) : pack.Hull, pack.Orbit, pack.Settings);
|
||||
Restore(itemManager, zone, pack, entity, instantiate);
|
||||
return entity;
|
||||
}
|
||||
|
||||
public static void Restore(ItemManager itemManager, Zone zone, EntityPack pack, Entity entity, bool instantiate = false)
|
||||
private static void Restore(ItemManager itemManager, Zone zone, EntityPack pack, Entity entity, bool instantiate = false)
|
||||
{
|
||||
entity.Name = pack.Name;
|
||||
entity.Children = pack.Children.Select(c =>
|
||||
{
|
||||
var child = Unpack(itemManager, zone, c, instantiate);
|
||||
child.Parent = entity;
|
||||
return (Entity) child;
|
||||
return child;
|
||||
}).ToList();
|
||||
foreach (var (position, item) in pack.Equipment) entity.TryEquip(instantiate ? (EquippableItem) itemManager.Instantiate(item) : item, position);
|
||||
foreach (var (position, item) in pack.CargoBays) entity.TryEquip(instantiate ? (EquippableItem) itemManager.Instantiate(item) : item, position);
|
||||
|
|
@ -120,12 +128,19 @@ public static class EntitySerializer
|
|||
}
|
||||
|
||||
[MessagePackObject]
|
||||
public class ShipPack : EntityPack { }
|
||||
public class ShipPack : EntityPack
|
||||
{
|
||||
[Key(15)]
|
||||
public float3 Position;
|
||||
|
||||
[Key(16)]
|
||||
public float2 Direction;
|
||||
}
|
||||
|
||||
[MessagePackObject]
|
||||
public class OrbitalEntityPack : EntityPack
|
||||
{
|
||||
[Key(14)]
|
||||
[Key(15)]
|
||||
public Guid Orbit;
|
||||
}
|
||||
|
||||
|
|
@ -173,51 +188,56 @@ public class EntityPack
|
|||
[Key(13)]
|
||||
public EntityPack[] Children;
|
||||
|
||||
[Key(14)]
|
||||
public EntitySettings Settings;
|
||||
|
||||
private int _price;
|
||||
|
||||
public int Price(ItemManager itemManager)
|
||||
{
|
||||
if (_price == 0)
|
||||
if (_price != 0) return _price;
|
||||
|
||||
var hullData = itemManager.GetData(Hull);
|
||||
_price = hullData.Price;
|
||||
|
||||
foreach (var (_, item) in Equipment)
|
||||
{
|
||||
var hullData = itemManager.GetData(Hull);
|
||||
_price = hullData.Price;
|
||||
var itemData = itemManager.GetData(item);
|
||||
_price += itemData.Price;
|
||||
}
|
||||
foreach (var (_, item) in CargoBays)
|
||||
{
|
||||
var itemData = itemManager.GetData(item);
|
||||
_price += itemData.Price;
|
||||
}
|
||||
foreach (var (_, item) in DockingBays)
|
||||
{
|
||||
var itemData = itemManager.GetData(item);
|
||||
_price += itemData.Price;
|
||||
}
|
||||
|
||||
foreach (var (_, item) in Equipment)
|
||||
foreach (var t in CargoContents)
|
||||
{
|
||||
foreach (var (_, item) in t)
|
||||
{
|
||||
var itemData = itemManager.GetData(item);
|
||||
_price += itemData.Price;
|
||||
if (item is SimpleCommodity s)
|
||||
_price += itemData.Price * s.Quantity;
|
||||
else
|
||||
_price += itemData.Price;
|
||||
}
|
||||
foreach (var (_, item) in CargoBays)
|
||||
}
|
||||
|
||||
foreach (var t in DockingBayContents)
|
||||
{
|
||||
foreach (var (_, item) in t)
|
||||
{
|
||||
var itemData = itemManager.GetData(item);
|
||||
_price += itemData.Price;
|
||||
if (item is SimpleCommodity s)
|
||||
_price += itemData.Price * s.Quantity;
|
||||
else
|
||||
_price += itemData.Price;
|
||||
}
|
||||
foreach (var (_, item) in DockingBays)
|
||||
{
|
||||
var itemData = itemManager.GetData(item);
|
||||
_price += itemData.Price;
|
||||
}
|
||||
|
||||
for (var bayIndex = 0; bayIndex < CargoContents.Length; bayIndex++)
|
||||
foreach (var (_, item) in CargoContents[bayIndex])
|
||||
{
|
||||
var itemData = itemManager.GetData(item);
|
||||
if (item is SimpleCommodity s)
|
||||
_price += itemData.Price * s.Quantity;
|
||||
else
|
||||
_price += itemData.Price;
|
||||
}
|
||||
|
||||
for (var bayIndex = 0; bayIndex < DockingBayContents.Length; bayIndex++)
|
||||
foreach (var (_, item) in DockingBayContents[bayIndex])
|
||||
{
|
||||
var itemData = itemManager.GetData(item);
|
||||
if (item is SimpleCommodity s)
|
||||
_price += itemData.Price * s.Quantity;
|
||||
else
|
||||
_price += itemData.Price;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return _price;
|
||||
|
|
|
|||
9
Assets/Scripts/ServerShared/EntitySettings.cs
Normal file
9
Assets/Scripts/ServerShared/EntitySettings.cs
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
using System;
|
||||
using MessagePack;
|
||||
|
||||
[MessagePackObject, Serializable]
|
||||
public class EntitySettings
|
||||
{
|
||||
[Key(0)]
|
||||
public float ShutdownPerformance = .1f;
|
||||
}
|
||||
3
Assets/Scripts/ServerShared/EntitySettings.cs.meta
Normal file
3
Assets/Scripts/ServerShared/EntitySettings.cs.meta
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 26d8ea7e19574688bc73286fbc929359
|
||||
timeCreated: 1615691660
|
||||
|
|
@ -13,7 +13,7 @@ public class OrbitalEntity : Entity
|
|||
{
|
||||
public Guid OrbitData;
|
||||
|
||||
public OrbitalEntity(ItemManager itemManager, Zone zone, EquippableItem hull, Guid orbit) : base(itemManager, zone, hull)
|
||||
public OrbitalEntity(ItemManager itemManager, Zone zone, EquippableItem hull, Guid orbit, EntitySettings settings) : base(itemManager, zone, hull, settings)
|
||||
{
|
||||
OrbitData = orbit;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,9 +4,6 @@ using MessagePack;
|
|||
[MessagePackObject, Serializable]
|
||||
public class PlayerSettings
|
||||
{
|
||||
[Key(0)]
|
||||
public string Name;
|
||||
|
||||
[Key(1)]
|
||||
public float ShutdownPerformance = .25f;
|
||||
[Key(0)] public string Name = "Anonymous";
|
||||
[Key(1)] public SavedGame CurrentRun;
|
||||
}
|
||||
83
Assets/Scripts/ServerShared/SavedGame.cs
Normal file
83
Assets/Scripts/ServerShared/SavedGame.cs
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MessagePack;
|
||||
using Unity.Mathematics;
|
||||
using static Unity.Mathematics.math;
|
||||
|
||||
[MessagePackObject]
|
||||
public class SavedGame
|
||||
{
|
||||
[Key(0)]
|
||||
public SavedZone[] Zones;
|
||||
|
||||
[Key(1)]
|
||||
public Guid[] Factions;
|
||||
|
||||
[Key(2)]
|
||||
public Dictionary<int, int> HomeZones;
|
||||
|
||||
[Key(3)]
|
||||
public Dictionary<int, int> BossZones;
|
||||
|
||||
[Key(4)]
|
||||
public int Entrance;
|
||||
|
||||
[Key(5)]
|
||||
public int Exit;
|
||||
|
||||
[Key(6)]
|
||||
public int CurrentZone;
|
||||
|
||||
[Key(7)]
|
||||
public int CurrentZoneEntity;
|
||||
|
||||
public SavedGame() { }
|
||||
|
||||
public SavedGame(Sector sector)
|
||||
{
|
||||
Factions = sector.HomeZones.Keys.Select(f => f.ID).ToArray();
|
||||
|
||||
HomeZones = sector.HomeZones.ToDictionary(
|
||||
x => Array.IndexOf(Factions, x.Key.ID),
|
||||
x => Array.IndexOf(sector.Zones, x.Value));
|
||||
BossZones = sector.BossZones.ToDictionary(
|
||||
x => Array.IndexOf(Factions, x.Key.ID),
|
||||
x => Array.IndexOf(sector.Zones, x.Value));
|
||||
|
||||
Zones = sector.Zones.Select(zone=> new SavedZone
|
||||
{
|
||||
Name = zone.Name,
|
||||
Position = zone.Position,
|
||||
AdjacentZones = zone.AdjacentZones.Select(az=> Array.IndexOf(sector.Zones, az)).ToArray(),
|
||||
Factions = zone.Factions.Select(f=> Array.IndexOf(Factions, f.ID)).ToArray(),
|
||||
Contents = zone.Contents.Pack(),
|
||||
Owner = Array.IndexOf(Factions, zone.Owner.ID)
|
||||
}).ToArray();
|
||||
|
||||
Entrance = Array.IndexOf(sector.Zones, sector.Entrance);
|
||||
Exit = Array.IndexOf(sector.Zones, sector.Exit);
|
||||
}
|
||||
}
|
||||
|
||||
[MessagePackObject]
|
||||
public class SavedZone
|
||||
{
|
||||
[Key(0)]
|
||||
public string Name;
|
||||
|
||||
[Key(1)]
|
||||
public float2 Position;
|
||||
|
||||
[Key(2)]
|
||||
public int[] AdjacentZones;
|
||||
|
||||
[Key(3)]
|
||||
public int[] Factions;
|
||||
|
||||
[Key(4)]
|
||||
public int Owner;
|
||||
|
||||
[Key(5)]
|
||||
public ZonePack Contents;
|
||||
}
|
||||
3
Assets/Scripts/ServerShared/SavedGame.cs.meta
Normal file
3
Assets/Scripts/ServerShared/SavedGame.cs.meta
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 8996ce0796b84c50afbadabb5edc4c6c
|
||||
timeCreated: 1615670570
|
||||
|
|
@ -2,17 +2,20 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using DataStructures.ViliWonka.Heap;
|
||||
using Unity.Mathematics;
|
||||
using MIConvexHull;
|
||||
using JM.LinqFaster;
|
||||
using Unity.Mathematics;
|
||||
using static Unity.Mathematics.math;
|
||||
using Random = Unity.Mathematics.Random;
|
||||
|
||||
public class Sector
|
||||
{
|
||||
public List<SectorZone> Zones = new List<SectorZone>();
|
||||
public Dictionary<MegaCorporation, SectorZone> HomeZones = new Dictionary<MegaCorporation, SectorZone>();
|
||||
public Dictionary<MegaCorporation, SectorZone> BossZones = new Dictionary<MegaCorporation, SectorZone>();
|
||||
public SectorZone Entrance;
|
||||
public SectorZone Exit;
|
||||
|
||||
public SectorZone[] Zones { get; }
|
||||
public SectorZone Entrance { get; }
|
||||
public SectorZone Exit { get; }
|
||||
|
||||
private SectorZone[] _exitPath;
|
||||
|
||||
|
|
@ -24,6 +27,188 @@ public class Sector
|
|||
}
|
||||
}
|
||||
|
||||
public Sector(DatabaseCache database, SavedGame savedGame)
|
||||
{
|
||||
var factions = savedGame.Factions.Select(database.Get<MegaCorporation>).ToArray();
|
||||
Zones = savedGame.Zones.Select(zone =>
|
||||
{
|
||||
return new SectorZone
|
||||
{
|
||||
Name = zone.Name,
|
||||
Position = zone.Position
|
||||
};
|
||||
}).ToArray();
|
||||
for (var i = 0; i < Zones.Length; i++)
|
||||
{
|
||||
Zones[i].AdjacentZones = savedGame.Zones[i].AdjacentZones.Select(azi => Zones[azi]).ToList();
|
||||
Zones[i].Factions = savedGame.Zones[i].Factions.Select(mi => factions[mi]).ToArray();
|
||||
Zones[i].Owner = factions[savedGame.Zones[i].Owner];
|
||||
}
|
||||
|
||||
HomeZones = savedGame.HomeZones.ToDictionary(
|
||||
x => factions[x.Key],
|
||||
x => Zones[x.Value]);
|
||||
|
||||
BossZones = savedGame.BossZones.ToDictionary(
|
||||
x => factions[x.Key],
|
||||
x => Zones[x.Value]);
|
||||
|
||||
Entrance = Zones[savedGame.Entrance];
|
||||
Exit = Zones[savedGame.Exit];
|
||||
|
||||
CalculateDistanceMatrix();
|
||||
}
|
||||
|
||||
public Sector(SectorGenerationSettings settings, MegaCorporation[] factions, ref Random random, float minLineSeparation = .01f)
|
||||
{
|
||||
var outputSamples = WeightedSampleElimination.GeneratePoints(settings.ZoneCount,
|
||||
settings.CloudDensity,
|
||||
v => (.2f - lengthsq(v - float2(.5f))) * 4);
|
||||
Zones = outputSamples.Select(v => new SectorZone {Position = v}).ToArray();
|
||||
|
||||
#region Link Placement
|
||||
|
||||
// Create a delaunay triangulation to connect adjacent sectors
|
||||
var triangulation = DelaunayTriangulation<Vertex2<SectorZone>, Cell2<SectorZone>>
|
||||
.Create(Zones.Select(z => new Vertex2<SectorZone>(z.Position, z)).ToList(), 1e-5f);
|
||||
var links = new HashSet<(SectorZone, SectorZone)>();
|
||||
foreach(var cell in triangulation.Cells)
|
||||
{
|
||||
if(!links.Contains((cell.Vertices[0].StoredObject, cell.Vertices[1].StoredObject)) &&
|
||||
!links.Contains((cell.Vertices[1].StoredObject, cell.Vertices[0].StoredObject)))
|
||||
links.Add((cell.Vertices[0].StoredObject, cell.Vertices[1].StoredObject));
|
||||
if(!links.Contains((cell.Vertices[1].StoredObject, cell.Vertices[2].StoredObject)) &&
|
||||
!links.Contains((cell.Vertices[2].StoredObject, cell.Vertices[1].StoredObject)))
|
||||
links.Add((cell.Vertices[1].StoredObject, cell.Vertices[2].StoredObject));
|
||||
if(!links.Contains((cell.Vertices[0].StoredObject, cell.Vertices[2].StoredObject)) &&
|
||||
!links.Contains((cell.Vertices[2].StoredObject, cell.Vertices[0].StoredObject)))
|
||||
links.Add((cell.Vertices[0].StoredObject, cell.Vertices[2].StoredObject));
|
||||
}
|
||||
|
||||
foreach (var link in links.ToArray())
|
||||
{
|
||||
foreach (var zone in Zones)
|
||||
{
|
||||
if(zone != link.Item1 && zone != link.Item2)
|
||||
if (AetheriaMath.FindDistanceToSegment(zone.Position, link.Item1.Position, link.Item2.Position, out _) < minLineSeparation)
|
||||
links.Remove(link);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var link in links)
|
||||
{
|
||||
link.Item1.AdjacentZones.Add(link.Item2);
|
||||
link.Item2.AdjacentZones.Add(link.Item1);
|
||||
}
|
||||
|
||||
float LinkWeight((SectorZone, SectorZone) link)
|
||||
{
|
||||
return 1 / saturate(settings.CloudDensity((link.Item1.Position + link.Item2.Position) / 2)) *
|
||||
lengthsq(link.Item1.Position - link.Item2.Position) *
|
||||
(link.Item1.AdjacentZones.Count - 1) * (link.Item2.AdjacentZones.Count - 1);
|
||||
}
|
||||
|
||||
var heap = new MaxHeap<(SectorZone, SectorZone)>(links.Count);
|
||||
foreach(var link in links) heap.PushObj(link, LinkWeight(link));
|
||||
while (heap.Count > settings.LinkDensity * links.Count)
|
||||
{
|
||||
var link = heap.PopObj();
|
||||
if(ConnectedRegion(link.Item1, link.Item1, link.Item2).Contains(link.Item2))
|
||||
{
|
||||
link.Item1.AdjacentZones.Remove(link.Item2);
|
||||
link.Item2.AdjacentZones.Remove(link.Item1);
|
||||
foreach (var secondary in link.Item1.AdjacentZones)
|
||||
{
|
||||
heap.SetValue((link.Item1, secondary), LinkWeight((link.Item1, secondary)));
|
||||
heap.SetValue((secondary, link.Item1), LinkWeight((secondary, link.Item1)));
|
||||
}
|
||||
|
||||
foreach (var secondary in link.Item2.AdjacentZones)
|
||||
{
|
||||
heap.SetValue((link.Item2, secondary), LinkWeight((link.Item2, secondary)));
|
||||
heap.SetValue((secondary, link.Item2), LinkWeight((secondary, link.Item2)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
CalculateDistanceMatrix();
|
||||
|
||||
// Entrance is the most isolated zone (highest total distance to all other zones
|
||||
Entrance = Zones.MaxBy(z => z.Isolation);
|
||||
|
||||
// Exit is the zone furthest from the exit
|
||||
Exit = Zones.MaxBy(z => Exit.Distance[z]);
|
||||
|
||||
// Find all zones on the exit path where removing that zone would disconnect the entrance from the exit
|
||||
// Disregard "corridor" zones with only two adjacent zones
|
||||
var chokePoints = ExitPath
|
||||
.Where(z => z.AdjacentZones.Count > 2 && !ConnectedRegion(Entrance, z).Contains(Exit));
|
||||
|
||||
// Choose some megas to have bosses placed based on whether a boss hull is assigned
|
||||
var bossMegas = factions
|
||||
.Where(m => m.BossHull != Guid.Empty)
|
||||
.Take(settings.BossCount)
|
||||
.ToArray();
|
||||
|
||||
// Place boss zones along the critical path as far apart from each other as possible
|
||||
foreach (var mega in bossMegas)
|
||||
{
|
||||
BossZones[mega] = chokePoints.MaxBy(z =>
|
||||
Exit.Distance[z] * Entrance.Distance[z] *
|
||||
BossZones.Values.Aggregate(1, (i, os) => i * os.Distance[z]));
|
||||
}
|
||||
|
||||
// Place boss mega headquarters such that their sphere of influence encompasses their boss zone
|
||||
// While occupying as much territory as possible
|
||||
foreach (var mega in bossMegas)
|
||||
{
|
||||
HomeZones[mega] = ConnectedRegion(BossZones[mega], mega.InfluenceDistance)
|
||||
.MaxBy(z =>
|
||||
ConnectedRegion(z, mega.InfluenceDistance).Count *
|
||||
HomeZones.Values.Aggregate(1f, (i, os) => i * sqrt(os.Distance[z])));
|
||||
}
|
||||
|
||||
// Place remaining headquarters away from existing megas while also maximizing territory
|
||||
foreach (var mega in factions.Where(m=>!bossMegas.Contains(m)))
|
||||
{
|
||||
HomeZones[mega] = Zones.MaxBy(z =>
|
||||
pow(ConnectedRegion(z, mega.InfluenceDistance).Count, HomeZones.Count) *
|
||||
Exit.Distance[z] * Entrance.Distance[z] *
|
||||
HomeZones.Values.Aggregate(1f, (i, os) => i * sqrt(os.Distance[z])) *
|
||||
BossZones.Values.Aggregate(1f, (i, os) => i * sqrt(os.Distance[z])));
|
||||
}
|
||||
|
||||
// Assign faction presence
|
||||
foreach (var zone in Zones)
|
||||
{
|
||||
// Factions are present in all zones within their sphere of influence
|
||||
zone.Factions = factions
|
||||
.Where(m => zone.Distance[HomeZones[m]] <= m.InfluenceDistance)
|
||||
.ToArray();
|
||||
|
||||
// Owner of a zone is the faction with the nearest headquarters
|
||||
var nearestFaction = factions.MinBy(m => zone.Distance[HomeZones[m]]);
|
||||
if (zone.Distance[HomeZones[nearestFaction]] <= nearestFaction.InfluenceDistance)
|
||||
zone.Owner = nearestFaction;
|
||||
}
|
||||
|
||||
// Generate zone name using the owner's name generator, otherwise assign catalogue ID
|
||||
foreach (var zone in Zones)
|
||||
zone.Name = zone.Owner?.NameGenerator.NextName ?? $"EAC-{random.NextInt(99999).ToString()}";
|
||||
}
|
||||
|
||||
// Cache distance matrix and calculate isolation for every zone (used extensively for placing stuff)
|
||||
private void CalculateDistanceMatrix()
|
||||
{
|
||||
foreach (var zone in Zones)
|
||||
{
|
||||
zone.Distance = ConnectedRegionDistance(zone);
|
||||
zone.Isolation = zone.Distance.Sum(x => x.Value);
|
||||
}
|
||||
}
|
||||
|
||||
class DijkstraVertex
|
||||
{
|
||||
public float Cost;
|
||||
|
|
@ -31,26 +216,6 @@ public class Sector
|
|||
public SectorZone Zone;
|
||||
}
|
||||
|
||||
// public HashSet<SectorZone> ConnectedRegion(SectorZone v, SectorZone ignoreZone = null)
|
||||
// {
|
||||
// var members = new HashSet<SectorZone> {v};
|
||||
// while (true)
|
||||
// {
|
||||
// var lastCount = members.Count;
|
||||
// // For each member, add all vertices that are connected to it but are not already a member
|
||||
// // Also, if there is a zone being ignored, do not traverse across it
|
||||
// foreach (var zone in members.ToArray())
|
||||
// foreach(var adjacentZone in zone.AdjacentZones)
|
||||
// if (!members.Contains(adjacentZone) && !(zone == v && ignoreZone == adjacentZone))
|
||||
// members.Add(adjacentZone);
|
||||
// // If we have stopped finding neighbors, stop traversing
|
||||
// if (members.Count == lastCount)
|
||||
// return members;
|
||||
// }
|
||||
// }
|
||||
|
||||
//public int TotalDistance(SectorZone v) => ConnectedRegionDistance(v).Sum(x => x.distance);
|
||||
|
||||
public Dictionary<SectorZone, int> ConnectedRegionDistance(SectorZone v)
|
||||
{
|
||||
var members = new Dictionary<SectorZone, int> {{v, 0}};
|
||||
|
|
@ -75,11 +240,11 @@ public class Sector
|
|||
|
||||
public HashSet<SectorZone> ConnectedRegion(
|
||||
SectorZone v,
|
||||
SectorZone ignoreLink1,
|
||||
SectorZone ignoreLink2,
|
||||
SectorZone ignoreLinkSource,
|
||||
SectorZone ignoreLinkTarget,
|
||||
int maxDistance = int.MaxValue)
|
||||
{
|
||||
return ConnectedRegion(v, x => x.Item1 != ignoreLink1 || x.Item2 != ignoreLink2, maxDistance);
|
||||
return ConnectedRegion(v, x => x.Item1 != ignoreLinkSource || x.Item2 != ignoreLinkTarget, maxDistance);
|
||||
}
|
||||
|
||||
public HashSet<SectorZone> ConnectedRegion(
|
||||
|
|
@ -99,7 +264,7 @@ public class Sector
|
|||
|
||||
public HashSet<SectorZone> ConnectedRegion(
|
||||
SectorZone v,
|
||||
Predicate<(SectorZone,SectorZone)> linkFilter,
|
||||
Predicate<(SectorZone source, SectorZone target)> linkFilter,
|
||||
int maxDistance = int.MaxValue)
|
||||
{
|
||||
var visited = new HashSet<SectorZone> {v};
|
||||
|
|
@ -160,7 +325,7 @@ public class SectorZone
|
|||
public List<SectorZone> AdjacentZones = new List<SectorZone>();
|
||||
public int Isolation;
|
||||
public Dictionary<SectorZone, int> Distance;
|
||||
public MegaCorporation[] Megas;
|
||||
//public List<MegaCorporation> Megas;
|
||||
public MegaCorporation[] Factions;
|
||||
public MegaCorporation Owner;
|
||||
public Zone Contents;
|
||||
}
|
||||
|
|
@ -1,163 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using DataStructures.ViliWonka.Heap;
|
||||
using MIConvexHull;
|
||||
using Unity.Mathematics;
|
||||
using static Unity.Mathematics.math;
|
||||
using Random = Unity.Mathematics.Random;
|
||||
|
||||
public static class SectorGenerator
|
||||
{
|
||||
public static Sector GenerateSector(SectorGenerationSettings settings, MegaCorporation[] megas, ref Random random, float minLineSeparation = .01f)
|
||||
{
|
||||
var outputSamples = WeightedSampleElimination.GeneratePoints(settings.ZoneCount,
|
||||
settings.CloudDensity,
|
||||
v => (.2f - lengthsq(v - float2(.5f))) * 4);
|
||||
var sector = new Sector();
|
||||
foreach (var v in outputSamples) sector.Zones.Add(new SectorZone {Position = v});
|
||||
|
||||
#region Link Placement
|
||||
|
||||
// Create a delaunay triangulation to connect adjacent sectors
|
||||
var triangulation = DelaunayTriangulation<Vertex2<SectorZone>, Cell2<SectorZone>>
|
||||
.Create(sector.Zones.Select(z => new Vertex2<SectorZone>(z.Position, z)).ToList(), 1e-5f);
|
||||
var links = new HashSet<(SectorZone, SectorZone)>();
|
||||
foreach(var cell in triangulation.Cells)
|
||||
{
|
||||
if(!links.Contains((cell.Vertices[0].StoredObject, cell.Vertices[1].StoredObject)) &&
|
||||
!links.Contains((cell.Vertices[1].StoredObject, cell.Vertices[0].StoredObject)))
|
||||
links.Add((cell.Vertices[0].StoredObject, cell.Vertices[1].StoredObject));
|
||||
if(!links.Contains((cell.Vertices[1].StoredObject, cell.Vertices[2].StoredObject)) &&
|
||||
!links.Contains((cell.Vertices[2].StoredObject, cell.Vertices[1].StoredObject)))
|
||||
links.Add((cell.Vertices[1].StoredObject, cell.Vertices[2].StoredObject));
|
||||
if(!links.Contains((cell.Vertices[0].StoredObject, cell.Vertices[2].StoredObject)) &&
|
||||
!links.Contains((cell.Vertices[2].StoredObject, cell.Vertices[0].StoredObject)))
|
||||
links.Add((cell.Vertices[0].StoredObject, cell.Vertices[2].StoredObject));
|
||||
}
|
||||
|
||||
foreach (var link in links.ToArray())
|
||||
{
|
||||
foreach (var zone in sector.Zones)
|
||||
{
|
||||
if(zone != link.Item1 && zone != link.Item2)
|
||||
if (AetheriaMath.FindDistanceToSegment(zone.Position, link.Item1.Position, link.Item2.Position, out _) < minLineSeparation)
|
||||
links.Remove(link);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var link in links)
|
||||
{
|
||||
link.Item1.AdjacentZones.Add(link.Item2);
|
||||
link.Item2.AdjacentZones.Add(link.Item1);
|
||||
}
|
||||
|
||||
float LinkWeight((SectorZone, SectorZone) link)
|
||||
{
|
||||
return 1 / saturate(settings.CloudDensity((link.Item1.Position + link.Item2.Position) / 2)) *
|
||||
lengthsq(link.Item1.Position - link.Item2.Position) *
|
||||
(link.Item1.AdjacentZones.Count - 1) * (link.Item2.AdjacentZones.Count - 1);
|
||||
}
|
||||
|
||||
var heap = new MaxHeap<(SectorZone, SectorZone)>(links.Count);
|
||||
foreach(var link in links) heap.PushObj(link, LinkWeight(link));
|
||||
while (heap.Count > settings.LinkDensity * links.Count)
|
||||
{
|
||||
var link = heap.PopObj();
|
||||
if(sector.ConnectedRegion(link.Item1, link.Item1, link.Item2).Contains(link.Item2))
|
||||
{
|
||||
link.Item1.AdjacentZones.Remove(link.Item2);
|
||||
link.Item2.AdjacentZones.Remove(link.Item1);
|
||||
foreach (var secondary in link.Item1.AdjacentZones)
|
||||
{
|
||||
heap.SetValue((link.Item1, secondary), LinkWeight((link.Item1, secondary)));
|
||||
heap.SetValue((secondary, link.Item1), LinkWeight((secondary, link.Item1)));
|
||||
}
|
||||
|
||||
foreach (var secondary in link.Item2.AdjacentZones)
|
||||
{
|
||||
heap.SetValue((link.Item2, secondary), LinkWeight((link.Item2, secondary)));
|
||||
heap.SetValue((secondary, link.Item2), LinkWeight((secondary, link.Item2)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
// Cache distance set and calculate isolation for every zone (used extensively for placing stuff)
|
||||
foreach (var zone in sector.Zones)
|
||||
{
|
||||
zone.Distance = sector.ConnectedRegionDistance(zone);
|
||||
zone.Isolation = zone.Distance.Sum(x => x.Value);
|
||||
}
|
||||
|
||||
// Exit is the most isolated zone (highest total distance to all other zones
|
||||
sector.Exit = sector.Zones.MaxBy(z => z.Isolation);
|
||||
|
||||
// Entrance is the zone furthest from the exit
|
||||
sector.Entrance = sector.Zones.MaxBy(z => sector.Exit.Distance[z]);
|
||||
|
||||
// Store exit path in hash set for querying
|
||||
var exitPathSet = new HashSet<SectorZone>(sector.ExitPath);
|
||||
|
||||
// Find all zones on the exit path where removing that zone would disconnect the entrance from the exit
|
||||
// Disregard "corridor" zones with only two adjacent zones
|
||||
var chokePoints = sector.ExitPath
|
||||
.Where(z => z.AdjacentZones.Count > 2 && !sector.ConnectedRegion(sector.Entrance, z).Contains(sector.Exit));
|
||||
|
||||
// Choose some megas to have bosses placed based on whether a boss hull is assigned
|
||||
var bossMegas = megas
|
||||
.Where(m => m.BossHull != Guid.Empty)
|
||||
.Take(settings.BossCount)
|
||||
.ToArray();
|
||||
|
||||
// Place boss zones along the critical path as far apart from each other as possible
|
||||
foreach (var mega in bossMegas)
|
||||
{
|
||||
sector.BossZones[mega] = chokePoints.MaxBy(z =>
|
||||
sector.Exit.Distance[z] * sector.Entrance.Distance[z] *
|
||||
sector.BossZones.Values.Aggregate(1, (i, os) => i * os.Distance[z]));
|
||||
}
|
||||
|
||||
// Place boss mega headquarters such that their sphere of influence encompasses their boss zone
|
||||
// While occupying as much territory as possible
|
||||
foreach (var mega in bossMegas)
|
||||
{
|
||||
sector.HomeZones[mega] = sector
|
||||
.ConnectedRegion(sector.BossZones[mega], mega.InfluenceDistance)
|
||||
.MaxBy(z =>
|
||||
sector.ConnectedRegion(z, mega.InfluenceDistance).Count *
|
||||
sector.HomeZones.Values.Aggregate(1f, (i, os) => i * sqrt(os.Distance[z])));
|
||||
}
|
||||
|
||||
// Place remaining headquarters away from existing megas while also maximizing territory
|
||||
foreach (var mega in megas.Where(m=>!bossMegas.Contains(m)))
|
||||
{
|
||||
sector.HomeZones[mega] = sector.Zones.MaxBy(z =>
|
||||
pow(sector.ConnectedRegion(z, mega.InfluenceDistance).Count, sector.HomeZones.Count) *
|
||||
sector.Exit.Distance[z] * sector.Entrance.Distance[z] *
|
||||
sector.HomeZones.Values.Aggregate(1f, (i, os) => i * sqrt(os.Distance[z])) *
|
||||
sector.BossZones.Values.Aggregate(1f, (i, os) => i * sqrt(os.Distance[z])));
|
||||
}
|
||||
|
||||
// Assign faction presence
|
||||
foreach (var zone in sector.Zones)
|
||||
{
|
||||
// All megas for are present in zones within their sphere of influence
|
||||
zone.Megas = megas
|
||||
.Where(m => zone.Distance[sector.HomeZones[m]] <= m.InfluenceDistance)
|
||||
.ToArray();
|
||||
|
||||
// Owner of a zone is the one with the nearest headquarters
|
||||
var nearestMega = megas.MinBy(m => zone.Distance[sector.HomeZones[m]]);
|
||||
if (zone.Distance[sector.HomeZones[nearestMega]] <= nearestMega.InfluenceDistance)
|
||||
zone.Owner = nearestMega;
|
||||
}
|
||||
|
||||
// Generate zone name using the owner's name generator, otherwise assign catalogue ID
|
||||
foreach (var zone in sector.Zones)
|
||||
zone.Name = zone.Owner?.NameGenerator.NextName ?? $"EAC-{random.NextInt(99999).ToString()}";
|
||||
|
||||
return sector;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6436908b41be47d98391eabca4e57167
|
||||
timeCreated: 1615343010
|
||||
|
|
@ -128,7 +128,7 @@ public class Ship : Entity
|
|||
thruster.Item.Online.Skip(1).Subscribe(b => RecalculateClockwiseTorque());
|
||||
}
|
||||
|
||||
public Ship(ItemManager itemManager, Zone zone, EquippableItem hull) : base(itemManager, zone, hull)
|
||||
public Ship(ItemManager itemManager, Zone zone, EquippableItem hull, EntitySettings settings) : base(itemManager, zone, hull, settings)
|
||||
{
|
||||
void CheckForThruster(EquippedItem item)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,9 +6,11 @@ using System.Collections;
|
|||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class EnumField : MonoBehaviour
|
||||
{
|
||||
public TextMeshProUGUI Label;
|
||||
public FlatFlatButton Dropdown;
|
||||
public Button Dropdown;
|
||||
public TextMeshProUGUI DropdownLabel;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -391,8 +391,8 @@ public class InventoryMenu : MonoBehaviour
|
|||
{
|
||||
PropertiesPanel.Clear();
|
||||
PropertiesPanel.AddField("Shutdown Threshold",
|
||||
() => GameManager.PlayerSettings.ShutdownPerformance,
|
||||
f => GameManager.PlayerSettings.ShutdownPerformance = f,
|
||||
() => GameManager.CurrentEntity.Settings.ShutdownPerformance,
|
||||
f => GameManager.CurrentEntity.Settings.ShutdownPerformance = f,
|
||||
0,
|
||||
1);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -147,6 +147,7 @@ public class PropertiesPanel : MonoBehaviour
|
|||
{
|
||||
var button = Instantiate(PropertyButton, Content ?? transform);
|
||||
button.Label.text = name;
|
||||
button.Button.interactable = onClick != null;
|
||||
button.Button.onClick.AddListener(() => onClick());
|
||||
Properties.Add(button.gameObject);
|
||||
OnPropertyAdded?.Invoke(button.gameObject);
|
||||
|
|
@ -158,6 +159,7 @@ public class PropertiesPanel : MonoBehaviour
|
|||
var button = Instantiate(ButtonField, Content ?? transform);
|
||||
button.Label.text = name;
|
||||
button.ButtonLabel.text = label;
|
||||
button.Button.interactable = onClick != null;
|
||||
button.Button.onClick.AddListener(() => onClick());
|
||||
Properties.Add(button.gameObject);
|
||||
OnPropertyAdded?.Invoke(button.gameObject);
|
||||
|
|
@ -302,7 +304,7 @@ public class PropertiesPanel : MonoBehaviour
|
|||
{
|
||||
var field = Instantiate(EnumField, Content ?? transform);
|
||||
field.Label.text = name;
|
||||
field.Dropdown.OnClick += data =>
|
||||
field.Dropdown.onClick.AddListener(() =>
|
||||
{
|
||||
var selected = read();
|
||||
Dropdown.gameObject.SetActive(true);
|
||||
|
|
@ -314,8 +316,8 @@ public class PropertiesPanel : MonoBehaviour
|
|||
}
|
||||
|
||||
Dropdown.Show((RectTransform) field.Dropdown.transform);
|
||||
};
|
||||
RefreshPropertyValues += () => field.Dropdown.Label.text = enumOptions[read()];
|
||||
});
|
||||
RefreshPropertyValues += () => field.DropdownLabel.text = enumOptions[read()];
|
||||
Properties.Add(field.gameObject);
|
||||
OnPropertyAdded?.Invoke(field.gameObject);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ public class SectorMap : MonoBehaviour
|
|||
public Prototype ZonePrototype;
|
||||
public Prototype LinkPrototype;
|
||||
public Prototype IconPrototype;
|
||||
public Prototype IconBackgroundPrototype;
|
||||
public Material ZonePrimaryMaterial;
|
||||
public Material ZoneSecondaryMaterial;
|
||||
public Material ZoneLinkMaterial;
|
||||
|
|
@ -32,8 +33,7 @@ public class SectorMap : MonoBehaviour
|
|||
public Texture2D HomeIcon;
|
||||
public Prototype LegendPrototype;
|
||||
public float IconDistance = 1;
|
||||
public int ZoneCount = 64;
|
||||
public float LinkDensity = .5f;
|
||||
public float IconBackgroundSize = 3;
|
||||
public float LabelDistance = .4f;
|
||||
|
||||
private Dictionary<MegaCorporation, (RenderTexture influence, Material primaryMaterial, Material secondaryMaterial, Material linkMaterial)> _factionMaterials =
|
||||
|
|
@ -66,7 +66,7 @@ public class SectorMap : MonoBehaviour
|
|||
}
|
||||
|
||||
Settings.NoisePosition = Random.value * 100;
|
||||
var sector = SectorGenerator.GenerateSector(Settings, sectorMegas, ref random);
|
||||
var sector = new Sector(Settings, sectorMegas, ref random);
|
||||
var visitedZones = new HashSet<SectorZone>();
|
||||
Debug.Log($"Found {sector.Zones.Count(z=>!z.AdjacentZones.Any())} orphaned zones!");
|
||||
|
||||
|
|
@ -135,27 +135,55 @@ public class SectorMap : MonoBehaviour
|
|||
var homeMega = sector.HomeZones.Keys.FirstOrDefault(m => sector.HomeZones[m] == zone);
|
||||
if (homeMega != null)
|
||||
{
|
||||
var backgroundInstance = IconBackgroundPrototype.Instantiate<MeshRenderer>();
|
||||
var iconInstance = IconPrototype.Instantiate<MeshRenderer>();
|
||||
|
||||
backgroundInstance.material.SetColor("_TintColor", homeMega.SecondaryColor.ToColor());
|
||||
iconInstance.material.mainTexture = HomeIcon;
|
||||
iconInstance.material.SetColor("_TintColor", homeMega.PrimaryColor.ToColor());
|
||||
|
||||
var backgroundTransform = backgroundInstance.transform;
|
||||
var iconTransform = iconInstance.transform;
|
||||
|
||||
backgroundTransform.SetParent(zoneInstanceTransform);
|
||||
iconTransform.SetParent(zoneInstanceTransform);
|
||||
|
||||
backgroundTransform.localScale = Vector3.one * IconBackgroundSize;
|
||||
iconTransform.localScale = Vector3.one;
|
||||
|
||||
backgroundTransform.localPosition = new Vector3(-linkDirection.x * IconDistance, -linkDirection.y * IconDistance, .5f);
|
||||
iconTransform.localPosition = new Vector3(-linkDirection.x * IconDistance, -linkDirection.y * IconDistance);
|
||||
}
|
||||
|
||||
var bossMega = sector.BossZones.Keys.FirstOrDefault(m => sector.BossZones[m] == zone);
|
||||
if (bossMega != null)
|
||||
{
|
||||
var backgroundInstance = IconBackgroundPrototype.Instantiate<MeshRenderer>();
|
||||
var iconInstance = IconPrototype.Instantiate<MeshRenderer>();
|
||||
|
||||
backgroundInstance.material.SetColor("_TintColor", bossMega.SecondaryColor.ToColor());
|
||||
iconInstance.material.mainTexture = BossIcon;
|
||||
iconInstance.material.SetColor("_TintColor", bossMega.PrimaryColor.ToColor());
|
||||
|
||||
var backgroundTransform = backgroundInstance.transform;
|
||||
var iconTransform = iconInstance.transform;
|
||||
|
||||
backgroundTransform.SetParent(zoneInstanceTransform);
|
||||
iconTransform.SetParent(zoneInstanceTransform);
|
||||
|
||||
backgroundTransform.localScale = Vector3.one * IconBackgroundSize;
|
||||
iconTransform.localScale = Vector3.one;
|
||||
if(homeMega != null)
|
||||
|
||||
if (homeMega != null)
|
||||
{
|
||||
backgroundTransform.localPosition = new Vector3(linkDirection.x * IconDistance, linkDirection.y * IconDistance, .5f);
|
||||
iconTransform.localPosition = new Vector3(linkDirection.x * IconDistance, linkDirection.y * IconDistance);
|
||||
else iconTransform.localPosition = new Vector3(-linkDirection.x * IconDistance, -linkDirection.y * IconDistance);
|
||||
}
|
||||
else
|
||||
{
|
||||
backgroundTransform.localPosition = new Vector3(-linkDirection.x * IconDistance, -linkDirection.y * IconDistance, .5f);
|
||||
iconTransform.localPosition = new Vector3(-linkDirection.x * IconDistance, -linkDirection.y * IconDistance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -167,9 +195,9 @@ public class SectorMap : MonoBehaviour
|
|||
{
|
||||
var instance = zoneInstances[zone];
|
||||
var influence = 0f;
|
||||
if (zone.Megas.Length > 0)
|
||||
if (zone.Factions.Length > 0)
|
||||
{
|
||||
if (zone.Megas.Contains(mega))
|
||||
if (zone.Factions.Contains(mega))
|
||||
{
|
||||
influence = 10;
|
||||
if (zone.Owner != mega)
|
||||
|
|
|
|||
35
Assets/Scripts/UI/TextButton.cs
Normal file
35
Assets/Scripts/UI/TextButton.cs
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
using static Unity.Mathematics.math;
|
||||
|
||||
public class TextButton : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
|
||||
{
|
||||
public Button Button;
|
||||
public TextMeshProUGUI Label;
|
||||
public float AnimationDuration;
|
||||
public float HoverSpacing;
|
||||
|
||||
private float _lerp;
|
||||
private bool _hovering;
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
_lerp = saturate(_lerp + Time.deltaTime / AnimationDuration * (Button.interactable && _hovering ? 1 : -1));
|
||||
Label.characterSpacing = HoverSpacing * _lerp;
|
||||
}
|
||||
|
||||
public void OnPointerEnter(PointerEventData eventData)
|
||||
{
|
||||
_hovering = true;
|
||||
}
|
||||
|
||||
public void OnPointerExit(PointerEventData eventData)
|
||||
{
|
||||
_hovering = false;
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/UI/TextButton.cs.meta
Normal file
11
Assets/Scripts/UI/TextButton.cs.meta
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: cd434ac0757d3f24f933a753493df22d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -358,8 +358,8 @@ public class TradeMenu : MonoBehaviour
|
|||
var hull = GameManager.ItemManager.CreateInstance(data) as EquippableItem;
|
||||
Entity entity;
|
||||
if(data.HullType==HullType.Ship)
|
||||
entity = new Ship(GameManager.ItemManager, GameManager.Zone, hull);
|
||||
else entity = new OrbitalEntity(GameManager.ItemManager, GameManager.Zone, hull, Guid.Empty);
|
||||
entity = new Ship(GameManager.ItemManager, GameManager.Zone, hull, GameManager.Settings.DefaultEntitySettings);
|
||||
else entity = new OrbitalEntity(GameManager.ItemManager, GameManager.Zone, hull, Guid.Empty, GameManager.Settings.DefaultEntitySettings);
|
||||
entity.SetParent(GameManager.DockedEntity);
|
||||
GameManager.PlayerEntities.Add(entity);
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -84,7 +84,7 @@
|
|||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.timeline": "1.2.6"
|
||||
"com.unity.timeline": "1.2.17"
|
||||
},
|
||||
"url": "https://packages.unity.com"
|
||||
},
|
||||
|
|
|
|||
BIN
UserSettings/EditorUserSettings.asset
(Stored with Git LFS)
BIN
UserSettings/EditorUserSettings.asset
(Stored with Git LFS)
Binary file not shown.
Loading…
Reference in a new issue