basic equipment system #32
This commit is contained in:
parent
8d093c5538
commit
5f99039a69
216 changed files with 5787 additions and 1774 deletions
217
Assets/Animation/Dummy.controller
Normal file
217
Assets/Animation/Dummy.controller
Normal file
|
@ -0,0 +1,217 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1107 &-7915675896728613497
|
||||||
|
AnimatorStateMachine:
|
||||||
|
serializedVersion: 6
|
||||||
|
m_ObjectHideFlags: 1
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: Base Layer
|
||||||
|
m_ChildStates:
|
||||||
|
- serializedVersion: 1
|
||||||
|
m_State: {fileID: 6826455873899848278}
|
||||||
|
m_Position: {x: 310, y: 120, z: 0}
|
||||||
|
- serializedVersion: 1
|
||||||
|
m_State: {fileID: 1083569221786146706}
|
||||||
|
m_Position: {x: 310, y: 180, z: 0}
|
||||||
|
- serializedVersion: 1
|
||||||
|
m_State: {fileID: 6498646189330502375}
|
||||||
|
m_Position: {x: 550, y: 120, z: 0}
|
||||||
|
m_ChildStateMachines: []
|
||||||
|
m_AnyStateTransitions: []
|
||||||
|
m_EntryTransitions: []
|
||||||
|
m_StateMachineTransitions: {}
|
||||||
|
m_StateMachineBehaviours: []
|
||||||
|
m_AnyStatePosition: {x: 50, y: 20, z: 0}
|
||||||
|
m_EntryPosition: {x: 50, y: 120, z: 0}
|
||||||
|
m_ExitPosition: {x: 800, y: 120, z: 0}
|
||||||
|
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
|
||||||
|
m_DefaultState: {fileID: 6826455873899848278}
|
||||||
|
--- !u!91 &9100000
|
||||||
|
AnimatorController:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: Dummy
|
||||||
|
serializedVersion: 5
|
||||||
|
m_AnimatorParameters:
|
||||||
|
- m_Name: Hit
|
||||||
|
m_Type: 9
|
||||||
|
m_DefaultFloat: 0
|
||||||
|
m_DefaultInt: 0
|
||||||
|
m_DefaultBool: 0
|
||||||
|
m_Controller: {fileID: 9100000}
|
||||||
|
- m_Name: Die
|
||||||
|
m_Type: 9
|
||||||
|
m_DefaultFloat: 0
|
||||||
|
m_DefaultInt: 0
|
||||||
|
m_DefaultBool: 0
|
||||||
|
m_Controller: {fileID: 9100000}
|
||||||
|
m_AnimatorLayers:
|
||||||
|
- serializedVersion: 5
|
||||||
|
m_Name: Base Layer
|
||||||
|
m_StateMachine: {fileID: -7915675896728613497}
|
||||||
|
m_Mask: {fileID: 0}
|
||||||
|
m_Motions: []
|
||||||
|
m_Behaviours: []
|
||||||
|
m_BlendingMode: 0
|
||||||
|
m_SyncedLayerIndex: -1
|
||||||
|
m_DefaultWeight: 0
|
||||||
|
m_IKPass: 0
|
||||||
|
m_SyncedLayerAffectsTiming: 0
|
||||||
|
m_Controller: {fileID: 9100000}
|
||||||
|
--- !u!1102 &1083569221786146706
|
||||||
|
AnimatorState:
|
||||||
|
serializedVersion: 6
|
||||||
|
m_ObjectHideFlags: 1
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: Falling Back Death
|
||||||
|
m_Speed: 1
|
||||||
|
m_CycleOffset: 0
|
||||||
|
m_Transitions: []
|
||||||
|
m_StateMachineBehaviours: []
|
||||||
|
m_Position: {x: 50, y: 50, z: 0}
|
||||||
|
m_IKOnFeet: 0
|
||||||
|
m_WriteDefaultValues: 1
|
||||||
|
m_Mirror: 0
|
||||||
|
m_SpeedParameterActive: 0
|
||||||
|
m_MirrorParameterActive: 0
|
||||||
|
m_CycleOffsetParameterActive: 0
|
||||||
|
m_TimeParameterActive: 0
|
||||||
|
m_Motion: {fileID: -203655887218126122, guid: 48e1cb17fc54eb58ea2fd96b1b8c481b, type: 3}
|
||||||
|
m_Tag:
|
||||||
|
m_SpeedParameter:
|
||||||
|
m_MirrorParameter:
|
||||||
|
m_CycleOffsetParameter:
|
||||||
|
m_TimeParameter:
|
||||||
|
--- !u!1101 &1543474569028406026
|
||||||
|
AnimatorStateTransition:
|
||||||
|
m_ObjectHideFlags: 1
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name:
|
||||||
|
m_Conditions: []
|
||||||
|
m_DstStateMachine: {fileID: 0}
|
||||||
|
m_DstState: {fileID: 6826455873899848278}
|
||||||
|
m_Solo: 0
|
||||||
|
m_Mute: 0
|
||||||
|
m_IsExit: 0
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TransitionDuration: 0.25
|
||||||
|
m_TransitionOffset: 0
|
||||||
|
m_ExitTime: 0.73214287
|
||||||
|
m_HasExitTime: 1
|
||||||
|
m_HasFixedDuration: 1
|
||||||
|
m_InterruptionSource: 0
|
||||||
|
m_OrderedInterruption: 1
|
||||||
|
m_CanTransitionToSelf: 1
|
||||||
|
--- !u!1101 &5132201050219580291
|
||||||
|
AnimatorStateTransition:
|
||||||
|
m_ObjectHideFlags: 1
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name:
|
||||||
|
m_Conditions:
|
||||||
|
- m_ConditionMode: 1
|
||||||
|
m_ConditionEvent: Die
|
||||||
|
m_EventTreshold: 0
|
||||||
|
m_DstStateMachine: {fileID: 0}
|
||||||
|
m_DstState: {fileID: 1083569221786146706}
|
||||||
|
m_Solo: 0
|
||||||
|
m_Mute: 0
|
||||||
|
m_IsExit: 0
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TransitionDuration: 0.25
|
||||||
|
m_TransitionOffset: 0
|
||||||
|
m_ExitTime: 0.75
|
||||||
|
m_HasExitTime: 0
|
||||||
|
m_HasFixedDuration: 1
|
||||||
|
m_InterruptionSource: 0
|
||||||
|
m_OrderedInterruption: 1
|
||||||
|
m_CanTransitionToSelf: 1
|
||||||
|
--- !u!1101 &6274153639818441180
|
||||||
|
AnimatorStateTransition:
|
||||||
|
m_ObjectHideFlags: 1
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name:
|
||||||
|
m_Conditions:
|
||||||
|
- m_ConditionMode: 1
|
||||||
|
m_ConditionEvent: Hit
|
||||||
|
m_EventTreshold: 0
|
||||||
|
m_DstStateMachine: {fileID: 0}
|
||||||
|
m_DstState: {fileID: 6498646189330502375}
|
||||||
|
m_Solo: 0
|
||||||
|
m_Mute: 0
|
||||||
|
m_IsExit: 0
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TransitionDuration: 0.25
|
||||||
|
m_TransitionOffset: 0
|
||||||
|
m_ExitTime: 0.75
|
||||||
|
m_HasExitTime: 0
|
||||||
|
m_HasFixedDuration: 1
|
||||||
|
m_InterruptionSource: 0
|
||||||
|
m_OrderedInterruption: 1
|
||||||
|
m_CanTransitionToSelf: 1
|
||||||
|
--- !u!1102 &6498646189330502375
|
||||||
|
AnimatorState:
|
||||||
|
serializedVersion: 6
|
||||||
|
m_ObjectHideFlags: 1
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: Head Hit
|
||||||
|
m_Speed: 1
|
||||||
|
m_CycleOffset: 0
|
||||||
|
m_Transitions:
|
||||||
|
- {fileID: 1543474569028406026}
|
||||||
|
m_StateMachineBehaviours: []
|
||||||
|
m_Position: {x: 50, y: 50, z: 0}
|
||||||
|
m_IKOnFeet: 0
|
||||||
|
m_WriteDefaultValues: 1
|
||||||
|
m_Mirror: 0
|
||||||
|
m_SpeedParameterActive: 0
|
||||||
|
m_MirrorParameterActive: 0
|
||||||
|
m_CycleOffsetParameterActive: 0
|
||||||
|
m_TimeParameterActive: 0
|
||||||
|
m_Motion: {fileID: -203655887218126122, guid: eb8ac924f016b1e33bcfd22c5db3b3e6, type: 3}
|
||||||
|
m_Tag:
|
||||||
|
m_SpeedParameter:
|
||||||
|
m_MirrorParameter:
|
||||||
|
m_CycleOffsetParameter:
|
||||||
|
m_TimeParameter:
|
||||||
|
--- !u!1102 &6826455873899848278
|
||||||
|
AnimatorState:
|
||||||
|
serializedVersion: 6
|
||||||
|
m_ObjectHideFlags: 1
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: Empty
|
||||||
|
m_Speed: 1
|
||||||
|
m_CycleOffset: 0
|
||||||
|
m_Transitions:
|
||||||
|
- {fileID: 5132201050219580291}
|
||||||
|
- {fileID: 6274153639818441180}
|
||||||
|
m_StateMachineBehaviours: []
|
||||||
|
m_Position: {x: 50, y: 50, z: 0}
|
||||||
|
m_IKOnFeet: 0
|
||||||
|
m_WriteDefaultValues: 1
|
||||||
|
m_Mirror: 0
|
||||||
|
m_SpeedParameterActive: 0
|
||||||
|
m_MirrorParameterActive: 0
|
||||||
|
m_CycleOffsetParameterActive: 0
|
||||||
|
m_TimeParameterActive: 0
|
||||||
|
m_Motion: {fileID: 0}
|
||||||
|
m_Tag:
|
||||||
|
m_SpeedParameter:
|
||||||
|
m_MirrorParameter:
|
||||||
|
m_CycleOffsetParameter:
|
||||||
|
m_TimeParameter:
|
|
@ -1,8 +1,8 @@
|
||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 12d6aff0f2ce160ac8660ee5c8c47b71
|
guid: e48039382405808f08691dc1cb984c22
|
||||||
folderAsset: yes
|
NativeFormatImporter:
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 9100000
|
||||||
userData:
|
userData:
|
||||||
assetBundleName:
|
assetBundleName:
|
||||||
assetBundleVariant:
|
assetBundleVariant:
|
|
@ -20,7 +20,7 @@ AnimatorStateTransition:
|
||||||
m_TransitionDuration: 0.25
|
m_TransitionDuration: 0.25
|
||||||
m_TransitionOffset: 0
|
m_TransitionOffset: 0
|
||||||
m_ExitTime: 0.9025974
|
m_ExitTime: 0.9025974
|
||||||
m_HasExitTime: 1
|
m_HasExitTime: 0
|
||||||
m_HasFixedDuration: 1
|
m_HasFixedDuration: 1
|
||||||
m_InterruptionSource: 0
|
m_InterruptionSource: 0
|
||||||
m_OrderedInterruption: 1
|
m_OrderedInterruption: 1
|
||||||
|
@ -45,7 +45,7 @@ AnimatorStateTransition:
|
||||||
m_TransitionDuration: 0.25
|
m_TransitionDuration: 0.25
|
||||||
m_TransitionOffset: 0
|
m_TransitionOffset: 0
|
||||||
m_ExitTime: 0.8125
|
m_ExitTime: 0.8125
|
||||||
m_HasExitTime: 1
|
m_HasExitTime: 0
|
||||||
m_HasFixedDuration: 1
|
m_HasFixedDuration: 1
|
||||||
m_InterruptionSource: 0
|
m_InterruptionSource: 0
|
||||||
m_OrderedInterruption: 1
|
m_OrderedInterruption: 1
|
||||||
|
|
|
@ -24,11 +24,38 @@
|
||||||
"interactions": "",
|
"interactions": "",
|
||||||
"initialStateCheck": true
|
"initialStateCheck": true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Ready",
|
||||||
|
"type": "Button",
|
||||||
|
"id": "43858dfd-eb1e-4d25-81c9-786eda9f383b",
|
||||||
|
"expectedControlType": "",
|
||||||
|
"processors": "",
|
||||||
|
"interactions": "",
|
||||||
|
"initialStateCheck": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Attack",
|
"name": "Attack",
|
||||||
"type": "Button",
|
"type": "Button",
|
||||||
"id": "6c2ab1b8-8984-453a-af3d-a3c78ae1679a",
|
"id": "6c2ab1b8-8984-453a-af3d-a3c78ae1679a",
|
||||||
"expectedControlType": "Button",
|
"expectedControlType": "",
|
||||||
|
"processors": "",
|
||||||
|
"interactions": "",
|
||||||
|
"initialStateCheck": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Reload",
|
||||||
|
"type": "Button",
|
||||||
|
"id": "8901b52c-9d31-48a0-960d-340a765f6808",
|
||||||
|
"expectedControlType": "",
|
||||||
|
"processors": "",
|
||||||
|
"interactions": "",
|
||||||
|
"initialStateCheck": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Use Secondary",
|
||||||
|
"type": "Button",
|
||||||
|
"id": "5588bce1-4ae1-4cda-8730-838650924709",
|
||||||
|
"expectedControlType": "",
|
||||||
"processors": "",
|
"processors": "",
|
||||||
"interactions": "",
|
"interactions": "",
|
||||||
"initialStateCheck": false
|
"initialStateCheck": false
|
||||||
|
@ -235,7 +262,7 @@
|
||||||
{
|
{
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "8c8e490b-c610-4785-884f-f04217b23ca4",
|
"id": "8c8e490b-c610-4785-884f-f04217b23ca4",
|
||||||
"path": "<Pointer>/delta",
|
"path": "<Pointer>/position",
|
||||||
"interactions": "",
|
"interactions": "",
|
||||||
"processors": "",
|
"processors": "",
|
||||||
"groups": ";Keyboard&Mouse;Touch",
|
"groups": ";Keyboard&Mouse;Touch",
|
||||||
|
@ -257,7 +284,7 @@
|
||||||
{
|
{
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "143bb1cd-cc10-4eca-a2f0-a3664166fe91",
|
"id": "143bb1cd-cc10-4eca-a2f0-a3664166fe91",
|
||||||
"path": "<Gamepad>/buttonWest",
|
"path": "<Gamepad>/rightShoulder",
|
||||||
"interactions": "",
|
"interactions": "",
|
||||||
"processors": "",
|
"processors": "",
|
||||||
"groups": ";Gamepad",
|
"groups": ";Gamepad",
|
||||||
|
@ -473,6 +500,83 @@
|
||||||
"action": "Crouch",
|
"action": "Crouch",
|
||||||
"isComposite": false,
|
"isComposite": false,
|
||||||
"isPartOfComposite": false
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "af1e1636-b5d4-48fc-b772-2c52cd333dee",
|
||||||
|
"path": "<Mouse>/rightButton",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": ";Keyboard&Mouse",
|
||||||
|
"action": "Ready",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "16cef02c-a624-41d1-86a5-ed36aa8f5549",
|
||||||
|
"path": "<Gamepad>/leftTrigger",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": ";Gamepad",
|
||||||
|
"action": "Ready",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "393f477f-f65c-4261-ac56-d13b3530c802",
|
||||||
|
"path": "<Gamepad>/leftShoulder",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": ";Gamepad",
|
||||||
|
"action": "Use Secondary",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "6d75d42e-db1f-4750-9a67-33cedba396f7",
|
||||||
|
"path": "<Keyboard>/c",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": ";Keyboard&Mouse",
|
||||||
|
"action": "Use Secondary",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "7c03549b-c6f7-40d8-9c57-b7f32c4c3dd8",
|
||||||
|
"path": "<Mouse>/backButton",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": ";Keyboard&Mouse",
|
||||||
|
"action": "Use Secondary",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "3994a53b-2dc2-4307-80cc-a99822fc6d0c",
|
||||||
|
"path": "<Keyboard>/r",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": ";Keyboard&Mouse",
|
||||||
|
"action": "Reload",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "27ccb790-118c-4aa8-a9a4-e037c8382d3c",
|
||||||
|
"path": "<Gamepad>/rightShoulder",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": ";Gamepad",
|
||||||
|
"action": "Reload",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -8,7 +8,7 @@ ScriptedImporter:
|
||||||
assetBundleName:
|
assetBundleName:
|
||||||
assetBundleVariant:
|
assetBundleVariant:
|
||||||
script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3}
|
script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3}
|
||||||
generateWrapperCode: 1
|
generateWrapperCode: 0
|
||||||
wrapperCodePath: Assets/Scripts/Input/InputSystem_Actions.cs
|
wrapperCodePath: Assets/Scripts/Input/InputSystem_Actions.cs
|
||||||
wrapperClassName:
|
wrapperClassName:
|
||||||
wrapperCodeNamespace:
|
wrapperCodeNamespace:
|
||||||
|
|
BIN
Assets/Resources/Dummy.fbx
Normal file
BIN
Assets/Resources/Dummy.fbx
Normal file
Binary file not shown.
107
Assets/Resources/Dummy.fbx.meta
Normal file
107
Assets/Resources/Dummy.fbx.meta
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 015f1ddb77bbd0ce980de36f9e227c78
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 22200
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
materials:
|
||||||
|
materialImportMode: 2
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
materialLocation: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
resampleCurves: 1
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
removeConstantScaleCurves: 0
|
||||||
|
motionNodeName:
|
||||||
|
animationImportErrors:
|
||||||
|
animationImportWarnings:
|
||||||
|
animationRetargetingWarnings:
|
||||||
|
animationDoRetargetingWarnings: 0
|
||||||
|
importAnimatedCustomProperties: 0
|
||||||
|
importConstraints: 0
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: 0.5
|
||||||
|
animationPositionError: 0.5
|
||||||
|
animationScaleError: 0.5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
extraUserProperties: []
|
||||||
|
clipAnimations: []
|
||||||
|
isReadable: 0
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
useSRGBMaterialColor: 1
|
||||||
|
sortHierarchyByName: 1
|
||||||
|
importPhysicalCameras: 1
|
||||||
|
importVisibility: 1
|
||||||
|
importBlendShapes: 1
|
||||||
|
importCameras: 1
|
||||||
|
importLights: 1
|
||||||
|
nodeNameCollisionStrategy: 1
|
||||||
|
fileIdsGeneration: 2
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
bakeAxisConversion: 0
|
||||||
|
preserveHierarchy: 0
|
||||||
|
skinWeightsMode: 0
|
||||||
|
maxBonesPerVertex: 4
|
||||||
|
minBoneWeight: 0.001
|
||||||
|
optimizeBones: 1
|
||||||
|
meshOptimizationFlags: -1
|
||||||
|
indexFormat: 0
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVMarginMethod: 1
|
||||||
|
secondaryUVMinLightmapResolution: 40
|
||||||
|
secondaryUVMinObjectScale: 1
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
strictVertexDataChecks: 0
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 3
|
||||||
|
normalCalculationMode: 4
|
||||||
|
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||||
|
blendShapeNormalImportMode: 1
|
||||||
|
normalSmoothingSource: 0
|
||||||
|
referencedClips: []
|
||||||
|
importAnimation: 1
|
||||||
|
humanDescription:
|
||||||
|
serializedVersion: 3
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: 0.5
|
||||||
|
foreArmTwist: 0.5
|
||||||
|
upperLegTwist: 0.5
|
||||||
|
legTwist: 0.5
|
||||||
|
armStretch: 0.05
|
||||||
|
legStretch: 0.05
|
||||||
|
feetSpacing: 0
|
||||||
|
globalScale: 1
|
||||||
|
rootMotionBoneName:
|
||||||
|
hasTranslationDoF: 0
|
||||||
|
hasExtraRoot: 0
|
||||||
|
skeletonHasParents: 1
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
autoGenerateAvatarMappingIfUnspecified: 1
|
||||||
|
animationType: 2
|
||||||
|
humanoidOversampling: 1
|
||||||
|
avatarSetup: 0
|
||||||
|
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||||
|
importBlendShapeDeformPercent: 1
|
||||||
|
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
BIN
Assets/Resources/Falling Back Death.fbx
Normal file
BIN
Assets/Resources/Falling Back Death.fbx
Normal file
Binary file not shown.
136
Assets/Resources/Falling Back Death.fbx.meta
Normal file
136
Assets/Resources/Falling Back Death.fbx.meta
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 48e1cb17fc54eb58ea2fd96b1b8c481b
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 22200
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
materials:
|
||||||
|
materialImportMode: 2
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
materialLocation: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
resampleCurves: 1
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
removeConstantScaleCurves: 0
|
||||||
|
motionNodeName:
|
||||||
|
animationImportErrors:
|
||||||
|
animationImportWarnings:
|
||||||
|
animationRetargetingWarnings:
|
||||||
|
animationDoRetargetingWarnings: 0
|
||||||
|
importAnimatedCustomProperties: 0
|
||||||
|
importConstraints: 0
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: 0.5
|
||||||
|
animationPositionError: 0.5
|
||||||
|
animationScaleError: 0.5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
extraUserProperties: []
|
||||||
|
clipAnimations:
|
||||||
|
- serializedVersion: 16
|
||||||
|
name: Falling Back Death
|
||||||
|
takeName: mixamo.com
|
||||||
|
internalID: -203655887218126122
|
||||||
|
firstFrame: 0
|
||||||
|
lastFrame: 78
|
||||||
|
wrapMode: 0
|
||||||
|
orientationOffsetY: 0
|
||||||
|
level: 0
|
||||||
|
cycleOffset: 0
|
||||||
|
loop: 0
|
||||||
|
hasAdditiveReferencePose: 0
|
||||||
|
loopTime: 0
|
||||||
|
loopBlend: 0
|
||||||
|
loopBlendOrientation: 0
|
||||||
|
loopBlendPositionY: 0
|
||||||
|
loopBlendPositionXZ: 0
|
||||||
|
keepOriginalOrientation: 0
|
||||||
|
keepOriginalPositionY: 1
|
||||||
|
keepOriginalPositionXZ: 0
|
||||||
|
heightFromFeet: 0
|
||||||
|
mirror: 0
|
||||||
|
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
|
||||||
|
curves: []
|
||||||
|
events: []
|
||||||
|
transformMask: []
|
||||||
|
maskType: 3
|
||||||
|
maskSource: {instanceID: 0}
|
||||||
|
additiveReferencePoseFrame: 0
|
||||||
|
isReadable: 0
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
useSRGBMaterialColor: 1
|
||||||
|
sortHierarchyByName: 1
|
||||||
|
importPhysicalCameras: 1
|
||||||
|
importVisibility: 1
|
||||||
|
importBlendShapes: 1
|
||||||
|
importCameras: 1
|
||||||
|
importLights: 1
|
||||||
|
nodeNameCollisionStrategy: 1
|
||||||
|
fileIdsGeneration: 2
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
bakeAxisConversion: 0
|
||||||
|
preserveHierarchy: 0
|
||||||
|
skinWeightsMode: 0
|
||||||
|
maxBonesPerVertex: 4
|
||||||
|
minBoneWeight: 0.001
|
||||||
|
optimizeBones: 1
|
||||||
|
meshOptimizationFlags: -1
|
||||||
|
indexFormat: 0
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVMarginMethod: 1
|
||||||
|
secondaryUVMinLightmapResolution: 40
|
||||||
|
secondaryUVMinObjectScale: 1
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
strictVertexDataChecks: 0
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 3
|
||||||
|
normalCalculationMode: 4
|
||||||
|
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||||
|
blendShapeNormalImportMode: 1
|
||||||
|
normalSmoothingSource: 0
|
||||||
|
referencedClips: []
|
||||||
|
importAnimation: 1
|
||||||
|
humanDescription:
|
||||||
|
serializedVersion: 3
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: 0.5
|
||||||
|
foreArmTwist: 0.5
|
||||||
|
upperLegTwist: 0.5
|
||||||
|
legTwist: 0.5
|
||||||
|
armStretch: 0.05
|
||||||
|
legStretch: 0.05
|
||||||
|
feetSpacing: 0
|
||||||
|
globalScale: 1
|
||||||
|
rootMotionBoneName:
|
||||||
|
hasTranslationDoF: 0
|
||||||
|
hasExtraRoot: 0
|
||||||
|
skeletonHasParents: 1
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
autoGenerateAvatarMappingIfUnspecified: 1
|
||||||
|
animationType: 2
|
||||||
|
humanoidOversampling: 1
|
||||||
|
avatarSetup: 0
|
||||||
|
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||||
|
importBlendShapeDeformPercent: 1
|
||||||
|
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
155
Assets/Resources/Glock17Equipped.prefab
Normal file
155
Assets/Resources/Glock17Equipped.prefab
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &3189041518118701393
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 4498264122734214993}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Origin
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &4498264122734214993
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3189041518118701393}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
|
||||||
|
m_LocalPosition: {x: 0, y: 0.375, z: -1.2}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 980965867932805622}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
|
||||||
|
--- !u!1001 &727241450723970589
|
||||||
|
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_LocalScale.x
|
||||||
|
value: 0.11
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
propertyPath: m_LocalScale.y
|
||||||
|
value: 0.11
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
propertyPath: m_LocalScale.z
|
||||||
|
value: 0.11
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.x
|
||||||
|
value: -0.025
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.y
|
||||||
|
value: 0.1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.z
|
||||||
|
value: 0.0365
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.w
|
||||||
|
value: 0.3984397
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.x
|
||||||
|
value: 0.56903094
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.y
|
||||||
|
value: -0.58924866
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.z
|
||||||
|
value: 0.4125963
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.x
|
||||||
|
value: 70
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.y
|
||||||
|
value: 180
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
|
value: 272
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 919132149155446097, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
propertyPath: m_Name
|
||||||
|
value: Glock17Equipped
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
m_RemovedComponents: []
|
||||||
|
m_RemovedGameObjects: []
|
||||||
|
m_AddedGameObjects:
|
||||||
|
- targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
insertIndex: -1
|
||||||
|
addedObject: {fileID: 4498264122734214993}
|
||||||
|
m_AddedComponents:
|
||||||
|
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
insertIndex: -1
|
||||||
|
addedObject: {fileID: 5741563885454826239}
|
||||||
|
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
insertIndex: -1
|
||||||
|
addedObject: {fileID: -6843496421257318028}
|
||||||
|
m_SourcePrefab: {fileID: 100100000, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
--- !u!1 &492801038359376716 stripped
|
||||||
|
GameObject:
|
||||||
|
m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 727241450723970589}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
--- !u!114 &5741563885454826239
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 492801038359376716}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: a9bef8fb859e614a48357ece1c529698, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
ready: {fileID: 11400000, guid: 11f0f1ff4a0ab250ba395b772f722ffb, type: 2}
|
||||||
|
fire: {fileID: 11400000, guid: 9636b8e5400b0e8e38ae815274f65b69, type: 2}
|
||||||
|
reload: {fileID: 11400000, guid: b05fd0c6fbc99c1669a88d60100b83cc, type: 2}
|
||||||
|
projectileOrigin: {fileID: 4498264122734214993}
|
||||||
|
damageSource: {fileID: -6843496421257318028}
|
||||||
|
projectileLength: 76.9
|
||||||
|
layerMask:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 1
|
||||||
|
--- !u!114 &-6843496421257318028
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 492801038359376716}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 5ac53e30c2f9ed3d48e3ed86a8aed11b, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
damage: 5
|
||||||
|
--- !u!4 &980965867932805622 stripped
|
||||||
|
Transform:
|
||||||
|
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 727241450723970589}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
|
@ -1,6 +1,6 @@
|
||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 16d8ce8164e4d9a59bd9c28737489417
|
guid: 34383341362bbd7c59b199a69ed897e4
|
||||||
DefaultImporter:
|
PrefabImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
userData:
|
userData:
|
||||||
assetBundleName:
|
assetBundleName:
|
BIN
Assets/Resources/Head Hit.fbx
Normal file
BIN
Assets/Resources/Head Hit.fbx
Normal file
Binary file not shown.
136
Assets/Resources/Head Hit.fbx.meta
Normal file
136
Assets/Resources/Head Hit.fbx.meta
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: eb8ac924f016b1e33bcfd22c5db3b3e6
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 22200
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
materials:
|
||||||
|
materialImportMode: 2
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
materialLocation: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
resampleCurves: 1
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
removeConstantScaleCurves: 0
|
||||||
|
motionNodeName:
|
||||||
|
animationImportErrors:
|
||||||
|
animationImportWarnings:
|
||||||
|
animationRetargetingWarnings:
|
||||||
|
animationDoRetargetingWarnings: 0
|
||||||
|
importAnimatedCustomProperties: 0
|
||||||
|
importConstraints: 0
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: 0.5
|
||||||
|
animationPositionError: 0.5
|
||||||
|
animationScaleError: 0.5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
extraUserProperties: []
|
||||||
|
clipAnimations:
|
||||||
|
- serializedVersion: 16
|
||||||
|
name: Head Hit
|
||||||
|
takeName: mixamo.com
|
||||||
|
internalID: -203655887218126122
|
||||||
|
firstFrame: 0
|
||||||
|
lastFrame: 28
|
||||||
|
wrapMode: 0
|
||||||
|
orientationOffsetY: 0
|
||||||
|
level: 0
|
||||||
|
cycleOffset: 0
|
||||||
|
loop: 0
|
||||||
|
hasAdditiveReferencePose: 0
|
||||||
|
loopTime: 0
|
||||||
|
loopBlend: 0
|
||||||
|
loopBlendOrientation: 0
|
||||||
|
loopBlendPositionY: 0
|
||||||
|
loopBlendPositionXZ: 0
|
||||||
|
keepOriginalOrientation: 0
|
||||||
|
keepOriginalPositionY: 1
|
||||||
|
keepOriginalPositionXZ: 0
|
||||||
|
heightFromFeet: 0
|
||||||
|
mirror: 0
|
||||||
|
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
|
||||||
|
curves: []
|
||||||
|
events: []
|
||||||
|
transformMask: []
|
||||||
|
maskType: 3
|
||||||
|
maskSource: {instanceID: 0}
|
||||||
|
additiveReferencePoseFrame: 0
|
||||||
|
isReadable: 0
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
useSRGBMaterialColor: 1
|
||||||
|
sortHierarchyByName: 1
|
||||||
|
importPhysicalCameras: 1
|
||||||
|
importVisibility: 1
|
||||||
|
importBlendShapes: 1
|
||||||
|
importCameras: 1
|
||||||
|
importLights: 1
|
||||||
|
nodeNameCollisionStrategy: 1
|
||||||
|
fileIdsGeneration: 2
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
bakeAxisConversion: 0
|
||||||
|
preserveHierarchy: 0
|
||||||
|
skinWeightsMode: 0
|
||||||
|
maxBonesPerVertex: 4
|
||||||
|
minBoneWeight: 0.001
|
||||||
|
optimizeBones: 1
|
||||||
|
meshOptimizationFlags: -1
|
||||||
|
indexFormat: 0
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVMarginMethod: 1
|
||||||
|
secondaryUVMinLightmapResolution: 40
|
||||||
|
secondaryUVMinObjectScale: 1
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
strictVertexDataChecks: 0
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 3
|
||||||
|
normalCalculationMode: 4
|
||||||
|
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||||
|
blendShapeNormalImportMode: 1
|
||||||
|
normalSmoothingSource: 0
|
||||||
|
referencedClips: []
|
||||||
|
importAnimation: 1
|
||||||
|
humanDescription:
|
||||||
|
serializedVersion: 3
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: 0.5
|
||||||
|
foreArmTwist: 0.5
|
||||||
|
upperLegTwist: 0.5
|
||||||
|
legTwist: 0.5
|
||||||
|
armStretch: 0.05
|
||||||
|
legStretch: 0.05
|
||||||
|
feetSpacing: 0
|
||||||
|
globalScale: 1
|
||||||
|
rootMotionBoneName:
|
||||||
|
hasTranslationDoF: 0
|
||||||
|
hasExtraRoot: 0
|
||||||
|
skeletonHasParents: 1
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
autoGenerateAvatarMappingIfUnspecified: 1
|
||||||
|
animationType: 2
|
||||||
|
humanoidOversampling: 1
|
||||||
|
avatarSetup: 0
|
||||||
|
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||||
|
importBlendShapeDeformPercent: 1
|
||||||
|
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Binary file not shown.
BIN
Assets/Resources/Textures/icons.png
Normal file
BIN
Assets/Resources/Textures/icons.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
1305
Assets/Resources/Textures/icons.png.meta
Normal file
1305
Assets/Resources/Textures/icons.png.meta
Normal file
File diff suppressed because it is too large
Load diff
17
Assets/SOAP/Input/ActionMapValue.asset
Normal file
17
Assets/SOAP/Input/ActionMapValue.asset
Normal 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: 6d52e2f42c12ad4e7baa16ee84bbd922, type: 3}
|
||||||
|
m_Name: ActionMapValue
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
Description:
|
||||||
|
value:
|
||||||
|
value: 0
|
8
Assets/SOAP/Input/ActionMapValue.asset.meta
Normal file
8
Assets/SOAP/Input/ActionMapValue.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ec7cdb6af08da343ab1b77dab277f433
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
21
Assets/SOAP/Input/AttackInput.asset
Normal file
21
Assets/SOAP/Input/AttackInput.asset
Normal 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: AttackInput
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
started: {fileID: 0}
|
||||||
|
performed: {fileID: 0}
|
||||||
|
canceled: {fileID: 0}
|
||||||
|
waiting: {fileID: 0}
|
||||||
|
disabled: {fileID: 0}
|
||||||
|
reactiveValue: {fileID: 0}
|
||||||
|
valueAsButton: {fileID: 11400000, guid: 9636b8e5400b0e8e38ae815274f65b69, type: 2}
|
8
Assets/SOAP/Input/AttackInput.asset.meta
Normal file
8
Assets/SOAP/Input/AttackInput.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0508750ae653d2c1db583388f54419cd
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
17
Assets/SOAP/Input/AttackValue.asset
Normal file
17
Assets/SOAP/Input/AttackValue.asset
Normal 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: 2d5e43591ac8d995589100187bee292b, type: 3}
|
||||||
|
m_Name: AttackValue
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
Description:
|
||||||
|
value:
|
||||||
|
value: 0
|
8
Assets/SOAP/Input/AttackValue.asset.meta
Normal file
8
Assets/SOAP/Input/AttackValue.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9636b8e5400b0e8e38ae815274f65b69
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
15
Assets/SOAP/Input/CurrentControlSchemeValue.asset
Normal file
15
Assets/SOAP/Input/CurrentControlSchemeValue.asset
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
%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: e5090e65294fb8ff1a7d06242e9c7a1f, type: 3}
|
||||||
|
m_Name: CurrentControlSchemeValue
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
Description:
|
8
Assets/SOAP/Input/CurrentControlSchemeValue.asset.meta
Normal file
8
Assets/SOAP/Input/CurrentControlSchemeValue.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 109f5449a99535723ac84505399115e8
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
21
Assets/SOAP/Input/LookInput.asset
Normal file
21
Assets/SOAP/Input/LookInput.asset
Normal 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: 141143d4bbaccbcda8a23e106eed4b71, type: 3}
|
||||||
|
m_Name: LookInput
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
started: {fileID: 0}
|
||||||
|
performed: {fileID: 0}
|
||||||
|
canceled: {fileID: 0}
|
||||||
|
waiting: {fileID: 0}
|
||||||
|
disabled: {fileID: 0}
|
||||||
|
reactiveValue: {fileID: 11400000, guid: c70e76cde8eafc3beb7fcf9b0680f58a, type: 2}
|
||||||
|
valueAsButton: {fileID: 0}
|
8
Assets/SOAP/Input/LookInput.asset.meta
Normal file
8
Assets/SOAP/Input/LookInput.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ab364824386549340bb67aa64460b803
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
17
Assets/SOAP/Input/LookValue.asset
Normal file
17
Assets/SOAP/Input/LookValue.asset
Normal 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: LookValue
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
Description:
|
||||||
|
value:
|
||||||
|
value: {x: 0, y: 0}
|
8
Assets/SOAP/Input/LookValue.asset.meta
Normal file
8
Assets/SOAP/Input/LookValue.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c70e76cde8eafc3beb7fcf9b0680f58a
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
21
Assets/SOAP/Input/ReadyInput.asset
Normal file
21
Assets/SOAP/Input/ReadyInput.asset
Normal 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: ReadyInput
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
started: {fileID: 0}
|
||||||
|
performed: {fileID: 0}
|
||||||
|
canceled: {fileID: 0}
|
||||||
|
waiting: {fileID: 0}
|
||||||
|
disabled: {fileID: 0}
|
||||||
|
reactiveValue: {fileID: 0}
|
||||||
|
valueAsButton: {fileID: 11400000, guid: 11f0f1ff4a0ab250ba395b772f722ffb, type: 2}
|
8
Assets/SOAP/Input/ReadyInput.asset.meta
Normal file
8
Assets/SOAP/Input/ReadyInput.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 777586949529005bba30dbfac34b23f6
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
17
Assets/SOAP/Input/ReadyValue.asset
Normal file
17
Assets/SOAP/Input/ReadyValue.asset
Normal 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: 2d5e43591ac8d995589100187bee292b, type: 3}
|
||||||
|
m_Name: ReadyValue
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
Description:
|
||||||
|
value:
|
||||||
|
value: 0
|
8
Assets/SOAP/Input/ReadyValue.asset.meta
Normal file
8
Assets/SOAP/Input/ReadyValue.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 11f0f1ff4a0ab250ba395b772f722ffb
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
21
Assets/SOAP/Input/ReloadInput.asset
Normal file
21
Assets/SOAP/Input/ReloadInput.asset
Normal 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: ReloadInput
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
started: {fileID: 0}
|
||||||
|
performed: {fileID: 0}
|
||||||
|
canceled: {fileID: 0}
|
||||||
|
waiting: {fileID: 0}
|
||||||
|
disabled: {fileID: 0}
|
||||||
|
reactiveValue: {fileID: 0}
|
||||||
|
valueAsButton: {fileID: 11400000, guid: b05fd0c6fbc99c1669a88d60100b83cc, type: 2}
|
8
Assets/SOAP/Input/ReloadInput.asset.meta
Normal file
8
Assets/SOAP/Input/ReloadInput.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c32e67c79013726fe9e4572ebc81d809
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
17
Assets/SOAP/Input/ReloadValue.asset
Normal file
17
Assets/SOAP/Input/ReloadValue.asset
Normal 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: 2d5e43591ac8d995589100187bee292b, type: 3}
|
||||||
|
m_Name: ReloadValue
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
Description:
|
||||||
|
value:
|
||||||
|
value: 0
|
8
Assets/SOAP/Input/ReloadValue.asset.meta
Normal file
8
Assets/SOAP/Input/ReloadValue.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b05fd0c6fbc99c1669a88d60100b83cc
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
21
Assets/SOAP/Input/UseSecondaryInput.asset
Normal file
21
Assets/SOAP/Input/UseSecondaryInput.asset
Normal 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: UseSecondaryInput
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
started: {fileID: 0}
|
||||||
|
performed: {fileID: 0}
|
||||||
|
canceled: {fileID: 0}
|
||||||
|
waiting: {fileID: 0}
|
||||||
|
disabled: {fileID: 0}
|
||||||
|
reactiveValue: {fileID: 0}
|
||||||
|
valueAsButton: {fileID: 11400000, guid: 1b0b91e2eaf1545598f3f51dcebd45dc, type: 2}
|
8
Assets/SOAP/Input/UseSecondaryInput.asset.meta
Normal file
8
Assets/SOAP/Input/UseSecondaryInput.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3db3d6cd301b4258b9f97804f2f85e75
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
17
Assets/SOAP/Input/UseSecondaryValue.asset
Normal file
17
Assets/SOAP/Input/UseSecondaryValue.asset
Normal 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: 2d5e43591ac8d995589100187bee292b, type: 3}
|
||||||
|
m_Name: UseSecondaryValue
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
Description:
|
||||||
|
value:
|
||||||
|
value: 0
|
8
Assets/SOAP/Input/UseSecondaryValue.asset.meta
Normal file
8
Assets/SOAP/Input/UseSecondaryValue.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1b0b91e2eaf1545598f3f51dcebd45dc
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
24
Assets/SOAP/Items/Pistol.asset
Normal file
24
Assets/SOAP/Items/Pistol.asset
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
%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: 113edbd3ab279ceccacd0762b2ff405f, type: 3}
|
||||||
|
m_Name: Pistol
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
id: 3aaccf06-f737-4e9b-9daf-2d99e69a14e7
|
||||||
|
displayName: Pistol
|
||||||
|
description:
|
||||||
|
icon: {fileID: -1451803064, guid: acf7be11a7aec869a96fca7c3cb2e6ff, type: 3}
|
||||||
|
tags: []
|
||||||
|
worldPrefab: {fileID: 919132149155446097, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
previewPrefab: {fileID: 919132149155446097, guid: bf9d862a19647f28795df2e666425003, type: 3}
|
||||||
|
stackable: 0
|
||||||
|
maxStackCount: 1
|
||||||
|
equippedPrefab: {fileID: 492801038359376716, guid: 34383341362bbd7c59b199a69ed897e4, type: 3}
|
8
Assets/SOAP/Items/Pistol.asset.meta
Normal file
8
Assets/SOAP/Items/Pistol.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 83a7512982c0868bbacfd587c15efbea
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
17
Assets/SOAP/Items/PrimaryEquipment.asset
Normal file
17
Assets/SOAP/Items/PrimaryEquipment.asset
Normal 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: 5418577a5e2be8f218e64364f8b64a5e, type: 3}
|
||||||
|
m_Name: PrimaryEquipment
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
Description:
|
||||||
|
value:
|
||||||
|
value: {fileID: 11400000, guid: 83a7512982c0868bbacfd587c15efbea, type: 2}
|
8
Assets/SOAP/Items/PrimaryEquipment.asset.meta
Normal file
8
Assets/SOAP/Items/PrimaryEquipment.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e74eeb9e59208cada8b46439b204756d
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
17
Assets/SOAP/Items/SecondaryEquipment.asset
Normal file
17
Assets/SOAP/Items/SecondaryEquipment.asset
Normal 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: 5418577a5e2be8f218e64364f8b64a5e, type: 3}
|
||||||
|
m_Name: SecondaryEquipment
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
Description:
|
||||||
|
value:
|
||||||
|
value: {fileID: 0}
|
8
Assets/SOAP/Items/SecondaryEquipment.asset.meta
Normal file
8
Assets/SOAP/Items/SecondaryEquipment.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0fbc2e68d809b2e94afaccfb3e696a70
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
23
Assets/SOAP/Items/SelectedItem.asset
Normal file
23
Assets/SOAP/Items/SelectedItem.asset
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
%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: 1ca5a6e9c022cf971a176095a74df394, 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
|
8
Assets/SOAP/Items/SelectedItem.asset.meta
Normal file
8
Assets/SOAP/Items/SelectedItem.asset.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0f16091ed7577d3268f2725cf823d4da
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -15,4 +15,6 @@ MonoBehaviour:
|
||||||
serializableItems:
|
serializableItems:
|
||||||
- Item: {fileID: 11400000, guid: 3a9b5fc9b523890cf8abd310dbc64940, type: 2}
|
- Item: {fileID: 11400000, guid: 3a9b5fc9b523890cf8abd310dbc64940, type: 2}
|
||||||
count: 1
|
count: 1
|
||||||
capacity: 8
|
- Item: {fileID: 11400000, guid: 83a7512982c0868bbacfd587c15efbea, type: 2}
|
||||||
|
count: 1
|
||||||
|
capacity: 5
|
||||||
|
|
|
@ -151,7 +151,7 @@ MonoBehaviour:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_PanelSettings: {fileID: 11400000, guid: d8894ba51a816c451b072d957a1cfe45, type: 2}
|
m_PanelSettings: {fileID: 11400000, guid: d8894ba51a816c451b072d957a1cfe45, type: 2}
|
||||||
m_ParentUI: {fileID: 0}
|
m_ParentUI: {fileID: 0}
|
||||||
sourceAsset: {fileID: 9197481963319205126, guid: 0c1a0528290b37272b20d94b19311768, type: 3}
|
sourceAsset: {fileID: 9197481963319205126, guid: 8cea95d71232d8469b296ca7eb59e0a1, type: 3}
|
||||||
m_SortingOrder: 0
|
m_SortingOrder: 0
|
||||||
m_WorldSpaceSizeMode: 1
|
m_WorldSpaceSizeMode: 1
|
||||||
m_WorldSpaceWidth: 1920
|
m_WorldSpaceWidth: 1920
|
||||||
|
@ -180,10 +180,12 @@ MonoBehaviour:
|
||||||
m_GameObject: {fileID: 1223357529}
|
m_GameObject: {fileID: 1223357529}
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_EditorHideFlags: 0
|
m_EditorHideFlags: 0
|
||||||
m_Script: {fileID: 11500000, guid: 2a819c4e399f6cc6c84ace2a31f18d56, type: 3}
|
m_Script: {fileID: 11500000, guid: b37256e37c5968be89fa34dd8344744f, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
uiDocument: {fileID: 1223357530}
|
doc: {fileID: 1223357530}
|
||||||
|
inventory: {fileID: 11400000, guid: cd3f9ac2afa71f8b6acb3fb0cacfe441, type: 2}
|
||||||
|
template: {fileID: 9197481963319205126, guid: 01b74a9c8f3685fb2880379892a17e46, type: 3}
|
||||||
--- !u!1 &1411077289
|
--- !u!1 &1411077289
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -341,8 +343,8 @@ Camera:
|
||||||
m_GameObject: {fileID: 1889780342}
|
m_GameObject: {fileID: 1889780342}
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_ClearFlags: 1
|
m_ClearFlags: 2
|
||||||
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
|
m_BackGroundColor: {r: 1, g: 0.8726415, b: 0.986825, a: 0}
|
||||||
m_projectionMatrixMode: 1
|
m_projectionMatrixMode: 1
|
||||||
m_GateFitMode: 2
|
m_GateFitMode: 2
|
||||||
m_FOVAxisMode: 0
|
m_FOVAxisMode: 0
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using KitsuneCafe.Extension;
|
using KitsuneCafe.Extension;
|
||||||
using KitsuneCafe.System.Attributes;
|
using KitsuneCafe.Sys.Attributes;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEditor.UIElements;
|
using UnityEditor.UIElements;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using KitsuneCafe.System.Attributes;
|
using KitsuneCafe.Sys.Attributes;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEditor.UIElements;
|
using UnityEditor.UIElements;
|
||||||
using UnityEngine.UIElements;
|
using UnityEngine.UIElements;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
using System;
|
using System;
|
||||||
using KitsuneCafe.System;
|
using KitsuneCafe.Sys;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEngine.UIElements;
|
using UnityEngine.UIElements;
|
||||||
using TimeUnit = KitsuneCafe.System.TimeUnit;
|
using TimeUnit = KitsuneCafe.Sys.TimeUnit;
|
||||||
|
|
||||||
[CustomPropertyDrawer(typeof(Duration))]
|
[CustomPropertyDrawer(typeof(Duration))]
|
||||||
public class DurationPropertyDrawer : PropertyDrawer
|
public class DurationPropertyDrawer : PropertyDrawer
|
||||||
|
|
110
Assets/Scripts/Entity/AimFeature.cs
Normal file
110
Assets/Scripts/Entity/AimFeature.cs
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
using System;
|
||||||
|
using KitsuneCafe.Extension;
|
||||||
|
using KitsuneCafe.Input;
|
||||||
|
using KitsuneCafe.ItemSystem;
|
||||||
|
using KitsuneCafe.SOAP;
|
||||||
|
using R3;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace KitsuneCafe.Entity
|
||||||
|
{
|
||||||
|
public class AimFeature : MonoBehaviour
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private new Camera camera;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private EquipmentInstance equipment;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private Motor motor;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private ControlSchemeValue controlScheme;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private Vector2Value lookValue;
|
||||||
|
|
||||||
|
private void OnValidate()
|
||||||
|
{
|
||||||
|
if (camera == null)
|
||||||
|
{
|
||||||
|
camera = Camera.main;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (equipment == null)
|
||||||
|
{
|
||||||
|
equipment = GetComponent<EquipmentInstance>();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (motor == null)
|
||||||
|
{
|
||||||
|
motor = GetComponent<Motor>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
var d = Disposable.CreateBuilder();
|
||||||
|
|
||||||
|
var readied = Observable.FromEventHandler<bool>(
|
||||||
|
e => equipment.Readied += e,
|
||||||
|
e => equipment.Readied -= e
|
||||||
|
)
|
||||||
|
.Select(static eh => eh.e);
|
||||||
|
|
||||||
|
readied
|
||||||
|
.Subscribe(isReady =>
|
||||||
|
{
|
||||||
|
motor.enabled = !isReady;
|
||||||
|
})
|
||||||
|
.AddTo(ref d);
|
||||||
|
|
||||||
|
readied
|
||||||
|
.WhereTrue()
|
||||||
|
.SelectMany(_ =>
|
||||||
|
controlScheme.AsObservable()
|
||||||
|
.CombineLatest(
|
||||||
|
Observable.IntervalFrame(1),
|
||||||
|
static (scheme, _) => scheme
|
||||||
|
).TakeUntil(readied.WhereFalse())
|
||||||
|
)
|
||||||
|
.Subscribe(Aim)
|
||||||
|
.AddTo(ref d);
|
||||||
|
|
||||||
|
d.RegisterTo(destroyCancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Aim(ControlScheme scheme)
|
||||||
|
{
|
||||||
|
switch (scheme)
|
||||||
|
{
|
||||||
|
case ControlScheme.Gamepad:
|
||||||
|
LookInDirection(lookValue.Value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LookAtPosition(lookValue.Value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LookInDirection(Vector2 value)
|
||||||
|
{
|
||||||
|
transform.LookAt(transform.position + new Vector3(value.x, 0, value.y));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LookAtPosition(Vector2 value)
|
||||||
|
{
|
||||||
|
var screenPosition = camera.WorldToViewportPoint(transform.position);
|
||||||
|
var mouseOnScreen = camera.ScreenToViewportPoint(value);
|
||||||
|
|
||||||
|
float angle = AngleBetween(screenPosition, mouseOnScreen);
|
||||||
|
transform.rotation = Quaternion.Euler(new Vector3(0, -angle + 90, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
static float AngleBetween(Vector3 a, Vector3 b)
|
||||||
|
{
|
||||||
|
return Mathf.Atan2(b.y - a.y, b.x - a.x) * Mathf.Rad2Deg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Entity/AimFeature.cs.meta
Normal file
2
Assets/Scripts/Entity/AimFeature.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8c1373e9dcadbfb4aa0bf837a1d44ce1
|
15
Assets/Scripts/Entity/BoneAttachment.cs
Normal file
15
Assets/Scripts/Entity/BoneAttachment.cs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace KitsuneCafe.Entity
|
||||||
|
{
|
||||||
|
public class BoneAttachment : MonoBehaviour
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private Transform bone;
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
transform.SetParent(bone, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Entity/BoneAttachment.cs.meta
Normal file
2
Assets/Scripts/Entity/BoneAttachment.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 795d0a02aa223804cb45ee88dd31f479
|
|
@ -1,29 +1,37 @@
|
||||||
using KitsuneCafe.System;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace KitsuneCafe.Entity
|
namespace KitsuneCafe.Entity
|
||||||
{
|
{
|
||||||
public interface IDamaging : IGameObject
|
|
||||||
{
|
|
||||||
void ApplyDamage(int amount, IDamageable target);
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface IDamageable : IGameObject
|
|
||||||
{
|
|
||||||
void ReceiveDamage(IDamaging source, int amount);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public class DamageSource : MonoBehaviour, IDamaging
|
public class DamageSource : MonoBehaviour, IDamaging
|
||||||
{
|
{
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private int damage;
|
private int damage;
|
||||||
|
|
||||||
|
public void ApplyDamage(Collider target)
|
||||||
|
{
|
||||||
|
ApplyDamage(damage, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ApplyDamage(GameObject target)
|
||||||
|
{
|
||||||
|
ApplyDamage(damage, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ApplyDamage(IDamageable target)
|
||||||
|
{
|
||||||
|
ApplyDamage(damage, target);
|
||||||
|
}
|
||||||
|
|
||||||
public void ApplyDamage(int amount, IDamageable target)
|
public void ApplyDamage(int amount, IDamageable target)
|
||||||
{
|
{
|
||||||
target.ReceiveDamage(this, amount);
|
target.ReceiveDamage(this, amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ApplyDamage(int amount, Collider target)
|
||||||
|
{
|
||||||
|
ApplyDamage(amount, target.gameObject);
|
||||||
|
}
|
||||||
|
|
||||||
public void ApplyDamage(int amount, GameObject target)
|
public void ApplyDamage(int amount, GameObject target)
|
||||||
{
|
{
|
||||||
if (target.TryGetComponent(out IDamageable damageable))
|
if (target.TryGetComponent(out IDamageable damageable))
|
56
Assets/Scripts/Entity/DeathAnimator.cs
Normal file
56
Assets/Scripts/Entity/DeathAnimator.cs
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
using KitsuneCafe.Sys.Attributes;
|
||||||
|
using R3;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace KitsuneCafe.Entity
|
||||||
|
{
|
||||||
|
public class DummyAnimator : MonoBehaviour
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private Health health;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private Animator animator;
|
||||||
|
|
||||||
|
[SerializeField, AnimatorParam("animator")]
|
||||||
|
private int hitParam;
|
||||||
|
|
||||||
|
[SerializeField, AnimatorParam("animator")]
|
||||||
|
private int deathParam;
|
||||||
|
|
||||||
|
private void OnValidate()
|
||||||
|
{
|
||||||
|
if (animator == null)
|
||||||
|
{
|
||||||
|
animator = GetComponent<Animator>();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (health == null)
|
||||||
|
{
|
||||||
|
health = GetComponent<Health>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
Observable.FromEventHandler<HealthChanged>(
|
||||||
|
e => health.HealthChanged += e,
|
||||||
|
e => health.HealthChanged -= e
|
||||||
|
)
|
||||||
|
.Select(ev => ev.e)
|
||||||
|
.Subscribe(e =>
|
||||||
|
{
|
||||||
|
if (e.Current > 0)
|
||||||
|
{
|
||||||
|
animator.SetBool(hitParam, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
animator.SetBool(deathParam, true);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.AddTo(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Entity/DeathAnimator.cs.meta
Normal file
2
Assets/Scripts/Entity/DeathAnimator.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 452b09482ed36cc83ab8817f704c9acd
|
|
@ -1,8 +1,9 @@
|
||||||
|
using KitsuneCafe.Extension;
|
||||||
|
using KitsuneCafe.ItemSystem;
|
||||||
|
using KitsuneCafe.Sys;
|
||||||
|
using KitsuneCafe.Sys.Attributes;
|
||||||
using R3;
|
using R3;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using KitsuneCafe.System;
|
|
||||||
using KitsuneCafe.Extension;
|
|
||||||
using KitsuneCafe.System.Attributes;
|
|
||||||
|
|
||||||
namespace KitsuneCafe.Entity
|
namespace KitsuneCafe.Entity
|
||||||
{
|
{
|
||||||
|
@ -16,6 +17,7 @@ namespace KitsuneCafe.Entity
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private new Rigidbody rigidbody;
|
private new Rigidbody rigidbody;
|
||||||
|
|
||||||
|
[Header("Movement")]
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private Motor motor;
|
private Motor motor;
|
||||||
|
|
||||||
|
@ -37,15 +39,39 @@ namespace KitsuneCafe.Entity
|
||||||
[SerializeField, Range(0f, 1f)]
|
[SerializeField, Range(0f, 1f)]
|
||||||
private float sprintAnimationParamMax = 1.0f;
|
private float sprintAnimationParamMax = 1.0f;
|
||||||
|
|
||||||
|
[Header("Combat")]
|
||||||
[SerializeField, AnimatorParam("animator")]
|
[SerializeField, AnimatorParam("animator")]
|
||||||
private string readyParam;
|
private string readyParam;
|
||||||
|
|
||||||
private void Reset()
|
[SerializeField]
|
||||||
|
private EquipmentInstance equipment;
|
||||||
|
|
||||||
|
private void OnValidate()
|
||||||
{
|
{
|
||||||
animator = GetComponent<Animator>();
|
if (animator == null)
|
||||||
rigidbody = GetComponent<Rigidbody>();
|
{
|
||||||
motor = GetComponent<Motor>();
|
animator = GetComponent<Animator>();
|
||||||
sprint = GetComponent<SprintFeature>();
|
}
|
||||||
|
|
||||||
|
if (rigidbody == null)
|
||||||
|
{
|
||||||
|
rigidbody = GetComponent<Rigidbody>();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (motor == null)
|
||||||
|
{
|
||||||
|
motor = GetComponent<Motor>();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sprint == null)
|
||||||
|
{
|
||||||
|
sprint = GetComponent<SprintFeature>();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (equipment == null)
|
||||||
|
{
|
||||||
|
equipment = GetComponent<EquipmentInstance>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
|
@ -73,6 +99,15 @@ namespace KitsuneCafe.Entity
|
||||||
})
|
})
|
||||||
.AddTo(ref d);
|
.AddTo(ref d);
|
||||||
|
|
||||||
|
|
||||||
|
Observable.FromEventHandler<bool>(
|
||||||
|
e => equipment.Readied += e,
|
||||||
|
e => equipment.Readied -= e
|
||||||
|
)
|
||||||
|
.Select(eh => eh.e)
|
||||||
|
.Subscribe(ready => animator.SetBool(readyParam, ready))
|
||||||
|
.AddTo(ref d);
|
||||||
|
|
||||||
d.RegisterTo(destroyCancellationToken);
|
d.RegisterTo(destroyCancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,13 @@ using UnityEngine;
|
||||||
|
|
||||||
namespace KitsuneCafe.Entity
|
namespace KitsuneCafe.Entity
|
||||||
{
|
{
|
||||||
|
public record HealthChanged(int Previous, int Current)
|
||||||
|
{
|
||||||
|
public static implicit operator HealthChanged((int, int) t) => new(t.Item1, t.Item2);
|
||||||
|
public static implicit operator (int Previous, int Current)(HealthChanged t) =>
|
||||||
|
(t.Previous, t.Current);
|
||||||
|
}
|
||||||
|
|
||||||
public class Health : MonoBehaviour, IDamageable
|
public class Health : MonoBehaviour, IDamageable
|
||||||
{
|
{
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
|
@ -16,14 +23,31 @@ namespace KitsuneCafe.Entity
|
||||||
|
|
||||||
public int Current => current.CurrentValue;
|
public int Current => current.CurrentValue;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private bool restoreOnStart = true;
|
||||||
|
|
||||||
|
public event EventHandler<HealthChanged> HealthChanged;
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
if (restoreOnStart)
|
||||||
|
{
|
||||||
|
current.Value = max.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
current.AsObservable()
|
||||||
|
.Pairwise()
|
||||||
|
.Subscribe(t => HealthChanged?.Invoke(this, t));
|
||||||
|
}
|
||||||
|
|
||||||
public void Recover(int amount)
|
public void Recover(int amount)
|
||||||
{
|
{
|
||||||
this.current.Value = Math.Clamp(this.Current + amount, 0, this.Max);
|
current.Value = Math.Clamp(Current + amount, 0, Max);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ReceiveDamage(IDamaging source, int amount)
|
public void ReceiveDamage(IDamaging source, int amount)
|
||||||
{
|
{
|
||||||
this.current.Value = Math.Clamp(this.Current - amount, 0, this.Max);
|
current.Value = Math.Clamp(Current - amount, 0, Max);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
9
Assets/Scripts/Entity/IDamageable.cs
Normal file
9
Assets/Scripts/Entity/IDamageable.cs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
using KitsuneCafe.Sys;
|
||||||
|
|
||||||
|
namespace KitsuneCafe.Entity
|
||||||
|
{
|
||||||
|
public interface IDamageable : IGameObject
|
||||||
|
{
|
||||||
|
void ReceiveDamage(IDamaging source, int amount);
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Entity/IDamageable.cs.meta
Normal file
2
Assets/Scripts/Entity/IDamageable.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0a4a01d5c978b1cf8afe37f7e19f4b67
|
9
Assets/Scripts/Entity/IDamaging.cs
Normal file
9
Assets/Scripts/Entity/IDamaging.cs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
using KitsuneCafe.Sys;
|
||||||
|
|
||||||
|
namespace KitsuneCafe.Entity
|
||||||
|
{
|
||||||
|
public interface IDamaging : IGameObject
|
||||||
|
{
|
||||||
|
void ApplyDamage(int amount, IDamageable target);
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Entity/IDamaging.cs.meta
Normal file
2
Assets/Scripts/Entity/IDamaging.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8a298d4067ebae12aa214a267d09879b
|
|
@ -1,3 +1,4 @@
|
||||||
|
using System.Threading;
|
||||||
using KitsuneCafe.Extension;
|
using KitsuneCafe.Extension;
|
||||||
using KitsuneCafe.SOAP;
|
using KitsuneCafe.SOAP;
|
||||||
using R3;
|
using R3;
|
||||||
|
@ -39,19 +40,23 @@ namespace KitsuneCafe.Entity
|
||||||
private float epsilon = 0.001f;
|
private float epsilon = 0.001f;
|
||||||
private float sqEpsilon;
|
private float sqEpsilon;
|
||||||
|
|
||||||
private ReactiveProperty<float> currentMaxSpeed = new ReactiveProperty<float>();
|
private ReactiveProperty<float> currentMaxSpeed = new();
|
||||||
public float MaxSpeed => currentMaxSpeed.Value;
|
public float MaxSpeed => currentMaxSpeed.Value;
|
||||||
public ReactiveProperty<float> MaxSpeedSource => currentMaxSpeed;
|
public ReactiveProperty<float> MaxSpeedSource => currentMaxSpeed;
|
||||||
|
|
||||||
//private readonly ReactiveProperty<Vector3> direction = new ReactiveProperty<Vector3>(Vector3.zero);
|
private CancellationTokenSource disableCancellationSource;
|
||||||
|
|
||||||
private void Reset()
|
private void OnValidate()
|
||||||
{
|
{
|
||||||
rigidbody = GetComponent<Rigidbody>();
|
if (rigidbody == null)
|
||||||
|
{
|
||||||
|
rigidbody = GetComponent<Rigidbody>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Awake()
|
private void OnEnable()
|
||||||
{
|
{
|
||||||
|
disableCancellationSource = new();
|
||||||
var directionSource = direction.AsObservable().Select(v2 => new Vector3(v2.x, 0, v2.y));
|
var directionSource = direction.AsObservable().Select(v2 => new Vector3(v2.x, 0, v2.y));
|
||||||
|
|
||||||
currentMaxSpeed.Value = maxSpeed;
|
currentMaxSpeed.Value = maxSpeed;
|
||||||
|
@ -77,7 +82,13 @@ namespace KitsuneCafe.Entity
|
||||||
})
|
})
|
||||||
.AddTo(ref d);
|
.AddTo(ref d);
|
||||||
|
|
||||||
d.RegisterTo(destroyCancellationToken);
|
d.RegisterTo(disableCancellationSource.Token);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDisable()
|
||||||
|
{
|
||||||
|
rigidbody.linearVelocity = Vector3.zero;
|
||||||
|
disableCancellationSource.Cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Observable<Quaternion> CalculateRotationStream(Observable<Vector3> directionSource, FrameProvider provider)
|
private Observable<Quaternion> CalculateRotationStream(Observable<Vector3> directionSource, FrameProvider provider)
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace KitsuneCafe.Entity
|
||||||
private float adjustedMaxSpeed = 3f;
|
private float adjustedMaxSpeed = 3f;
|
||||||
public float SprintSpeed => adjustedMaxSpeed;
|
public float SprintSpeed => adjustedMaxSpeed;
|
||||||
|
|
||||||
public readonly ReactiveProperty<bool> IsSprinting = new ReactiveProperty<bool>(false);
|
public readonly ReactiveProperty<bool> IsSprinting = new(false);
|
||||||
|
|
||||||
private void Reset()
|
private void Reset()
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using KitsuneCafe.System.Attributes;
|
using KitsuneCafe.Sys.Attributes;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace KitsuneCafe.Animation
|
namespace KitsuneCafe.Animation
|
||||||
|
|
|
@ -1,9 +1,22 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace KitsuneCafe.Extension
|
namespace KitsuneCafe.Extension
|
||||||
{
|
{
|
||||||
public static class CollectionExtension
|
public static class CollectionExtension
|
||||||
{
|
{
|
||||||
|
public static bool HasIndex(this IList list, int index)
|
||||||
|
{
|
||||||
|
return index >= 0 && index < list.Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerable<(T, int)> Enumerate<T>(this IEnumerable<T> enumerable)
|
||||||
|
{
|
||||||
|
return enumerable.Select((x, i) => (x, i));
|
||||||
|
}
|
||||||
|
|
||||||
public static bool IsTypeOf<T, U>()
|
public static bool IsTypeOf<T, U>()
|
||||||
{
|
{
|
||||||
return IsTypeOf(typeof(T), typeof(U));
|
return IsTypeOf(typeof(T), typeof(U));
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
using R3;
|
|
||||||
using UnityEngine;
|
|
||||||
using System;
|
using System;
|
||||||
using KitsuneCafe.System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using KitsuneCafe.Sys;
|
||||||
|
using R3;
|
||||||
|
using UnityEngine;
|
||||||
using UnityEngine.Rendering.Universal;
|
using UnityEngine.Rendering.Universal;
|
||||||
|
|
||||||
namespace KitsuneCafe.Extension
|
namespace KitsuneCafe.Extension
|
||||||
|
@ -179,6 +179,11 @@ namespace KitsuneCafe.Extension
|
||||||
return source.Where(Func.Identity);
|
return source.Where(Func.Identity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Observable<bool> WhereFalse(this Observable<bool> source)
|
||||||
|
{
|
||||||
|
return WhereEquals(source, false);
|
||||||
|
}
|
||||||
|
|
||||||
public static Observable<T> ObserveBool<T>(this T component, Func<T, bool> predicate) where T : MonoBehaviour
|
public static Observable<T> ObserveBool<T>(this T component, Func<T, bool> predicate) where T : MonoBehaviour
|
||||||
{
|
{
|
||||||
if (predicate(component))
|
if (predicate(component))
|
||||||
|
|
8
Assets/Scripts/Input/ActionMap.cs
Normal file
8
Assets/Scripts/Input/ActionMap.cs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
namespace KitsuneCafe.Input
|
||||||
|
{
|
||||||
|
public enum ActionMap
|
||||||
|
{
|
||||||
|
Player,
|
||||||
|
UI
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Input/ActionMap.cs.meta
Normal file
2
Assets/Scripts/Input/ActionMap.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0c363f3d399e01d6ab6b10234746c96a
|
72
Assets/Scripts/Input/InputChangeHandler.cs
Normal file
72
Assets/Scripts/Input/InputChangeHandler.cs
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
using KitsuneCafe.SOAP;
|
||||||
|
using R3;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.InputSystem;
|
||||||
|
|
||||||
|
namespace KitsuneCafe.Input
|
||||||
|
{
|
||||||
|
public class InputChangeHandler : MonoBehaviour
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private PlayerInput playerInput;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private ControlSchemeValue controlScheme;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private ActionMapValue actionMap;
|
||||||
|
|
||||||
|
private void OnValidate()
|
||||||
|
{
|
||||||
|
if (playerInput == null)
|
||||||
|
{
|
||||||
|
playerInput = GetComponent<PlayerInput>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
var d = Disposable.CreateBuilder();
|
||||||
|
|
||||||
|
actionMap.AsObservable()
|
||||||
|
.DistinctUntilChanged()
|
||||||
|
.Subscribe(map =>
|
||||||
|
{
|
||||||
|
var name = map switch
|
||||||
|
{
|
||||||
|
ActionMap.Player => "Player",
|
||||||
|
ActionMap.UI => "UI",
|
||||||
|
_ => throw new System.NotImplementedException()
|
||||||
|
};
|
||||||
|
|
||||||
|
var inputActionMap = playerInput.actions.FindActionMap(name);
|
||||||
|
playerInput.currentActionMap = inputActionMap;
|
||||||
|
})
|
||||||
|
.AddTo(ref d);
|
||||||
|
|
||||||
|
controlScheme.Value = GetControlScheme(playerInput.currentControlScheme);
|
||||||
|
|
||||||
|
Observable.FromEvent<PlayerInput>(
|
||||||
|
e => playerInput.onControlsChanged += e,
|
||||||
|
e => playerInput.onControlsChanged -= e
|
||||||
|
)
|
||||||
|
.Subscribe(value =>
|
||||||
|
{
|
||||||
|
controlScheme.Value = GetControlScheme(value.currentControlScheme);
|
||||||
|
})
|
||||||
|
.AddTo(ref d);
|
||||||
|
|
||||||
|
d.RegisterTo(destroyCancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ControlScheme GetControlScheme(string controlScheme)
|
||||||
|
{
|
||||||
|
return controlScheme switch
|
||||||
|
{
|
||||||
|
"Gamepad" => ControlScheme.Gamepad,
|
||||||
|
"Keyboard&Mouse" => ControlScheme.KeyboardAndMouse,
|
||||||
|
_ => ControlScheme.Other
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Input/InputChangeHandler.cs.meta
Normal file
2
Assets/Scripts/Input/InputChangeHandler.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 833c47d8284ff8354ba97485ed999d8e
|
9
Assets/Scripts/Input/InputDevice.cs
Normal file
9
Assets/Scripts/Input/InputDevice.cs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
namespace KitsuneCafe.Input
|
||||||
|
{
|
||||||
|
public enum ControlScheme
|
||||||
|
{
|
||||||
|
Gamepad,
|
||||||
|
KeyboardAndMouse,
|
||||||
|
Other
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Input/InputDevice.cs.meta
Normal file
2
Assets/Scripts/Input/InputDevice.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5df883635b91c2a58acc85689ffbf0da
|
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using KitsuneCafe.ItemSystem;
|
using KitsuneCafe.ItemSystem;
|
||||||
using KitsuneCafe.System;
|
using KitsuneCafe.Sys;
|
||||||
using KitsuneCafe.System.Attributes;
|
using KitsuneCafe.Sys.Attributes;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Events;
|
using UnityEngine.Events;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using KitsuneCafe.System;
|
using KitsuneCafe.Sys;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace KitsuneCafe.Interaction
|
namespace KitsuneCafe.Interaction
|
||||||
|
@ -74,9 +74,9 @@ namespace KitsuneCafe.Interaction
|
||||||
{
|
{
|
||||||
public static class Result
|
public static class Result
|
||||||
{
|
{
|
||||||
public static IResult<Unit, InteractionError> Ok() => System.Result.Ok<Unit, InteractionError>(default);
|
public static IResult<Unit, InteractionError> Ok() => Sys.Result.Ok<Unit, InteractionError>(default);
|
||||||
public static IResult<Unit, InteractionError> Err(InteractionError error) => System.Result.Err<Unit, InteractionError>(error);
|
public static IResult<Unit, InteractionError> Err(InteractionError error) => Sys.Result.Err<Unit, InteractionError>(error);
|
||||||
public static IResult<Unit, InteractionError> Err(InteractionErrorCode error) => System.Result.Err<Unit, InteractionError>(error);
|
public static IResult<Unit, InteractionError> Err(InteractionErrorCode error) => Sys.Result.Err<Unit, InteractionError>(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsInteractable { get; }
|
bool IsInteractable { get; }
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using KitsuneCafe.System;
|
using KitsuneCafe.Sys;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Events;
|
using UnityEngine.Events;
|
||||||
|
|
||||||
|
|
56
Assets/Scripts/Item/BaseItem.cs
Normal file
56
Assets/Scripts/Item/BaseItem.cs
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using KitsuneCafe.SOAP;
|
||||||
|
using KitsuneCafe.Sys.Attributes;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace KitsuneCafe.ItemSystem
|
||||||
|
{
|
||||||
|
public abstract class BaseItem : ScriptableObject, IItem
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private string id;
|
||||||
|
public string Id => id;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private string displayName;
|
||||||
|
public string DisplayName => displayName;
|
||||||
|
|
||||||
|
[SerializeField, TextArea]
|
||||||
|
private string description;
|
||||||
|
public string Description => description;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private Sprite icon;
|
||||||
|
public Sprite Icon => icon;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private List<StringConstant> tags;
|
||||||
|
public IReadOnlyCollection<StringConstant> Tags => tags;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private GameObject worldPrefab;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private GameObject previewPrefab;
|
||||||
|
|
||||||
|
[Button("Generate New ID")]
|
||||||
|
protected void GenerateNewId()
|
||||||
|
{
|
||||||
|
id = Guid.NewGuid().ToString();
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
UnityEditor.EditorUtility.SetDirty(this);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
public GameObject CreateInstance()
|
||||||
|
{
|
||||||
|
return Instantiate(worldPrefab);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GameObject CreatePreview()
|
||||||
|
{
|
||||||
|
return Instantiate(previewPrefab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Item/BaseItem.cs.meta
Normal file
2
Assets/Scripts/Item/BaseItem.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 38f485775f9f15e6f9d9dd3874bd6bef
|
111
Assets/Scripts/Item/EquipmentInstance.cs
Normal file
111
Assets/Scripts/Item/EquipmentInstance.cs
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
using System;
|
||||||
|
using KitsuneCafe.Entity;
|
||||||
|
using KitsuneCafe.SOAP;
|
||||||
|
using R3;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace KitsuneCafe.ItemSystem
|
||||||
|
{
|
||||||
|
public record ChangedEquipmentEvent(IEquippable Previous, IEquippable Current);
|
||||||
|
|
||||||
|
public class EquipmentInstance : MonoBehaviour
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private InventoryInstance inventory;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private BoneAttachment attachment;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private EquipmentValue primary;
|
||||||
|
public EquipmentItem Primary => primary.Value;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private EquipmentValue secondary;
|
||||||
|
public EquipmentItem Secondary => secondary.Value;
|
||||||
|
|
||||||
|
private IEquippable equippedPrimary;
|
||||||
|
|
||||||
|
public event EventHandler<ChangedEquipmentEvent> ChangedEquipment;
|
||||||
|
public event EventHandler<bool> Readied;
|
||||||
|
public event EventHandler Attacked;
|
||||||
|
public event EventHandler Reloaded;
|
||||||
|
|
||||||
|
public bool HasPrimaryEquipped => primary != null;
|
||||||
|
public bool HasSecondaryEquipped => secondary != null;
|
||||||
|
|
||||||
|
private void OnValidate()
|
||||||
|
{
|
||||||
|
if (inventory == null)
|
||||||
|
{
|
||||||
|
inventory = GetComponent<InventoryInstance>();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attachment == null)
|
||||||
|
{
|
||||||
|
attachment = GetComponent<BoneAttachment>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
var d = Disposable.CreateBuilder();
|
||||||
|
|
||||||
|
primary.AsObservable()
|
||||||
|
.Subscribe(EquipPrimary)
|
||||||
|
.AddTo(ref d);
|
||||||
|
|
||||||
|
secondary.AsObservable()
|
||||||
|
.Subscribe()
|
||||||
|
.AddTo(ref d);
|
||||||
|
|
||||||
|
d.RegisterTo(destroyCancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void EquipPrimary(EquipmentItem equipment)
|
||||||
|
{
|
||||||
|
var previous = equippedPrimary;
|
||||||
|
|
||||||
|
if (equippedPrimary != null)
|
||||||
|
{
|
||||||
|
equippedPrimary.OnUnequip();
|
||||||
|
equippedPrimary.Readied -= OnReady;
|
||||||
|
equippedPrimary.Attacked -= OnAttack;
|
||||||
|
equippedPrimary.Reloaded -= OnReload;
|
||||||
|
|
||||||
|
Destroy(equippedPrimary.gameObject);
|
||||||
|
equippedPrimary = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
IEquippable instance = null;
|
||||||
|
if (equipment != null)
|
||||||
|
{
|
||||||
|
instance = equipment.CreateEquipment();
|
||||||
|
instance.Readied += OnReady;
|
||||||
|
instance.Attacked += OnAttack;
|
||||||
|
instance.Reloaded += OnReload;
|
||||||
|
instance.gameObject.transform.SetParent(attachment.transform, false);
|
||||||
|
equippedPrimary = instance;
|
||||||
|
|
||||||
|
equippedPrimary.OnEquip(inventory);
|
||||||
|
}
|
||||||
|
|
||||||
|
ChangedEquipment?.Invoke(this, new ChangedEquipmentEvent(previous, instance));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnReload(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Reloaded?.Invoke(sender, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnAttack(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Attacked?.Invoke(sender, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnReady(object sender, bool e)
|
||||||
|
{
|
||||||
|
Readied?.Invoke(sender, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Item/EquipmentInstance.cs.meta
Normal file
2
Assets/Scripts/Item/EquipmentInstance.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d5ed1241db3bd1d74899513f3875cbe1
|
27
Assets/Scripts/Item/EquipmentItem.cs
Normal file
27
Assets/Scripts/Item/EquipmentItem.cs
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
using KitsuneCafe.Sys;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace KitsuneCafe.ItemSystem
|
||||||
|
{
|
||||||
|
[CreateAssetMenu(menuName = KitsuneCafeMenu.Item + "Equipment")]
|
||||||
|
public class EquipmentItem : Item, IEquipmentItem
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private GameObject equippedPrefab;
|
||||||
|
public GameObject EquippedPrefab => equippedPrefab;
|
||||||
|
|
||||||
|
private void OnValidate()
|
||||||
|
{
|
||||||
|
if (equippedPrefab != null && equippedPrefab.GetComponent<IEquippable>() == null)
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"Equipment prefab {equippedPrefab} has no instance of IEquipment.");
|
||||||
|
equippedPrefab = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEquippable CreateEquipment()
|
||||||
|
{
|
||||||
|
return Instantiate(equippedPrefab).GetComponent<IEquippable>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Item/EquipmentItem.cs.meta
Normal file
2
Assets/Scripts/Item/EquipmentItem.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 113edbd3ab279ceccacd0762b2ff405f
|
126
Assets/Scripts/Item/Firearm.cs
Normal file
126
Assets/Scripts/Item/Firearm.cs
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
using System;
|
||||||
|
using KitsuneCafe.Entity;
|
||||||
|
using KitsuneCafe.Extension;
|
||||||
|
using KitsuneCafe.SOAP;
|
||||||
|
using R3;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace KitsuneCafe.ItemSystem
|
||||||
|
{
|
||||||
|
public class Firearm : MonoBehaviour, IEquippable, IDamaging
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private BoolValue ready;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private BoolValue fire;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private BoolValue reload;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private Transform projectileOrigin;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private DamageSource damageSource;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private float projectileLength = 15;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private LayerMask layerMask;
|
||||||
|
|
||||||
|
public event EventHandler<bool> Readied;
|
||||||
|
public event EventHandler Attacked;
|
||||||
|
public event EventHandler Reloaded;
|
||||||
|
|
||||||
|
private InventoryInstance inventory;
|
||||||
|
private readonly RaycastHit[] hits = new RaycastHit[1];
|
||||||
|
|
||||||
|
private void OnValidate()
|
||||||
|
{
|
||||||
|
if (damageSource == null)
|
||||||
|
{
|
||||||
|
damageSource = GetComponent<DamageSource>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnEquip(InventoryInstance inventory)
|
||||||
|
{
|
||||||
|
this.inventory = inventory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnUnequip() { }
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
if (projectileOrigin == null)
|
||||||
|
{
|
||||||
|
projectileOrigin = transform;
|
||||||
|
}
|
||||||
|
|
||||||
|
var d = Disposable.CreateBuilder();
|
||||||
|
|
||||||
|
ready
|
||||||
|
.AsObservable()
|
||||||
|
.Subscribe(Ready)
|
||||||
|
.AddTo(ref d);
|
||||||
|
|
||||||
|
fire
|
||||||
|
.AsObservable()
|
||||||
|
.CombineLatest(ready.AsObservable(), (ready, fire) => ready && fire)
|
||||||
|
.WhereTrue()
|
||||||
|
.AsUnitObservable()
|
||||||
|
.Subscribe(_ => Fire())
|
||||||
|
.AddTo(ref d);
|
||||||
|
|
||||||
|
reload
|
||||||
|
.AsObservable()
|
||||||
|
.WhereTrue()
|
||||||
|
.Subscribe(_ => Reload())
|
||||||
|
.AddTo(ref d);
|
||||||
|
|
||||||
|
d.RegisterTo(destroyCancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Ready(bool isReady)
|
||||||
|
{
|
||||||
|
Readied?.Invoke(this, isReady);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Fire()
|
||||||
|
{
|
||||||
|
var count = Physics.RaycastNonAlloc(
|
||||||
|
projectileOrigin.position,
|
||||||
|
projectileOrigin.forward,
|
||||||
|
hits,
|
||||||
|
projectileLength,
|
||||||
|
layerMask
|
||||||
|
);
|
||||||
|
|
||||||
|
if (count > 0)
|
||||||
|
{
|
||||||
|
damageSource.ApplyDamage(hits[0].collider);
|
||||||
|
}
|
||||||
|
|
||||||
|
Attacked?.Invoke(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Reload()
|
||||||
|
{
|
||||||
|
Reloaded?.Invoke(this, EventArgs.Empty);
|
||||||
|
Debug.Log("rewowd");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ApplyDamage(int amount, IDamageable target)
|
||||||
|
{
|
||||||
|
damageSource.ApplyDamage(amount, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDrawGizmos()
|
||||||
|
{
|
||||||
|
Gizmos.color = Color.red;
|
||||||
|
Gizmos.DrawRay(projectileOrigin.position, projectileOrigin.forward * projectileLength);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Item/Firearm.cs.meta
Normal file
2
Assets/Scripts/Item/Firearm.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a9bef8fb859e614a48357ece1c529698
|
16
Assets/Scripts/Item/IEquipment.cs
Normal file
16
Assets/Scripts/Item/IEquipment.cs
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
using System;
|
||||||
|
using KitsuneCafe.Sys;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace KitsuneCafe.ItemSystem
|
||||||
|
{
|
||||||
|
public interface IEquippable : IGameObject
|
||||||
|
{
|
||||||
|
event EventHandler<bool> Readied;
|
||||||
|
event EventHandler Attacked;
|
||||||
|
event EventHandler Reloaded;
|
||||||
|
|
||||||
|
void OnEquip(InventoryInstance inventory);
|
||||||
|
void OnUnequip();
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Item/IEquipment.cs.meta
Normal file
2
Assets/Scripts/Item/IEquipment.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: acdd766073e954e45bace8b1d7d69a88
|
9
Assets/Scripts/Item/IEquipmentItem.cs
Normal file
9
Assets/Scripts/Item/IEquipmentItem.cs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace KitsuneCafe.ItemSystem
|
||||||
|
{
|
||||||
|
public interface IEquipmentItem : IItem
|
||||||
|
{
|
||||||
|
GameObject EquippedPrefab { get; }
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Item/IEquipmentItem.cs.meta
Normal file
2
Assets/Scripts/Item/IEquipmentItem.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a8915224351f977c8b65a98baf25b5e6
|
15
Assets/Scripts/Item/IItem.cs
Normal file
15
Assets/Scripts/Item/IItem.cs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using KitsuneCafe.SOAP;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace KitsuneCafe.ItemSystem
|
||||||
|
{
|
||||||
|
public interface IItem
|
||||||
|
{
|
||||||
|
string Id { get; }
|
||||||
|
string DisplayName { get; }
|
||||||
|
string Description { get; }
|
||||||
|
Sprite Icon { get; }
|
||||||
|
IReadOnlyCollection<StringConstant> Tags { get; }
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Item/IItem.cs.meta
Normal file
2
Assets/Scripts/Item/IItem.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 470c7308b27c9451eaa2f30b663e15ca
|
7
Assets/Scripts/Item/IStackable.cs
Normal file
7
Assets/Scripts/Item/IStackable.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace KitsuneCafe.ItemSystem
|
||||||
|
{
|
||||||
|
public interface IStackable
|
||||||
|
{
|
||||||
|
int MaxStackCount { get; }
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Item/IStackable.cs.meta
Normal file
2
Assets/Scripts/Item/IStackable.cs.meta
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4fb21fae91cb26c0d89fabf2cb3b9642
|
|
@ -1,309 +1,357 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using KitsuneCafe.System;
|
using KitsuneCafe.Sys;
|
||||||
using ObservableCollections;
|
using ObservableCollections;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Unit = KitsuneCafe.System.Unit;
|
using Unit = KitsuneCafe.Sys.Unit;
|
||||||
|
|
||||||
namespace KitsuneCafe.ItemSystem
|
namespace KitsuneCafe.ItemSystem
|
||||||
{
|
{
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public struct InventoryItem : IEquatable<Item>, ICountable
|
public struct InventoryItem : IEquatable<Item>, ICountable
|
||||||
|
{
|
||||||
|
public Item Item;
|
||||||
|
[SerializeField]
|
||||||
|
private int count;
|
||||||
|
public readonly int Count => count;
|
||||||
|
|
||||||
|
private InventoryItem(Item item, int count)
|
||||||
{
|
{
|
||||||
public Item Item;
|
Item = item;
|
||||||
[SerializeField]
|
this.count = count;
|
||||||
private int count;
|
|
||||||
public readonly int Count => count;
|
|
||||||
|
|
||||||
private InventoryItem(Item item, int count)
|
|
||||||
{
|
|
||||||
Item = item;
|
|
||||||
this.count = count;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Create(Item item, int count, out InventoryItem? inventoryItem)
|
|
||||||
{
|
|
||||||
int quantity = Math.Clamp(count, 0, item.MaxStackCount);
|
|
||||||
inventoryItem = quantity > 0 ? new InventoryItem(item, quantity) : null;
|
|
||||||
return quantity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public readonly int IncreaseCount(int count, out InventoryItem? item)
|
|
||||||
{
|
|
||||||
return Create(Item, Count + count, out item);
|
|
||||||
}
|
|
||||||
|
|
||||||
public readonly int ReduceCount(int count, out InventoryItem? item)
|
|
||||||
{
|
|
||||||
return Create(Item, Count - count, out item);
|
|
||||||
}
|
|
||||||
|
|
||||||
public readonly bool Equals(Item other)
|
|
||||||
{
|
|
||||||
return Item == other;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override readonly bool Equals(object obj)
|
|
||||||
{
|
|
||||||
return obj is InventoryItem other
|
|
||||||
&& Item == other.Item
|
|
||||||
&& Count == other.Count;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int GetHashCode()
|
|
||||||
{
|
|
||||||
return HashCode.Combine(Item, Count);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum InventoryError
|
public static int Create(Item item, int count, out InventoryItem? inventoryItem)
|
||||||
{
|
{
|
||||||
None,
|
int quantity = Math.Clamp(count, 0, item.MaxStackCount);
|
||||||
InventoryFull,
|
inventoryItem = quantity > 0 ? new InventoryItem(item, quantity) : null;
|
||||||
ItemNotFound,
|
return quantity;
|
||||||
NotEnoughQuantity,
|
|
||||||
ItemNotStackable,
|
|
||||||
InvalidQuantity
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface ICountable
|
public readonly int IncreaseCount(int count, out InventoryItem? item)
|
||||||
{
|
{
|
||||||
int Count { get; }
|
return Create(Item, Count + count, out item);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IInventory<T> where T : IEquatable<Item>, ICountable
|
public readonly int ReduceCount(int count, out InventoryItem? item)
|
||||||
{
|
{
|
||||||
int Capacity { get; }
|
return Create(Item, Count - count, out item);
|
||||||
int Count { get; }
|
|
||||||
|
|
||||||
IResult<Unit, InventoryError> Add(Item item, int count = 1);
|
|
||||||
IResult<Unit, InventoryError> Remove(Item item, int count = 1);
|
|
||||||
IEnumerable<T> Find(Func<T, bool> predicate);
|
|
||||||
bool Has(Item item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[CreateAssetMenu(menuName = KitsuneCafeMenu.Item + "Inventory")]
|
public readonly bool Equals(Item other)
|
||||||
public class Inventory : ScriptableObject, IInventory<InventoryItem>, IEnumerable<InventoryItem>, IObservableCollection<InventoryItem>, ISerializationCallbackReceiver
|
|
||||||
{
|
{
|
||||||
[SerializeField]
|
return Item == other;
|
||||||
private List<InventoryItem> serializableItems = new();
|
}
|
||||||
|
|
||||||
private ObservableList<InventoryItem> runtimeItems;
|
public override readonly bool Equals(object obj)
|
||||||
|
{
|
||||||
|
return obj is InventoryItem other
|
||||||
|
&& Item == other.Item
|
||||||
|
&& Count == other.Count;
|
||||||
|
}
|
||||||
|
|
||||||
[SerializeField]
|
public override int GetHashCode()
|
||||||
private int capacity = 8;
|
{
|
||||||
|
return HashCode.Combine(Item, Count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public event NotifyCollectionChangedEventHandler<InventoryItem> CollectionChanged = default;
|
public enum InventoryError
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
InventoryFull,
|
||||||
|
ItemNotFound,
|
||||||
|
NotEnoughQuantity,
|
||||||
|
ItemNotStackable,
|
||||||
|
InvalidQuantity
|
||||||
|
}
|
||||||
|
|
||||||
public int Capacity => capacity;
|
public interface ICountable
|
||||||
|
{
|
||||||
|
int Count { get; }
|
||||||
|
}
|
||||||
|
|
||||||
public int Count => runtimeItems?.Count ?? 0;
|
public interface IInventory<T> where T : IEquatable<Item>, ICountable
|
||||||
|
{
|
||||||
|
int Capacity { get; }
|
||||||
|
int Count { get; }
|
||||||
|
|
||||||
public bool IsEmpty => Count == 0;
|
IResult<Unit, InventoryError> Add(Item item, int count = 1);
|
||||||
public bool IsFull => Count == Capacity;
|
IResult<Unit, InventoryError> Remove(Item item, int count = 1);
|
||||||
|
IEnumerable<T> Find(Func<T, bool> predicate);
|
||||||
|
bool Has(Item item);
|
||||||
|
}
|
||||||
|
|
||||||
public object SyncRoot => runtimeItems.SyncRoot;
|
[CreateAssetMenu(menuName = KitsuneCafeMenu.Item + "Inventory")]
|
||||||
|
public class Inventory : ScriptableObject, IList, IInventory<InventoryItem>, IEnumerable<InventoryItem>, IObservableCollection<InventoryItem>, ISerializationCallbackReceiver
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private List<InventoryItem> serializableItems = new();
|
||||||
|
|
||||||
public InventoryItem this[int index]
|
private ObservableList<InventoryItem> runtimeItems;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private int capacity = 8;
|
||||||
|
|
||||||
|
public event NotifyCollectionChangedEventHandler<InventoryItem> CollectionChanged = default;
|
||||||
|
|
||||||
|
public int Capacity => capacity;
|
||||||
|
|
||||||
|
public int Count => runtimeItems?.Count ?? 0;
|
||||||
|
|
||||||
|
public bool IsEmpty => Count == 0;
|
||||||
|
public bool IsFull => Count == Capacity;
|
||||||
|
|
||||||
|
public object SyncRoot => runtimeItems.SyncRoot;
|
||||||
|
|
||||||
|
public bool IsFixedSize => ((IList)runtimeItems).IsFixedSize;
|
||||||
|
|
||||||
|
public bool IsReadOnly => ((IList)runtimeItems).IsReadOnly;
|
||||||
|
|
||||||
|
public bool IsSynchronized => ((ICollection)runtimeItems).IsSynchronized;
|
||||||
|
|
||||||
|
object IList.this[int index] { get => runtimeItems[index]; set => runtimeItems[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)
|
||||||
{
|
{
|
||||||
get => runtimeItems[index];
|
serializableItems.Add(item);
|
||||||
set => runtimeItems[index] = value;
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnAfterDeserialize()
|
||||||
|
{
|
||||||
|
if (runtimeItems == null)
|
||||||
|
{
|
||||||
|
runtimeItems = new ObservableList<InventoryItem>();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
runtimeItems.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var item in serializableItems)
|
||||||
|
{
|
||||||
|
runtimeItems.Add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<InventoryItem> Find(Func<InventoryItem, bool> predicate)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < Count; i++)
|
||||||
|
{
|
||||||
|
var item = runtimeItems[i];
|
||||||
|
|
||||||
|
if (predicate(item))
|
||||||
|
{
|
||||||
|
yield return item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private IResult<int, InventoryError> AddToExisting(Item item, int count)
|
||||||
|
{
|
||||||
|
if (count <= 0)
|
||||||
|
{
|
||||||
|
return Result.Err<int, InventoryError>(InventoryError.InvalidQuantity);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < Count; i++)
|
||||||
|
{
|
||||||
|
var existingItem = runtimeItems[i];
|
||||||
|
|
||||||
|
if (existingItem.Equals(item))
|
||||||
|
{
|
||||||
|
if (!item.IsStackable)
|
||||||
|
{
|
||||||
|
return Result.Err<int, InventoryError>(InventoryError.ItemNotStackable);
|
||||||
|
}
|
||||||
|
|
||||||
|
var consumedAmount = existingItem.IncreaseCount(count, out var updatedItem);
|
||||||
|
runtimeItems[i] = updatedItem.Value;
|
||||||
|
|
||||||
|
count -= consumedAmount;
|
||||||
|
if (count <= 0)
|
||||||
|
{
|
||||||
|
return Result.Ok<int, InventoryError>(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Result.Ok<int, InventoryError>(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IResult<Unit, InventoryError> AddNew(Item item, int count)
|
||||||
|
{
|
||||||
|
while (count > 0)
|
||||||
|
{
|
||||||
|
if (IsFull)
|
||||||
|
{
|
||||||
|
return Result.Err<Unit, InventoryError>(InventoryError.InventoryFull);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnEnable()
|
count -= InventoryItem.Create(item, count, out var newItem);
|
||||||
|
runtimeItems.Add(newItem.Value);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return Result.Ok<Unit, InventoryError>(default);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IResult<Unit, InventoryError> Add(Item item, int count = 1)
|
||||||
|
{
|
||||||
|
return AddToExisting(item, count)
|
||||||
|
.Where(count => count > 0)
|
||||||
|
.SelectMany(count => AddNew(item, count)) switch
|
||||||
|
{
|
||||||
|
Ok<Unit, InventoryError> ok => ok,
|
||||||
|
Err<Unit, InventoryError>(InventoryError.None) => Result.Ok<Unit, InventoryError>(default),
|
||||||
|
var err => err
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public IResult<Unit, InventoryError> Remove(Item item, int count = 1)
|
||||||
|
{
|
||||||
|
if (count <= 0)
|
||||||
|
{
|
||||||
|
return Result.Err<Unit, InventoryError>(InventoryError.InvalidQuantity);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = runtimeItems.Count - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
var existingItem = runtimeItems[i];
|
||||||
|
|
||||||
|
if (existingItem.Item == item)
|
||||||
{
|
{
|
||||||
if (runtimeItems == null)
|
if (existingItem.Count > count)
|
||||||
{
|
{
|
||||||
runtimeItems = new ObservableList<InventoryItem>();
|
existingItem.ReduceCount(count, out var updatedItem);
|
||||||
}
|
runtimeItems[i] = updatedItem.Value;
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<InventoryItem> Find(Func<InventoryItem, bool> predicate)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < Count; i++)
|
|
||||||
{
|
|
||||||
var item = runtimeItems[i];
|
|
||||||
|
|
||||||
if (predicate(item))
|
|
||||||
{
|
|
||||||
yield return item;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private IResult<int, InventoryError> AddToExisting(Item item, int count)
|
|
||||||
{
|
|
||||||
if (count <= 0)
|
|
||||||
{
|
|
||||||
return Result.Err<int, InventoryError>(InventoryError.InvalidQuantity);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < Count; i++)
|
|
||||||
{
|
|
||||||
var existingItem = runtimeItems[i];
|
|
||||||
|
|
||||||
if (existingItem.Equals(item))
|
|
||||||
{
|
|
||||||
if (!item.IsStackable)
|
|
||||||
{
|
|
||||||
return Result.Err<int, InventoryError>(InventoryError.ItemNotStackable);
|
|
||||||
}
|
|
||||||
|
|
||||||
var consumedAmount = existingItem.IncreaseCount(count, out var updatedItem);
|
|
||||||
runtimeItems[i] = updatedItem.Value;
|
|
||||||
|
|
||||||
count -= consumedAmount;
|
|
||||||
if (count <= 0)
|
|
||||||
{
|
|
||||||
return Result.Ok<int, InventoryError>(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Result.Ok<int, InventoryError>(count);
|
|
||||||
}
|
|
||||||
|
|
||||||
private IResult<Unit, InventoryError> AddNew(Item item, int count)
|
|
||||||
{
|
|
||||||
while (count > 0)
|
|
||||||
{
|
|
||||||
if (IsFull)
|
|
||||||
{
|
|
||||||
return Result.Err<Unit, InventoryError>(InventoryError.InventoryFull);
|
|
||||||
}
|
|
||||||
|
|
||||||
count -= InventoryItem.Create(item, count, out var newItem);
|
|
||||||
runtimeItems.Add(newItem.Value);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return Result.Ok<Unit, InventoryError>(default);
|
|
||||||
}
|
|
||||||
|
|
||||||
public IResult<Unit, InventoryError> Add(Item item, int count = 1)
|
|
||||||
{
|
|
||||||
return AddToExisting(item, count)
|
|
||||||
.Where(count => count > 0)
|
|
||||||
.SelectMany(count => AddNew(item, count)) switch
|
|
||||||
{
|
|
||||||
Ok<Unit, InventoryError> ok => ok,
|
|
||||||
Err<Unit, InventoryError>(InventoryError.None) => Result.Ok<Unit, InventoryError>(default),
|
|
||||||
var err => err
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public IResult<Unit, InventoryError> Remove(Item item, int count = 1)
|
|
||||||
{
|
|
||||||
if (count <= 0)
|
|
||||||
{
|
|
||||||
return Result.Err<Unit, InventoryError>(InventoryError.InvalidQuantity);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = runtimeItems.Count - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
var existingItem = runtimeItems[i];
|
|
||||||
|
|
||||||
if (existingItem.Item == item)
|
|
||||||
{
|
|
||||||
if (existingItem.Count > count)
|
|
||||||
{
|
|
||||||
existingItem.ReduceCount(count, out var updatedItem);
|
|
||||||
runtimeItems[i] = updatedItem.Value;
|
|
||||||
return Result.Ok<Unit, InventoryError>(Unit.Default);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
count -= existingItem.Count;
|
|
||||||
runtimeItems.RemoveAt(i);
|
|
||||||
|
|
||||||
if (count == 0)
|
|
||||||
{
|
|
||||||
return Result.Ok<Unit, InventoryError>(Unit.Default);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (count > 0)
|
|
||||||
{
|
|
||||||
return Result.Err<Unit, InventoryError>(InventoryError.NotEnoughQuantity);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Result.Ok<Unit, InventoryError>(Unit.Default);
|
return Result.Ok<Unit, InventoryError>(Unit.Default);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
count -= existingItem.Count;
|
||||||
|
runtimeItems.RemoveAt(i);
|
||||||
|
|
||||||
public bool Has(Item item)
|
if (count == 0)
|
||||||
{
|
|
||||||
for (int i = 0; i < Count; i++)
|
|
||||||
{
|
{
|
||||||
if (runtimeItems[i].Equals(item))
|
return Result.Ok<Unit, InventoryError>(Unit.Default);
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public IEnumerator<InventoryItem> GetEnumerator()
|
if (count > 0)
|
||||||
{
|
{
|
||||||
return runtimeItems.GetEnumerator();
|
return Result.Err<Unit, InventoryError>(InventoryError.NotEnoughQuantity);
|
||||||
}
|
}
|
||||||
|
|
||||||
IEnumerator IEnumerable.GetEnumerator()
|
return Result.Ok<Unit, InventoryError>(Unit.Default);
|
||||||
{
|
|
||||||
return GetEnumerator();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ISynchronizedView<InventoryItem, TView> CreateView<TView>(Func<InventoryItem, TView> transform)
|
|
||||||
{
|
|
||||||
return runtimeItems.CreateView(transform);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool Has(Item item)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < Count; i++)
|
||||||
|
{
|
||||||
|
if (runtimeItems[i].Equals(item))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerator<InventoryItem> GetEnumerator()
|
||||||
|
{
|
||||||
|
return runtimeItems.GetEnumerator();
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerator IEnumerable.GetEnumerator()
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Clear()
|
||||||
|
{
|
||||||
|
((IList)runtimeItems).Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Contains(object value)
|
||||||
|
{
|
||||||
|
return ((IList)runtimeItems).Contains(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int IndexOf(object value)
|
||||||
|
{
|
||||||
|
return ((IList)runtimeItems).IndexOf(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Insert(int index, object value)
|
||||||
|
{
|
||||||
|
((IList)runtimeItems).Insert(index, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Remove(object value)
|
||||||
|
{
|
||||||
|
((IList)runtimeItems).Remove(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveAt(int index)
|
||||||
|
{
|
||||||
|
((IList)runtimeItems).RemoveAt(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CopyTo(Array array, int index)
|
||||||
|
{
|
||||||
|
((ICollection)runtimeItems).CopyTo(array, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using KitsuneCafe.System;
|
using KitsuneCafe.Sys;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace KitsuneCafe.ItemSystem
|
namespace KitsuneCafe.ItemSystem
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue