diff --git a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
index 1a0b40311..52216bab2 100644
--- a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
+++ b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
@@ -66,6 +66,7 @@
+
diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj
index e8ec26883..518d4ced5 100644
--- a/Assembly-CSharp.csproj
+++ b/Assembly-CSharp.csproj
@@ -718,6 +718,7 @@
+
diff --git a/Assets/ItemFilter.cs b/Assets/ItemFilter.cs
new file mode 100644
index 000000000..2f4e3ab87
--- /dev/null
+++ b/Assets/ItemFilter.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using TMPro;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class ItemFilter : MonoBehaviour
+{
+ public TextMeshProUGUI Label;
+ public Button DisableButton;
+
+ public event Action OnDisable;
+ // Start is called before the first frame update
+ void Start()
+ {
+ DisableButton.onClick.AddListener(() =>
+ {
+ GetComponent().ReturnToPool();
+ OnDisable?.Invoke();
+ OnDisable = null;
+ });
+ }
+}
diff --git a/Assets/ItemFilter.cs.meta b/Assets/ItemFilter.cs.meta
new file mode 100644
index 000000000..28239fed5
--- /dev/null
+++ b/Assets/ItemFilter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 84b08c807fa72e340b5b57841640ec13
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Materials/UI/Map Gravity Lines.mat b/Assets/Materials/UI/Map Gravity Lines.mat
index 749d876be..4fb0c25c1 100644
--- a/Assets/Materials/UI/Map Gravity Lines.mat
+++ b/Assets/Materials/UI/Map Gravity Lines.mat
@@ -86,7 +86,7 @@ Material:
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- - _Scale: 0.5
+ - _Scale: 3.2540116
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
diff --git a/Assets/Prefabs/UI/Context Menu Option.prefab b/Assets/Prefabs/UI/Context Menu Option.prefab
index f6681cf31..77cbd95e0 100644
--- a/Assets/Prefabs/UI/Context Menu Option.prefab
+++ b/Assets/Prefabs/UI/Context Menu Option.prefab
@@ -29,7 +29,7 @@ RectTransform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2147126713262799487}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ 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:
@@ -95,6 +95,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
+ m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
@@ -138,7 +139,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_IgnoreLayout: 0
m_MinWidth: -1
- m_MinHeight: 32
+ m_MinHeight: 16
m_PreferredWidth: -1
m_PreferredHeight: -1
m_FlexibleWidth: -1
@@ -266,8 +267,8 @@ MonoBehaviour:
m_faceColor:
serializedVersion: 2
rgba: 4294967295
- m_fontSize: 16
- m_fontSizeBase: 16
+ m_fontSize: 9
+ m_fontSizeBase: 9
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 12
@@ -362,8 +363,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0.5}
m_AnchorMax: {x: 1, y: 0.5}
- m_AnchoredPosition: {x: -2, y: 0}
- m_SizeDelta: {x: 16, y: 16}
+ m_AnchoredPosition: {x: -4, y: 0}
+ m_SizeDelta: {x: 10, y: 16}
m_Pivot: {x: 1, y: 0.5}
--- !u!222 &1986380382041583511
CanvasRenderer:
@@ -395,7 +396,7 @@ MonoBehaviour:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: ef87bbaa6e6f6824fa1b758cc93393d5, type: 3}
m_Type: 0
- m_PreserveAspect: 0
+ m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
diff --git a/Assets/Prefabs/UI/Context Menu.prefab b/Assets/Prefabs/UI/Context Menu.prefab
index 748e9e807..80ec53ea1 100644
--- a/Assets/Prefabs/UI/Context Menu.prefab
+++ b/Assets/Prefabs/UI/Context Menu.prefab
@@ -102,8 +102,8 @@ MonoBehaviour:
ForceDirectionRight: 0
ForcePosition: {x: 0, y: 0, z: 0}
ContentRoot: {fileID: 3452408986885472817}
- OptionHeight: 34
- PaddingHeight: 16
+ OptionHeight: 17
+ PaddingHeight: 10
--- !u!1 &3452408986885472816
GameObject:
m_ObjectHideFlags: 0
diff --git a/Assets/Scenes/ARPG.unity b/Assets/Scenes/ARPG.unity
index b85f18053..577651aed 100644
--- a/Assets/Scenes/ARPG.unity
+++ b/Assets/Scenes/ARPG.unity
@@ -1160,6 +1160,141 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 121030072}
m_CullTransparentMesh: 0
+--- !u!1 &125165634
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 125165635}
+ - component: {fileID: 125165637}
+ - component: {fileID: 125165636}
+ m_Layer: 5
+ m_Name: Target
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &125165635
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 125165634}
+ 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: 1914914798}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 1, y: 1}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: -8, y: -8}
+ m_SizeDelta: {x: 160, y: 24}
+ m_Pivot: {x: 1, y: 1}
+--- !u!114 &125165636
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 125165634}
+ 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: Docking Bay
+ 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: 21.4
+ m_fontSizeBase: 24
+ m_fontWeight: 400
+ m_enableAutoSizing: 1
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_HorizontalAlignment: 1
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_enableWordWrapping: 1
+ 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!222 &125165637
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 125165634}
+ m_CullTransparentMesh: 0
--- !u!1 &125191966
GameObject:
m_ObjectHideFlags: 0
@@ -2866,7 +3001,7 @@ RectTransform:
- {fileID: 831892784}
- {fileID: 461264098}
m_Father: {fileID: 1914914798}
- m_RootOrder: 2
+ m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
@@ -2910,7 +3045,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!224 &236872710
RectTransform:
m_ObjectHideFlags: 0
@@ -5264,6 +5399,162 @@ MonoBehaviour:
CellHitPulseTime: 0.5
CellBackgroundColor: {r: 0, g: 0, b: 0, a: 0.75}
EmptyCells: []
+--- !u!1 &425104907
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 425104908}
+ - component: {fileID: 425104913}
+ - component: {fileID: 425104912}
+ - component: {fileID: 425104911}
+ - component: {fileID: 425104910}
+ - component: {fileID: 425104909}
+ m_Layer: 5
+ m_Name: Foldout
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &425104908
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 425104907}
+ m_LocalRotation: {x: -0, y: -0, z: -0.7071068, w: 0.7071068}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1914914798}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 640, y: -20}
+ m_SizeDelta: {x: 16, y: 16}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &425104909
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 425104907}
+ 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: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, 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: 425104912}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &425104910
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 425104907}
+ 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: 16
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &425104911
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 425104907}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 86710e43de46f6f4bac7c8e50813a599, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_AspectMode: 1
+ m_AspectRatio: 1
+--- !u!114 &425104912
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 425104907}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, 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_Sprite: {fileID: 21300000, guid: ef87bbaa6e6f6824fa1b758cc93393d5, type: 3}
+ m_Type: 0
+ 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!222 &425104913
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 425104907}
+ m_CullTransparentMesh: 0
--- !u!1 &425375562
GameObject:
m_ObjectHideFlags: 0
@@ -6631,13 +6922,15 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
GameManager: {fileID: 1009503729}
- Dropdown: {fileID: 178733681}
+ ContextMenu: {fileID: 1157981993}
NewFilterButton: {fileID: 114477922027825946}
+ FilterPrototype: {fileID: 2505679758530842354}
MinimumSizeFilter: {fileID: 1714353021}
MaximumSizeFilter: {fileID: 236872711}
- ItemList: {fileID: 256526622}
Properties: {fileID: 655315361}
Spreadsheet: {fileID: 234374935}
+ TargetCargoLabel: {fileID: 125165636}
+ FoldoutButton: {fileID: 425104909}
--- !u!222 &522642870
CanvasRenderer:
m_ObjectHideFlags: 0
@@ -8417,7 +8710,7 @@ RectTransform:
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -4, y: 0}
- m_SizeDelta: {x: 126.48, y: -8}
+ m_SizeDelta: {x: 32, y: -8}
m_Pivot: {x: 1, y: 0.5}
--- !u!114 &719842152
MonoBehaviour:
@@ -9343,7 +9636,7 @@ RectTransform:
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -4, y: 0}
- m_SizeDelta: {x: 126.48, y: -8}
+ m_SizeDelta: {x: 32, y: -8}
m_Pivot: {x: 1, y: 0.5}
--- !u!114 &783543866
MonoBehaviour:
@@ -13430,8 +13723,8 @@ MonoBehaviour:
ForceDirectionRight: 0
ForcePosition: {x: 0, y: 0, z: 0}
ContentRoot: {fileID: 1741914910}
- OptionHeight: 34
- PaddingHeight: 16
+ OptionHeight: 17
+ PaddingHeight: 10
--- !u!114 &1157981994
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -14782,7 +15075,7 @@ RectTransform:
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -4, y: 0}
- m_SizeDelta: {x: 126.48, y: -8}
+ m_SizeDelta: {x: 32, y: -8}
m_Pivot: {x: 1, y: 0.5}
--- !u!114 &1355213458
MonoBehaviour:
@@ -18618,7 +18911,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!224 &1714353020
RectTransform:
m_ObjectHideFlags: 0
@@ -20557,6 +20850,8 @@ RectTransform:
m_Children:
- {fileID: 479699686}
- {fileID: 1010025669}
+ - {fileID: 425104908}
+ - {fileID: 125165635}
- {fileID: 234374934}
m_Father: {fileID: 522642868}
m_RootOrder: 1
@@ -25760,6 +26055,8 @@ GameObject:
- component: {fileID: 7608517819157717889}
- component: {fileID: 1114036057222416212}
- component: {fileID: 2505679758530842352}
+ - component: {fileID: 2505679758530842354}
+ - component: {fileID: 2505679758530842353}
m_Layer: 5
m_Name: Type Filter
m_TagString: Untagged
@@ -25787,6 +26084,32 @@ MonoBehaviour:
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 1
+--- !u!114 &2505679758530842353
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2505679758530842351}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 84b08c807fa72e340b5b57841640ec13, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ Label: {fileID: 2505679758219563907}
+ DisableButton: {fileID: 783543866}
+--- !u!114 &2505679758530842354
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2505679758530842351}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 1281fe44325f9b548aa42dc331b17266, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!224 &2851244030680155772
RectTransform:
m_ObjectHideFlags: 0
@@ -26208,7 +26531,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 4, y: 0}
- m_SizeDelta: {x: -8, y: -449}
+ m_SizeDelta: {x: -8, y: -517}
m_Pivot: {x: 0, y: 1}
--- !u!1 &3255828831356619721
GameObject:
diff --git a/Assets/Scripts/ActionGameManager.cs b/Assets/Scripts/ActionGameManager.cs
index 4e14a4138..42fac21d3 100644
--- a/Assets/Scripts/ActionGameManager.cs
+++ b/Assets/Scripts/ActionGameManager.cs
@@ -51,12 +51,14 @@ public class ActionGameManager : MonoBehaviour
private AetheriaInput _input;
private int _zoomLevelIndex;
private Ship _currentShip;
+
// private ShipInput _shipInput;
private float2 _shipYawPitch;
private float3 _viewDirection;
private (HardpointData[] hardpoints, Transform[] barrels, PlaceUIElementWorldspace crosshair)[] ArticulationGroups;
private (TargetLock targetLock, PlaceUIElementWorldspace indicator, Rotate spin)[] LockingIndicators;
public List PlayerShips { get; } = new List();
+ public EquippedDockingBay DockingBay { get; private set; }
public Ship CurrentShip
{
@@ -531,6 +533,7 @@ public class ActionGameManager : MonoBehaviour
var bay = entity.TryDock(_currentShip);
if (bay != null)
{
+ DockingBay = bay;
DockCamera.enabled = true;
FollowCamera.enabled = false;
_currentShip.Active = false;
@@ -576,6 +579,7 @@ public class ActionGameManager : MonoBehaviour
else if (_currentShip.Parent.TryUndock(_currentShip))
{
Menu.gameObject.SetActive(false);
+ DockingBay = null;
_currentShip.Active = true;
//_shipInput = new ShipInput(_input.Player, _currentShip);
DockCamera.enabled = false;
diff --git a/Assets/Scripts/GuidedProjectileManager.cs b/Assets/Scripts/GuidedProjectileManager.cs
index 37dafd406..2b688fec5 100644
--- a/Assets/Scripts/GuidedProjectileManager.cs
+++ b/Assets/Scripts/GuidedProjectileManager.cs
@@ -26,6 +26,6 @@ public class GuidedProjectileManager : MonoBehaviour
p.LiftCurve = data.LiftCurve.ToCurve();
p.ThrustCurve = data.ThrustCurve.ToCurve();
p.Thrust = source.Entity.ItemManager.Evaluate(data.Thrust, item.EquippableItem, source.Entity);
- p.TopSpeed = source.Entity.ItemManager.Evaluate(data.MissileSpeed, item.EquippableItem, source.Entity);
+ p.TopSpeed = source.Entity.ItemManager.Evaluate(data.Velocity, item.EquippableItem, source.Entity);
}
}
diff --git a/Assets/Scripts/ServerShared/Behaviors/EnergyDraw.cs b/Assets/Scripts/ServerShared/Behaviors/EnergyDraw.cs
index d4b256600..fd49a3c0a 100644
--- a/Assets/Scripts/ServerShared/Behaviors/EnergyDraw.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/EnergyDraw.cs
@@ -11,7 +11,7 @@ using Newtonsoft.Json;
public class EnergyDrawData : BehaviorData
{
[InspectableField, JsonProperty("draw"), Key(1), RuntimeInspectable]
- public PerformanceStat Draw = new PerformanceStat();
+ public PerformanceStat EnergyDraw = new PerformanceStat();
[InspectableField, JsonProperty("perSecond"), Key(2)]
public bool PerSecond;
@@ -42,7 +42,7 @@ public class EnergyDraw : IBehavior
public bool Execute(float delta)
{
- Entity.Energy -= Context.Evaluate(_data.Draw, Item.EquippableItem, Entity) * (_data.PerSecond ? delta : 1);
+ Entity.Energy -= Context.Evaluate(_data.EnergyDraw, Item.EquippableItem, Entity) * (_data.PerSecond ? delta : 1);
return true;
}
}
\ No newline at end of file
diff --git a/Assets/Scripts/ServerShared/Behaviors/Launcher.cs b/Assets/Scripts/ServerShared/Behaviors/Launcher.cs
index c284e4e0e..4ade07535 100644
--- a/Assets/Scripts/ServerShared/Behaviors/Launcher.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/Launcher.cs
@@ -27,8 +27,8 @@ public class LauncherData : InstantWeaponData
[InspectableField, JsonProperty("launchSpeed"), Key(14)]
public PerformanceStat LaunchSpeed = new PerformanceStat();
- [InspectableField, JsonProperty("missileSpeed"), Key(15)]
- public PerformanceStat MissileSpeed = new PerformanceStat();
+ [InspectableField, JsonProperty("missileSpeed"), Key(15), RuntimeInspectable]
+ public PerformanceStat Velocity = new PerformanceStat();
public override IBehavior CreateInstance(ItemManager context, Entity entity, EquippedItem item)
{
diff --git a/Assets/Scripts/ServerShared/Behaviors/ProjectileWeapon.cs b/Assets/Scripts/ServerShared/Behaviors/ProjectileWeapon.cs
index 9e6488a34..992034553 100644
--- a/Assets/Scripts/ServerShared/Behaviors/ProjectileWeapon.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/ProjectileWeapon.cs
@@ -9,13 +9,13 @@ using Newtonsoft.Json;
[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn)]
public class ProjectileWeaponData : InstantWeaponData
{
- [InspectableField, JsonProperty("spread"), Key(9)]
+ [InspectableField, JsonProperty("spread"), Key(9), RuntimeInspectable]
public PerformanceStat Spread = new PerformanceStat();
[InspectableField, JsonProperty("bulletInherit"), Key(10)]
public float Inherit;
- [InspectableField, JsonProperty("bulletVelocity"), Key(11)]
+ [InspectableField, JsonProperty("bulletVelocity"), Key(11), RuntimeInspectable]
public PerformanceStat Velocity = new PerformanceStat();
public override IBehavior CreateInstance(ItemManager context, Entity entity, EquippedItem item)
diff --git a/Assets/Scripts/ServerShared/Behaviors/TargetLock.cs b/Assets/Scripts/ServerShared/Behaviors/TargetLock.cs
index 95ee83517..6291769fa 100644
--- a/Assets/Scripts/ServerShared/Behaviors/TargetLock.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/TargetLock.cs
@@ -12,18 +12,18 @@ using static Unity.Mathematics.math;
public class TargetLockData : BehaviorData
{
[InspectableField, JsonProperty("speed"), Key(1), RuntimeInspectable]
- public PerformanceStat Speed = new PerformanceStat();
+ public PerformanceStat LockSpeed = new PerformanceStat();
- [InspectableField, JsonProperty("sensorImpact"), Key(2), RuntimeInspectable]
+ [InspectableField, JsonProperty("sensorImpact"), Key(2)]
public PerformanceStat SensorImpact = new PerformanceStat();
[InspectableField, JsonProperty("threshold"), Key(3), RuntimeInspectable]
- public PerformanceStat Threshold = new PerformanceStat();
+ public PerformanceStat LockAngle = new PerformanceStat();
- [InspectableField, JsonProperty("directionImpact"), Key(4), RuntimeInspectable]
+ [InspectableField, JsonProperty("directionImpact"), Key(4)]
public PerformanceStat DirectionImpact = new PerformanceStat();
- [InspectableField, JsonProperty("decay"), Key(5), RuntimeInspectable]
+ [InspectableField, JsonProperty("decay"), Key(5)]
public PerformanceStat Decay = new PerformanceStat();
public override IBehavior CreateInstance(ItemManager context, Entity entity, EquippedItem item)
@@ -75,9 +75,9 @@ public class TargetLock : IBehavior, IAlwaysUpdatedBehavior
}
if (Entity.Target.Value != null)
{
- Speed = Context.Evaluate(_data.Speed, Item.EquippableItem, Entity);
+ Speed = Context.Evaluate(_data.LockSpeed, Item.EquippableItem, Entity);
SensorImpact = Context.Evaluate(_data.SensorImpact, Item.EquippableItem, Entity);
- Threshold = Context.Evaluate(_data.Threshold, Item.EquippableItem, Entity);
+ Threshold = Context.Evaluate(_data.LockAngle, Item.EquippableItem, Entity);
DirectionImpact = Context.Evaluate(_data.DirectionImpact, Item.EquippableItem, Entity);
Decay = Context.Evaluate(_data.Decay, Item.EquippableItem, Entity);
diff --git a/Assets/Scripts/ServerShared/Behaviors/Thruster.cs b/Assets/Scripts/ServerShared/Behaviors/Thruster.cs
index 2ad27536b..6bc73ec0c 100644
--- a/Assets/Scripts/ServerShared/Behaviors/Thruster.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/Thruster.cs
@@ -13,10 +13,10 @@ public class ThrusterData : BehaviorData
[InspectableField, JsonProperty("thrust"), Key(1), RuntimeInspectable]
public PerformanceStat Thrust = new PerformanceStat();
- [InspectableField, JsonProperty("visibility"), Key(2)]
+ [InspectableField, JsonProperty("visibility"), Key(2), RuntimeInspectable]
public PerformanceStat Visibility = new PerformanceStat();
- [InspectableField, JsonProperty("heat"), Key(3)]
+ [InspectableField, JsonProperty("heat"), Key(3), RuntimeInspectable]
public PerformanceStat Heat = new PerformanceStat();
[InspectablePrefab, JsonProperty("Particles"), Key(4)]
diff --git a/Assets/Scripts/ServerShared/Behaviors/Weapon.cs b/Assets/Scripts/ServerShared/Behaviors/Weapon.cs
index 7612f1983..cc9e53406 100644
--- a/Assets/Scripts/ServerShared/Behaviors/Weapon.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/Weapon.cs
@@ -8,32 +8,32 @@ using Newtonsoft.Json;
[Union(0, typeof(ProjectileWeaponData)),
Union(1, typeof(LauncherData)),
- Union(2, typeof(ConstantWeaponData))]
+ Union(2, typeof(ConstantWeaponData)), RuntimeInspectable]
public abstract class WeaponData : BehaviorData
{
- [InspectableField, JsonProperty("damageType"), Key(1)]
+ [InspectableField, JsonProperty("damageType"), Key(1), RuntimeInspectable]
public DamageType DamageType;
- [InspectableField, JsonProperty("damage"), Key(2)]
+ [InspectableField, JsonProperty("damage"), Key(2), RuntimeInspectable]
public PerformanceStat Damage = new PerformanceStat();
- [RangedFloatInspectable(0,1), JsonProperty("penetration"), Key(3)]
+ [RangedFloatInspectable(0,1), JsonProperty("penetration"), Key(3), RuntimeInspectable]
public PerformanceStat Penetration = new PerformanceStat();
[RangedFloatInspectable(0,1), JsonProperty("damageSpread"), Key(4)]
public PerformanceStat DamageSpread = new PerformanceStat();
- [InspectableField, JsonProperty("range"), Key(5)]
+ [InspectableField, JsonProperty("range"), Key(5), RuntimeInspectable]
public PerformanceStat Range = new PerformanceStat();
[InspectablePrefab, JsonProperty("effect"), Key(6)]
public string EffectPrefab;
}
-[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn)]
+[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn), RuntimeInspectable]
public abstract class InstantWeaponData : WeaponData
{
- [InspectableField, JsonProperty("burstCount"), Key(7)]
+ [InspectableField, JsonProperty("burstCount"), Key(7), RuntimeInspectable]
public int BurstCount;
[InspectableField, JsonProperty("burstTime"), Key(8)]
diff --git a/Assets/Scripts/ServerShared/Extensions.cs b/Assets/Scripts/ServerShared/Extensions.cs
index 5254b165f..b867cc2fe 100644
--- a/Assets/Scripts/ServerShared/Extensions.cs
+++ b/Assets/Scripts/ServerShared/Extensions.cs
@@ -109,14 +109,22 @@ public static class Extensions
);
}
+ public static string FormatTypeName(this string typeName)
+ {
+ return (typeName.EndsWith("Data")
+ ? typeName.Substring(0, typeName.Length - 4)
+ : typeName).SplitCamelCase();
+ }
+
public static string SignificantDigits(this float d, int digits=10)
{
- int magnitude = (d == 0.0f) ? 0 : (int)Math.Floor(Math.Log10(Math.Abs(d))) + 1;
+ int magnitude = d == 0.0f ? 0 : (int)Math.Floor(Math.Log10(Math.Abs(d))) + 1;
digits -= magnitude;
if (digits < 0)
digits = 0;
- string fmt = "f" + digits.ToString();
- return d.ToString(fmt);
+ string fmt = "f" + digits;
+ string strdec = d.ToString(fmt);
+ return strdec.Contains(".") ? strdec.TrimEnd('0').TrimEnd('.') : strdec;
}
private static Random? _random;
diff --git a/Assets/Scripts/SizeFilter.cs b/Assets/Scripts/SizeFilter.cs
index 5bba3ed5b..56ad6a8a5 100644
--- a/Assets/Scripts/SizeFilter.cs
+++ b/Assets/Scripts/SizeFilter.cs
@@ -1,3 +1,4 @@
+using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
@@ -9,9 +10,17 @@ public class SizeFilter : MonoBehaviour
public TMP_InputField Width;
public TMP_InputField Height;
public Button DisableButton;
+
+ public event Action OnDisable;
void Start()
{
- DisableButton.onClick.AddListener(() => gameObject.SetActive(false));
+ DisableButton.onClick.AddListener(() =>
+ {
+ gameObject.SetActive(false);
+ OnDisable?.Invoke();
+ OnDisable = null;
+ });
+ //gameObject.SetActive(false);
}
}
diff --git a/Assets/Scripts/TradeMenu.cs b/Assets/Scripts/TradeMenu.cs
index 385c13497..4d633c405 100644
--- a/Assets/Scripts/TradeMenu.cs
+++ b/Assets/Scripts/TradeMenu.cs
@@ -2,52 +2,221 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
+using System.Reflection;
+using System.Runtime.Remoting.Contexts;
+using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class TradeMenu : MonoBehaviour
{
public ActionGameManager GameManager;
- public DropdownMenu Dropdown;
+ public ContextMenu ContextMenu;
public Button NewFilterButton;
+ public Prototype FilterPrototype;
public SizeFilter MinimumSizeFilter;
public SizeFilter MaximumSizeFilter;
- public RectTransform ItemList;
public PropertiesPanel Properties;
public Spreadsheet Spreadsheet;
+ public TextMeshProUGUI TargetCargoLabel;
+ public Button FoldoutButton;
+ private EquippedCargoBay _targetCargo;
+ private (ItemFilter filter, HardpointType type) _hardpointFilter;
+ private List<(ItemFilter filter, Type type)> _behaviorFilters = new List<(ItemFilter filter, Type type)>();
+
private void OnEnable()
{
+ _targetCargo = GameManager.DockingBay;
+ TargetCargoLabel.text = "Docking Bay";
Properties.Context = GameManager.ItemManager;
- Spreadsheet.ShowData(
- new[] {"Name", "Mass"},
- new[] {2, 1},
- GameManager.ItemManager.ItemData.GetAll().Select(i => new SpreadsheetEntryRow
- {
- Columns = new[]
+ MinimumSizeFilter.Width.onEndEdit.AddListener(_ => Populate());
+ MinimumSizeFilter.Height.onEndEdit.AddListener(_ => Populate());
+ MaximumSizeFilter.Width.onEndEdit.AddListener(_ => Populate());
+ MaximumSizeFilter.Height.onEndEdit.AddListener(_ => Populate());
+ NewFilterButton.onClick.AddListener(() =>
+ {
+ ContextMenu.Clear();
+ IEnumerable hardpointTypes = (HardpointType[]) Enum.GetValues(typeof(HardpointType));
+ if (_hardpointFilter.filter != null)
+ hardpointTypes = hardpointTypes.Where(x => x != _hardpointFilter.type);
+ ContextMenu.AddDropdown("Item Type", hardpointTypes
+ .Select(x => (Enum.GetName(typeof(HardpointType), x), () =>
{
- new SpreadsheetEntryColumn
+ if (_hardpointFilter.filter == null)
{
- Output = () => i.Name,
- SortKey = i.Name
- },
- new SpreadsheetEntryColumn
+ _hardpointFilter.filter = FilterPrototype.Instantiate();
+ _hardpointFilter.filter.OnDisable += () =>
+ {
+ _hardpointFilter.filter = null;
+ Populate();
+ };
+ }
+
+ _hardpointFilter.filter.Label.text = $"Hardpoint: {Enum.GetName(typeof(HardpointType), x)}";
+ _hardpointFilter.type = x;
+ Populate();
+ }, true)));
+ ContextMenu.AddDropdown("Item Behavior", typeof(BehaviorData).GetAllChildClasses()
+ .Where(x=> x.GetCustomAttribute() != null && _behaviorFilters.All(f => f.type != x))
+ .Select(x=> (x.Name.FormatTypeName(), () =>
+ {
+ var matchingType = _behaviorFilters.FirstOrDefault(y => y.type.IsAssignableFrom(x) || x.IsAssignableFrom(y.type));
+ if (matchingType.filter != null) matchingType.filter.DisableButton.onClick.Invoke();
+ var filter = FilterPrototype.Instantiate();
+ filter.Label.text = x.Name.FormatTypeName();
+ filter.OnDisable += () =>
{
- Output = () => i.Mass.SignificantDigits(3),
- SortKey = i.Mass
- },
- },
+ _behaviorFilters.Remove((filter, x));
+ Populate();
+ };
+ _behaviorFilters.Add((filter, x));
+ Populate();
+ }, true)));
+ if(!MinimumSizeFilter.gameObject.activeSelf)
+ ContextMenu.AddOption("Minimum Size",
+ () =>
+ {
+ MinimumSizeFilter.gameObject.SetActive(true);
+ MinimumSizeFilter.OnDisable += () => Populate();
+ });
+ if(!MaximumSizeFilter.gameObject.activeSelf)
+ ContextMenu.AddOption("Maximum Size",
+ () =>
+ {
+ MaximumSizeFilter.gameObject.SetActive(true);
+ MaximumSizeFilter.OnDisable += () => Populate();
+ });
+ ContextMenu.Show();
+ });
+ Populate();
+ }
+
+ void Populate()
+ {
+ var columns = new List<(string name, int size, Func> output, Func sortKey)>();
+
+ columns.Add(("Name", 3,
+ data => () => data.Name,
+ data => data.Name));
+ if(_hardpointFilter.filter==null)
+ columns.Add(("Type", 2,
+ data => () => Enum.GetName(typeof(HardpointType), data.HardpointType),
+ data => data.HardpointType));
+ columns.Add(("Mass", 1,
+ data => () => data.Mass.SignificantDigits(3),
+ data => data.Mass));
+ columns.Add(("Size", 1,
+ data => () => $"{data.Shape.Width}x{data.Shape.Height}",
+ data => data.Shape.Width*data.Shape.Height));
+
+ var items = GameManager.ItemManager.ItemData.GetAll();
+
+ if (MinimumSizeFilter.gameObject.activeSelf)
+ items = items.Where(i =>
+ !(MinimumSizeFilter.Width.text.Length > 0 && i.Shape.Width < int.Parse(MinimumSizeFilter.Width.text) ||
+ MinimumSizeFilter.Height.text.Length > 0 && i.Shape.Height < int.Parse(MinimumSizeFilter.Height.text)));
+
+ if (MaximumSizeFilter.gameObject.activeSelf)
+ items = items.Where(i =>
+ !(MaximumSizeFilter.Width.text.Length > 0 && i.Shape.Width > int.Parse(MaximumSizeFilter.Width.text) ||
+ MaximumSizeFilter.Height.text.Length > 0 && i.Shape.Height > int.Parse(MaximumSizeFilter.Height.text)));
+
+ if (_hardpointFilter.filter != null)
+ items = items.Where(i => i.HardpointType == _hardpointFilter.type);
+
+ foreach (var (_, type) in _behaviorFilters)
+ {
+ items = items.Where(i => i.Behaviors.Any(b => type.IsInstanceOfType(b)));
+
+ foreach (var field in type.GetFields().Where(f => f.GetCustomAttribute() != null))
+ {
+ var fieldType = field.FieldType;
+ if (fieldType == typeof(float))
+ columns.Add((field.Name, 1, data =>
+ {
+ var behavior = data.Behaviors.FirstOrDefault(b => type.IsInstanceOfType(b));
+ return () => ((float) field.GetValue(behavior)).SignificantDigits(3);
+ }, data =>
+ {
+ var behavior = data.Behaviors.FirstOrDefault(b => type.IsInstanceOfType(b));
+ return (float) field.GetValue(behavior);
+ }));
+ else if (fieldType == typeof(int))
+ columns.Add((field.Name, 1, data =>
+ {
+ var behavior = data.Behaviors.FirstOrDefault(b => type.IsInstanceOfType(b));
+ return () => ((int) field.GetValue(behavior)).ToString();
+ }, data =>
+ {
+ var behavior = data.Behaviors.FirstOrDefault(b => type.IsInstanceOfType(b));
+ return (int) field.GetValue(behavior);
+ }));
+ else if (fieldType == typeof(PerformanceStat))
+ {
+ columns.Add((field.Name, 1, data =>
+ {
+ var behavior = data.Behaviors.FirstOrDefault(b => type.IsInstanceOfType(b));
+ return () => ((PerformanceStat) field.GetValue(behavior)).Max.SignificantDigits(3);
+ }, data =>
+ {
+ var behavior = data.Behaviors.FirstOrDefault(b => type.IsInstanceOfType(b));
+ return ((PerformanceStat) field.GetValue(behavior)).Max;
+ }));
+ }
+ }
+ }
+
+ columns.Add(("Owned", 1,
+ data => () => (_targetCargo.ItemsOfType.ContainsKey(data.ID) ? _targetCargo.ItemsOfType[data.ID].Count : 0).ToString(),
+ data => _targetCargo.ItemsOfType.ContainsKey(data.ID) ? _targetCargo.ItemsOfType[data.ID].Count : 0));
+
+ Spreadsheet.ShowData(
+ columns.Select(x => x.name).ToArray(),
+ columns.Select(x => x.size).ToArray(),
+ items.Select(i => new SpreadsheetEntryRow
+ {
+ Columns = columns.Select(x => new SpreadsheetEntryColumn
+ {
+ Output = x.output(i),
+ SortKey = x.sortKey(i)
+ }).ToArray(),
OnClick = () =>
{
Properties.Clear();
Properties.AddItemDataProperties(i);
+ },
+ OnDoubleClick = () =>
+ {
+ _targetCargo.TryStore(GameManager.ItemManager.CreateInstance(i, .1f, 1));
+ Populate();
}
}));
}
void Start()
{
-
+ FoldoutButton.onClick.AddListener(() =>
+ {
+ ContextMenu.Clear();
+ if(_targetCargo != GameManager.DockingBay)
+ ContextMenu.AddOption("Docking Bay",
+ () =>
+ {
+ _targetCargo = GameManager.DockingBay;
+ TargetCargoLabel.text = "Docking Bay";
+ });
+ foreach (var ship in GameManager.CurrentShip.Parent.Children.Where(GameManager.PlayerShips.Contains))
+ {
+ foreach (var bay in ship.CargoBays.Select((bay, index) => (bay, index)))
+ ContextMenu.AddOption($"{ship.Name} Bay {bay.index}",
+ () =>
+ {
+ _targetCargo = bay.bay;
+ TargetCargoLabel.text = $"{ship.Name} Bay {bay.index}";
+ });
+ }
+ });
}
void Update()
diff --git a/Assets/Scripts/UI/ContextMenu.cs b/Assets/Scripts/UI/ContextMenu.cs
index a9fc32fae..e1d76417a 100644
--- a/Assets/Scripts/UI/ContextMenu.cs
+++ b/Assets/Scripts/UI/ContextMenu.cs
@@ -120,10 +120,12 @@ public class ContextMenu : MonoBehaviour
pivot.x = mousePosition.x > Screen.width - rect.sizeDelta.x * canvas.scaleFactor ? 1 : 0;
var scaleFactor = canvas.scaleFactor;
_dropdownRight = mousePosition.x < Screen.width - rect.sizeDelta.x * scaleFactor * 2;
- var pivotTop = (Parent==null ? mousePosition.y : ForcePosition.y) > (PaddingHeight + _options.Count * OptionHeight) * scaleFactor;
- pivot.y = pivotTop ? 1 : 0;
+ var pos = Parent==null ? mousePosition.y : ForcePosition.y;
+ var space = (PaddingHeight + _options.Count * OptionHeight) * scaleFactor;
+ var deltaY = pos < space ? space - pos : PaddingHeight / 2 * scaleFactor;
+ pivot.y = 1;//pivotTop ? 1 : 0;
rect.pivot = pivot;
- rect.position = Parent!=null ? ForcePosition - (pivotTop ? Vector3.zero : Vector3.up * (OptionHeight * scaleFactor)) : (Vector3)mousePosition;
+ rect.position = (Parent != null ? ForcePosition : (Vector3) mousePosition) + Vector3.up * deltaY;
if (Parent==null)
CancelClickCatcher.gameObject.SetActive(true);
}
diff --git a/Assets/Scripts/UI/InventoryPanel.cs b/Assets/Scripts/UI/InventoryPanel.cs
index 70ef70d03..c4c9c276f 100644
--- a/Assets/Scripts/UI/InventoryPanel.cs
+++ b/Assets/Scripts/UI/InventoryPanel.cs
@@ -94,10 +94,8 @@ public class InventoryPanel : MonoBehaviour
else ContextMenu.AddOption(ship.Name, () => Display(ship));
}
- foreach (var bay in GameManager.AvailableCargoBays())
- {
- ContextMenu.AddOption(bay.Name, () => Display(bay));
- }
+ if(GameManager.DockingBay!=null)
+ ContextMenu.AddOption(GameManager.DockingBay.Name, () => Display(GameManager.DockingBay));
ContextMenu.Show();
});
diff --git a/Assets/Scripts/UI/PropertiesPanel.cs b/Assets/Scripts/UI/PropertiesPanel.cs
index 0ba74df61..3dc9c15f6 100644
--- a/Assets/Scripts/UI/PropertiesPanel.cs
+++ b/Assets/Scripts/UI/PropertiesPanel.cs
@@ -403,6 +403,13 @@ public class PropertiesPanel : MonoBehaviour
AddProperty("Durability", () => gearData.Durability.SignificantDigits(Context.GameplaySettings.SignificantDigits));
foreach (var behavior in gearData.Behaviors)
{
+ if (behavior is StatModifierData statMod)
+ {
+ if(Math.Abs(statMod.Modifier.Min - statMod.Modifier.Max) < .001f)
+ AddProperty("Stat Mod", () => $"{statMod.Stat.Target}:{statMod.Stat.Stat}{(statMod.Type == StatModifierType.Constant ? "+" : "x")}{statMod.Modifier.Min.SignificantDigits(Context.GameplaySettings.SignificantDigits)}");
+ else
+ AddProperty("Stat Mod", () => $"{statMod.Stat.Target}:{statMod.Stat.Stat}{(statMod.Type == StatModifierType.Constant ? "+" : "x")}{statMod.Modifier.Min.SignificantDigits(Context.GameplaySettings.SignificantDigits)}-{statMod.Modifier.Max.SignificantDigits(Context.GameplaySettings.SignificantDigits)}");
+ }
var type = behavior.GetType();
if (type.GetCustomAttribute(typeof(RuntimeInspectable)) != null)
{