From 23617791199de579255384f73170024c1182fcae Mon Sep 17 00:00:00 2001 From: laurids Date: Sat, 17 Jul 2021 20:48:35 +0200 Subject: [PATCH] Item Movment, Consumables (WIP) --- .../Prefabs/UI/TransportUI/ItemIcon.prefab | 4 + .../UI/TransportUI/ItemMoveTooltip.prefab | 1023 +++++++++++++++++ .../TransportUI/ItemMoveTooltip.prefab.meta | 7 + .../Prefabs/UI/UnitInfoPanel/InfoPanel.prefab | 22 +- .../GWConquest/Resources/Database/Ships.csv | 98 +- .../GWConquest/Resources/Database/Units.csv | 352 +++--- Assets/GWConquest/Scenes/GalaxyMap.unity | 316 +---- Assets/GWConquest/Scripts/Formation.cs | 4 + Assets/GWConquest/Scripts/Inventory.cs | 201 +++- Assets/GWConquest/Scripts/ServerCallbacks.cs | 36 + .../GWConquest/Scripts/UI/DragDropElement.cs | 12 +- Assets/GWConquest/Scripts/UI/IngameUI.cs | 1 + .../GWConquest/Scripts/UI/ItemMoveTooltip.cs | 138 +++ .../Scripts/UI/ItemMoveTooltip.cs.meta | 11 + .../Scripts/UI/TransportUIElement.cs | 16 + .../Scripts/UI/TransportUIItemIcon.cs | 43 + Assets/GWConquest/Scripts/UI/UnitInfoPanel.cs | 25 +- Assets/GWConquest/Scripts/Unit.cs | 19 + Assets/GWConquest/Scripts/UnitClass.cs | 8 + .../PhotonBolt/assemblies/bolt.user.dll | Bin 88064 -> 93696 bytes .../PhotonBolt/assemblies/bolt.user.dll.mdb | Bin 39491 -> 42407 bytes Assets/Photon/PhotonBolt/project.json | 114 ++ 22 files changed, 1910 insertions(+), 540 deletions(-) create mode 100644 Assets/GWConquest/Prefabs/UI/TransportUI/ItemMoveTooltip.prefab create mode 100644 Assets/GWConquest/Prefabs/UI/TransportUI/ItemMoveTooltip.prefab.meta create mode 100644 Assets/GWConquest/Scripts/UI/ItemMoveTooltip.cs create mode 100644 Assets/GWConquest/Scripts/UI/ItemMoveTooltip.cs.meta diff --git a/Assets/GWConquest/Prefabs/UI/TransportUI/ItemIcon.prefab b/Assets/GWConquest/Prefabs/UI/TransportUI/ItemIcon.prefab index cbbefe6..4a7047f 100644 --- a/Assets/GWConquest/Prefabs/UI/TransportUI/ItemIcon.prefab +++ b/Assets/GWConquest/Prefabs/UI/TransportUI/ItemIcon.prefab @@ -171,8 +171,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2d51b1b7888cf746a92268bf10b8826, type: 3} m_Name: m_EditorClassIdentifier: + MoveTooltipPrefab: {fileID: 5885765285174699514, guid: c693e51d87d6ee54c821bda6af9f17fe, + type: 3} Icon: {fileID: 6815987390313110545} Amount: {fileID: 6815987389502116016} + CanBeDragged: 0 + ParentUI: {fileID: 0} --- !u!1 &6815987390313110547 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/GWConquest/Prefabs/UI/TransportUI/ItemMoveTooltip.prefab b/Assets/GWConquest/Prefabs/UI/TransportUI/ItemMoveTooltip.prefab new file mode 100644 index 0000000..97d4534 --- /dev/null +++ b/Assets/GWConquest/Prefabs/UI/TransportUI/ItemMoveTooltip.prefab @@ -0,0 +1,1023 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3150862178130180120 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3150862178130180123} + - component: {fileID: 3150862178130180101} + - component: {fileID: 3150862178130180122} + m_Layer: 5 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3150862178130180123 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3150862178130180120} + 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: 1147534548431359118} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 9.5, y: 0} + m_SizeDelta: {x: 35, y: 35} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &3150862178130180101 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3150862178130180120} + m_CullTransparentMesh: 0 +--- !u!114 &3150862178130180122 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3150862178130180120} + 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_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 461b4d80f47ed85478b3c190ac7bd4ce, 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!1 &4563571309134323658 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4676743893733563343} + - component: {fileID: 7803059385801980071} + - component: {fileID: 4400483703130240466} + - component: {fileID: 4631521444647384216} + m_Layer: 5 + m_Name: CancelButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4676743893733563343 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4563571309134323658} + 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: 1147534548431359118} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 183, y: 0} + m_SizeDelta: {x: 22, y: 22} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7803059385801980071 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4563571309134323658} + m_CullTransparentMesh: 0 +--- !u!114 &4400483703130240466 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4563571309134323658} + 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_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 9ae7fba60423d334b9f1016660fbc2c2, 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!114 &4631521444647384216 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4563571309134323658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 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.83137256, g: 0.83137256, b: 0.83137256, 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: 4400483703130240466} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 7503179759056852055} + m_MethodName: Cancel + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &6215472106130426624 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3715607954842777930} + - component: {fileID: 7623094209704195385} + - component: {fileID: 5335782987429903609} + - component: {fileID: 6988619373869353424} + m_Layer: 5 + m_Name: ConfirmButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3715607954842777930 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6215472106130426624} + 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: 1147534548431359118} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 150, y: 0} + m_SizeDelta: {x: 26.699219, y: 26.699219} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7623094209704195385 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6215472106130426624} + m_CullTransparentMesh: 0 +--- !u!114 &5335782987429903609 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6215472106130426624} + 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_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a8d34d67f7b157e4480126232bb6931e, 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!114 &6988619373869353424 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6215472106130426624} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 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.83137256, g: 0.83137256, b: 0.83137256, 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: 5335782987429903609} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 7503179759056852055} + m_MethodName: Confirm + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &6223992086677758394 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1453600219530823075} + - component: {fileID: 7807020422118682485} + - component: {fileID: 1373311728473721314} + - component: {fileID: 118477141858192403} + m_Layer: 5 + m_Name: DownArrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1453600219530823075 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6223992086677758394} + m_LocalRotation: {x: -0, y: -0, z: -1, w: 0.0000009536743} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1147534548431359118} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -180.00002} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 120.999985, y: -7.5} + m_SizeDelta: {x: 15, y: 15} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7807020422118682485 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6223992086677758394} + m_CullTransparentMesh: 0 +--- !u!114 &1373311728473721314 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6223992086677758394} + 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_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 69b225ba56c7a7748999b6991955b4d1, 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!114 &118477141858192403 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6223992086677758394} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 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.83137256, g: 0.83137256, b: 0.83137256, 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: 1373311728473721314} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 7503179759056852055} + m_MethodName: ClickArrow + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: -1 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &6316673432709998313 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3558998319877859004} + - component: {fileID: 690256172853973856} + - component: {fileID: 1395576920954268865} + - component: {fileID: 7911490503574776888} + m_Layer: 5 + m_Name: UpArrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3558998319877859004 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6316673432709998313} + 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: 1147534548431359118} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 120.999985, y: 7.5} + m_SizeDelta: {x: 15, y: 15} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &690256172853973856 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6316673432709998313} + m_CullTransparentMesh: 0 +--- !u!114 &1395576920954268865 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6316673432709998313} + 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_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 69b225ba56c7a7748999b6991955b4d1, 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!114 &7911490503574776888 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6316673432709998313} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 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.83137256, g: 0.83137256, b: 0.83137256, 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: 1395576920954268865} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 7503179759056852055} + m_MethodName: ClickArrow + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 1 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &7503179759056852055 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5885765285174699514} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0a59da9e4f26fd4498f026a53accf6c5, type: 3} + m_Name: + m_EditorClassIdentifier: + ItemImage: {fileID: 3150862178130180122} + AmountField: {fileID: 8872051988711173649} +--- !u!1001 &2801289546050208766 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1147534548431359118} + m_Modifications: + - target: {fileID: 6773398751726029866, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_Text + value: + objectReference: {fileID: 0} + - target: {fileID: 6773398751726029866, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_FontData.m_MinSize + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6773398751726029866, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_FontData.m_FontSize + value: 18 + objectReference: {fileID: 0} + - target: {fileID: 6773398751726029866, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_FontData.m_Alignment + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 6773398751726029867, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_SizeDelta.y + value: -4 + objectReference: {fileID: 0} + - target: {fileID: 6773398751726029867, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751741966316, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751741966322, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_SizeDelta.x + value: 56.214027 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_SizeDelta.y + value: -26 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 80.5 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747756, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747757, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_Name + value: InputField + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_Text + value: + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_ContentType + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_Placeholder + value: + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_KeyboardType + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_CharacterLimit + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_SelectionColor.b + value: 0.461 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_SelectionColor.g + value: 0.461 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_SelectionColor.r + value: 0.461 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_Navigation.m_Mode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_CharacterValidation + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 7503179759056852055} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: OnValueChanged + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 7503179759056852055} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: OnValueChanged + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + - target: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 7753330027a692f4ea43e0e57ab3dfc0, type: 3} +--- !u!114 &8872051988711173649 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 6773398751860747759, guid: 7753330027a692f4ea43e0e57ab3dfc0, + type: 3} + m_PrefabInstance: {fileID: 2801289546050208766} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &7121472750076369627 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3709556431398436641, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_Name + value: ItemMoveTooltip + objectReference: {fileID: 0} + - target: {fileID: 6066937026882375993, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_Color.a + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_SizeDelta.x + value: 209.64856 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_SizeDelta.y + value: 56 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 260.82 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 44.68 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, type: 3} +--- !u!1 &5885765285174699514 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3709556431398436641, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + m_PrefabInstance: {fileID: 7121472750076369627} + m_PrefabAsset: {fileID: 0} +--- !u!224 &1147534548431359118 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7870129596896663125, guid: 8b0edf9c7ac699a4da4b06f9b352ff47, + type: 3} + m_PrefabInstance: {fileID: 7121472750076369627} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/GWConquest/Prefabs/UI/TransportUI/ItemMoveTooltip.prefab.meta b/Assets/GWConquest/Prefabs/UI/TransportUI/ItemMoveTooltip.prefab.meta new file mode 100644 index 0000000..468548c --- /dev/null +++ b/Assets/GWConquest/Prefabs/UI/TransportUI/ItemMoveTooltip.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c693e51d87d6ee54c821bda6af9f17fe +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GWConquest/Prefabs/UI/UnitInfoPanel/InfoPanel.prefab b/Assets/GWConquest/Prefabs/UI/UnitInfoPanel/InfoPanel.prefab index 82dec0c..f619eab 100644 --- a/Assets/GWConquest/Prefabs/UI/UnitInfoPanel/InfoPanel.prefab +++ b/Assets/GWConquest/Prefabs/UI/UnitInfoPanel/InfoPanel.prefab @@ -3022,7 +3022,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!224 &254456684739317276 RectTransform: m_ObjectHideFlags: 0 @@ -3252,7 +3252,7 @@ GameObject: - component: {fileID: 5721716189640782176} - component: {fileID: 3212379484969327377} m_Layer: 5 - m_Name: SuppliesBarPanel + m_Name: FoodBarPanel m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -3737,7 +3737,7 @@ GameObject: - component: {fileID: 7983451911964343991} - component: {fileID: 7710110990975033073} m_Layer: 5 - m_Name: SuppliesBarPanel + m_Name: FuelBarPanel m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -4495,7 +4495,7 @@ GameObject: - component: {fileID: 4252897667148605541} - component: {fileID: 8071686238484062919} m_Layer: 5 - m_Name: SuppliesBar + m_Name: FuelBar m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -4947,7 +4947,7 @@ GameObject: - component: {fileID: 2648349951139574813} - component: {fileID: 6363806673150807071} m_Layer: 5 - m_Name: SuppliesButton + m_Name: FuelButton m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -5099,7 +5099,7 @@ GameObject: - component: {fileID: 7845435055257312141} - component: {fileID: 8707620671798900726} m_Layer: 5 - m_Name: SuppliesIcon + m_Name: FoodIcon m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -5247,7 +5247,7 @@ GameObject: - component: {fileID: 2332433110252633176} - component: {fileID: 4611590753942732807} m_Layer: 5 - m_Name: SuppliesIcon + m_Name: FuelIcon m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -5364,6 +5364,10 @@ MonoBehaviour: FormationUnitsTransform: {fileID: 1050217559578958967} FormationUnitsPrefab: {fileID: 6815987390155653563, guid: cfeb7d67ef99a7a48950d76159c22b10, type: 3} + FormationFuelBar: {fileID: 8071686238484062919} + FormationFoodBar: {fileID: 5300546645429047956} + FormationSuppliesBar: {fileID: 7480306143189545121} + IsBattleMenu: 0 --- !u!1 &6391937544300042816 GameObject: m_ObjectHideFlags: 0 @@ -5450,7 +5454,7 @@ GameObject: - component: {fileID: 7645284469128152350} - component: {fileID: 632089545658046527} m_Layer: 5 - m_Name: SuppliesButton + m_Name: FoodButton m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -5680,7 +5684,7 @@ GameObject: - component: {fileID: 1341394783277367771} - component: {fileID: 5300546645429047956} m_Layer: 5 - m_Name: SuppliesBar + m_Name: FoodBar m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Assets/GWConquest/Resources/Database/Ships.csv b/Assets/GWConquest/Resources/Database/Ships.csv index f358c6e..4b8878c 100644 --- a/Assets/GWConquest/Resources/Database/Ships.csv +++ b/Assets/GWConquest/Resources/Database/Ships.csv @@ -1,49 +1,49 @@ -Full Name,Short Name,Unit Type,Hitpoints,Shields,Shield Regeneration,Attack Count,Damage,Penetration,Accuracy,Armour,Evasion,Movement,Attack Range,Equipment Slots,Inventory Slots,Morale,Build Time,Credit Upkeep,Food Upkeep,Min Factory Tier,S-P Transporter,Boarding Ships,Fighter Bomber Capacitiy,Description,Credit Cost,Recruit Cost,Ammo Cost,Fuel Cost -,,,,,,,,,,,,,,,,,in sec,pro sec,pro sec,,,,,,,,, -Strike Craft,StrikeCraft,Ship,100,30,1,1,10,1,0.9,0,0.1,5,1,1,6,10,10,2,2,1,,,,,200,10,10,10 -Frigate,Frigate,Ship,200,100,1,2/4,20/5,2/0,0.9/0.8,1,0,4,1,2,6,10,10,2,2,3,,,,,200,10,10,10 -Escort Frigate,EscortFrigate,Ship,180,100,1,1/6,20/10,2/0,0.9/0.8,1,0,5,1,3,6,10,10,2,2,3,,,,,200,10,10,10 -Cruiser,Cruiser,Ship,300,150,2,3/2/3,35/15/8,3/2/0,0.9/0.9/0.8,2,0,3,1,2,6,10,10,2,2,3,,,,,200,10,10,10 -Heavy Cruiser,HeavyCruiser,Ship,350,175,2,3/2/2,40/15/8,3/2/0,0.9/0.9/0.8,2,0,3,1,3,6,10,10,2,2,3,,,,,200,10,10,10 -Destroyer,Destroyer,Ship,500,250,2,2/3/2,60/30/10,4/3/0,0.9/0.9/0.8,3,0,2.5,2,4,6,10,10,2,2,3,,,,,200,10,10,10 -Battleship,Battleship,Ship,1000,600,3,2/2/4/4,80/50/30/15,5/4/3/0,0.9/0.9/0.8/0.8,4,0,2,2,4,6,10,10,2,2,1,,,,,200,10,10,10 -Battleship,Battleship2,Ship,1000,600,3,2/2/4/4,80/50/30/15,5/4/3/0,0.9/0.9/0.8/0.8,4,0,2,2,4,6,10,10,2,2,1,,,,,200,10,10,10 -Dreadnought,Dreadnought,Ship,1800,1000,3,2/2/5/5,120/70/50/20,5/5/3/0,1.0/0.9/0.8/0.8,5,0,1.5,3,5,6,10,10,2,2,1,,,,,200,10,10,10 -Dreadnought,Dreadnought2,Ship,1800,1000,3,2/2/5/5,120/70/50/20,5/5/3/0,1.0/0.9/0.8/0.8,5,0,1.5,3,5,6,10,10,2,2,1,,,,,200,10,10,10 -Transport Frigate,TransportFrigate,Ship,200,100,1,2,5,0,0.8,1,0,4,1,1,6,10,10,2,2,2,,,,,200,10,10,10 -Transport Cruiser,TransportCruiser,Ship,300,150,1,1/2,20/5,2/0,0.9/0.8,2,0,3,1,1,6,10,10,2,2,3,,,,,200,10,10,10 -Transport Hauler,TransportHauler,Ship,500,250,2,2/4,25/5,2/0,0.9/0.8,3,0,2,1,1,6,10,10,2,2,3,,,,,,,, -Light Carrier,LightCarrier,Ship,200,100,1,2,5,0,0.8,2,0,4,1,1,6,10,10,2,2,3,,,,,,,, -Medium Carrier,MediumCarrier,Ship,300,150,2,1/2,20/5,2/0,0.9/0.8,2,0,3,1,1,6,10,10,2,2,3,,,,,,,, -Heavy Carrier,HeavyCarrier,Ship,500,250,3,2/4,25/5,2/0,0.9/0.8,3,0,2,1,1,6,10,10,2,2,3,,,,,,,, -Escort Carrier,EscortCarrier,Ship,250,110,2,1/4,20/5,2/0,0.9/0.8,2,0,5,1,1,6,10,10,2,2,1,,,,,200,10,10,10 -Fighter Squadron,FighterSquadron,Squadron,10,0,0,4,4,0,0.8,0,0.6,6,1,0,0,10,11,3,3,2,,,,,,,, -Bomber Squadron,BomberSquadron,Squadron,15,0,0,4,30,3,0.4,0,0.5,5,1,0,0,10,12,4,4,3,,,,,,,, -Advanced Fighter Squadron,AdvancedFighterSquadron,Squadron,20,0,0,6,9,0,0.9,0,0.7,6,1,0,0,10,13,5,5,4,,,,,,,, -Advanced Bomber Squadron,AdvancedBomberSquadron,Squadron,25,0,0,6,50,4,0.6,0,0.6,5,1,0,0,10,14,6,6,5,,,,,,,, -Fighter-Bomber Squadron,FighterBomberSquadron,Squadron,20,0,0,3/3,6/40,0/3,0.9/0.5,0,0.6,5,1,0,0,10,15,7,7,6,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Wythler:,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Wythler Attack Squadron,WythlerAttackSquadron,Squadron,25,0,0,6,50,4,0.6,0,0.6,5,1,0,0,10,,,,,,,,,,,, -Silverblade-Class Strike Craft,Silverblade-Class Strike Craft,Ship,200,140,2,1,15,1,0.9,0,0.1,6,1,4,6,10,10,2,2,1,,,,,,,, -Stormlance-Class Escort Frigate,Stormlance-Class Escort Frigate,Ship,300,240,2,1/6,25/15,2/0,0.9/0.8,1,0.1,6,1,4,6,10,10,2,2,3,,,,,,,, -Goldstar-Class Destroyer,Goldstar-Class Destroyer,Ship,500,300,3,2/3/2,65/35/15,4/3/0,0.9/0.9/0.8,3,0,4,2,4,6,10,10,2,2,3,,,,,,,, -Kyzagan-Class Heavy Destroyer,Kyzagan-Class Heavy Destroyer,Ship,750,300,3,2/3/2,65/35/15,4/3/0,0.9/0.9/0.8,3,0,3,2,4,6,10,10,2,2,3,,,,,,,, -Keshig-Class Battleship,Keshig-Class Battleship,Ship,1000,600,4,2/2/4/4,85/55/35/15,5/4/3/0,0.9/0.9/0.8/0.8,4,0,3,2,4,6,10,10,2,2,1,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Republic:,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Trailhunter-Class,,Squadron,,,,,,,,,,,,,,,,,,,,,,,,,, -Veilslicer-Class,,Ship,,,,,,,,,,,,,,,,,,,,,,,,,, -Veilscimmer-Class,,Ship,,,,,,,,,,,,,,,,,,,,,,,,,, -Voidrider-Class,,Ship,,,,,,,,,,,,,,,,,,,,,,,,,, -Voidbreaker-Class,,Ship,,,,,,,,,,,,,,,,,,,,,,,,,, -Starjumper-Class,,Ship,,,,,,,,,,,,,,,,,,,,,,,,,, -Starfarer-Class,,Ship,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Rokurant:,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Collossus (Transport),Collossus,Ship,800,300,2,3/2/3,35/15/8,3/2/0,0.9/0.9/0.8,4,0,1,1,4,6,,10,2,2,1,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Exan:,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Deodyle,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,, -"Javelin, Blade, Dagger, Spear, Pilum, Halberd, Stilett",,,,,,,,,,,,,,,,,,,,,,,,,,,, \ No newline at end of file +Full Name,Short Name,Unit Type,Hitpoints,Shields,Shield Regeneration,Attack Count,Damage,Penetration,Accuracy,Armour,Evasion,Movement,Attack Range,Equipment Slots,Inventory Slots,Morale,Fuel Capacity,Food Capacity,Supplies Capacity,Build Time,Credit Upkeep,Food Upkeep,Min Factory Tier,S-P Transporter,Boarding Ships,Fighter Bomber Capacitiy,Description,Credit Cost,Recruit Cost,Ammo Cost,Fuel Cost +,,,,,,,,,,,,,,,,,,,,in sec,pro sec,pro sec,,,,,,,,, +Strike Craft,StrikeCraft,Ship,100,30,1,1,10,1,0.9,0,0.1,5,1,1,6,10,100,100,100,10,2,2,1,,,,,200,10,10,10 +Frigate,Frigate,Ship,200,100,1,2/4,20/5,2/0,0.9/0.8,1,0,4,1,2,6,10,100,100,100,10,2,2,3,,,,,200,10,10,10 +Escort Frigate,EscortFrigate,Ship,180,100,1,1/6,20/10,2/0,0.9/0.8,1,0,5,1,3,6,10,100,100,100,10,2,2,3,,,,,200,10,10,10 +Cruiser,Cruiser,Ship,300,150,2,3/2/3,35/15/8,3/2/0,0.9/0.9/0.8,2,0,3,1,2,6,10,100,100,100,10,2,2,3,,,,,200,10,10,10 +Heavy Cruiser,HeavyCruiser,Ship,350,175,2,3/2/2,40/15/8,3/2/0,0.9/0.9/0.8,2,0,3,1,3,6,10,100,100,100,10,2,2,3,,,,,200,10,10,10 +Destroyer,Destroyer,Ship,500,250,2,2/3/2,60/30/10,4/3/0,0.9/0.9/0.8,3,0,2.5,2,4,6,10,100,100,100,10,2,2,3,,,,,200,10,10,10 +Battleship,Battleship,Ship,1000,600,3,2/2/4/4,80/50/30/15,5/4/3/0,0.9/0.9/0.8/0.8,4,0,2,2,4,6,10,100,100,100,10,2,2,1,,,,,200,10,10,10 +Battleship,Battleship2,Ship,1000,600,3,2/2/4/4,80/50/30/15,5/4/3/0,0.9/0.9/0.8/0.8,4,0,2,2,4,6,10,100,100,100,10,2,2,1,,,,,200,10,10,10 +Dreadnought,Dreadnought,Ship,1800,1000,3,2/2/5/5,120/70/50/20,5/5/3/0,1.0/0.9/0.8/0.8,5,0,1.5,3,5,6,10,100,100,100,10,2,2,1,,,,,200,10,10,10 +Dreadnought,Dreadnought2,Ship,1800,1000,3,2/2/5/5,120/70/50/20,5/5/3/0,1.0/0.9/0.8/0.8,5,0,1.5,3,5,6,10,100,100,100,10,2,2,1,,,,,200,10,10,10 +Transport Frigate,TransportFrigate,Ship,200,100,1,2,5,0,0.8,1,0,4,1,1,6,10,100,100,100,10,2,2,2,,,,,200,10,10,10 +Transport Cruiser,TransportCruiser,Ship,300,150,1,1/2,20/5,2/0,0.9/0.8,2,0,3,1,1,6,10,100,100,100,10,2,2,3,,,,,200,10,10,10 +Transport Hauler,TransportHauler,Ship,500,250,2,2/4,25/5,2/0,0.9/0.8,3,0,2,1,1,6,10,100,100,100,10,2,2,3,,,,,,,, +Light Carrier,LightCarrier,Ship,200,100,1,2,5,0,0.8,2,0,4,1,1,6,10,100,100,100,10,2,2,3,,,,,,,, +Medium Carrier,MediumCarrier,Ship,300,150,2,1/2,20/5,2/0,0.9/0.8,2,0,3,1,1,6,10,100,100,100,10,2,2,3,,,,,,,, +Heavy Carrier,HeavyCarrier,Ship,500,250,3,2/4,25/5,2/0,0.9/0.8,3,0,2,1,1,6,10,100,100,100,10,2,2,3,,,,,,,, +Escort Carrier,EscortCarrier,Ship,250,110,2,1/4,20/5,2/0,0.9/0.8,2,0,5,1,1,6,10,100,100,100,10,2,2,1,,,,,200,10,10,10 +Fighter Squadron,FighterSquadron,Squadron,10,0,0,4,4,0,0.8,0,0.8,6,1,0,0,10,100,100,100,11,3,3,2,,,,,,,, +Bomber Squadron,BomberSquadron,Squadron,15,0,0,4,30,3,0.4,0,0.7,5,1,0,0,10,100,100,100,12,4,4,3,,,,,,,, +Advanced Fighter Squadron,AdvancedFighterSquadron,Squadron,20,0,0,6,9,0,0.9,0,0.9,6,1,0,0,10,100,100,100,13,5,5,4,,,,,,,, +Advanced Bomber Squadron,AdvancedBomberSquadron,Squadron,25,0,0,6,50,4,0.6,0,0.8,5,1,0,0,10,100,100,100,14,6,6,5,,,,,,,, +Fighter-Bomber Squadron,FighterBomberSquadron,Squadron,20,0,0,3/3,6/40,0/3,0.9/0.5,0,0.8,5,1,0,0,10,100,100,100,15,7,7,6,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Wythler:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Wythler Attack Squadron,WythlerAttackSquadron,Squadron,25,0,0,6,50,4,0.6,0,0.6,5,1,0,0,10,100,100,100,,,,,,,,,,,, +Silverblade-Class Strike Craft,Silverblade-Class Strike Craft,Ship,200,140,2,1,15,1,0.9,0,0.1,6,1,4,6,10,100,100,100,10,2,2,1,,,,,,,, +Stormlance-Class Escort Frigate,Stormlance-Class Escort Frigate,Ship,300,240,2,1/6,25/15,2/0,0.9/0.8,1,0.1,6,1,4,6,10,100,100,100,10,2,2,3,,,,,,,, +Goldstar-Class Destroyer,Goldstar-Class Destroyer,Ship,500,300,3,2/3/2,65/35/15,4/3/0,0.9/0.9/0.8,3,0,4,2,4,6,10,100,100,100,10,2,2,3,,,,,,,, +Kyzagan-Class Heavy Destroyer,Kyzagan-Class Heavy Destroyer,Ship,750,300,3,2/3/2,65/35/15,4/3/0,0.9/0.9/0.8,3,0,3,2,4,6,10,100,100,100,10,2,2,3,,,,,,,, +Keshig-Class Battleship,Keshig-Class Battleship,Ship,1000,600,4,2/2/4/4,85/55/35/15,5/4/3/0,0.9/0.9/0.8/0.8,4,0,3,2,4,6,10,100,100,100,10,2,2,1,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Republic:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Trailhunter-Class,,Squadron,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Veilslicer-Class,,Ship,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Veilscimmer-Class,,Ship,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Voidrider-Class,,Ship,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Voidbreaker-Class,,Ship,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Starjumper-Class,,Ship,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Starfarer-Class,,Ship,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Rokurant:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Collossus (Transport),Collossus,Ship,800,300,2,3/2/3,35/15/8,3/2/0,0.9/0.9/0.8,4,0,1,1,4,6,10,100,100,100,10,2,2,1,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Exan:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Deodyle,,Ship,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +"Javelin, Blade, Dagger, Spear, Pilum, Halberd, Stilett",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/Assets/GWConquest/Resources/Database/Units.csv b/Assets/GWConquest/Resources/Database/Units.csv index e0ca67e..3783481 100644 --- a/Assets/GWConquest/Resources/Database/Units.csv +++ b/Assets/GWConquest/Resources/Database/Units.csv @@ -1,176 +1,176 @@ -Full Name,Short Name,Factory Type,Unit Type,Hitpoints,Attack Count,Damage,Penetration,Accuracy,Armour,Shields,Shield Regeneration,Evasion,Movement,Equipment Slots,Inventory Slots,Morale,Defence Bonus,Abilities,Credit Cost,Recruit Cost,Ammo Cost,Fuel Cost,Build Time,Credit Upkeep,Food Upkeep,Description -Anti Tank Gun,AntiTankGun,Armour,Cannon,30,1,18,5,0.8,1,0,0,0,0.5,2,0,10,,,,,,,1,,, -Artillery Gun,ArtilleryGun,Armour,Artillery,24,1,22,1,0.4,1,0,0,0,0.5,2,0,10,,,,,,,1,,, -Artillery Tank,ArtilleryTank,Armour,Artillery,60,1,22,1,0.5,1,0,0,0,3,2,0,10,,,,,,,1,,, -Flak Cannon,FlakCannon,Armour,Cannon,20,6,5,0.5,0.7,1,0,0,0,0.5,2,0,10,,,,,,,1,,, -Flak Truck,FlakTruck,Armour,Vehicle,20,5,3,2,0.6,0.5,0,0,0,4,2,0,10,,,,,,,1,,, -Tekki Truck,TekkiTruck,City,Vehicle,20,1,6,2,0.4,0.5,0,0,0,4,2,0,10,,,,,,,1,,, -Anti Tank Truck,AntiTankTruck,Armour,Vehicle,20,1,8,3,0.7,0.5,0,0,0,4,2,0,10,,,,,,,1,,, -Flak Halftrack,FlakHalftrack,Armour,Vehicle,20,5,5,0.5,0.65,1,0,0,0,3,2,0,10,,,,,,,1,,, -Heavy Anti Tank Gun,HeavyAntiTankGun,Armour,Cannon,40,1,25,6,0.8,1,0,0,0,0.3,2,0,10,,,,,,,1,,, -Heavy Artillery Gun,HeavyArtilleryGun,Armour,Cannon,35,1,30,1.5,0.4,1,0,0,0,0.3,2,0,10,,,,,,,1,,, -Heavy Rocket Artillery,HeavyRocketArtillery,Armour,Artillery,35,3,20,1.5,0.18,1,0,0,0,0.3,2,0,10,,,,,,,1,,, -Heavy Tank,HeavyTank,Armour,Vehicle,120,1/4,15/4,4/2,0.6/0.6,4,0,0,0,2.5,2,0,10,,,1600,,,,1,,, -Light Anti Tank Gun,LightAntiTankGun,Armour,Cannon,20,2,8,3,0.7,1,0,0,0,0.5,2,0,10,,,,,,,1,,, -Light Artillery Gun,LightArtilleryGun,Armour,Cannon,20,2,12,1,0.45,1,0,0,0,0.5,2,0,10,,,,,,,1,,, -Light Tank,LightTank,Armour,Vehicle,60,3/5,5/4,2/1,0.6/0.6,2,0,0,0,3,2,0,10,,,1000,,,,1,,, -Medium Tank,MediumTank,Armour,Vehicle,100,2/5,10/4,3/1,0.6/0.6,3,0,0,0,3,2,0,10,,,1200,,,,1,,, -Rocket Artillery,RocketArtillery,Armour,Artillery,10,3,14,1,0.2,0,0,0,0,0.5,2,0,10,,,,,,,1,,, -Scout Vehicle,ScoutVehicle,Armour,Vehicle,40,4,4,1,0.7,1,0,0,0.3,5,2,0,10,,,,,,,1,,, -Super Heavy Artillery Gun,SuperHeavyArtilleryGun,Armour,Artillery,40,1,50,2,0.3,2,0,0,0,0.2,2,0,10,,,,,,,1,,, -Super Heavy Tank,SuperHeavyTank,Armour,Vehicle,150,1/3,20/4,5/2,0.6/0.6,5,0,0,0,2,2,0,10,,,2400,,,,1,,, -Support Vehicle,SupportVehicle,Armour,Vehicle,20,1,1,2,0.7,0.5,0,0,0,4,2,0,10,,,,,,,1,,, -Tankhunter,Tankhunter,Armour,Vehicle,80,1,12,2,0.7,0.5,0,0,0,2,2,0,10,,,1200,,,,1,,, -Transport Truck,TransportTruck,Armour,Vehicle,20,0,0,0,0,1,0,0,0,4,2,0,10,,,,,,,1,,, -Conscripts,Conscripts,City,Infantry,10,1,3,0,0.4,0,0,0,0,1,2,0,10,1,,300,5,2,,30,,,"These soldiers were pressed into service by the military authorities and armed only with subpar equipment. Consequently, their morale is quite low and they should not be expected to fight very hard." -Militia,Militia,City,Infantry,10,1,3,0,0.4,0,0,0,0,1,2,0,10,1,,100,5,0,,20,,,"Ordinary citizens defending their homeland, armed with everything that could be scrounged from storage. They are only rudimentarily trained and will not pose a real threat to any sizable force." -Breacher Squad,BreacherSquad,Infantry,Infantry,35,2,4,0.3,0.5,0.5,0,0,0,0.8,2,0,10,,,,,,,1,,, -Commando Unit,CommandoUnit,Infantry,Infantry,35,1/1,8/4,1/0.3,0.7/0.7,0.3,0,0,0.5,2,2,0,10,,stealth II,,,,,1,,, -Demolition Squad,DemolitionSquad,Infantry,Infantry,15,1,4,0,0.5,0.3,0,0,0,1,2,0,10,,,,,,,1,,, -Grav-Chute Squad,GravChuteSquad,Infantry,Infantry,15,1,4,0,0.5,0,0,0,0.2,2,2,0,10,,,,,,,1,,, -Heavy Infantry,HeavyInfantry,Infantry,Infantry,35,2,2,0,0.5,0.5,0,0,0,0.8,2,0,10,1,,,,,,1,,, -Heavy Mountain Brigade,HeavyMountainBrigade,Infantry,Infantry,35,2,2,0,0.4,0.3,0,0,0,0.8,2,0,10,,,,,,,1,,, -Light Infantry,LightInfantry,Infantry,Infantry,15,1,4,0,0.5,0,0,0,0,1.2,2,0,10,1,,,,,,1,,, -Marine Squad,MarineSquad,Infantry,Infantry,20,1,4,0,0.5,0,0,0,0,1,2,0,10,,stationson,,,,,1,,, -Mountain Brigade,MountainBrigade,Infantry,Infantry,35,2,2,0,0.4,0,0,0,0,1,2,0,10,,,,,,,1,,, -Pioneer Squad,PioneerSquad,Infantry,Infantry,35,1,2,0,0.5,0.5,0,0,0,1.2,2,0,10,2,,,,,,1,,, -Sniper Squad,SniperSquad,Infantry,Infantry,15,1,5,0.5,0.9,0,0,0,0.2,1.2,2,0,10,,stealth I,,,,,1,,, -Standard Infantry,StandardInfantry,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,1,,, -Tank Hunter Squad,TankHunterSquad,Infantry,Infantry,20,1/2,10/2,3/0,0.4/0.6,0.3,0,0,0,0.8,2,0,10,,,,,,,1,,, -Laser Supressor Tank,LaserSupressorTank,Armour,Vehicle,60,6,4,2,0.4,2,0,0,0,3,2,0,10,,,,,,,1,,, -Command Tank,CommandTank,Armour,Vehicle,90,4,4,0.3,0.5,3,0,0,0,3,2,0,10,,,,,,,1,,, -Heavy Command Tank,HeavyCommandTank,Armour,Vehicle,115,4,4,0.3,0.5,4,0,0,0,2,2,0,10,,,,,,,1,,, -Mortar Truck,MortarTruck,Armour,Artillery,20,2,5,1,0.3,0.5,0,0,0,4,2,0,10,,,,,,,1,,, -Medic Truck,MedicTruck,Armour,Vehicle,20,0,0,0,0,0.5,0,0,0,4,2,0,10,,,,,,,1,,, -Old Transport Tank,OldTransportTank,Armour,Vehicle,75,2,3,0.3,0.6,2.5,0,0,0,3,2,0,10,,,,,,,1,,, -Old Tank,OldTank1,Armour,Vehicle,70,2/5,9/4,2.5/0.5,0.5/0.6,3,0,0,0,2,2,0,10,,,,,,,1,,, -Old Tank,OldTank2,Armour,Vehicle,75,2/5,10/4,3/0.5,0.6/0.6,3,0,0,0,2,2,0,10,,,,,,,1,,, -Old Tank,OldTank3,Armour,Vehicle,80,2/4,11/4,3/0.5,0.7/0.6,3,0,0,0,2,2,0,10,,,,,,,1,,, -Heavy Scout Vehicle,HeavyScoutVehicle,Armour,Vehicle,45,4,5,1,0.65,1.5,0,0,0.25,4.5,2,0,10,,,,,,,1,,, -Transport Vehicle,TransportVehicle,Armour,Vehicle,45,0,0,0,0,0.5,0,0,0,4,2,0,10,,,,,,,1,,, -Light Transport Vehicle,LightTransportVehicle,Armour,Vehicle,40,0,0,0,0,0.45,0,0,0,4.5,2,0,10,,,,,,,1,,, -Old Transport Vehicle,OldTransportVehicle,Armour,Vehicle,35,0,0,0,0,0.4,0,0,0,3.5,2,0,10,,,,,,,1,,, -Medic Squad,MedicSquad,Infantry,Infantry,10,1,1,0,0.5,0,0,0,0,1,2,0,10,,,,,,,1,,, -Tank Crew,TankCrew,Infantry,Infantry,10,1,1,0,0.5,0,0,0,0,1,2,0,10,,,,,,,1,,, -Fast Attack Vehicle,FastAttackVehicle,Armour,Vehicle,25,3,5,1.5,0.55,1.45,0,0,0.2,4.5,2,0,10,,,,,,,1,,, -Spy,Spy,Infantry,Infantry,5,0,0,0,0,0,0,0,0,1,2,0,10,,,,,,,1,,, -Hazard Squad,HazardSquad,Infantry,Infantry,25,1,4,0,0.5,0.3,0,0,0,0.8,2,0,10,,,,,,,1,,, -Heavy Hazard Squad,HeavyHazardSquad,Infantry,Infantry,35,2,2,0,0.5,0.5,0,0,0,0.6,2,0,10,,,,,,,1,,, -Mortar Squad,MortarSquad,Infantry,Artillery,30,2,7,0.5,0.35,1,0,0,0,0.8,2,0,10,,,,,,,1,,, -Heavy Flak Cannon,HeavyFlakCannon,Armour,Cannon,40,5,6,1,0.7,1,0,0,0,0.3,2,0,10,,,,,,,1,,, -Light Universal Carrier,LightUniversalCarrier,Armour,Vehicle,15,0,0,0,0,0.3,0,0,0.1,,2,0,10,,,,,,,,,, -Anti Material Rifle Squad,AntiMaterialRifleSquad,Infantry,Infantry,15,1,5,2,0.75,0,0,0,0.2,1.2,2,0,10,,,,,,,,,, -Light Attack Fighter,LightAttackFighter,Armour,Aircraft,25,0,0,0,0,0,0,0,0.7,,2,0,10,,,,,,,,,, -Command Squad,OfficerSquad,Infantry,Infantry,25,1,4,0,0.5,0.3,0,0,0,0.8,2,0,10,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Rokurant,,,,,,,,,,,,,,,,,,,,,,,,,, -Heavy Artillery Tank,RokurantHArtilleryTank,Armour,Artillery,90,1,26,1.5,0.5,3,0,0,0,2,2,0,10,,,,,,,,,, -Siegebreaker Tank,RokurantSiegebreakerTank,Armour,Vehicle,95,1,20,3,0.6,3,0,0,0,2,2,0,10,,,,,,,,,, -Bulk Transporter,RokurantTransporter,Armour,Vehicle,100,2,2,0,0.6,3,0,0,0,1,2,0,10,,,,,,,,,, -Heavy Rocket Vehicle,RokurantRocketVehicle,Armour,Vehicle,60,3,14,1,0.2,0,0,0,0,0.5,2,0,10,,,,,,,,,, -Rokurant Infantry,RokurantInfantry,Infantry,Infantry,35,2,2,0,0.5,0.5,0,0,0,0.8,2,0,10,1,,,,,,,,, -Heavy Infantry,RokurantHInfantry,Infantry,Infantry,40,2,2,0,0.5,0.5,0,0,0,0.8,2,0,10,1,,,,,,,,, -Storm Pioneers,RokurantStormPioneers,Infantry,Infantry,45,1,2,0,0.5,0.55,0,0,0,1.5,2,0,10,2,,,,,,,,, -Transport Truck,RokurantTransportTruck,Armour,Vehicle,50,0,0,0,0,0.5,0,0,0,4,2,0,10,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Voteine,,,,,,,,,,,,,,,,,,,,,,,,,, -Fast Assault Tank,VoteineFastAssaultTank,Armour,Vehicle,40,1/2,8/3,3/1,0.75/0.8,1,1,1,0.35,5,2,0,10,,,,,,,,,, -Hover Tank,VoteineHoverTank,Armour,Vehicle,45,3,5,1.5,0.8,2,1,1,0.15,5,2,0,10,,,,,,,,,, -Light Hover Tank,VoteineLHoverTank,Armour,Vehicle,40,3,5,1.5,0.75,1.45,0,1,0.3,5,2,0,10,,,,,,,,,, -Voteine Infantry,VoteineInfantry,Infantry,Infantry,32,2,4,0,0.6,0.4,0,0,0,0.8,3,0,10,,,,,,,,,, -Voteine Infantry Elite,VoteineInfantryElite,Infantry,Infantry,38,3,4,0,0.6,0.4,0,0,0,0.8,3,0,10,,,,,,,,,, -Voteine Drones,VoteineDrones,Infantry,Infantry,8,1,1,0,0.4,0.3,0,0,0.75,1,0,0,10,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Whythler,,,,,,,,,,,,,,,,,,,,,,,,,, -Husain Jet-Bike Squad,WythlerJetBikeSquad1,Armour,Vehicle,60,4,4,2,0.8,1,2,1,0.6,6,2,0,10,,,,,,,,,, -Winhali Jet-Bike Squad,WythlerJetBikeSquad2,Armour,Vehicle,60,2/4,4/3,2/0.5,0.8/0.7,1,2,1,0.65,6,2,0,10,,,,,,,,,, -Lenphra Jet-Bike Squad,WythlerJetBikeSquad3,Armour,Vehicle,60,2/1,4/10,2/4,0.8/0.7,1,2,1,0.55,6,2,0,10,,,,,,,,,, -Light Attack Speeder,WythlerLAttackSpeeder,Armour,Vehicle,70,3,4,4,0.85,2,2,2,0.3,5,2,0,10,,,,,,,,,, -Attack Speeder,WythlerAttackSpeeder,Armour,Vehicle,90,1/3,12/4,4/2,0.85/0.7,2,2,2,0.35,4,2,0,10,,,,,,,,,, -Heavy Attack Speeder,WythlerHAttackSpeeder,Armour,Vehicle,100,1/4,18/4,5/2,0.85/0.7,2.5,3,2,0.2,4,2,0,10,,,,,,,,,, -Heavy Transport Speeder,WythlerHTransportSpeeder,Armour,Vehicle,90,3,4,4,0.85,3,3,2,0.2,4,2,0,10,,,,,,,,,, -Transport Vehicle,WythlerTransportVehicle,Armour,Vehicle,75,2,1,1,0.7,0.75,0,0,0,2,2,0,10,,,,,,,,,, -Tankhunter,WythlerTankhunter,Armour,Vehicle,60,1,11,2,0.65,0.5,0,0,0,2,2,0,10,,,1200,,,,,,, -Wythler Squad,WythlerSquad,Infantry,Infantry,45,3/4,4/3,2/0.5,0.9/0.8,1,2,1,0,,,,10,,,,,,,,,, -Power Armour Squad,PowerArmourSquad,Infantry,Infantry,45,3/4,4/3,2/0.5,0.9/0.8,1,2,1,0,0.8,2,0,10,1,,,,,,,,, -Rabble,Rabble,City,Infantry,15,1,4,0,0.5,0,0,0,0,1.2,2,0,10,1,,,,,,,,, -Wyth Palace Guard,WythPalaceGuard,Infantry,Infantry,40,2,3,0,0.8,1,1,2.5,0,0.8,2,0,10,1,,,,,,,,, -Assassins,Assassins,Infantry,Infantry,5,1,10,0,0.3,0.3,1,2.5,0.2,2,,0,10,,stealth I,,,,,,,, -Disciplinary Master,WythlerDisciplinaryMaster,Infantry,Infantry,25,1,4,0,0.5,0.3,0,0,0,1,,0,10,,,,,,,,,, -Charnal Guard,CharnalGuard,Infantry,Infantry,60,2,2,0,0.9,0.3,0,0,0,1,,0,10,,,,,,,,,, -Hushtan Ginetiphracts,Ginetiphracts,Infantry,Infantry,20,1,4,0,0.5,0,0,0,0,1,2,0,10,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Republic Remnants,,,,,,,,,,,,,,,,,,,,,,,,,, -Republic Wardens,RepublicWardens,Infantry,Infantry,40,3,3,0,0.8,1,0,0,0,0.8,2,0,10,1,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Elysia,,,,,,,,,,,,,,,,,,,,,,,,,, -Elysian Light Commando Vehicle,ElysiaLCommandoVehicle,Armour,Vehicle,30,4,5,1.5,0.65,1.75,0,0,0.2,4.5,2,0,10,,,,,,,,,, -Elysian Assault APC,ElysianAssaultAPC,Armour,Vehicle,45,3,4,2,0.65,2,0,0,0.2,4.5,2,0,10,,,,,,,,,, -Elysian Oathsworn Squad,ElysianOathswornSquad,Infantry,Infantry,35,3,3,0,0.65,0.5,0,0,0,1,2,0,10,1,,,,,,,,, -Elysian Light Mechs,ElysianLightMechs,Armour,Vehicle,45,3/4,3/2,2/0.5,0.9/0.8,1,0,0,0,2,2,0,10,1,,,,,,,,, -Elysian Jet Infantry,ElysianJetInfantry,Infantry,Infantry,30,2,3,0,0.65,0.5,0,0,0.2,2,2,0,10,,,,,,,,,, -Elysian Recon Infantry,ElysianReconInfantry,Infantry,Infantry,35,1/1,8/4,1/0.3,0.7/0.7,0.3,0,0,0.5,2,2,0,10,,stealth II,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Yar-Kassy,,,,,,,,,,,,,,,,,,,,,,,,,, -Dervish Assault Tank,YarkassyAssaultTank,Armour,Vehicle,90,1/2,8/3,3/1,0.75/0.8,1,1,1,0.35,4.5,2,0,10,,,,,,,,,, -Desert Raider Squad,YarkassyDesertRaiderSquad,Infantry,Infantry,35,2,2,0,0.5,0.5,0,0,0,0.8,2,0,10,1,,,,,,,,, -Elite Marksmen Squad,YarkassyEliteMarksmen,Infantry,Infantry,18,1,5,0.5,0.95,0,0,0,0.25,1.3,2,0,10,,stealth I,,,,,,,, -Ghar Haclem Ark'venuur Serpents,YarkassySerpents,Infantry,Infantry,25,3,2,0.5,0.45,0,0,0,0,1,2,0,10,1,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Arca,,,,,,,,,,,,,,,,,,,,,,,,,, -Scum,ArcaScum,City,Infantry,20,2,1,0,0.25,0,0,0,0,1.1,1,0,10,0,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Zami,,,,,,,,,,,,,,,,,,,,,,,,,, -Cryo-Clone Squad,ZamiCryoCloneSquad,Infantry,Infantry,25,2,2,0,0.75,0,0,0,0,1.5,2,0,10,0,,,,,,,,, -Immortals Cryo-Clone Squad,ImmortalsCryo-CloneSquad,Infantry,Infantry,35,3,2,0,0.8,0.55,0,0,0,1.5,2,0,10,0,,,,,,,,, -Zami War Tripod,ZamiWarTripod,Armour,Vehicle,100,2/6,4/1,2.5/0,0.8/0.8,2.5,2,1,0,2,2,0,10,,,,,,,,,, -Zami War Strider,ZamiWarStrider,Armour,Vehicle,85,1/7,4/1,2.5/0,0.75/0.75,2,2,1,0,2,2,0,10,,,,,,,,,, -Conscripted Miner Slaves,ConscriptedMinerSlaves,City,Infantry,12,2,3,0,0.45,0,0,0,0,1.2,2,0,10,1,,,,,,,,, -Satyr-9 Varanguard,Satyr-9Varanguard,City,Infantry,40,3,3,0.5,0.9,1,0,0,0,1,2,0,10,1,,,,,,,,, -Krioss Ravager Pack,KriossRavagerPack,Infantry,Infantry,50,5,2,1,0.45,0.75,0,0,1,5,3,0,10,,,,,,,,,, -Snagaa Newborn,SnagaaNewborn,Infantry,Infantry,15,2,1,0,0.3,0,0,0,0,1.5,0,0,10,,,,,,,,,, -Axa Axa,AxaAxa,Infantry,Vehicle,45,4,1,0,0.7,0.5,1,2.5,0,1,0,0,10,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Stuntreen,,,,,,,,,,,,,,,,,,,,,,,,,, -Headtaker Commando,HeadtakerCommando,City,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -Hareen Cari Immortals,HareenCariImmortals,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Exan,,,,,,,,,,,,,,,,,,,,,,,,,, -Clan Warriors,ExanClanWarriors,City,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -Headtakers,ExanHeadtakers,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Methaphor,,,,,,,,,,,,,,,,,,,,,,,,,, -Republican Guard,MethaphorRepublicanGuard,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -Green Guard (Elite Mountain Troops),MethaphorGreenGuard,Infantry,Infantry,40,2,2,0,0.6,0,0,0,0,1,3,0,10,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Noser,,,,,,,,,,,,,,,,,,,,,,,,,, -Royal Guard,NoserRoyalGuard,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -Stalker Squad,NoserStalkerSquad,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Caer Bannoq,,,,,,,,,,,,,,,,,,,,,,,,,, -Realm Hunters,CaerBannoqRealmHunters,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -Keepers of Secrets,CaerBannoqKeepers,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -Paladins,CaerBannoqPaladins,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -Seekers,CaerBannoqSeekers,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Vesparus,,,,,,,,,,,,,,,,,,,,,,,,,, -Vesparusian Militia,VesparusMilitia,City,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -Freekorps Caine,VesparusFreekorps,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Inobria,,,,,,,,,,,,,,,,,,,,,,,,,, -Infantry,InobriaInfantry,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -Tunnel Fighter,InobriaTunnelFighter,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Sartorius Rax,,,,,,,,,,,,,,,,,,,,,,,,,, -Infantry,SartoriusInfantry,Infantry,Infantry,22,1,4,0,0.55,0,0,0,0,1,2,0,10,1,,,,,,,,, -Heavy Infantry,SartoriusHeavyInfantry,Infantry,Infantry,32,2,3,0,0.6,0,0,0,0,1,2,0,10,1,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Spice,,,,,,,,,,,,,,,,,,,,,,,,,, -Longclaw Pack,SpiceLongclawPack,Infantry,Infantry,16,2,3,0,0.6,0,0,0,0,1.4,2,0,10,1,,,,,,,,, -Tunneler Pack,SpiceTunnelerPack,Infantry,Infantry,20,2,3,0,0.6,0,0,0,0,1.4,2,0,10,1,,,,,,,,, -Healer Pack,SpiceHealerPack,Infantry,Infantry,14,2,3,0,0.6,0,0,0,0,1.4,2,0,10,1,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -Amothep,,,,,,,,,,,,,,,,,,,,,,,,,, -Pyramidians,Pyramidians,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, -Spyre Guard,SpyreGuard,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,1,,,,,,,,, \ No newline at end of file +Full Name,Short Name,Factory Type,Unit Type,Hitpoints,Attack Count,Damage,Penetration,Accuracy,Armour,Shields,Shield Regeneration,Evasion,Movement,Equipment Slots,Inventory Slots,Morale,Fuel Capacity,Food Capacity,Supplies Capacity,Defence Bonus,Abilities,Credit Cost,Recruit Cost,Ammo Cost,Fuel Cost,Build Time,Credit Upkeep,Food Upkeep,Description +Anti Tank Gun,AntiTankGun,Armour,Cannon,30,1,18,5,0.8,1,0,0,0,0.5,2,0,10,100,100,100,,,,,,,1,,, +Artillery Gun,ArtilleryGun,Armour,Artillery,24,1,22,1,0.4,1,0,0,0,0.5,2,0,10,100,100,100,,,,,,,1,,, +Artillery Tank,ArtilleryTank,Armour,Artillery,60,1,22,1,0.5,1,0,0,0,3,2,0,10,100,100,100,,,,,,,1,,, +Flak Cannon,FlakCannon,Armour,Cannon,20,6,5,0.5,0.7,1,0,0,0,0.5,2,0,10,100,100,100,,,,,,,1,,, +Flak Truck,FlakTruck,Armour,Vehicle,20,5,3,2,0.6,0.5,0,0,0,4,2,0,10,100,100,100,,,,,,,1,,, +Tekki Truck,TekkiTruck,City,Vehicle,20,1,6,2,0.4,0.5,0,0,0,4,2,0,10,100,100,100,,,,,,,1,,, +Anti Tank Truck,AntiTankTruck,Armour,Vehicle,20,1,8,3,0.7,0.5,0,0,0,4,2,0,10,100,100,100,,,,,,,1,,, +Flak Halftrack,FlakHalftrack,Armour,Vehicle,20,5,5,0.5,0.65,1,0,0,0,3,2,0,10,100,100,100,,,,,,,1,,, +Heavy Anti Tank Gun,HeavyAntiTankGun,Armour,Cannon,40,1,25,6,0.8,1,0,0,0,0.3,2,0,10,100,100,100,,,,,,,1,,, +Heavy Artillery Gun,HeavyArtilleryGun,Armour,Cannon,35,1,30,1.5,0.4,1,0,0,0,0.3,2,0,10,100,100,100,,,,,,,1,,, +Heavy Rocket Artillery,HeavyRocketArtillery,Armour,Artillery,35,3,20,1.5,0.18,1,0,0,0,0.3,2,0,10,100,100,100,,,,,,,1,,, +Heavy Tank,HeavyTank,Armour,Vehicle,120,1/4,15/4,4/2,0.6/0.6,4,0,0,0,2.5,2,0,10,100,100,100,,,1600,,,,1,,, +Light Anti Tank Gun,LightAntiTankGun,Armour,Cannon,20,2,8,3,0.7,1,0,0,0,0.5,2,0,10,100,100,100,,,,,,,1,,, +Light Artillery Gun,LightArtilleryGun,Armour,Cannon,20,2,12,1,0.45,1,0,0,0,0.5,2,0,10,100,100,100,,,,,,,1,,, +Light Tank,LightTank,Armour,Vehicle,60,3/5,5/4,2/1,0.6/0.6,2,0,0,0,3,2,0,10,100,100,100,,,1000,,,,1,,, +Medium Tank,MediumTank,Armour,Vehicle,100,2/5,10/4,3/1,0.6/0.6,3,0,0,0,3,2,0,10,100,100,100,,,1200,,,,1,,, +Rocket Artillery,RocketArtillery,Armour,Artillery,10,3,14,1,0.2,0,0,0,0,0.5,2,0,10,100,100,100,,,,,,,1,,, +Scout Vehicle,ScoutVehicle,Armour,Vehicle,40,4,4,1,0.7,1,0,0,0.3,5,2,0,10,100,100,100,,,,,,,1,,, +Super Heavy Artillery Gun,SuperHeavyArtilleryGun,Armour,Artillery,40,1,50,2,0.3,2,0,0,0,0.2,2,0,10,100,100,100,,,,,,,1,,, +Super Heavy Tank,SuperHeavyTank,Armour,Vehicle,150,1/3,20/4,5/2,0.6/0.6,5,0,0,0,2,2,0,10,100,100,100,,,2400,,,,1,,, +Support Vehicle,SupportVehicle,Armour,Vehicle,20,1,1,2,0.7,0.5,0,0,0,4,2,0,10,100,100,100,,,,,,,1,,, +Tankhunter,Tankhunter,Armour,Vehicle,80,1,12,2,0.7,0.5,0,0,0,2,2,0,10,100,100,100,,,1200,,,,1,,, +Transport Truck,TransportTruck,Armour,Vehicle,20,0,0,0,0,1,0,0,0,4,2,0,10,100,100,100,,,,,,,1,,, +Conscripts,Conscripts,City,Infantry,10,1,3,0,0.4,0,0,0,0,1,2,0,10,100,100,100,1,,300,5,2,,30,,,"These soldiers were pressed into service by the military authorities and armed only with subpar equipment. Consequently, their morale is quite low and they should not be expected to fight very hard." +Militia,Militia,City,Infantry,10,1,3,0,0.4,0,0,0,0,1,2,0,10,100,100,100,1,,100,5,0,,20,,,"Ordinary citizens defending their homeland, armed with everything that could be scrounged from storage. They are only rudimentarily trained and will not pose a real threat to any sizable force." +Breacher Squad,BreacherSquad,Infantry,Infantry,35,2,4,0.3,0.5,0.5,0,0,0,0.8,2,0,10,100,100,100,,,,,,,1,,, +Commando Unit,CommandoUnit,Infantry,Infantry,35,1/1,8/4,1/0.3,0.7/0.7,0.3,0,0,0.5,2,2,0,10,100,100,100,,stealth II,,,,,1,,, +Demolition Squad,DemolitionSquad,Infantry,Infantry,15,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,,,,,,,1,,, +Grav-Chute Squad,GravChuteSquad,Infantry,Infantry,15,1,4,0,0.5,0,0,0,0.2,2,2,0,10,100,100,100,,,,,,,1,,, +Heavy Infantry,HeavyInfantry,Infantry,Infantry,35,2,2,0,0.5,0.5,0,0,0,0.8,2,0,10,100,100,100,1,,,,,,1,,, +Heavy Mountain Brigade,HeavyMountainBrigade,Infantry,Infantry,35,2,2,0,0.4,0.3,0,0,0,0.8,2,0,10,100,100,100,,,,,,,1,,, +Light Infantry,LightInfantry,Infantry,Infantry,15,1,4,0,0.5,0,0,0,0,1.2,2,0,10,100,100,100,1,,,,,,1,,, +Marine Squad,MarineSquad,Infantry,Infantry,20,1,4,0,0.5,0,0,0,0,1,2,0,10,100,100,100,,stationson,,,,,1,,, +Mountain Brigade,MountainBrigade,Infantry,Infantry,35,2,2,0,0.4,0,0,0,0,1,2,0,10,100,100,100,,,,,,,1,,, +Pioneer Squad,PioneerSquad,Infantry,Infantry,35,1,2,0,0.5,0.5,0,0,0,1.2,2,0,10,100,100,100,2,,,,,,1,,, +Sniper Squad,SniperSquad,Infantry,Infantry,15,1,5,0.5,0.9,0,0,0,0.2,1.2,2,0,10,100,100,100,,stealth I,,,,,1,,, +Standard Infantry,StandardInfantry,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,1,,, +Tank Hunter Squad,TankHunterSquad,Infantry,Infantry,20,1/2,10/2,3/0,0.4/0.6,0.3,0,0,0,0.8,2,0,10,100,100,100,,,,,,,1,,, +Laser Supressor Tank,LaserSupressorTank,Armour,Vehicle,60,6,4,2,0.4,2,0,0,0,3,2,0,10,100,100,100,,,,,,,1,,, +Command Tank,CommandTank,Armour,Vehicle,90,4,4,0.3,0.5,3,0,0,0,3,2,0,10,100,100,100,,,,,,,1,,, +Heavy Command Tank,HeavyCommandTank,Armour,Vehicle,115,4,4,0.3,0.5,4,0,0,0,2,2,0,10,100,100,100,,,,,,,1,,, +Mortar Truck,MortarTruck,Armour,Artillery,20,2,5,1,0.3,0.5,0,0,0,4,2,0,10,100,100,100,,,,,,,1,,, +Medic Truck,MedicTruck,Armour,Vehicle,20,0,0,0,0,0.5,0,0,0,4,2,0,10,100,100,100,,,,,,,1,,, +Old Transport Tank,OldTransportTank,Armour,Vehicle,75,2,3,0.3,0.6,2.5,0,0,0,3,2,0,10,100,100,100,,,,,,,1,,, +Old Tank,OldTank1,Armour,Vehicle,70,2/5,9/4,2.5/0.5,0.5/0.6,3,0,0,0,2,2,0,10,100,100,100,,,,,,,1,,, +Old Tank,OldTank2,Armour,Vehicle,75,2/5,10/4,3/0.5,0.6/0.6,3,0,0,0,2,2,0,10,100,100,100,,,,,,,1,,, +Old Tank,OldTank3,Armour,Vehicle,80,2/4,11/4,3/0.5,0.7/0.6,3,0,0,0,2,2,0,10,100,100,100,,,,,,,1,,, +Heavy Scout Vehicle,HeavyScoutVehicle,Armour,Vehicle,45,4,5,1,0.65,1.5,0,0,0.25,4.5,2,0,10,100,100,100,,,,,,,1,,, +Transport Vehicle,TransportVehicle,Armour,Vehicle,45,0,0,0,0,0.5,0,0,0,4,2,0,10,100,100,100,,,,,,,1,,, +Light Transport Vehicle,LightTransportVehicle,Armour,Vehicle,40,0,0,0,0,0.45,0,0,0,4.5,2,0,10,100,100,100,,,,,,,1,,, +Old Transport Vehicle,OldTransportVehicle,Armour,Vehicle,35,0,0,0,0,0.4,0,0,0,3.5,2,0,10,100,100,100,,,,,,,1,,, +Medic Squad,MedicSquad,Infantry,Infantry,10,1,1,0,0.5,0,0,0,0,1,2,0,10,100,100,100,,,,,,,1,,, +Tank Crew,TankCrew,Infantry,Infantry,10,1,1,0,0.5,0,0,0,0,1,2,0,10,100,100,100,,,,,,,1,,, +Fast Attack Vehicle,FastAttackVehicle,Armour,Vehicle,25,3,5,1.5,0.55,1.45,0,0,0.2,4.5,2,0,10,100,100,100,,,,,,,1,,, +Spy,Spy,Infantry,Infantry,5,0,0,0,0,0,0,0,0,1,2,0,10,100,100,100,,,,,,,1,,, +Hazard Squad,HazardSquad,Infantry,Infantry,25,1,4,0,0.5,0.3,0,0,0,0.8,2,0,10,100,100,100,,,,,,,1,,, +Heavy Hazard Squad,HeavyHazardSquad,Infantry,Infantry,35,2,2,0,0.5,0.5,0,0,0,0.6,2,0,10,100,100,100,,,,,,,1,,, +Mortar Squad,MortarSquad,Infantry,Artillery,30,2,7,0.5,0.35,1,0,0,0,0.8,2,0,10,100,100,100,,,,,,,1,,, +Heavy Flak Cannon,HeavyFlakCannon,Armour,Cannon,40,5,6,1,0.7,1,0,0,0,0.3,2,0,10,100,100,100,,,,,,,1,,, +Light Universal Carrier,LightUniversalCarrier,Armour,Vehicle,15,0,0,0,0,0.3,0,0,0.1,,2,0,10,100,100,100,,,,,,,,,, +Anti Material Rifle Squad,AntiMaterialRifleSquad,Infantry,Infantry,15,1,5,2,0.75,0,0,0,0.2,1.2,2,0,10,100,100,100,,,,,,,,,, +Light Attack Fighter,LightAttackFighter,Armour,Aircraft,25,0,0,0,0,0,0,0,0.7,,2,0,10,100,100,100,,,,,,,,,, +Command Squad,OfficerSquad,Infantry,Infantry,25,1,4,0,0.5,0.3,0,0,0,0.8,2,0,10,100,100,100,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Rokurant,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Heavy Artillery Tank,RokurantHArtilleryTank,Armour,Artillery,90,1,26,1.5,0.5,3,0,0,0,2,2,0,10,100,100,100,,,,,,,,,, +Siegebreaker Tank,RokurantSiegebreakerTank,Armour,Vehicle,95,1,20,3,0.6,3,0,0,0,2,2,0,10,100,100,100,,,,,,,,,, +Bulk Transporter,RokurantTransporter,Armour,Vehicle,100,2,2,0,0.6,3,0,0,0,1,2,0,10,100,100,100,,,,,,,,,, +Heavy Rocket Vehicle,RokurantRocketVehicle,Armour,Vehicle,60,3,14,1,0.2,0,0,0,0,0.5,2,0,10,100,100,100,,,,,,,,,, +Rokurant Infantry,RokurantInfantry,Infantry,Infantry,35,2,2,0,0.5,0.5,0,0,0,0.8,2,0,10,100,100,100,1,,,,,,,,, +Heavy Infantry,RokurantHInfantry,Infantry,Infantry,40,2,2,0,0.5,0.5,0,0,0,0.8,2,0,10,100,100,100,1,,,,,,,,, +Storm Pioneers,RokurantStormPioneers,Infantry,Infantry,45,1,2,0,0.5,0.55,0,0,0,1.5,2,0,10,100,100,100,2,,,,,,,,, +Transport Truck,RokurantTransportTruck,Armour,Vehicle,50,0,0,0,0,0.5,0,0,0,4,2,0,10,100,100,100,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Voteine,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Fast Assault Tank,VoteineFastAssaultTank,Armour,Vehicle,40,1/2,8/3,3/1,0.75/0.8,1,1,1,0.35,5,2,0,10,100,100,100,,,,,,,,,, +Hover Tank,VoteineHoverTank,Armour,Vehicle,45,3,5,1.5,0.8,2,1,1,0.15,5,2,0,10,100,100,100,,,,,,,,,, +Light Hover Tank,VoteineLHoverTank,Armour,Vehicle,40,3,5,1.5,0.75,1.45,0,1,0.3,5,2,0,10,100,100,100,,,,,,,,,, +Voteine Infantry,VoteineInfantry,Infantry,Infantry,32,2,4,0,0.6,0.4,0,0,0,0.8,3,0,10,100,100,100,,,,,,,,,, +Voteine Infantry Elite,VoteineInfantryElite,Infantry,Infantry,38,3,4,0,0.6,0.4,0,0,0,0.8,3,0,10,100,100,100,,,,,,,,,, +Voteine Drones,VoteineDrones,Infantry,Infantry,8,1,1,0,0.4,0.3,0,0,0.75,1,0,0,10,100,100,100,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Whythler,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Husain Jet-Bike Squad,WythlerJetBikeSquad1,Armour,Vehicle,60,4,4,2,0.8,1,2,1,0.6,6,2,0,10,100,100,100,,,,,,,,,, +Winhali Jet-Bike Squad,WythlerJetBikeSquad2,Armour,Vehicle,60,2/4,4/3,2/0.5,0.8/0.7,1,2,1,0.65,6,2,0,10,100,100,100,,,,,,,,,, +Lenphra Jet-Bike Squad,WythlerJetBikeSquad3,Armour,Vehicle,60,2/1,4/10,2/4,0.8/0.7,1,2,1,0.55,6,2,0,10,100,100,100,,,,,,,,,, +Light Attack Speeder,WythlerLAttackSpeeder,Armour,Vehicle,70,3,4,4,0.85,2,2,2,0.3,5,2,0,10,100,100,100,,,,,,,,,, +Attack Speeder,WythlerAttackSpeeder,Armour,Vehicle,90,1/3,12/4,4/2,0.85/0.7,2,2,2,0.35,4,2,0,10,100,100,100,,,,,,,,,, +Heavy Attack Speeder,WythlerHAttackSpeeder,Armour,Vehicle,100,1/4,18/4,5/2,0.85/0.7,2.5,3,2,0.2,4,2,0,10,100,100,100,,,,,,,,,, +Heavy Transport Speeder,WythlerHTransportSpeeder,Armour,Vehicle,90,3,4,4,0.85,3,3,2,0.2,4,2,0,10,100,100,100,,,,,,,,,, +Transport Vehicle,WythlerTransportVehicle,Armour,Vehicle,75,2,1,1,0.7,0.75,0,0,0,2,2,0,10,100,100,100,,,,,,,,,, +Tankhunter,WythlerTankhunter,Armour,Vehicle,60,1,11,2,0.65,0.5,0,0,0,2,2,0,10,100,100,100,,,1200,,,,,,, +Wythler Squad,WythlerSquad,Infantry,Infantry,45,3/4,4/3,2/0.5,0.9/0.8,1,2,1,0,,,,10,100,100,100,,,,,,,,,, +Power Armour Squad,PowerArmourSquad,Infantry,Infantry,45,3/4,4/3,2/0.5,0.9/0.8,1,2,1,0,0.8,2,0,10,100,100,100,1,,,,,,,,, +Rabble,Rabble,City,Infantry,15,1,4,0,0.5,0,0,0,0,1.2,2,0,10,100,100,100,1,,,,,,,,, +Wyth Palace Guard,WythPalaceGuard,Infantry,Infantry,40,2,3,0,0.8,1,1,2.5,0,0.8,2,0,10,100,100,100,1,,,,,,,,, +Assassins,Assassins,Infantry,Infantry,5,1,10,0,0.3,0.3,1,2.5,0.2,2,,0,10,100,100,100,,stealth I,,,,,,,, +Disciplinary Master,WythlerDisciplinaryMaster,Infantry,Infantry,25,1,4,0,0.5,0.3,0,0,0,1,,0,10,100,100,100,,,,,,,,,, +Charnal Guard,CharnalGuard,Infantry,Infantry,60,2,2,0,0.9,0.3,0,0,0,1,,0,10,100,100,100,,,,,,,,,, +Hushtan Ginetiphracts,Ginetiphracts,Infantry,Infantry,20,1,4,0,0.5,0,0,0,0,1,2,0,10,100,100,100,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Republic Remnants,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Republic Wardens,RepublicWardens,Infantry,Infantry,40,3,3,0,0.8,1,0,0,0,0.8,2,0,10,100,100,100,1,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Elysia,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Elysian Light Commando Vehicle,ElysiaLCommandoVehicle,Armour,Vehicle,30,4,5,1.5,0.65,1.75,0,0,0.2,4.5,2,0,10,100,100,100,,,,,,,,,, +Elysian Assault APC,ElysianAssaultAPC,Armour,Vehicle,45,3,4,2,0.65,2,0,0,0.2,4.5,2,0,10,100,100,100,,,,,,,,,, +Elysian Oathsworn Squad,ElysianOathswornSquad,Infantry,Infantry,35,3,3,0,0.65,0.5,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +Elysian Light Mechs,ElysianLightMechs,Armour,Vehicle,45,3/4,3/2,2/0.5,0.9/0.8,1,0,0,0,2,2,0,10,100,100,100,1,,,,,,,,, +Elysian Jet Infantry,ElysianJetInfantry,Infantry,Infantry,30,2,3,0,0.65,0.5,0,0,0.2,2,2,0,10,100,100,100,,,,,,,,,, +Elysian Recon Infantry,ElysianReconInfantry,Infantry,Infantry,35,1/1,8/4,1/0.3,0.7/0.7,0.3,0,0,0.5,2,2,0,10,100,100,100,,stealth II,,,,,,,, +,,,,,,,,,,,,,,,,,100,100,100,,,,,,,,,, +Yar-Kassy,,,,,,,,,,,,,,,,,100,100,100,,,,,,,,,, +Dervish Assault Tank,YarkassyAssaultTank,Armour,Vehicle,90,1/2,8/3,3/1,0.75/0.8,1,1,1,0.35,4.5,2,0,10,100,100,100,,,,,,,,,, +Desert Raider Squad,YarkassyDesertRaiderSquad,Infantry,Infantry,35,2,2,0,0.5,0.5,0,0,0,0.8,2,0,10,100,100,100,1,,,,,,,,, +Elite Marksmen Squad,YarkassyEliteMarksmen,Infantry,Infantry,18,1,5,0.5,0.95,0,0,0,0.25,1.3,2,0,10,100,100,100,,stealth I,,,,,,,, +Ghar Haclem Ark'venuur Serpents,YarkassySerpents,Infantry,Infantry,25,3,2,0.5,0.45,0,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Arca,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Scum,ArcaScum,City,Infantry,20,2,1,0,0.25,0,0,0,0,1.1,1,0,10,100,100,100,0,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Zami,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Cryo-Clone Squad,ZamiCryoCloneSquad,Infantry,Infantry,25,2,2,0,0.75,0,0,0,0,1.5,2,0,10,100,100,100,0,,,,,,,,, +Immortals Cryo-Clone Squad,ImmortalsCryo-CloneSquad,Infantry,Infantry,35,3,2,0,0.8,0.55,0,0,0,1.5,2,0,10,100,100,100,0,,,,,,,,, +Zami War Tripod,ZamiWarTripod,Armour,Vehicle,100,2/6,4/1,2.5/0,0.8/0.8,2.5,2,1,0,2,2,0,10,100,100,100,,,,,,,,,, +Zami War Strider,ZamiWarStrider,Armour,Vehicle,85,1/7,4/1,2.5/0,0.75/0.75,2,2,1,0,2,2,0,10,100,100,100,,,,,,,,,, +Conscripted Miner Slaves,ConscriptedMinerSlaves,City,Infantry,12,2,3,0,0.45,0,0,0,0,1.2,2,0,10,100,100,100,1,,,,,,,,, +Satyr-9 Varanguard,Satyr-9Varanguard,City,Infantry,40,3,3,0.5,0.9,1,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +Krioss Ravager Pack,KriossRavagerPack,Infantry,Infantry,50,5,2,1,0.45,0.75,0,0,1,5,3,0,10,100,100,100,,,,,,,,,, +Snagaa Newborn,SnagaaNewborn,Infantry,Infantry,15,2,1,0,0.3,0,0,0,0,1.5,0,0,10,100,100,100,,,,,,,,,, +Axa Axa,AxaAxa,Infantry,Vehicle,45,4,1,0,0.7,0.5,1,2.5,0,1,0,0,10,100,100,100,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Stuntreen,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Headtaker Commando,HeadtakerCommando,City,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +Hareen Cari Immortals,HareenCariImmortals,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Exan,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Clan Warriors,ExanClanWarriors,City,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +Headtakers,ExanHeadtakers,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Methaphor,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Republican Guard,MethaphorRepublicanGuard,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +Green Guard (Elite Mountain Troops),MethaphorGreenGuard,Infantry,Infantry,40,2,2,0,0.6,0,0,0,0,1,3,0,10,100,100,100,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Noser,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Royal Guard,NoserRoyalGuard,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +Stalker Squad,NoserStalkerSquad,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Caer Bannoq,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Realm Hunters,CaerBannoqRealmHunters,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +Keepers of Secrets,CaerBannoqKeepers,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +Paladins,CaerBannoqPaladins,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +Seekers,CaerBannoqSeekers,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Vesparus,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Vesparusian Militia,VesparusMilitia,City,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +Freekorps Caine,VesparusFreekorps,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Inobria,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Infantry,InobriaInfantry,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +Tunnel Fighter,InobriaTunnelFighter,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Sartorius Rax,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Infantry,SartoriusInfantry,Infantry,Infantry,22,1,4,0,0.55,0,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +Heavy Infantry,SartoriusHeavyInfantry,Infantry,Infantry,32,2,3,0,0.6,0,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Spice,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Longclaw Pack,SpiceLongclawPack,Infantry,Infantry,16,2,3,0,0.6,0,0,0,0,1.4,2,0,10,100,100,100,1,,,,,,,,, +Tunneler Pack,SpiceTunnelerPack,Infantry,Infantry,20,2,3,0,0.6,0,0,0,0,1.4,2,0,10,100,100,100,1,,,,,,,,, +Healer Pack,SpiceHealerPack,Infantry,Infantry,14,2,3,0,0.6,0,0,0,0,1.4,2,0,10,100,100,100,1,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Amothep,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Pyramidians,Pyramidians,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, +Spyre Guard,SpyreGuard,Infantry,Infantry,20,1,4,0,0.5,0.3,0,0,0,1,2,0,10,100,100,100,1,,,,,,,,, \ No newline at end of file diff --git a/Assets/GWConquest/Scenes/GalaxyMap.unity b/Assets/GWConquest/Scenes/GalaxyMap.unity index 4868dcd..503a75b 100644 --- a/Assets/GWConquest/Scenes/GalaxyMap.unity +++ b/Assets/GWConquest/Scenes/GalaxyMap.unity @@ -16070,42 +16070,6 @@ RectTransform: m_AnchoredPosition: {x: 68.7, y: -9.3} m_SizeDelta: {x: 455.79993, y: 39.15039} m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &260143046 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 260143047} - m_Layer: 5 - m_Name: MovingFleet - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &260143047 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 260143046} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1886414993} - m_Father: {fileID: 1481547534} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 100} - m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &266275090 GameObject: m_ObjectHideFlags: 0 @@ -31161,6 +31125,7 @@ RectTransform: - {fileID: 587515776} - {fileID: 1054568953} - {fileID: 1481547534} + - {fileID: 1679029304} m_Father: {fileID: 1986334066} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -31188,6 +31153,7 @@ MonoBehaviour: DebugUI: {fileID: 587515775} PauseMenu: {fileID: 1054568952} GameUI: {fileID: 1967795785} + DragDropPlane: {fileID: 1679029304} MovingFleetsTransform: {fileID: 1481547534} doubleClickInterval: 0.2 --- !u!1 &494421157 @@ -92145,8 +92111,7 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 260143047} + m_Children: [] m_Father: {fileID: 494226835} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -102071,6 +102036,41 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1679023902} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1679029303 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1679029304} + m_Layer: 5 + m_Name: DragDropPlane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1679029304 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1679029303} + 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: 494226835} + m_RootOrder: 8 + 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!1001 &1684140558 PrefabInstance: m_ObjectHideFlags: 0 @@ -117328,246 +117328,6 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1885138119} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1001 &1886414992 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 260143047} - m_Modifications: - - target: {fileID: 200793009239835511, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6934264674992649803, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_SizeDelta.y - value: 15 - objectReference: {fileID: 0} - - target: {fileID: 6934264674992649803, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 7.5 - objectReference: {fileID: 0} - - target: {fileID: 6934264675066306908, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_SizeDelta.x - value: -26.999998 - objectReference: {fileID: 0} - - target: {fileID: 6934264675173919768, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_SizeDelta.y - value: 15 - objectReference: {fileID: 0} - - target: {fileID: 6934264675173919768, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 7.5 - objectReference: {fileID: 0} - - target: {fileID: 6934264675533803899, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_SizeDelta.y - value: 15 - objectReference: {fileID: 0} - - target: {fileID: 6934264675533803899, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 7.5 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734670, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_Name - value: FleetIcon - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734670, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_AnchorMax.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_AnchorMax.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_AnchorMin.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_AnchorMin.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_SizeDelta.x - value: 55 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_SizeDelta.y - value: 55 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6934264676128576589, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6934264676128576590, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_SizeDelta.y - value: 15 - objectReference: {fileID: 0} - - target: {fileID: 6934264676128576590, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 7.5 - objectReference: {fileID: 0} - - target: {fileID: 6934264676281443874, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6934264676281443875, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_SizeDelta.y - value: 15 - objectReference: {fileID: 0} - - target: {fileID: 6934264676281443875, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 7.5 - objectReference: {fileID: 0} - - target: {fileID: 6934264676736199430, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_SizeDelta.y - value: 15 - objectReference: {fileID: 0} - - target: {fileID: 6934264676736199430, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 7.5 - objectReference: {fileID: 0} - - target: {fileID: 6934264676898299648, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6934264676898299648, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8138893207784313283, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 9087990028491932013, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_LocalRotation.w - value: 0.7071076 - objectReference: {fileID: 0} - - target: {fileID: 9087990028491932013, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_LocalRotation.z - value: -0.707106 - objectReference: {fileID: 0} - - target: {fileID: 9087990028491932013, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: -90.00001 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: b4b4aee434157c54cb53399d1578f446, type: 3} ---- !u!224 &1886414993 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 6934264676097734671, guid: b4b4aee434157c54cb53399d1578f446, - type: 3} - m_PrefabInstance: {fileID: 1886414992} - m_PrefabAsset: {fileID: 0} --- !u!1 &1893307637 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/GWConquest/Scripts/Formation.cs b/Assets/GWConquest/Scripts/Formation.cs index a42ae50..8718c89 100644 --- a/Assets/GWConquest/Scripts/Formation.cs +++ b/Assets/GWConquest/Scripts/Formation.cs @@ -181,6 +181,8 @@ namespace GWConquest get => MovementState == FormationMovementState.Idle; } + public IInventory FormationInventory; + public void TryMoveToPlanet(Planet planet) { if(currentZone.zoneType == ZoneType.Space) @@ -543,6 +545,8 @@ namespace GWConquest UnitEntities = new EntityList(State, "Units"); SubFormationEntities = new EntityList(State, "SubFormations"); + FormationInventory = new CombinedInventory(() => Units.Select(u => u.Inventory)); + PathQueue = new ZoneList(State, "PathQueue"); AllFormations.Add(this); diff --git a/Assets/GWConquest/Scripts/Inventory.cs b/Assets/GWConquest/Scripts/Inventory.cs index d549cd3..af7bfb9 100644 --- a/Assets/GWConquest/Scripts/Inventory.cs +++ b/Assets/GWConquest/Scripts/Inventory.cs @@ -1,5 +1,6 @@ using UdpKit; using Bolt; +using System; using System.Linq; using System.Collections.Generic; using UnityEngine; @@ -9,8 +10,8 @@ namespace GWConquest [System.Serializable] public struct ItemStack : IIconObject, IProtocolToken { - public static int MaxStackSize { - get => GameManager.Instance.MaxStackSize; + public static int GetMaxStackSize(string item) { + return GameManager.Instance.MaxStackSize; } public bool IsUnit; @@ -149,8 +150,21 @@ namespace GWConquest } } - public class Inventory : BoltList + public interface IInventory { + int GetItemAmount(string item); + + bool AddItem(string item, int amount); + + int GetRemainingSpace(string item); + + bool RemoveItem(string item, int amount); + } + + public class Inventory : BoltList, IInventory + { + // Question: Can there be more then one half-full stack for an item type?? + public Inventory(IState _state, string _propertyName) : base(_state, _propertyName) { } public int StorageCapacity = int.MaxValue; @@ -165,28 +179,16 @@ namespace GWConquest return this.Count(stack => !stack.IsUnit && stack.ItemName == item); } - public bool DoesItemFit(string item, int amount) - { - int currentAmount = GetItemAmount(item); - int currentStacks = GetItemStackAmount(item); - int restAmount = amount - (ItemStack.MaxStackSize * currentStacks - currentAmount); - if(restAmount <= 0) - { - return true; - } - int neededStacks = Mathf.CeilToInt((float) restAmount / ItemStack.MaxStackSize); - return Count + neededStacks <= StorageCapacity; - } - public bool AddItem(string item, int amount) { - if(DoesItemFit(item, amount)) { + if(GetRemainingSpace(item) >= amount) { + int maxStackSize = ItemStack.GetMaxStackSize(item); for(int i = 0; i < Count; i++) { var stack = this[i]; if(!stack.IsUnit && stack.ItemName == item) { - int remainingRoom = ItemStack.MaxStackSize - stack.Amount; + int remainingRoom = maxStackSize - stack.Amount; if(remainingRoom >= amount) { stack.Amount += amount; @@ -195,7 +197,7 @@ namespace GWConquest } else { amount -= remainingRoom; - stack.Amount = ItemStack.MaxStackSize; + stack.Amount = maxStackSize; this[i] = stack; } @@ -204,7 +206,7 @@ namespace GWConquest while(amount > 0) { - int amountToAdd = Mathf.Min(amount, ItemStack.MaxStackSize); + int amountToAdd = Mathf.Min(amount, maxStackSize); Add(ItemStack.FromItem(item, amountToAdd)); amount -= amountToAdd; } @@ -216,6 +218,74 @@ namespace GWConquest } } + public int GetRemainingSpace(string item) + { + int maxStackSize = ItemStack.GetMaxStackSize(item); + int emptyStacks = StorageCapacity - Count; + + int currentAmount = GetItemAmount(item); + int currentStacks = GetItemStackAmount(item); + int restAmount = maxStackSize * currentStacks - currentAmount; + + return emptyStacks * maxStackSize + restAmount; + } + + public bool RemoveItem(string item, int amount) + { + + int currentAmount = GetItemAmount(item); + if(amount <= currentAmount) + { + // First iteration: take from partially full stacks only + int amountToRemove = RemoveFromStacks(item, amount, true); + + if(amountToRemove > 0) + { + // Second iteration: take also from full stacks + amountToRemove = RemoveFromStacks(item, amountToRemove, false); + } + + if(amountToRemove > 0) + { + BoltLog.Error("Inventory Error: Did not remove enough items of type {0} (desired: {1}, left: {2})", item, amount, amountToRemove); + } + + return true; + } + else { + return false; + } + } + + private int RemoveFromStacks(string item, int amount, bool partialStacksOnly) + { + int maxStackSize = ItemStack.GetMaxStackSize(item); + int amountToRemove = amount; + + for(int i = Count -1; i >= 0; i--) + { + var stack = this[i]; + if(!stack.IsUnit && stack.ItemName == item && (stack.Amount < maxStackSize || !partialStacksOnly)) + { + if(stack.Amount <= amountToRemove) + { + amountToRemove -= stack.Amount; + RemoveAt(i); + } + else { + stack.Amount -= amountToRemove; + this[i] = stack; + amountToRemove = 0; + } + if(amountToRemove <= 0) + { + return 0; + } + } + } + return amountToRemove; + } + public static IEnumerable AddAllItems(IEnumerable items) { //TODO Unit Items @@ -242,4 +312,95 @@ namespace GWConquest } } + + public class CombinedInventory : IInventory + { + private Func> InventoryFunc; + + public CombinedInventory(Func> _inventoryFunc) + { + InventoryFunc = _inventoryFunc; + } + + public int GetItemAmount(string item) + { + return InventoryFunc().Sum(inv => inv.GetItemAmount(item)); + } + + public int GetRemainingSpace(string item) + { + return InventoryFunc().Sum(inv => inv.GetRemainingSpace(item)); + } + + // TODO organize items for maximum space + public bool AddItem(string item, int amount) + { + if(GetRemainingSpace(item) >= amount) + { + int remainingAmount = amount; + foreach(var inv in InventoryFunc()) + { + int space = inv.GetRemainingSpace(item); + if(space > 0) + { + if(space >= remainingAmount) + { + return inv.AddItem(item, remainingAmount); + } + else { + inv.AddItem(item, space); + remainingAmount -= space; + } + } + } + BoltLog.Error("Could not add all items to combined inventory: item {0}, amount {1}, left {2}", item, amount, remainingAmount); + return true; + } + else { + return false; + } + } + + public bool RemoveItem(string item, int amount) + { + if(GetItemAmount(item) >= amount) + { + int remainingAmount = amount; + foreach(var inv in InventoryFunc()) + { + int invAmount = inv.GetItemAmount(item); + if(invAmount > 0) + { + if(invAmount >= remainingAmount) + { + return inv.RemoveItem(item, remainingAmount); + } + else { + inv.RemoveItem(item, invAmount); + remainingAmount -= invAmount; + } + } + } + BoltLog.Error("Could not remove all items from combined inventory: item {0}, amount {1}, left {2}", item, amount, remainingAmount); + return true; + } + else { + return false; + } + } + + } + + public static class InventoryExtensions + { + public static bool HasItem(this IInventory inventory, string item, int amount) + { + return inventory.GetItemAmount(item) >= amount; + } + + public static bool DoesItemFit(this IInventory inventory, string item, int amount) + { + return inventory.GetRemainingSpace(item) >= amount; + } + } } \ No newline at end of file diff --git a/Assets/GWConquest/Scripts/ServerCallbacks.cs b/Assets/GWConquest/Scripts/ServerCallbacks.cs index b5515e3..9a24bdf 100644 --- a/Assets/GWConquest/Scripts/ServerCallbacks.cs +++ b/Assets/GWConquest/Scripts/ServerCallbacks.cs @@ -106,5 +106,41 @@ namespace GWConquest var flank = evnt.BattleFlank?.GetComponent(); unit.StartShelling(flank); } + public override void OnEvent(MoveItemEvent evnt) + { + IInventory origin = null; + if(evnt.Origin.GetComponent() != null) + { + origin = evnt.Origin.GetComponent().Inventory; + } + else if(evnt.Origin.GetComponent() != null) { + origin = evnt.Origin.GetComponent().FormationInventory; + } + + IInventory target = null; + if(evnt.Target.GetComponent() != null) + { + target = evnt.Target.GetComponent().Inventory; + } + else if(evnt.Target.GetComponent() != null) { + target = evnt.Target.GetComponent().FormationInventory; + } + + if(origin != null && target != null) + { + if(origin.HasItem(evnt.ItemName, evnt.ItemAmount) && target.DoesItemFit(evnt.ItemName, evnt.ItemAmount)) + { + origin.RemoveItem(evnt.ItemName, evnt.ItemAmount); + target.AddItem(evnt.ItemName, evnt.ItemAmount); + } + else { + BoltLog.Error("Could not move {0} of item {1} between inventories", evnt.ItemAmount, evnt.ItemName); + } + + } + else { + BoltLog.Error("One of the specified inventories is null"); + } + } } } \ No newline at end of file diff --git a/Assets/GWConquest/Scripts/UI/DragDropElement.cs b/Assets/GWConquest/Scripts/UI/DragDropElement.cs index 61ec3ea..a7a90a2 100644 --- a/Assets/GWConquest/Scripts/UI/DragDropElement.cs +++ b/Assets/GWConquest/Scripts/UI/DragDropElement.cs @@ -44,8 +44,7 @@ namespace GWConquest hasMoved = true; OnDragBegin(); origParent = rectTransform.parent; - rectTransform.SetParent(rectTransform.GetComponentInParent().transform); - rectTransform.SetAsLastSibling(); + rectTransform.SetParent(IngameUI.Instance.DragDropPlane); } } @@ -58,8 +57,7 @@ namespace GWConquest { if (OnDragFinished()) { - rectTransform.SetParent(origParent); - rectTransform.localPosition = origPosition; + ResetToOriginalPosition(); } } hasMoved = false; @@ -70,6 +68,12 @@ namespace GWConquest } } + public void ResetToOriginalPosition() + { + rectTransform.SetParent(origParent); + rectTransform.localPosition = origPosition; + } + public virtual bool OnDragFinished() { diff --git a/Assets/GWConquest/Scripts/UI/IngameUI.cs b/Assets/GWConquest/Scripts/UI/IngameUI.cs index 66294bb..57a42c5 100644 --- a/Assets/GWConquest/Scripts/UI/IngameUI.cs +++ b/Assets/GWConquest/Scripts/UI/IngameUI.cs @@ -21,6 +21,7 @@ namespace GWConquest public GameObject DebugUI; public GameObject PauseMenu; public GameObject GameUI; + public RectTransform DragDropPlane; public RectTransform MovingFleetsTransform; diff --git a/Assets/GWConquest/Scripts/UI/ItemMoveTooltip.cs b/Assets/GWConquest/Scripts/UI/ItemMoveTooltip.cs new file mode 100644 index 0000000..9555c5d --- /dev/null +++ b/Assets/GWConquest/Scripts/UI/ItemMoveTooltip.cs @@ -0,0 +1,138 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace GWConquest +{ + + public class ItemMoveTooltip : MonoBehaviour + { + public Image ItemImage; + public InputField AmountField; + + + private ItemStack MovedItem; + + private TransportUIElement Origin; + private TransportUIElement Target; + private TransportUIItemIcon ItemUI; + + + public void Init(ItemStack _item, TransportUIItemIcon _itemUI, TransportUIElement _origin, TransportUIElement _target) + { + MovedItem = _item; + + ItemImage.sprite = MovedItem.Icon; + ItemImage.color = Util.UpdateColorRGB(ItemImage.color, MovedItem.IconColor); + + ItemUI = _itemUI; + + Origin = _origin; + Target = _target; + + int toTransfer = Mathf.Min(GetMaxTransferable(), MovedItem.Amount); + AmountField.text = toTransfer.ToString(); + } + + void FixedUpdate() + { + if(Input.GetButtonDown("Left Click")) + { + var rt = GetComponent(); + if(!RectTransformUtility.RectangleContainsScreenPoint(rt, Input.mousePosition)) + { + Cancel(); + } + } + } + + void Update() + { + if(!IngameUI.Instance.PlanetView.TransportUI.isActiveAndEnabled) + { + Cancel(); + } + } + + public void Cancel() + { + ItemUI.Amount.enabled = true; + ItemUI.Icon.enabled = true; + ItemUI.ResetToOriginalPosition(); + + Destroy(gameObject); + } + + public void Confirm() + { + if(int.TryParse(AmountField.text, out int current)) + { + int transferable = GetMaxTransferable(); + if(current <= transferable) + { + var ev = MoveItemEvent.Create(Bolt.GlobalTargets.OnlyServer); + ev.ItemName = MovedItem.ItemName; + ev.ItemAmount = current; + ev.Origin = Origin.Type == TransportUIElement.ObjectType.District ? Origin.District.entity : Origin.Formation.entity; + ev.Target = Target.Type == TransportUIElement.ObjectType.District ? Target.District.entity : Target.Formation.entity; + ev.Send(); + } + else { + BoltLog.Error("Amount {0} of item {1} is not transferable ({2})", current, MovedItem.ItemName, transferable); + } + } + else { + BoltLog.Error("Invalid amount: {0}", AmountField.text); + } + + Cancel(); + } + + public void ClickArrow(int amount) + { + if(int.TryParse(AmountField.text, out int current)) + { + AmountField.text = (current + amount).ToString(); + OnValueChanged(); + } + } + + public void OnValueChanged() + { + if(AmountField.text != null && AmountField.text != "") + { + if(int.TryParse(AmountField.text, out int amount)) + { + int max = GetMaxTransferable(); + if(amount > max) + { + AmountField.text = max.ToString(); + } + if(amount < 0) + { + AmountField.text = "0"; + } + } + else { + BoltLog.Error("bad string in input field: {0}", AmountField.text); + AmountField.text = ""; + } + } + + } + + public int GetMaxTransferable() + { + int available = Origin.GetInventory().GetItemAmount(MovedItem.ItemName); + + int remainingSpace = Target.GetInventory().GetRemainingSpace(MovedItem.ItemName); + + return Mathf.Min(available, remainingSpace); + + } + + + } + +} diff --git a/Assets/GWConquest/Scripts/UI/ItemMoveTooltip.cs.meta b/Assets/GWConquest/Scripts/UI/ItemMoveTooltip.cs.meta new file mode 100644 index 0000000..1a01ca6 --- /dev/null +++ b/Assets/GWConquest/Scripts/UI/ItemMoveTooltip.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a59da9e4f26fd4498f026a53accf6c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GWConquest/Scripts/UI/TransportUIElement.cs b/Assets/GWConquest/Scripts/UI/TransportUIElement.cs index b020b47..dd1ef58 100644 --- a/Assets/GWConquest/Scripts/UI/TransportUIElement.cs +++ b/Assets/GWConquest/Scripts/UI/TransportUIElement.cs @@ -70,6 +70,21 @@ namespace GWConquest Arrow.localEulerAngles = new Vector3(0f, 0f, IsExpanded ? -180f : -90f); } + public IInventory GetInventory() + { + if(Type == ObjectType.Planet) + { + return null; + } + else if(Type == ObjectType.District) + { + return District.Inventory; + } + else { + return Formation.FormationInventory; + } + } + private IEnumerable GetAllItems() { if(Type == ObjectType.Planet) @@ -177,6 +192,7 @@ namespace GWConquest var itemIconComp = itemIconGO.GetComponent(); itemIconComp.CanBeDragged = true; + itemIconComp.ParentUI = this; itemIconComp.UpdateDisplay(item); return itemIconComp; diff --git a/Assets/GWConquest/Scripts/UI/TransportUIItemIcon.cs b/Assets/GWConquest/Scripts/UI/TransportUIItemIcon.cs index d26172a..1eb2d84 100644 --- a/Assets/GWConquest/Scripts/UI/TransportUIItemIcon.cs +++ b/Assets/GWConquest/Scripts/UI/TransportUIItemIcon.cs @@ -5,6 +5,8 @@ namespace GWConquest { public class TransportUIItemIcon : DragDropElement, IUpdatable { + public GameObject MoveTooltipPrefab; + public Image Icon; public Text Amount; @@ -14,6 +16,8 @@ namespace GWConquest { public bool CanBeDragged = false; + public TransportUIElement ParentUI; + public void UpdateDisplay(ItemStack stack) { Stack = stack; @@ -35,8 +39,47 @@ namespace GWConquest { public override bool OnDragFinished() { + if(ParentUI != null && ParentUI.Type != TransportUIElement.ObjectType.Planet) + { + var mousePos = Input.mousePosition; + foreach(var ui in FindObjectsOfType()) + { + if (ui != ParentUI && RectTransformUtility.RectangleContainsScreenPoint(ui.GetComponent(), mousePos)) + { + if(ui.Type != TransportUIElement.ObjectType.Planet) + { + if(ui.GetInventory().GetRemainingSpace(Stack.ItemName) > 0) + { + var tooltipGO = Instantiate(MoveTooltipPrefab); + + tooltipGO.transform.SetParent(IngameUI.Instance.DragDropPlane); + tooltipGO.transform.position = mousePos; + + var tooltipComp = tooltipGO.GetComponent(); + tooltipComp.Init(Stack, this, ParentUI, ui); + + Icon.enabled = false; + Amount.enabled = false; + + return false; + } + else { + BoltLog.Info("No remaining space in target inventory!"); + } + } + } + } + } return true; } + void FixedUpdate() + { + if(ParentUI != null && !ParentUI.isActiveAndEnabled) + { + Destroy(gameObject); + } + } + } } \ No newline at end of file diff --git a/Assets/GWConquest/Scripts/UI/UnitInfoPanel.cs b/Assets/GWConquest/Scripts/UI/UnitInfoPanel.cs index 798be5a..816c965 100644 --- a/Assets/GWConquest/Scripts/UI/UnitInfoPanel.cs +++ b/Assets/GWConquest/Scripts/UI/UnitInfoPanel.cs @@ -58,6 +58,10 @@ namespace GWConquest [System.NonSerialized] public List FormationUnitsList = new List(); + public Image FormationFuelBar; + public Image FormationFoodBar; + public Image FormationSuppliesBar; + public bool IsBattleMenu; [System.NonSerialized] @@ -210,19 +214,32 @@ namespace GWConquest } else if(CurrentFormation != null) { - int totalHitpoints = CurrentFormation.Units.Sum(u => u.Hitpoints); - int maxHitpoints = CurrentFormation.Units.Sum(u => u.Class.Hitpoints); + var formationUnits = CurrentFormation.Units; + int totalHitpoints = formationUnits.Sum(u => u.Hitpoints); + int maxHitpoints = formationUnits.Sum(u => u.Class.Hitpoints); HealthBar.fillAmount = (float) totalHitpoints / maxHitpoints; HealthBarText.text = totalHitpoints.ToString() + "/" + maxHitpoints.ToString(); - float maxMorale = CurrentFormation.Units.Sum(u => u.Class.Morale); + float maxMorale = formationUnits.Sum(u => u.Class.Morale); float moralePct = Mathf.Min(CurrentFormation.Morale/maxMorale, 1f); MoraleBar.fillAmount = moralePct; MoraleBarText.text = (moralePct*100).ToString() + "%"; MoraleBar.color = Util.UpdateColorRGB(MoraleBar.color, CurrentFormation.Player.Color); + int currentFuel = formationUnits.Sum(u => u.Fuel); + int maxFuel = formationUnits.Sum(u => u.Class.FuelCapacity); + FormationFuelBar.fillAmount = (float) currentFuel / maxFuel; + + int currentFood = formationUnits.Sum(u => u.Food); + int maxFood = formationUnits.Sum(u => u.Class.FoodCapacity); + FormationFoodBar.fillAmount = (float) currentFood / maxFood; + + int currentSupplies = formationUnits.Sum(u => u.Supplies); + int maxSupplies = formationUnits.Sum(u => u.Class.SuppliesCapacity); + FormationSuppliesBar.fillAmount = (float) currentSupplies / maxSupplies; + var hero = CurrentFormation.HeroUnit; if(hero != null) { @@ -234,7 +251,7 @@ namespace GWConquest FormationHeroName.text = "No Leader"; } - var formationUnitList = TransportUIUnitTypeIcon.SumUnitTypes(CurrentFormation.Units); + var formationUnitList = TransportUIUnitTypeIcon.SumUnitTypes(formationUnits); GWLayout.UpdateGameObjects(FormationUnitsList, formationUnitList, FormationUnitsPrefab, FormationUnitsTransform); } diff --git a/Assets/GWConquest/Scripts/Unit.cs b/Assets/GWConquest/Scripts/Unit.cs index 8e0fd22..0a65a26 100644 --- a/Assets/GWConquest/Scripts/Unit.cs +++ b/Assets/GWConquest/Scripts/Unit.cs @@ -70,6 +70,21 @@ namespace GWConquest set => State.Morale = value; } + public int Fuel { + get => State.Fuel; + set => State.Fuel = value; + } + + public int Food { + get => State.Food; + set => State.Food = value; + } + + public int Supplies { + get => State.Supplies; + set => State.Supplies = value; + } + public Player Player { get => Formation.Player; } @@ -176,6 +191,10 @@ namespace GWConquest State.AddCallback("UnitClass", () => { Inventory.StorageCapacity = Class.InventorySlots; Equipment.StorageCapacity = Class.EquipmentSlots; + + Fuel = Class.FuelCapacity; + Food = Class.FoodCapacity; + Supplies = Class.SuppliesCapacity; }); if(BoltNetwork.IsServer) diff --git a/Assets/GWConquest/Scripts/UnitClass.cs b/Assets/GWConquest/Scripts/UnitClass.cs index 0549675..8f9c197 100644 --- a/Assets/GWConquest/Scripts/UnitClass.cs +++ b/Assets/GWConquest/Scripts/UnitClass.cs @@ -101,6 +101,10 @@ namespace GWConquest unitClass.CreditUpkeep = data.GetFloat("Credit Upkeep"); unitClass.FoodUpkeep = data.GetFloat("Food Upkeep"); + unitClass.FuelCapacity = data.GetInt("Fuel Capacity"); + unitClass.FoodCapacity = data.GetInt("Food Capacity"); + unitClass.SuppliesCapacity = data.GetInt("Supplies Capacity"); + if(zoneType == ZoneType.Space) { unitClass.FactoryType = FactoryType.Space; @@ -321,6 +325,10 @@ namespace GWConquest public float CreditUpkeep; public float FoodUpkeep; + public int FuelCapacity; + public int FoodCapacity; + public int SuppliesCapacity; + public int MinFactoryTier = 1; public FactoryType FactoryType; diff --git a/Assets/Photon/PhotonBolt/assemblies/bolt.user.dll b/Assets/Photon/PhotonBolt/assemblies/bolt.user.dll index 13eb7c4dd62a089133fc90ef885bf6ffeb639ebb..ffd31f57aaf0e2e011ccc5b04c34f4c3404052df 100644 GIT binary patch literal 93696 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 Zb)-W6q<(bq{%(wYo6Gg5|9;{$@c$PX!G!<- delta 27660 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�yDJ-T&j*QS@7mYxU9 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