good enough #33

This commit is contained in:
Rowan 2025-08-16 16:17:16 -04:00
parent 5f99039a69
commit 9f1ebe05a1
89 changed files with 4311 additions and 2425 deletions

3
.gitignore vendored
View file

@ -100,3 +100,6 @@ InitTestScene*.unity*
# Auto-generated scenes by play mode tests
/[Aa]ssets/[Ii]nit[Tt]est[Ss]cene*.unity*
/[Aa]ssets/[Ss]amples/
/[Aa]ssets/[Ss]amples.meta

View file

@ -113,6 +113,15 @@
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "Inventory",
"type": "Button",
"id": "bf48e9be-890c-46e9-80a2-1d7ecc85e20b",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
}
],
"bindings": [
@ -577,6 +586,28 @@
"action": "Reload",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "7da2a8fd-741d-4e7c-86dc-64678b958e39",
"path": "<Keyboard>/tab",
"interactions": "",
"processors": "",
"groups": ";Keyboard&Mouse",
"action": "Inventory",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "87ba6bee-8062-426f-87c4-7fad35da459b",
"path": "<Gamepad>/buttonEast",
"interactions": "",
"processors": "",
"groups": ";Gamepad",
"action": "Inventory",
"isComposite": false,
"isPartOfComposite": false
}
]
},
@ -673,6 +704,15 @@
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "Inventory",
"type": "Button",
"id": "8234c274-3165-4e2e-8d1c-74103faafd8a",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
}
],
"bindings": [
@ -1093,6 +1133,28 @@
"action": "TrackedDeviceOrientation",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "be1028c2-a4be-44d9-8a8a-31172540440c",
"path": "<Gamepad>/buttonEast",
"interactions": "",
"processors": "",
"groups": ";Gamepad",
"action": "Inventory",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "3b96fa74-9d2b-473b-8125-6467d3e39870",
"path": "<Keyboard>/tab",
"interactions": "",
"processors": "",
"groups": ";Keyboard&Mouse",
"action": "Inventory",
"isComposite": false,
"isPartOfComposite": false
}
]
}

View file

@ -30,7 +30,7 @@ Transform:
m_GameObject: {fileID: 2892703864492016621}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.38268343, z: 0, w: 0.92387956}
m_LocalPosition: {x: -2, y: 0.005, z: 0}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.4, y: 0.01, z: 0.2}
m_ConstrainProportionsScale: 0
m_Children: []
@ -123,6 +123,12 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
oneTimeUse: 0
onSelected:
m_PersistentCalls:
m_Calls: []
onDeselected:
m_PersistentCalls:
m_Calls: []
onInteracted:
m_PersistentCalls:
m_Calls:

View file

@ -0,0 +1,88 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &2892703864492016621
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2368094401510200604}
- component: {fileID: 3721857971285848745}
- component: {fileID: 4840302974988827429}
m_Layer: 8
m_Name: KeyPreview
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2368094401510200604
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2892703864492016621}
serializedVersion: 2
m_LocalRotation: {x: 0.6830128, y: -0.18301234, z: -0.18301241, w: 0.68301284}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 2, y: 0.02, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 60, y: -90, z: -90}
--- !u!33 &3721857971285848745
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2892703864492016621}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &4840302974988827429
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2892703864492016621}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: be8072c6f51e356f8a8c5affbe22973f, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}

View file

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: cbffd5b6d954099a491f8a2a744b6d01
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ba062aa6c92b140379dbc06b43dd3b9b
guid: 9d57b977e58d1b58c90a05d6247ee000
folderAsset: yes
DefaultImporter:
externalObjects: {}

View file

@ -24,7 +24,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3189041518118701393}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
m_LocalRotation: {x: 0.0017443874, y: -0.9994323, z: 0.033643518, w: 0.000058764297}
m_LocalPosition: {x: 0, y: 0.375, z: -1.2}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
@ -91,12 +91,65 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 272
objectReference: {fileID: 0}
- target: {fileID: -5922622823359544968, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Layer
value: 0
objectReference: {fileID: 0}
- target: {fileID: -5568371526223589888, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Layer
value: 0
objectReference: {fileID: 0}
- target: {fileID: -3898791185525528228, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_RenderingLayerMask
value: 1
objectReference: {fileID: 0}
- target: {fileID: -2059808378567916338, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Layer
value: 0
objectReference: {fileID: 0}
- target: {fileID: -1967758284531576944, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_RenderingLayerMask
value: 1
objectReference: {fileID: 0}
- target: {fileID: -1919110505097373512, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Layer
value: 0
objectReference: {fileID: 0}
- target: {fileID: -1374039232608429058, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_RenderingLayerMask
value: 1
objectReference: {fileID: 0}
- target: {fileID: 236216658851537685, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_RenderingLayerMask
value: 1
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Name
value: Glock17Equipped
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Layer
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5232627393660835655, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_RenderingLayerMask
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6619225641134156614, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Layer
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7202271454713460447, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_RenderingLayerMask
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7556193500268387829, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Layer
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_RemovedGameObjects:
- {fileID: -2407699025559542186, guid: bf9d862a19647f28795df2e666425003, type: 3}
m_AddedGameObjects:
- targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
insertIndex: -1

View file

@ -0,0 +1,112 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &3538664591492219717
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_LocalRotation.w
value: 0.65328145
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_LocalRotation.x
value: -0.2705982
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_LocalRotation.y
value: -0.65328145
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_LocalRotation.z
value: -0.2705982
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 315
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 270
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -5922622823359544968, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Layer
value: 8
objectReference: {fileID: 0}
- target: {fileID: -5568371526223589888, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Layer
value: 8
objectReference: {fileID: 0}
- target: {fileID: -3898791185525528228, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_RenderingLayerMask
value: 2
objectReference: {fileID: 0}
- target: {fileID: -2059808378567916338, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Layer
value: 8
objectReference: {fileID: 0}
- target: {fileID: -1967758284531576944, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_RenderingLayerMask
value: 2
objectReference: {fileID: 0}
- target: {fileID: -1919110505097373512, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Layer
value: 8
objectReference: {fileID: 0}
- target: {fileID: -1374039232608429058, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_RenderingLayerMask
value: 2
objectReference: {fileID: 0}
- target: {fileID: 236216658851537685, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_RenderingLayerMask
value: 2
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Name
value: Glock17Preview
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Layer
value: 8
objectReference: {fileID: 0}
- target: {fileID: 5232627393660835655, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_RenderingLayerMask
value: 2
objectReference: {fileID: 0}
- target: {fileID: 6619225641134156614, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Layer
value: 8
objectReference: {fileID: 0}
- target: {fileID: 7202271454713460447, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_RenderingLayerMask
value: 2
objectReference: {fileID: 0}
- target: {fileID: 7556193500268387829, guid: bf9d862a19647f28795df2e666425003, type: 3}
propertyPath: m_Layer
value: 8
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects:
- {fileID: -2407699025559542186, guid: bf9d862a19647f28795df2e666425003, type: 3}
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: bf9d862a19647f28795df2e666425003, type: 3}

View file

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f853e5887a27c240d90ca5c19cc270e1
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,21 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 6c481c42e360ed2b89fb1f5fc4558fdb, type: 3}
m_Name: InventoryInput
m_EditorClassIdentifier:
started: {fileID: 0}
performed: {fileID: 11400000, guid: 05ac93739cc1d1796b9403f2421c056b, type: 2}
canceled: {fileID: 0}
waiting: {fileID: 0}
disabled: {fileID: 0}
reactiveValue: {fileID: 0}
valueAsButton: {fileID: 0}

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f168a80804247334e9d8ec837f58c9e1
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,14 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 56805e83aabe387929ad23e06adda5fd, type: 3}
m_Name: InventoryInputEvent
m_EditorClassIdentifier:

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 05ac93739cc1d1796b9403f2421c056b
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View file

@ -15,10 +15,9 @@ MonoBehaviour:
id: 1f650f4d-35fc-412f-b3fc-cf262c9d3e5f
displayName: Debug Key
description:
icon: {fileID: -123325096, guid: b5ca4025143f3c2078e7070eea546959, type: 3}
tags: []
type: 0
worldPrefab: {fileID: 2892703864492016621, guid: 51202e3c62c3d3e1c9bb0ff9c09a608f, type: 3}
previewPrefab: {fileID: 2892703864492016621, guid: cbffd5b6d954099a491f8a2a744b6d01, type: 3}
stackable: 0
maxStackCount: 10
icon: {fileID: -1304905567622442630, guid: 4e01e0da3979f115d951c3cb798e4313, type: 3}
instancePrefab: {fileID: 2892703864492016621, guid: 51202e3c62c3d3e1c9bb0ff9c09a608f, type: 3}
previewPrefab: {fileID: 0}

View file

@ -14,11 +14,12 @@ MonoBehaviour:
m_EditorClassIdentifier:
id: 3aaccf06-f737-4e9b-9daf-2d99e69a14e7
displayName: Pistol
description:
description: A semi-automatic pistol. Fires 10mm ammunition from a 10-round magazine.
Easy to use, high rate of fire.
icon: {fileID: -1451803064, guid: acf7be11a7aec869a96fca7c3cb2e6ff, type: 3}
tags: []
worldPrefab: {fileID: 919132149155446097, guid: bf9d862a19647f28795df2e666425003, type: 3}
previewPrefab: {fileID: 919132149155446097, guid: bf9d862a19647f28795df2e666425003, type: 3}
previewPrefab: {fileID: 4457074219773640212, guid: f853e5887a27c240d90ca5c19cc270e1, type: 3}
stackable: 0
maxStackCount: 1
equippedPrefab: {fileID: 492801038359376716, guid: 34383341362bbd7c59b199a69ed897e4, type: 3}

View file

@ -9,15 +9,9 @@ MonoBehaviour:
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1ca5a6e9c022cf971a176095a74df394, type: 3}
m_Script: {fileID: 11500000, guid: 267a9c1f4bb280a6a93f4240b8485056, type: 3}
m_Name: SelectedItem
m_EditorClassIdentifier:
id: 7602a606-109c-4a58-8786-f4c95fee7a92
displayName:
description:
icon: {fileID: 0}
tags: []
worldPrefab: {fileID: 0}
previewPrefab: {fileID: 0}
stackable: 0
maxStackCount: 1
Description:
value:
value: {fileID: 11400000, guid: 83a7512982c0868bbacfd587c15efbea, type: 2}

View file

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 0f16091ed7577d3268f2725cf823d4da
guid: 37d00232a0bee1e8e923705187ff2187
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000

View file

@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 9702da9b93bb25bf089c54dc37cc44e7, type: 3}
m_Name: TestInventory
m_EditorClassIdentifier:
serializableItems:
items:
- Item: {fileID: 11400000, guid: 3a9b5fc9b523890cf8abd310dbc64940, type: 2}
count: 1
- Item: {fileID: 11400000, guid: 83a7512982c0868bbacfd587c15efbea, type: 2}

View file

@ -0,0 +1,17 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1a85afc7b5f9bc9f386e4f76d3725daf, type: 3}
m_Name: ItemPreviewDelta
m_EditorClassIdentifier:
Description:
value:
value: {x: 0, y: 0}

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 61bec5de28967d14d8027ebd7c009e4e
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,19 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7f5d678d3982081db9d3d4897850cf76, type: 3}
m_Name: ItemPreviewZoom
m_EditorClassIdentifier:
Description:
value:
value: 0
clamp: 1
minMax: {x: -50, y: 10}

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b611ded87bd3825d7bf45e43eaea670d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View file

@ -1,9 +1,8 @@
fileFormatVersion: 2
guid: 8a0c9218a650547d98138cd835033977
guid: eccfcb5811706e3efba1ef8e033b5dda
folderAsset: yes
timeCreated: 1484670163
licenseType: Store
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 12ee09150bce8c611a562640b944ff62
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6dca14e3027067463143efe5eee5b62c
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -1,9 +1,8 @@
fileFormatVersion: 2
guid: 5a9bcd70e6a4b4b05badaa72e827d8e0
guid: f0ff03fa9c3fb660eb36c1516f071f88
folderAsset: yes
timeCreated: 1475835190
licenseType: Store
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -119,7 +119,7 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &1223357529
--- !u!1 &341000910
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -127,76 +127,9 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1223357531}
- component: {fileID: 1223357530}
- component: {fileID: 1223357532}
m_Layer: 5
m_Name: UIDocument
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1223357530
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1223357529}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_PanelSettings: {fileID: 11400000, guid: d8894ba51a816c451b072d957a1cfe45, type: 2}
m_ParentUI: {fileID: 0}
sourceAsset: {fileID: 9197481963319205126, guid: 8cea95d71232d8469b296ca7eb59e0a1, type: 3}
m_SortingOrder: 0
m_WorldSpaceSizeMode: 1
m_WorldSpaceWidth: 1920
m_WorldSpaceHeight: 1080
--- !u!4 &1223357531
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1223357529}
serializedVersion: 2
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_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1223357532
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1223357529}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b37256e37c5968be89fa34dd8344744f, type: 3}
m_Name:
m_EditorClassIdentifier:
doc: {fileID: 1223357530}
inventory: {fileID: 11400000, guid: cd3f9ac2afa71f8b6acb3fb0cacfe441, type: 2}
template: {fileID: 9197481963319205126, guid: 01b74a9c8f3685fb2880379892a17e46, type: 3}
--- !u!1 &1411077289
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1411077291}
- component: {fileID: 1411077290}
- component: {fileID: 1411077292}
- component: {fileID: 341000913}
- component: {fileID: 341000912}
- component: {fileID: 341000911}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
@ -204,24 +137,47 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &1411077290
--- !u!114 &341000911
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 341000910}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Version: 3
m_UsePipelineSettings: 1
m_AdditionalLightsShadowResolutionTier: 2
m_LightLayerMask: 1
m_RenderingLayers: 2
m_CustomShadowLayers: 0
m_ShadowLayerMask: 1
m_ShadowRenderingLayers: 1
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 0
--- !u!108 &341000912
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1411077289}
m_GameObject: {fileID: 341000910}
m_Enabled: 1
serializedVersion: 11
m_Type: 1
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Type: 0
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
@ -253,7 +209,7 @@ Light:
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_RenderingLayerMask: 2
m_Lightmapping: 4
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
@ -269,45 +225,22 @@ Light:
m_LightUnit: 1
m_LuxAtDistance: 1
m_EnableSpotReflector: 1
--- !u!4 &1411077291
--- !u!4 &341000913
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1411077289}
m_GameObject: {fileID: 341000910}
serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!114 &1411077292
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1411077289}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Version: 3
m_UsePipelineSettings: 1
m_AdditionalLightsShadowResolutionTier: 2
m_LightLayerMask: 1
m_RenderingLayers: 1
m_CustomShadowLayers: 0
m_ShadowLayerMask: 1
m_ShadowRenderingLayers: 1
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 0
--- !u!1 &1889780342
--- !u!1 &590341843
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -315,98 +248,23 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1889780345}
- component: {fileID: 1889780344}
- component: {fileID: 1889780343}
- component: {fileID: 1889780346}
- component: {fileID: 590341847}
- component: {fileID: 590341846}
- component: {fileID: 590341844}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Name: Preview Camera
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &1889780343
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1889780342}
m_Enabled: 1
--- !u!20 &1889780344
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1889780342}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 2
m_BackGroundColor: {r: 1, g: 0.8726415, b: 0.986825, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &1889780345
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1889780342}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1889780346
--- !u!114 &590341844
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1889780342}
m_GameObject: {fileID: 590341843}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
@ -444,10 +302,129 @@ MonoBehaviour:
m_MipBias: 0
m_VarianceClampScale: 0.9
m_ContrastAdaptiveSharpening: 0
--- !u!20 &590341846
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 590341843}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 4
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 256
m_RenderingPath: -1
m_TargetTexture: {fileID: 8400000, guid: fc19a022409ab0d408fa0e78cfeab827, type: 2}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &590341847
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 590341843}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -3}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1153614253
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1153614255}
- component: {fileID: 1153614256}
m_Layer: 8
m_Name: Item Preview
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1153614255
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1153614253}
serializedVersion: 2
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_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1153614256
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1153614253}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: cd025ca0b2f740f7f8356cd3113163a2, type: 3}
m_Name:
m_EditorClassIdentifier:
selectedItem: {fileID: 11400000, guid: 37d00232a0bee1e8e923705187ff2187, type: 2}
camera: {fileID: 590341847}
rotationDelta: {fileID: 11400000, guid: 61bec5de28967d14d8027ebd7c009e4e, type: 2}
sensitivity: 25
angleSnap: 10
zoom: {fileID: 11400000, guid: b611ded87bd3825d7bf45e43eaea670d, type: 2}
zoomSensitivity: 0.025
previewLayer:
index: 8
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 1889780345}
- {fileID: 1411077291}
- {fileID: 1223357531}
- {fileID: 590341847}
- {fileID: 341000913}
- {fileID: 1153614255}

View file

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 374b635465e0bf8888b5381eb4a6d9b6
guid: 4a31ffa7a4feefc509c20ec6e65133f0
DefaultImporter:
externalObjects: {}
userData:

View file

@ -0,0 +1,20 @@
using KitsuneCafe.Sys;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
namespace KitsuneCafe.Editor
{
[CustomPropertyDrawer(typeof(Layer))]
public class LayerPropertyDrawer : PropertyDrawer
{
public override VisualElement CreatePropertyGUI(SerializedProperty property)
{
var field = new LayerField(ObjectNames.NicifyVariableName(property.name));
field.Bind(property.serializedObject);
field.bindingPath = "index";
return field;
}
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 94cf5c15477490054ac75b400651436d

View file

@ -0,0 +1,14 @@
using UnityEditor;
using UnityEngine;
namespace KitsuneCafe.Editor
{
// [CustomPropertyDrawer(typeof(SceneAsset))]
public class SceneAssetPropertyDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
EditorGUI.ObjectField(position, property, typeof(SceneAsset), label);
}
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a83d0e4d07a8192a597646d11504b235

View file

@ -6,7 +6,7 @@ using KitsuneCafe.SOAP;
using R3;
using UnityEngine;
namespace KitsuneCafe.Entity
namespace KitsuneCafe.Entities
{
public class AimFeature : MonoBehaviour
{

View file

@ -1,6 +1,6 @@
using UnityEngine;
namespace KitsuneCafe.Entity
namespace KitsuneCafe.Entities
{
public class BoneAttachment : MonoBehaviour
{

View file

@ -1,6 +1,6 @@
using UnityEngine;
namespace KitsuneCafe.Entity
namespace KitsuneCafe.Entities
{
public class DamageSource : MonoBehaviour, IDamaging
{

View file

@ -2,7 +2,7 @@ using KitsuneCafe.Sys.Attributes;
using R3;
using UnityEngine;
namespace KitsuneCafe.Entity
namespace KitsuneCafe.Entities
{
public class DummyAnimator : MonoBehaviour
{

View file

@ -5,7 +5,7 @@ using KitsuneCafe.Sys.Attributes;
using R3;
using UnityEngine;
namespace KitsuneCafe.Entity
namespace KitsuneCafe.Entities
{
public class EntityAnimator : MonoBehaviour
{

View file

@ -2,7 +2,7 @@ using System;
using R3;
using UnityEngine;
namespace KitsuneCafe.Entity
namespace KitsuneCafe.Entities
{
public record HealthChanged(int Previous, int Current)
{

View file

@ -1,6 +1,6 @@
using KitsuneCafe.Sys;
namespace KitsuneCafe.Entity
namespace KitsuneCafe.Entities
{
public interface IDamageable : IGameObject
{

View file

@ -1,6 +1,6 @@
using KitsuneCafe.Sys;
namespace KitsuneCafe.Entity
namespace KitsuneCafe.Entities
{
public interface IDamaging : IGameObject
{

View file

@ -2,15 +2,15 @@ using UnityEngine;
using UnityEngine.Events;
using static UnityEngine.InputSystem.InputAction;
namespace KitsuneCafe.Entity
namespace KitsuneCafe.Entities
{
public interface IInputProvider
{
Vector2 MovementDirection { get; }
bool Sprinting { get; }
bool Interacting { get; }
Vector2 MovementDirection { get; }
bool Sprinting { get; }
bool Interacting { get; }
}
public class Input : MonoBehaviour
{
[SerializeField]

View file

@ -4,7 +4,7 @@ using KitsuneCafe.SOAP;
using R3;
using UnityEngine;
namespace KitsuneCafe.Entity
namespace KitsuneCafe.Entities
{
public class Motor : MonoBehaviour
{

View file

@ -1,6 +1,6 @@
using UnityEngine;
namespace KitsuneCafe.Entity
namespace KitsuneCafe.Entities
{
public class Spring : MonoBehaviour
{

View file

@ -2,7 +2,7 @@ using KitsuneCafe.SOAP;
using R3;
using UnityEngine;
namespace KitsuneCafe.Entity
namespace KitsuneCafe.Entities
{
public class SprintFeature : MonoBehaviour
{

View file

@ -1,5 +1,5 @@
using System;
using KitsuneCafe.Entity;
using KitsuneCafe.Entities;
using KitsuneCafe.SOAP;
using R3;
using UnityEngine;

View file

@ -1,5 +1,5 @@
using System;
using KitsuneCafe.Entity;
using KitsuneCafe.Entities;
using KitsuneCafe.Extension;
using KitsuneCafe.SOAP;
using R3;

View file

@ -84,99 +84,42 @@ namespace KitsuneCafe.ItemSystem
}
[CreateAssetMenu(menuName = KitsuneCafeMenu.Item + "Inventory")]
public class Inventory : ScriptableObject, IList, IInventory<InventoryItem>, IEnumerable<InventoryItem>, IObservableCollection<InventoryItem>, ISerializationCallbackReceiver
public class Inventory : ScriptableObject, IList, IInventory<InventoryItem>, IEnumerable<InventoryItem>
{
[SerializeField]
private List<InventoryItem> serializableItems = new();
private ObservableList<InventoryItem> runtimeItems;
private List<InventoryItem> items = new();
[SerializeField]
private int capacity = 8;
public event NotifyCollectionChangedEventHandler<InventoryItem> CollectionChanged = default;
public int Capacity => capacity;
public int Count => runtimeItems?.Count ?? 0;
public int Count => items.Count;
public bool IsEmpty => Count == 0;
public bool IsFull => Count == Capacity;
public object SyncRoot => runtimeItems.SyncRoot;
public object SyncRoot => ((IList)items).SyncRoot;
public bool IsFixedSize => ((IList)runtimeItems).IsFixedSize;
public bool IsFixedSize => ((IList)items).IsFixedSize;
public bool IsReadOnly => ((IList)runtimeItems).IsReadOnly;
public bool IsReadOnly => ((IList)items).IsReadOnly;
public bool IsSynchronized => ((ICollection)runtimeItems).IsSynchronized;
public bool IsSynchronized => ((ICollection)items).IsSynchronized;
object IList.this[int index] { get => runtimeItems[index]; set => runtimeItems[index] = (InventoryItem)value; }
object IList.this[int index] { get => items[index]; set => items[index] = (InventoryItem)value; }
public InventoryItem this[int index]
{
get => runtimeItems[index];
set => runtimeItems[index] = value;
}
private void OnEnable()
{
if (runtimeItems == null)
{
runtimeItems = new ObservableList<InventoryItem>();
}
runtimeItems.CollectionChanged -= OnCollectionChanged;
runtimeItems.CollectionChanged += OnCollectionChanged;
}
private void OnDisable()
{
if (runtimeItems != null)
{
runtimeItems.CollectionChanged -= OnCollectionChanged;
}
}
private void OnCollectionChanged(in NotifyCollectionChangedEventArgs<InventoryItem> e)
{
CollectionChanged?.Invoke(e);
}
public void OnBeforeSerialize()
{
if (runtimeItems != null)
{
serializableItems.Clear();
foreach (var item in runtimeItems)
{
serializableItems.Add(item);
}
}
}
public void OnAfterDeserialize()
{
if (runtimeItems == null)
{
runtimeItems = new ObservableList<InventoryItem>();
}
else
{
runtimeItems.Clear();
}
foreach (var item in serializableItems)
{
runtimeItems.Add(item);
}
get => items[index];
set => items[index] = value;
}
public IEnumerable<InventoryItem> Find(Func<InventoryItem, bool> predicate)
{
for (int i = 0; i < Count; i++)
{
var item = runtimeItems[i];
var item = items[i];
if (predicate(item))
{
@ -194,7 +137,7 @@ namespace KitsuneCafe.ItemSystem
for (int i = 0; i < Count; i++)
{
var existingItem = runtimeItems[i];
var existingItem = items[i];
if (existingItem.Equals(item))
{
@ -204,7 +147,7 @@ namespace KitsuneCafe.ItemSystem
}
var consumedAmount = existingItem.IncreaseCount(count, out var updatedItem);
runtimeItems[i] = updatedItem.Value;
items[i] = updatedItem.Value;
count -= consumedAmount;
if (count <= 0)
@ -227,7 +170,7 @@ namespace KitsuneCafe.ItemSystem
}
count -= InventoryItem.Create(item, count, out var newItem);
runtimeItems.Add(newItem.Value);
items.Add(newItem.Value);
}
@ -253,22 +196,22 @@ namespace KitsuneCafe.ItemSystem
return Result.Err<Unit, InventoryError>(InventoryError.InvalidQuantity);
}
for (int i = runtimeItems.Count - 1; i >= 0; i--)
for (int i = items.Count - 1; i >= 0; i--)
{
var existingItem = runtimeItems[i];
var existingItem = items[i];
if (existingItem.Item == item)
{
if (existingItem.Count > count)
{
existingItem.ReduceCount(count, out var updatedItem);
runtimeItems[i] = updatedItem.Value;
items[i] = updatedItem.Value;
return Result.Ok<Unit, InventoryError>(Unit.Default);
}
else
{
count -= existingItem.Count;
runtimeItems.RemoveAt(i);
items.RemoveAt(i);
if (count == 0)
{
@ -290,7 +233,7 @@ namespace KitsuneCafe.ItemSystem
{
for (int i = 0; i < Count; i++)
{
if (runtimeItems[i].Equals(item))
if (items[i].Equals(item))
{
return true;
}
@ -301,7 +244,7 @@ namespace KitsuneCafe.ItemSystem
public IEnumerator<InventoryItem> GetEnumerator()
{
return runtimeItems.GetEnumerator();
return items.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
@ -309,49 +252,44 @@ namespace KitsuneCafe.ItemSystem
return GetEnumerator();
}
public ISynchronizedView<InventoryItem, TView> CreateView<TView>(Func<InventoryItem, TView> transform)
{
return runtimeItems.CreateView(transform);
}
public int Add(object value)
{
return ((IList)runtimeItems).Add(value);
return ((IList)items).Add(value);
}
public void Clear()
{
((IList)runtimeItems).Clear();
((IList)items).Clear();
}
public bool Contains(object value)
{
return ((IList)runtimeItems).Contains(value);
return ((IList)items).Contains(value);
}
public int IndexOf(object value)
{
return ((IList)runtimeItems).IndexOf(value);
return ((IList)items).IndexOf(value);
}
public void Insert(int index, object value)
{
((IList)runtimeItems).Insert(index, value);
((IList)items).Insert(index, value);
}
public void Remove(object value)
{
((IList)runtimeItems).Remove(value);
((IList)items).Remove(value);
}
public void RemoveAt(int index)
{
((IList)runtimeItems).RemoveAt(index);
((IList)items).RemoveAt(index);
}
public void CopyTo(Array array, int index)
{
((ICollection)runtimeItems).CopyTo(array, index);
((ICollection)items).CopyTo(array, index);
}
}
}

View file

@ -12,9 +12,9 @@ namespace KitsuneCafe.SOAP
[SerializeField]
protected SerializableReactiveProperty<T> value;
public T Value { get => value.Value; set { this.value.Value = value; } }
public virtual T Value { get => value.Value; set { this.value.Value = value; } }
public ReadOnlyReactiveProperty<T> AsReactiveProperty() => value;
public override Observable<T> AsObservable() => value;
}
}
}

View file

@ -1,4 +1,5 @@
using KitsuneCafe.Sys;
using KitsuneCafe.Sys.Attributes;
using UnityEngine;
namespace KitsuneCafe.SOAP
@ -6,6 +7,27 @@ namespace KitsuneCafe.SOAP
[CreateAssetMenu(fileName = "FloatValue", menuName = KitsuneCafeMenu.SoapValue + "Float")]
public class FloatValue : ReactiveValue<float>
{
[SerializeField]
private bool clamp = false;
public bool Clamped => clamp;
[SerializeField, ShowIf("clamp")]
private Vector2 minMax = Vector2.zero;
public override float Value
{
get => base.Value;
set
{
if (clamp)
{
base.Value = Mathf.Clamp(value, minMax.x, minMax.y);
}
else
{
base.Value = value;
}
}
}
}
}

View file

@ -0,0 +1,12 @@
using KitsuneCafe.Sys;
using UnityEngine;
namespace KitsuneCafe.SOAP
{
[CreateAssetMenu(fileName = "QuaternionValue", menuName = KitsuneCafeMenu.SoapValue + "Quaternion")]
public class QuaternionValue : ReactiveValue<Quaternion>
{
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 8d8c46ebf04914f9f96e5938bb166973

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 16eef83f26bcaed2caf5029fb2957771
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,103 @@
using System;
using Eflatun.SceneReference;
using UnityEditor;
#if UNITY_EDITOR
using UnityEditor.SceneManagement;
#endif
using UnityEngine;
using UnityEngine.SceneManagement;
namespace KitsuneCafe.Scene
{
[ExecuteInEditMode]
public class Subscene : MonoBehaviour
{
[SerializeField]
private SceneReference scene;
[SerializeField]
private bool loadOnStart;
private AsyncOperation sceneLoadOperation;
public event Action SceneLoaded = delegate { };
private bool isLoading = false;
private bool isLoaded = false;
private void Start()
{
#if UNITY_EDITOR
EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
if (!EditorApplication.isPlayingOrWillChangePlaymode)
{
LoadPreviewScene();
}
#else
if (loadOnStart && !isLoading)
{
Load();
isLoading = true;
}
#endif
}
private void OnPlayModeStateChanged(PlayModeStateChange change)
{
switch (change)
{
case PlayModeStateChange.EnteredEditMode:
LoadPreviewScene();
break;
case PlayModeStateChange.ExitingEditMode:
UnloadPreviewScene();
break;
}
}
#if UNITY_EDITOR
private void LoadPreviewScene()
{
if (scene.Path == null || SceneManager.GetSceneByPath(scene.Path).isLoaded)
{
return;
}
EditorSceneManager.OpenScene(scene.Path, OpenSceneMode.Additive);
}
private void UnloadPreviewScene()
{
if (scene.LoadedScene != null)
{
// EditorSceneManager.CloseScene(scene.LoadedScene, false);
if (loadOnStart)
{
Load();
}
}
}
#endif
private void Load()
{
if (sceneLoadOperation == null)
{
sceneLoadOperation = SceneManager.LoadSceneAsync(
scene.BuildIndex,
LoadSceneMode.Additive
);
sceneLoadOperation.completed += OnCompleted;
}
}
private void OnCompleted(AsyncOperation _operation)
{
isLoaded = true;
SceneLoaded.Invoke();
}
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: d482f2480cd8a1fac8e1ebd40c5dc94e

View file

@ -0,0 +1,36 @@
using UnityEngine;
namespace KitsuneCafe.Sys
{
[System.Serializable]
public class Layer
{
[SerializeField]
private int index = 0;
public int Index => index;
public Layer(int index)
{
this.index = index;
}
public void Set(int layerIndex)
{
if (layerIndex > 0 && layerIndex < 32)
{
index = layerIndex;
}
}
public int Mask => 1 << index;
public override string ToString()
{
return $"Layer {{ Index = {index} }}";
}
public static implicit operator int(Layer layer) => layer.Index;
public static implicit operator Layer(int index) => new(index);
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3d72dddf9bd95c216800328c05dd1f1d

View file

@ -0,0 +1,138 @@
using System;
using KitsuneCafe.UI.MVVM;
using UnityEngine;
using UnityEngine.UIElements;
namespace KitsuneCafe.UI
{
public class RotateEvent : EventBase<RotateEvent>
{
public Vector2 Delta { get; set; }
protected override void Init()
{
base.Init();
bubbles = true;
tricklesDown = true;
}
}
public class ZoomEvent : EventBase<ZoomEvent>
{
public float Amount { get; set; }
protected override void Init()
{
base.Init();
bubbles = true;
tricklesDown = true;
}
}
[UxmlElement]
public partial class PreviewView : VisualElement
{
public const string BaseClass = "kitsunecafe__preview";
private readonly PreviewViewModel viewModel = new();
private readonly DragManipulator drag;
public PreviewView()
{
AddToClassList(BaseClass);
drag = new DragManipulator(this);
drag.Started += () => viewModel.EnableRotationCommand.TryExecute(true);
drag.Stopped += () => viewModel.EnableRotationCommand.TryExecute(false);
drag.Dragged += delta => viewModel.RotateCommand.TryExecute(delta);
this.AddManipulator(drag);
RegisterCallback<AttachToPanelEvent>(OnAttachToPanel);
}
private void OnAttachToPanel(AttachToPanelEvent evt)
{
var root = panel.visualTree;
root.RegisterCallback<WheelEvent>(OnMouseWheel);
viewModel.Rotated += OnRotate;
viewModel.Zoomed += OnZoom;
}
private void OnRotate(object sender, PreviewViewModel.RotateEvent e)
{
using RotateEvent ev = RotateEvent.GetPooled();
ev.target = this;
ev.Delta = e.Rotation;
SendEvent(ev);
}
private void OnZoom(object sender, PreviewViewModel.ZoomEvent e)
{
using ZoomEvent ev = ZoomEvent.GetPooled();
ev.target = this;
ev.Amount = e.Amount;
SendEvent(ev);
}
private void OnMouseWheel(WheelEvent evt)
{
viewModel.ZoomCommand.TryExecute(evt.delta.y);
}
}
public class PreviewViewModel
{
public record RotateEvent(Vector2 Rotation);
public record ZoomEvent(float Amount);
public readonly ICommand<bool> EnableRotationCommand;
public readonly ICommand<Vector2> RotateCommand;
public readonly ICommand<float> ZoomCommand;
private bool isRotating = false;
public event EventHandler<RotateEvent> Rotated;
public event EventHandler<ZoomEvent> Zoomed;
public PreviewViewModel()
{
EnableRotationCommand = new RelayCommand<bool>(CanEnableRotation, EnableRotation);
RotateCommand = new RelayCommand<Vector2>(CanRotate, Rotate);
ZoomCommand = new RelayCommand<float>(CanZoom, Zoom);
}
private void EnableRotation(bool enabled)
{
isRotating = enabled;
}
private bool CanEnableRotation(bool _enabled)
{
return true;
}
public bool CanRotate(Vector2 _delta)
{
return isRotating;
}
private void Rotate(Vector2 delta)
{
Rotated?.Invoke(this, new RotateEvent(delta));
}
private bool CanZoom(float value)
{
return true;
}
private void Zoom(float value)
{
Zoomed?.Invoke(this, new ZoomEvent(value));
}
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 5af5a3e8b4d2c26c8bee10329f0bf21b

View file

@ -0,0 +1,276 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using KitsuneCafe.UI.MVVM;
using Unity.Properties;
using UnityEngine;
using UnityEngine.UIElements;
namespace KitsuneCafe.UI
{
public class RecyclerViewModel
{
public record RotateEvent(Direction Direction, int FirstIndex);
public enum Direction
{
None = 0,
Clockwise = -1,
CounterClockwise = 1
}
private int displayCount;
public int DisplayCount
{
get => displayCount;
set
{
if (displayCount != value)
{
displayCount = value;
CreateIndices();
}
}
}
private IList itemSource;
public IList ItemSource
{
get => itemSource;
set
{
if (itemSource != value)
{
itemSource = value;
CreateIndices();
}
}
}
public int Count => Math.Min(DisplayCount, ItemSource.Count);
private List<int> indices;
public IReadOnlyList<int> Indices => indices;
public readonly ICommand<Direction> RotateCommand;
public event EventHandler<RotateEvent> Rotated = delegate { };
public RecyclerViewModel()
{
indices = new();
RotateCommand = new RelayCommand<Direction>(CanRotate, Rotate);
}
private void CreateIndices()
{
if (itemSource == null || displayCount == 0) { return; }
indices = Enumerable.Range(0, Math.Min(DisplayCount, ItemSource.Count)).ToList();
}
private bool CanRotate(Direction direction)
{
return direction == Direction.Clockwise || direction == Direction.CounterClockwise;
}
public void Rotate(Direction direction)
{
if (direction == Direction.Clockwise)
{
indices.RemoveAt(0);
var next = indices.Last() + 1;
next %= ItemSource.Count;
indices.Add(next);
Notify(direction);
}
else if (direction == Direction.CounterClockwise)
{
indices.RemoveAt(ItemSource.Count - 1);
var count = ItemSource.Count;
var previous = indices[0] - 1;
previous += count % count;
indices.Insert(0, previous);
Notify(direction);
}
}
private void Notify(Direction direction)
{
Rotated?.Invoke(this, new RotateEvent(direction, indices.First()));
}
}
public class SelectEvent : EventBase<SelectEvent>
{
public int ElementIndex { get; set; }
public int DataIndex { get; set; }
}
[UxmlElement]
public partial class RecyclerView : VisualElement
{
public const string BaseClass = "kitsunecafe__recycler-view";
[UxmlAttribute, CreateProperty]
public int DisplayCount
{
get => viewModel.DisplayCount;
set
{
viewModel.DisplayCount = value;
CreateItems();
}
}
[CreateProperty]
public IList ItemSource
{
get => viewModel.ItemSource;
set
{
if (ItemSource != value)
{
viewModel.ItemSource = value;
CreateItems();
Rebind();
}
}
}
private IBinder binder;
[CreateProperty]
public IBinder Binder
{
get => binder;
set
{
if (binder != value)
{
binder = value;
CreateItems();
Rebind();
}
}
}
private readonly RecyclerViewModel viewModel = new();
private readonly DragManipulator drag;
public RecyclerView()
{
AddToClassList(BaseClass);
drag = new DragManipulator(this);
drag.Dragged += OnDrag;
this.AddManipulator(drag);
RegisterCallback<NavigationMoveEvent>(OnNavigationMove);
viewModel.Rotated += OnRotated;
}
private void CreateItems()
{
Clear();
if (DisplayCount == 0 || binder == null) { return; }
for (int i = 0; i < DisplayCount; i++)
{
Add(binder.CreateItem());
}
FocusFirst();
}
private void Rebind()
{
if (viewModel == null || ItemSource == null || DisplayCount == 0 || binder == null) { return; }
for (int i = 0; i < DisplayCount; i++)
{
TryBindItem(this[i], i);
}
}
private bool HasItem(int index)
{
return 0 <= index && index < ItemSource.Count;
}
private void OnRotated(object sender, RecyclerViewModel.RotateEvent e)
{
VisualElement recycled;
switch (e.Direction)
{
case RecyclerViewModel.Direction.Clockwise:
recycled = this[0];
RemoveAt(0);
Insert(DisplayCount - 1, recycled);
TryBindItem(recycled, DisplayCount - 1);
NotifySelection();
break;
case RecyclerViewModel.Direction.CounterClockwise:
recycled = this[DisplayCount - 1];
RemoveAt(DisplayCount - 1);
Insert(0, recycled);
TryBindItem(recycled, 0);
NotifySelection();
break;
}
FocusFirst();
}
private void NotifySelection()
{
using SelectEvent evt = SelectEvent.GetPooled();
evt.target = this[0];
evt.ElementIndex = 0;
evt.DataIndex = viewModel.Indices[0];
SendEvent(evt);
}
private void FocusFirst()
{
if (childCount > 0)
{
this[0].Focus();
}
}
private void TryBindItem(VisualElement element, int index)
{
if (HasItem(index))
{
var idx = viewModel.Indices[index];
if (0 <= idx && idx < ItemSource.Count)
{
binder.BindItem(element, idx);
}
}
else
{
binder.UnbindItem(element);
}
}
private void OnDrag(Vector2 vector)
{
throw new NotImplementedException();
}
private void OnNavigationMove(NavigationMoveEvent evt)
{
var direction = evt.direction switch
{
NavigationMoveEvent.Direction.Left => RecyclerViewModel.Direction.CounterClockwise,
NavigationMoveEvent.Direction.Right => RecyclerViewModel.Direction.Clockwise,
NavigationMoveEvent.Direction.Next => RecyclerViewModel.Direction.Clockwise,
NavigationMoveEvent.Direction.Previous => RecyclerViewModel.Direction.CounterClockwise,
_ => RecyclerViewModel.Direction.None
};
viewModel.RotateCommand.TryExecute(direction);
}
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 684cef7995e35a12d8793b920c61ac8e

View file

@ -0,0 +1,133 @@
using System;
using KitsuneCafe.ItemSystem;
using KitsuneCafe.SOAP;
using KitsuneCafe.Sys;
using R3;
using UnityEngine;
using Wacs.Core.Instructions;
namespace KitsuneCafe.UI
{
public class ItemPreview : MonoBehaviour
{
[SerializeField]
private ItemValue selectedItem;
[SerializeField]
private new Transform camera;
[Header("Rotation")]
[SerializeField]
private Vector2Value rotationDelta;
[SerializeField]
private float sensitivity = 20;
[SerializeField]
private float angleSnap = 10;
[Header("Zoom")]
[SerializeField]
private FloatValue zoom;
[SerializeField]
private float zoomSensitivity = 0.5f;
private Vector3 initialPosition;
[SerializeField]
private Layer previewLayer;
private GameObject instance;
private void Start()
{
if (selectedItem.Value != null)
{
ChangeItemPreview(selectedItem.Value);
}
var d = Disposable.CreateBuilder();
selectedItem.AsObservable()
.Subscribe(ChangeItemPreview)
.AddTo(ref d);
rotationDelta.AsObservable()
.Where(_ => instance != null)
.Subscribe(RotatePreview)
.AddTo(ref d);
zoom.AsObservable()
.Where(_ => instance != null)
.Subscribe(ZoomPreview)
.AddTo(ref d);
d.RegisterTo(destroyCancellationToken);
}
private void ZoomPreview(float amount)
{
if (instance == null) { return; }
var position = initialPosition;
position.z += amount * zoomSensitivity;
instance.transform.position = position;
}
private void ChangeItemPreview(Item item)
{
if (instance != null)
{
Destroy(instance);
instance = null;
}
if (item != null)
{
instance = item.CreatePreview();
instance.layer = previewLayer;
instance.transform.SetParent(transform);
initialPosition = instance.transform.position;
ResetPreviewValues();
}
}
private void ResetPreviewValues()
{
zoom.Value = 0;
rotationDelta.Value = Vector2.zero;
}
public void RotatePreview(Vector2 delta)
{
if (instance == null || camera == null) { return; }
var yawAngle = -delta.x * sensitivity * Time.deltaTime;
var yawRotation = Quaternion.AngleAxis(yawAngle, camera.up);
var pitchAngle = -delta.y * sensitivity * Time.deltaTime;
var pitchRotation = Quaternion.AngleAxis(pitchAngle, camera.right);
var combinedRotation = pitchRotation * yawRotation;
instance.transform.rotation = combinedRotation * instance.transform.rotation;
ApplyAngleSnapping();
}
public void ApplyAngleSnapping()
{
if (instance == null) return;
Vector3 euler = instance.transform.rotation.eulerAngles;
Quaternion rotation = Quaternion.Euler(
Mathf.Round(euler.x / angleSnap) * angleSnap,
Mathf.Round(euler.y / angleSnap) * angleSnap,
Mathf.Round(euler.z / angleSnap) * angleSnap
);
instance.transform.rotation = rotation;
}
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: cd025ca0b2f740f7f8356cd3113163a2

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 0b72eac1e69a2d32f85746763e1b1d64
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,66 @@
using System;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
namespace KitsuneCafe.UI
{
public class DragManipulator : PointerManipulator
{
public event Action Started = delegate { };
public event Action Stopped = delegate { };
public event Action<Vector2> Dragged = delegate { };
private bool isDragging = false;
private bool globalDrag = true;
private VisualElement releaseTarget;
public DragManipulator(VisualElement element, bool globalDrag = true)
{
target = element;
this.globalDrag = globalDrag;
}
protected override void RegisterCallbacksOnTarget()
{
target.RegisterCallback<AttachToPanelEvent>(OnAttachToPanel);
}
private void OnAttachToPanel(AttachToPanelEvent evt)
{
releaseTarget = globalDrag ? target.panel.visualTree : target;
target.RegisterCallback<PointerDownEvent>(OnPointerDown);
releaseTarget.RegisterCallback<PointerMoveEvent>(OnPointerMove);
releaseTarget.RegisterCallback<PointerUpEvent>(OnPointerUp);
}
protected override void UnregisterCallbacksFromTarget()
{
target.UnregisterCallback<AttachToPanelEvent>(OnAttachToPanel);
target.UnregisterCallback<PointerDownEvent>(OnPointerDown);
releaseTarget?.UnregisterCallback<PointerMoveEvent>(OnPointerMove);
releaseTarget?.UnregisterCallback<PointerUpEvent>(OnPointerUp);
}
private void OnPointerDown(PointerDownEvent _)
{
isDragging = true;
Started?.Invoke();
}
private void OnPointerMove(PointerMoveEvent evt)
{
if (isDragging)
{
Dragged?.Invoke(evt.deltaPosition);
}
}
private void OnPointerUp(PointerUpEvent evt)
{
isDragging = false;
Stopped?.Invoke();
}
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e2d8f2b2cf8c00d9e9c1e89d5e0fb121

View file

@ -1,6 +1,9 @@
using System.Collections;
using System;
using KitsuneCafe.ItemSystem;
using KitsuneCafe.SOAP;
using KitsuneCafe.UI.MVVM;
using R3;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;
@ -8,13 +11,14 @@ namespace KitsuneCafe.UI
{
public class InventoryScreen : MonoBehaviour
{
public const string ItemListIndicators = "item-list-indicator";
public const string ItemList = "item-list";
public const string ItemListIndicatorsName = "item-list-indicator";
public const string ItemListName = "item-list";
public const string ItemPreviewName = "item-preview";
public const string ItemDetailsTitle = "item-details-title-label";
public const string ItemDetailsContent = "item-details-content-label";
public const string ItemDetailsTitleName = "item-details-title-label";
public const string ItemDetailsContentName = "item-details-content-label";
[SerializeField]
private UIDocument doc;
@ -25,12 +29,28 @@ namespace KitsuneCafe.UI
[SerializeField]
private VisualTreeAsset template;
[SerializeField]
private int displayCount = 5;
[SerializeField]
private ItemValue selectedItem;
[SerializeField]
private FloatEvent inventoryInput;
[SerializeField]
private Vector2Value itemPreviewDelta;
[SerializeField]
private FloatValue itemZoom;
[SerializeField]
private ActionMapValue actionMap;
private VisualElement root => doc.rootVisualElement;
private VisualElement indicators;
private VisualElement itemList;
private VisualElement detailsTitle;
private VisualElement detailsContent;
private VisualElement itemPreview;
private void OnValidate()
{
@ -47,7 +67,54 @@ namespace KitsuneCafe.UI
private void Start()
{
root.visible = false;
inventoryInput.AsObservable()
.Subscribe(_ =>
{
root.visible = !root.visible;
actionMap.Value = root.visible ? Input.ActionMap.UI : Input.ActionMap.Player;
});
CreateItemList();
var preview = root.Q<PreviewView>();
preview.RegisterCallback<RotateEvent>(evt =>
{
itemPreviewDelta.Value = evt.Delta;
});
preview.RegisterCallback<ZoomEvent>(evt =>
{
itemZoom.Value += evt.Amount;
});
}
private void CreateItemList()
{
var itemList = root.Q<RecyclerView>();
itemList.ItemSource = inventory;
itemList.Binder = new AdHocBinder(
() =>
{
var instance = template.CloneTree();
instance.focusable = true;
return instance;
},
(el, i) =>
{
el.dataSource = inventory[i];
},
el =>
{
el.dataSource = null;
}
);
itemList.RegisterCallback<SelectEvent>(evt =>
{
Debug.Log($"Selected {evt.DataIndex}");
});
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View file

@ -1,134 +0,0 @@
fileFormatVersion: 2
guid: 727a75301c3d24613a3ebcec4a24c2c8
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 0
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 2
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

View file

@ -1,654 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &1
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12004, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_PixelRect:
serializedVersion: 2
x: 0
y: 45
width: 1666
height: 958
m_ShowMode: 4
m_Title:
m_RootView: {fileID: 6}
m_MinSize: {x: 950, y: 542}
m_MaxSize: {x: 10000, y: 10000}
--- !u!114 &2
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 0
y: 466
width: 290
height: 442
m_MinSize: {x: 234, y: 271}
m_MaxSize: {x: 10004, y: 10021}
m_ActualView: {fileID: 14}
m_Panes:
- {fileID: 14}
m_Selected: 0
m_LastSelected: 0
--- !u!114 &3
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children:
- {fileID: 4}
- {fileID: 2}
m_Position:
serializedVersion: 2
x: 973
y: 0
width: 290
height: 908
m_MinSize: {x: 234, y: 492}
m_MaxSize: {x: 10004, y: 14042}
vertical: 1
controlID: 226
--- !u!114 &4
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 0
y: 0
width: 290
height: 466
m_MinSize: {x: 204, y: 221}
m_MaxSize: {x: 4004, y: 4021}
m_ActualView: {fileID: 17}
m_Panes:
- {fileID: 17}
m_Selected: 0
m_LastSelected: 0
--- !u!114 &5
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 0
y: 466
width: 973
height: 442
m_MinSize: {x: 202, y: 221}
m_MaxSize: {x: 4002, y: 4021}
m_ActualView: {fileID: 15}
m_Panes:
- {fileID: 15}
m_Selected: 0
m_LastSelected: 0
--- !u!114 &6
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12008, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children:
- {fileID: 7}
- {fileID: 8}
- {fileID: 9}
m_Position:
serializedVersion: 2
x: 0
y: 0
width: 1666
height: 958
m_MinSize: {x: 950, y: 542}
m_MaxSize: {x: 10000, y: 10000}
--- !u!114 &7
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12011, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 0
y: 0
width: 1666
height: 30
m_MinSize: {x: 0, y: 0}
m_MaxSize: {x: 0, y: 0}
m_LastLoadedLayoutName: Tutorial
--- !u!114 &8
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children:
- {fileID: 10}
- {fileID: 3}
- {fileID: 11}
m_Position:
serializedVersion: 2
x: 0
y: 30
width: 1666
height: 908
m_MinSize: {x: 713, y: 492}
m_MaxSize: {x: 18008, y: 14042}
vertical: 0
controlID: 74
--- !u!114 &9
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12042, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 0
y: 938
width: 1666
height: 20
m_MinSize: {x: 0, y: 0}
m_MaxSize: {x: 0, y: 0}
--- !u!114 &10
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children:
- {fileID: 12}
- {fileID: 5}
m_Position:
serializedVersion: 2
x: 0
y: 0
width: 973
height: 908
m_MinSize: {x: 202, y: 442}
m_MaxSize: {x: 4002, y: 8042}
vertical: 1
controlID: 75
--- !u!114 &11
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 1263
y: 0
width: 403
height: 908
m_MinSize: {x: 277, y: 71}
m_MaxSize: {x: 4002, y: 4021}
m_ActualView: {fileID: 13}
m_Panes:
- {fileID: 13}
m_Selected: 0
m_LastSelected: 0
--- !u!114 &12
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 0
y: 0
width: 973
height: 466
m_MinSize: {x: 202, y: 221}
m_MaxSize: {x: 4002, y: 4021}
m_ActualView: {fileID: 16}
m_Panes:
- {fileID: 16}
m_Selected: 0
m_LastSelected: 0
--- !u!114 &13
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_AutoRepaintOnSceneChange: 0
m_MinSize: {x: 275, y: 50}
m_MaxSize: {x: 4000, y: 4000}
m_TitleContent:
m_Text: Inspector
m_Image: {fileID: -6905738622615590433, guid: 0000000000000000d000000000000000,
type: 0}
m_Tooltip:
m_DepthBufferBits: 0
m_Pos:
serializedVersion: 2
x: 2
y: 19
width: 401
height: 887
m_ScrollPosition: {x: 0, y: 0}
m_InspectorMode: 0
m_PreviewResizer:
m_CachedPref: -160
m_ControlHash: -371814159
m_PrefName: Preview_InspectorPreview
m_PreviewWindow: {fileID: 0}
--- !u!114 &14
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12014, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_AutoRepaintOnSceneChange: 0
m_MinSize: {x: 230, y: 250}
m_MaxSize: {x: 10000, y: 10000}
m_TitleContent:
m_Text: Project
m_Image: {fileID: -7501376956915960154, guid: 0000000000000000d000000000000000,
type: 0}
m_Tooltip:
m_DepthBufferBits: 0
m_Pos:
serializedVersion: 2
x: 2
y: 19
width: 286
height: 421
m_SearchFilter:
m_NameFilter:
m_ClassNames: []
m_AssetLabels: []
m_AssetBundleNames: []
m_VersionControlStates: []
m_ReferencingInstanceIDs:
m_ScenePaths: []
m_ShowAllHits: 0
m_SearchArea: 0
m_Folders:
- Assets
m_ViewMode: 0
m_StartGridSize: 64
m_LastFolders:
- Assets
m_LastFoldersGridSize: -1
m_LastProjectPath: /Users/danielbrauer/Unity Projects/New Unity Project 47
m_IsLocked: 0
m_FolderTreeState:
scrollPos: {x: 0, y: 0}
m_SelectedIDs: ee240000
m_LastClickedID: 9454
m_ExpandedIDs: ee24000000ca9a3bffffff7f
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
m_OriginalName:
m_EditFieldRect:
serializedVersion: 2
x: 0
y: 0
width: 0
height: 0
m_UserData: 0
m_IsWaitingForDelay: 0
m_IsRenaming: 0
m_OriginalEventType: 11
m_IsRenamingFilename: 1
m_ClientGUIView: {fileID: 0}
m_SearchString:
m_CreateAssetUtility:
m_EndAction: {fileID: 0}
m_InstanceID: 0
m_Path:
m_Icon: {fileID: 0}
m_ResourceFile:
m_AssetTreeState:
scrollPos: {x: 0, y: 0}
m_SelectedIDs: 68fbffff
m_LastClickedID: 0
m_ExpandedIDs: ee240000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
m_OriginalName:
m_EditFieldRect:
serializedVersion: 2
x: 0
y: 0
width: 0
height: 0
m_UserData: 0
m_IsWaitingForDelay: 0
m_IsRenaming: 0
m_OriginalEventType: 11
m_IsRenamingFilename: 1
m_ClientGUIView: {fileID: 0}
m_SearchString:
m_CreateAssetUtility:
m_EndAction: {fileID: 0}
m_InstanceID: 0
m_Path:
m_Icon: {fileID: 0}
m_ResourceFile:
m_ListAreaState:
m_SelectedInstanceIDs: 68fbffff
m_LastClickedInstanceID: -1176
m_HadKeyboardFocusLastEvent: 0
m_ExpandedInstanceIDs: c6230000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
m_OriginalName:
m_EditFieldRect:
serializedVersion: 2
x: 0
y: 0
width: 0
height: 0
m_UserData: 0
m_IsWaitingForDelay: 0
m_IsRenaming: 0
m_OriginalEventType: 11
m_IsRenamingFilename: 1
m_ClientGUIView: {fileID: 0}
m_CreateAssetUtility:
m_EndAction: {fileID: 0}
m_InstanceID: 0
m_Path:
m_Icon: {fileID: 0}
m_ResourceFile:
m_NewAssetIndexInList: -1
m_ScrollPosition: {x: 0, y: 0}
m_GridSize: 64
m_DirectoriesAreaWidth: 110
--- !u!114 &15
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12015, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_AutoRepaintOnSceneChange: 1
m_MinSize: {x: 200, y: 200}
m_MaxSize: {x: 4000, y: 4000}
m_TitleContent:
m_Text: Game
m_Image: {fileID: -2087823869225018852, guid: 0000000000000000d000000000000000,
type: 0}
m_Tooltip:
m_DepthBufferBits: 32
m_Pos:
serializedVersion: 2
x: 0
y: 19
width: 971
height: 421
m_MaximizeOnPlay: 0
m_Gizmos: 0
m_Stats: 0
m_SelectedSizes: 00000000000000000000000000000000000000000000000000000000000000000000000000000000
m_TargetDisplay: 0
m_ZoomArea:
m_HRangeLocked: 0
m_VRangeLocked: 0
m_HBaseRangeMin: -242.75
m_HBaseRangeMax: 242.75
m_VBaseRangeMin: -101
m_VBaseRangeMax: 101
m_HAllowExceedBaseRangeMin: 1
m_HAllowExceedBaseRangeMax: 1
m_VAllowExceedBaseRangeMin: 1
m_VAllowExceedBaseRangeMax: 1
m_ScaleWithWindow: 0
m_HSlider: 0
m_VSlider: 0
m_IgnoreScrollWheelUntilClicked: 0
m_EnableMouseInput: 1
m_EnableSliderZoom: 0
m_UniformScale: 1
m_UpDirection: 1
m_DrawArea:
serializedVersion: 2
x: 0
y: 17
width: 971
height: 404
m_Scale: {x: 2, y: 2}
m_Translation: {x: 485.5, y: 202}
m_MarginLeft: 0
m_MarginRight: 0
m_MarginTop: 0
m_MarginBottom: 0
m_LastShownAreaInsideMargins:
serializedVersion: 2
x: -242.75
y: -101
width: 485.5
height: 202
m_MinimalGUI: 1
m_defaultScale: 2
m_TargetTexture: {fileID: 0}
m_CurrentColorSpace: 0
m_LastWindowPixelSize: {x: 1942, y: 842}
m_ClearInEditMode: 1
m_NoCameraWarning: 1
m_LowResolutionForAspectRatios: 01000000000100000100
--- !u!114 &16
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12013, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_AutoRepaintOnSceneChange: 1
m_MinSize: {x: 200, y: 200}
m_MaxSize: {x: 4000, y: 4000}
m_TitleContent:
m_Text: Scene
m_Image: {fileID: 2318424515335265636, guid: 0000000000000000d000000000000000,
type: 0}
m_Tooltip:
m_DepthBufferBits: 32
m_Pos:
serializedVersion: 2
x: 0
y: 19
width: 971
height: 445
m_SceneLighting: 1
lastFramingTime: 0
m_2DMode: 0
m_isRotationLocked: 0
m_AudioPlay: 0
m_Position:
m_Target: {x: 0, y: 0, z: 0}
speed: 2
m_Value: {x: 0, y: 0, z: 0}
m_RenderMode: 0
m_ValidateTrueMetals: 0
m_SceneViewState:
showFog: 1
showMaterialUpdate: 0
showSkybox: 1
showFlares: 1
showImageEffects: 1
grid:
xGrid:
m_Target: 0
speed: 2
m_Value: 0
yGrid:
m_Target: 1
speed: 2
m_Value: 1
zGrid:
m_Target: 0
speed: 2
m_Value: 0
m_Rotation:
m_Target: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226}
speed: 2
m_Value: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226}
m_Size:
m_Target: 10
speed: 2
m_Value: 10
m_Ortho:
m_Target: 0
speed: 2
m_Value: 0
m_LastSceneViewRotation: {x: 0, y: 0, z: 0, w: 0}
m_LastSceneViewOrtho: 0
m_ReplacementShader: {fileID: 0}
m_ReplacementString:
m_LastLockedObject: {fileID: 0}
m_ViewIsLockedToObject: 0
--- !u!114 &17
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12061, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_AutoRepaintOnSceneChange: 0
m_MinSize: {x: 200, y: 200}
m_MaxSize: {x: 4000, y: 4000}
m_TitleContent:
m_Text: Hierarchy
m_Image: {fileID: -590624980919486359, guid: 0000000000000000d000000000000000,
type: 0}
m_Tooltip:
m_DepthBufferBits: 0
m_Pos:
serializedVersion: 2
x: 2
y: 19
width: 286
height: 445
m_TreeViewState:
scrollPos: {x: 0, y: 0}
m_SelectedIDs: 68fbffff
m_LastClickedID: -1176
m_ExpandedIDs: 7efbffff00000000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
m_OriginalName:
m_EditFieldRect:
serializedVersion: 2
x: 0
y: 0
width: 0
height: 0
m_UserData: 0
m_IsWaitingForDelay: 0
m_IsRenaming: 0
m_OriginalEventType: 11
m_IsRenamingFilename: 0
m_ClientGUIView: {fileID: 0}
m_SearchString:
m_ExpandedScenes:
-
m_CurrenRootInstanceID: 0
m_Locked: 0
m_CurrentSortingName: TransformSorting

View file

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: eabc9546105bf4accac1fd62a63e88e6
timeCreated: 1487337779
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View file

@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: 3ad9b87dffba344c89909c6d1b1c17e1
folderAsset: yes
timeCreated: 1475593892
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View file

@ -1,242 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System;
using System.IO;
using System.Reflection;
[CustomEditor(typeof(Readme))]
[InitializeOnLoad]
public class ReadmeEditor : Editor
{
static string s_ShowedReadmeSessionStateName = "ReadmeEditor.showedReadme";
static string s_ReadmeSourceDirectory = "Assets/TutorialInfo";
const float k_Space = 16f;
static ReadmeEditor()
{
EditorApplication.delayCall += SelectReadmeAutomatically;
}
static void RemoveTutorial()
{
if (EditorUtility.DisplayDialog("Remove Readme Assets",
$"All contents under {s_ReadmeSourceDirectory} will be removed, are you sure you want to proceed?",
"Proceed",
"Cancel"))
{
if (Directory.Exists(s_ReadmeSourceDirectory))
{
FileUtil.DeleteFileOrDirectory(s_ReadmeSourceDirectory);
FileUtil.DeleteFileOrDirectory(s_ReadmeSourceDirectory + ".meta");
}
else
{
Debug.Log($"Could not find the Readme folder at {s_ReadmeSourceDirectory}");
}
var readmeAsset = SelectReadme();
if (readmeAsset != null)
{
var path = AssetDatabase.GetAssetPath(readmeAsset);
FileUtil.DeleteFileOrDirectory(path + ".meta");
FileUtil.DeleteFileOrDirectory(path);
}
AssetDatabase.Refresh();
}
}
static void SelectReadmeAutomatically()
{
if (!SessionState.GetBool(s_ShowedReadmeSessionStateName, false))
{
var readme = SelectReadme();
SessionState.SetBool(s_ShowedReadmeSessionStateName, true);
if (readme && !readme.loadedLayout)
{
LoadLayout();
readme.loadedLayout = true;
}
}
}
static void LoadLayout()
{
var assembly = typeof(EditorApplication).Assembly;
var windowLayoutType = assembly.GetType("UnityEditor.WindowLayout", true);
var method = windowLayoutType.GetMethod("LoadWindowLayout", BindingFlags.Public | BindingFlags.Static);
method.Invoke(null, new object[] { Path.Combine(Application.dataPath, "TutorialInfo/Layout.wlt"), false });
}
static Readme SelectReadme()
{
var ids = AssetDatabase.FindAssets("Readme t:Readme");
if (ids.Length == 1)
{
var readmeObject = AssetDatabase.LoadMainAssetAtPath(AssetDatabase.GUIDToAssetPath(ids[0]));
Selection.objects = new UnityEngine.Object[] { readmeObject };
return (Readme)readmeObject;
}
else
{
Debug.Log("Couldn't find a readme");
return null;
}
}
protected override void OnHeaderGUI()
{
var readme = (Readme)target;
Init();
var iconWidth = Mathf.Min(EditorGUIUtility.currentViewWidth / 3f - 20f, 128f);
GUILayout.BeginHorizontal("In BigTitle");
{
if (readme.icon != null)
{
GUILayout.Space(k_Space);
GUILayout.Label(readme.icon, GUILayout.Width(iconWidth), GUILayout.Height(iconWidth));
}
GUILayout.Space(k_Space);
GUILayout.BeginVertical();
{
GUILayout.FlexibleSpace();
GUILayout.Label(readme.title, TitleStyle);
GUILayout.FlexibleSpace();
}
GUILayout.EndVertical();
GUILayout.FlexibleSpace();
}
GUILayout.EndHorizontal();
}
public override void OnInspectorGUI()
{
var readme = (Readme)target;
Init();
foreach (var section in readme.sections)
{
if (!string.IsNullOrEmpty(section.heading))
{
GUILayout.Label(section.heading, HeadingStyle);
}
if (!string.IsNullOrEmpty(section.text))
{
GUILayout.Label(section.text, BodyStyle);
}
if (!string.IsNullOrEmpty(section.linkText))
{
if (LinkLabel(new GUIContent(section.linkText)))
{
Application.OpenURL(section.url);
}
}
GUILayout.Space(k_Space);
}
if (GUILayout.Button("Remove Readme Assets", ButtonStyle))
{
RemoveTutorial();
}
}
bool m_Initialized;
GUIStyle LinkStyle
{
get { return m_LinkStyle; }
}
[SerializeField]
GUIStyle m_LinkStyle;
GUIStyle TitleStyle
{
get { return m_TitleStyle; }
}
[SerializeField]
GUIStyle m_TitleStyle;
GUIStyle HeadingStyle
{
get { return m_HeadingStyle; }
}
[SerializeField]
GUIStyle m_HeadingStyle;
GUIStyle BodyStyle
{
get { return m_BodyStyle; }
}
[SerializeField]
GUIStyle m_BodyStyle;
GUIStyle ButtonStyle
{
get { return m_ButtonStyle; }
}
[SerializeField]
GUIStyle m_ButtonStyle;
void Init()
{
if (m_Initialized)
return;
m_BodyStyle = new GUIStyle(EditorStyles.label);
m_BodyStyle.wordWrap = true;
m_BodyStyle.fontSize = 14;
m_BodyStyle.richText = true;
m_TitleStyle = new GUIStyle(m_BodyStyle);
m_TitleStyle.fontSize = 26;
m_HeadingStyle = new GUIStyle(m_BodyStyle);
m_HeadingStyle.fontStyle = FontStyle.Bold;
m_HeadingStyle.fontSize = 18;
m_LinkStyle = new GUIStyle(m_BodyStyle);
m_LinkStyle.wordWrap = false;
// Match selection color which works nicely for both light and dark skins
m_LinkStyle.normal.textColor = new Color(0x00 / 255f, 0x78 / 255f, 0xDA / 255f, 1f);
m_LinkStyle.stretchWidth = false;
m_ButtonStyle = new GUIStyle(EditorStyles.miniButton);
m_ButtonStyle.fontStyle = FontStyle.Bold;
m_Initialized = true;
}
bool LinkLabel(GUIContent label, params GUILayoutOption[] options)
{
var position = GUILayoutUtility.GetRect(label, LinkStyle, options);
Handles.BeginGUI();
Handles.color = LinkStyle.normal.textColor;
Handles.DrawLine(new Vector3(position.xMin, position.yMax), new Vector3(position.xMax, position.yMax));
Handles.color = Color.white;
Handles.EndGUI();
EditorGUIUtility.AddCursorRect(position, MouseCursor.Link);
return GUI.Button(position, label, LinkStyle);
}
}

View file

@ -1,12 +0,0 @@
fileFormatVersion: 2
guid: 476cc7d7cd9874016adc216baab94a0a
timeCreated: 1484146680
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -1,16 +0,0 @@
using System;
using UnityEngine;
public class Readme : ScriptableObject
{
public Texture2D icon;
public string title;
public Section[] sections;
public bool loadedLayout;
[Serializable]
public class Section
{
public string heading, text, linkText, url;
}
}

View file

@ -1,12 +0,0 @@
fileFormatVersion: 2
guid: fcf7219bab7fe46a1ad266029b2fee19
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences:
- icon: {instanceID: 0}
executionOrder: 0
icon: {fileID: 2800000, guid: a186f8a87ca4f4d3aa864638ad5dfb65, type: 3}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -10,7 +10,7 @@
<ui:VisualElement name="indicator-five" class="indicator" />
<ui:VisualElement name="indicator-six" class="indicator" />
</ui:VisualElement>
<ui:ScrollView vertical-scroller-visibility="Hidden" name="item-list" style="flex-grow: 1;" />
<KitsuneCafe.UI.RecyclerView display-count="5" style="flex-grow: 1; flex-direction: row-reverse;" />
</ui:VisualElement>
<ui:VisualElement name="detail-container" class="spaced-children" style="flex-grow: 1.5; flex-direction: row;">
<ui:VisualElement name="condition-container" class="container" style="flex-grow: 0.65; flex-basis: 0;">
@ -55,20 +55,20 @@
</ui:VisualElement>
<ui:VisualElement name="item-preview-container" class="container" style="flex-grow: 1.25; flex-basis: 0;">
<ui:VisualElement name="preview-header" class="header" />
<ui:VisualElement name="item-preview" style="flex-grow: 1; background-image: url(&quot;project://database/Assets/UI/Item%20Preview.renderTexture?fileID=8400000&amp;guid=fc19a022409ab0d408fa0e78cfeab827&amp;type=2#Item Preview&quot;); -unity-background-scale-mode: scale-to-fit;" />
<KitsuneCafe.UI.PreviewView style="background-image: url(&quot;project://database/Assets/UI/Item%20Preview.renderTexture?fileID=8400000&amp;guid=fc19a022409ab0d408fa0e78cfeab827&amp;type=2#Item Preview&quot;); -unity-background-scale-mode: scale-to-fit; flex-grow: 1;" />
</ui:VisualElement>
<ui:VisualElement name="item-details-container" data-source="project://database/Assets/SOAP/Items/SelectedItem.asset?fileID=11400000&amp;guid=0f16091ed7577d3268f2725cf823d4da&amp;type=2#SelectedItem" class="container" style="flex-grow: 1; flex-basis: 0;">
<ui:VisualElement name="item-details-container" data-source="project://database/Assets/SOAP/Items/SelectedItem.asset?fileID=11400000&amp;guid=37d00232a0bee1e8e923705187ff2187&amp;type=2#SelectedItem" class="container" style="flex-grow: 1; flex-basis: 0;">
<ui:VisualElement name="item-details-header" class="header" />
<ui:VisualElement name="item-details-content" style="flex-grow: 0;">
<ui:VisualElement name="item-details-title-container" style="flex-wrap: nowrap; padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px;">
<ui:Label text="ITEM NAME" name="item-details-title-label">
<ui:Label text="ITEM NAME" name="item-details-title-label" class="title">
<Bindings>
<ui:DataBinding property="text" data-source-path="displayName" binding-mode="ToTarget" />
<ui:DataBinding property="text" data-source-path="value.value.displayName" binding-mode="ToTarget" />
</Bindings>
</ui:Label>
<ui:Label text="Item description body." name="item-details-content-label" style="flex-wrap: nowrap; white-space: pre-wrap; text-overflow: ellipsis;">
<Bindings>
<ui:DataBinding property="text" data-source-path="description" binding-mode="ToTarget" />
<ui:DataBinding property="text" data-source-path="value.value.description" binding-mode="ToTarget" />
</Bindings>
</ui:Label>
</ui:VisualElement>

View file

@ -3,9 +3,9 @@
<Style src="project://database/Assets/UI/itemslot.uss?fileID=7433441132597879392&amp;guid=ab2fe9f4942517d359babfd8c160725c&amp;type=3#itemslot" />
<ui:VisualElement name="container" data-source-type="KitsuneCafe.ItemSystem.InventoryItem, Assembly-CSharp" enabled="true" class="container" style="flex-grow: 1;">
<ui:VisualElement name="header" class="header">
<ui:Label name="item-name-label" text="Label">
<ui:Label name="item-name-label">
<Bindings>
<ui:DataBinding property="text" data-source-path="serializableItems[0].Item.displayName" binding-mode="ToTarget" data-source-type="KitsuneCafe.ItemSystem.Inventory, Assembly-CSharp" />
<ui:DataBinding property="text" data-source-path="Item.displayName" binding-mode="ToTarget" />
</Bindings>
</ui:Label>
</ui:VisualElement>

View file

@ -71,3 +71,12 @@
color: var(--text);
--primary: rgb(238, 66, 10);
}
TemplateContainer {
flex-grow: 1;
}
.title {
color: var(--primary);
text-transform: small-caps;
}

View file

@ -1,6 +1,7 @@
{
"dependencies": {
"com.cysharp.r3": "https://github.com/Cysharp/R3.git?path=src/R3.Unity/Assets/R3.Unity",
"com.eflatun.scenereference": "git+https://github.com/starikcetin/Eflatun.SceneReference.git#4.1.1",
"com.github-glitchenzo.nugetforunity": "https://github.com/GlitchEnzo/NuGetForUnity.git?path=/src/NuGetForUnity",
"com.kelnishi.wacs": "https://github.com/kelnishi/WACS-Unity.git",
"com.unity.2d.sprite": "1.0.0",
@ -8,15 +9,16 @@
"com.unity.ai.navigation": "2.0.8",
"com.unity.cinemachine": "3.1.4",
"com.unity.collab-proxy": "2.8.2",
"com.unity.dt.app-ui": "2.1.1",
"com.unity.entities": "1.3.14",
"com.unity.entities.graphics": "1.4.12",
"com.unity.ide.rider": "3.0.36",
"com.unity.ide.visualstudio": "2.0.23",
"com.unity.inputsystem": "1.14.1",
"com.unity.inputsystem": "1.14.2",
"com.unity.multiplayer.center": "1.0.0",
"com.unity.render-pipelines.universal": "17.1.0",
"com.unity.test-framework": "1.5.1",
"com.unity.timeline": "1.8.8",
"com.unity.timeline": "1.8.9",
"com.unity.toolchain.linux-x86_64": "2.0.10",
"com.unity.ugui": "2.0.0",
"com.unity.modules.accessibility": "1.0.0",

View file

@ -9,6 +9,16 @@
},
"hash": "fbc12b2c0b6a1ee5ce7d534f9db936bc59069219"
},
"com.eflatun.scenereference": {
"version": "git+https://github.com/starikcetin/Eflatun.SceneReference.git#4.1.1",
"depth": 0,
"source": "git",
"dependencies": {
"com.unity.settings-manager": "2.0.1",
"com.unity.nuget.newtonsoft-json": "3.0.2"
},
"hash": "b849990020c30ac6ead4e4fb4881428f86dcde0d"
},
"com.github-glitchenzo.nugetforunity": {
"version": "https://github.com/GlitchEnzo/NuGetForUnity.git?path=/src/NuGetForUnity",
"depth": 0,
@ -94,6 +104,18 @@
},
"url": "https://packages.unity.com"
},
"com.unity.dt.app-ui": {
"version": "2.1.1",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.modules.physics": "1.0.0",
"com.unity.modules.androidjni": "1.0.0",
"com.unity.modules.uielements": "1.0.0",
"com.unity.modules.screencapture": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.entities": {
"version": "1.3.14",
"depth": 0,
@ -152,7 +174,7 @@
"url": "https://packages.unity.com"
},
"com.unity.inputsystem": {
"version": "1.14.1",
"version": "1.14.2",
"depth": 0,
"source": "registry",
"dependencies": {
@ -182,6 +204,13 @@
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.nuget.newtonsoft-json": {
"version": "3.2.1",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.profiling.core": {
"version": "1.0.2",
"depth": 1,
@ -261,7 +290,7 @@
},
"com.unity.settings-manager": {
"version": "2.1.0",
"depth": 2,
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
@ -323,7 +352,7 @@
"url": "https://packages.unity.com"
},
"com.unity.timeline": {
"version": "1.8.8",
"version": "1.8.9",
"depth": 0,
"source": "registry",
"dependencies": {

View file

@ -6,9 +6,13 @@ EditorBuildSettings:
serializedVersion: 2
m_Scenes:
- enabled: 1
path: Assets/Scenes/SampleScene.unity
path: Assets/Scenes/DebugScene.unity
guid: 99c9720ab356a0642a771bea13969a05
- enabled: 1
path: Assets/Scenes/DebugScene/ItemPreview.unity
guid: 4a31ffa7a4feefc509c20ec6e65133f0
m_configObjects:
com.unity.addressableassets: {fileID: 11400000, guid: 6b84437f9ebfc5f99b364cc4093ae72f, type: 2}
com.unity.dt.app-ui: {fileID: 11400000, guid: a31f4400692fc454290231da49768b56, type: 2}
com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3}
m_UseUCBPForAssetBundles: 0

View file

@ -0,0 +1,41 @@
{
"m_Dictionary": {
"m_DictionaryValues": [
{
"type": "Eflatun.SceneReference.Editor.SceneDataMapsGeneratorTriggers, Eflatun.SceneReference.Editor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",
"key": "SceneDataMaps.GenerationTriggers",
"value": "{\"m_Value\":-1}"
},
{
"type": "Eflatun.SceneReference.LogLevel, Eflatun.SceneReference, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",
"key": "Logging.EditorLogLevel",
"value": "{\"m_Value\":20}"
},
{
"type": "Newtonsoft.Json.Formatting, Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed",
"key": "SceneDataMaps.JsonFormatting",
"value": "{\"m_Value\":0}"
},
{
"type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"key": "UtilityIgnores.ColoringIgnoresPatterns",
"value": "{\"m_Value\":\"\"}"
},
{
"type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"key": "UtilityIgnores.ToolboxIgnoresPatterns",
"value": "{\"m_Value\":\"\"}"
},
{
"type": "Eflatun.SceneReference.Editor.UtilityIgnoreMode, Eflatun.SceneReference.Editor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",
"key": "UtilityIgnores.ToolboxIgnoreMode",
"value": "{\"m_Value\":0}"
},
{
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"key": "PropertyDrawer.ShowInlineToolbox",
"value": "{\"m_Value\":true}"
}
]
}
}