Compare commits
50 Commits
98145ff6c3
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 0abbcf5843 | |||
| 7409fec2a3 | |||
| e0a2aeaed8 | |||
| 54ddd924d9 | |||
| b177fc7a76 | |||
| 6af1c8bf20 | |||
| 696d091efa | |||
| dfa0e720ac | |||
| de55110b19 | |||
| f70ddddf65 | |||
| 75b005c691 | |||
| 3b24075a71 | |||
| e7d8439412 | |||
| af2713a00e | |||
| 316a3f7760 | |||
| 78692b6820 | |||
| 9540528203 | |||
|
|
a1e82db378 | ||
|
|
71d590d584 | ||
| e5a2fcfc44 | |||
| 7409b0ca18 | |||
|
|
df6b8625c5 | ||
|
|
a7e07a007f | ||
| 0580dd22b3 | |||
| 6b4e3f1271 | |||
|
|
7e45faec11 | ||
|
|
763f933c2e | ||
| 948a338191 | |||
| 19abc0b019 | |||
| 1064683542 | |||
| 3ca7816874 | |||
|
|
f761a53194 | ||
|
|
e92d06ed54 | ||
| 09ca35dd35 | |||
| c14d3c3a95 | |||
|
|
7dd6b9ac20 | ||
|
|
8e40d215d6 | ||
| 6f7c4a22b3 | |||
| a7fa0f9356 | |||
| 373c4c885e | |||
| 67e78d1413 | |||
|
|
9c66433e4e | ||
|
|
c03f78b557 | ||
| 98806b862d | |||
| 91183760fb | |||
|
|
7f7139612d | ||
|
|
7e489f0243 | ||
| b15883a1e7 | |||
| a6110a814c | |||
| 024cc4fc69 |
File diff suppressed because one or more lines are too long
BIN
.gemini-workspace-history/session-2026-06-06-00-13.json.gz
Normal file
BIN
.gemini-workspace-history/session-2026-06-06-00-13.json.gz
Normal file
Binary file not shown.
BIN
.gemini-workspace-history/session-2026-06-07-16-57.json.gz
Normal file
BIN
.gemini-workspace-history/session-2026-06-07-16-57.json.gz
Normal file
Binary file not shown.
BIN
.gemini-workspace-history/session-2026-06-07-18-23.json.gz
Normal file
BIN
.gemini-workspace-history/session-2026-06-07-18-23.json.gz
Normal file
Binary file not shown.
BIN
.gemini-workspace-history/session-2026-06-07-18-27.json.gz
Normal file
BIN
.gemini-workspace-history/session-2026-06-07-18-27.json.gz
Normal file
Binary file not shown.
BIN
.gemini-workspace-history/session-2026-06-07-18-35.json.gz
Normal file
BIN
.gemini-workspace-history/session-2026-06-07-18-35.json.gz
Normal file
Binary file not shown.
BIN
.gemini-workspace-history/session-2026-06-07-18-37.json.gz
Normal file
BIN
.gemini-workspace-history/session-2026-06-07-18-37.json.gz
Normal file
Binary file not shown.
BIN
.gemini-workspace-history/session-2026-06-07-18-53.json.gz
Normal file
BIN
.gemini-workspace-history/session-2026-06-07-18-53.json.gz
Normal file
Binary file not shown.
BIN
.gemini-workspace-history/session-2026-06-07-19-27.json.gz
Normal file
BIN
.gemini-workspace-history/session-2026-06-07-19-27.json.gz
Normal file
Binary file not shown.
BIN
.gemini-workspace-history/session-2026-06-07-21-22.json.gz
Normal file
BIN
.gemini-workspace-history/session-2026-06-07-21-22.json.gz
Normal file
Binary file not shown.
4
.idea/.idea.HALLUCINATE/.idea/.gitignore → .idea/.gitignore
generated
vendored
4
.idea/.idea.HALLUCINATE/.idea/.gitignore → .idea/.gitignore
generated
vendored
@@ -2,10 +2,10 @@
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Rider ignored files
|
||||
/.idea.BABA_YAGA.iml
|
||||
/modules.xml
|
||||
/projectSettingsUpdater.xml
|
||||
/.idea.HALLUCINATE.iml
|
||||
/contentModel.xml
|
||||
/projectSettingsUpdater.xml
|
||||
# Ignored default folder with query files
|
||||
/queries/
|
||||
# Datasource local storage ignored files
|
||||
135
.idea/.idea.BABA_YAGA/.idea/workspace.xml
generated
Normal file
135
.idea/.idea.BABA_YAGA/.idea/workspace.xml
generated
Normal file
@@ -0,0 +1,135 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AutoImportSettings">
|
||||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="d308d1cb-09fc-4331-ba20-00f7b43d1576" name="Changes" comment="">
|
||||
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/10_footer.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/10_footer.md" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="EmbeddingIndexingInfo">
|
||||
<option name="cachedIndexableFilesCount" value="2" />
|
||||
<option name="fileBasedEmbeddingIndicesEnabled" value="true" />
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="McpProjectServerCommands">
|
||||
<commands />
|
||||
<urls />
|
||||
</component>
|
||||
<component name="ProjectColorInfo">{
|
||||
"associatedIndex": 0
|
||||
}</component>
|
||||
<component name="ProjectId" id="3EntV1tfxFOvIa4cn84mOGJGhnc" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent">{
|
||||
"keyToString": {
|
||||
"ModuleVcsDetector.initialDetectionPerformed": "true",
|
||||
"RunOnceActivity.MCP Project settings loaded": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
|
||||
"RunOnceActivity.git.unshallow": "true",
|
||||
"RunOnceActivity.typescript.service.memoryLimit.init": "true",
|
||||
"com.intellij.ml.llm.matterhorn.ej.ui.settings.DefaultModelSelectionForGA.v1": "true",
|
||||
"git-widget-placeholder": "main",
|
||||
"junie.onboarding.icon.badge.shown": "true",
|
||||
"node.js.detected.package.eslint": "true",
|
||||
"node.js.detected.package.tslint": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"to.speed.mode.migration.done": "true",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
}
|
||||
}</component>
|
||||
<component name="RunManager" selected="Attach to Unity Editor.Attach to Unity Editor">
|
||||
<configuration name="Start Unity" type="RunUnityExe" factoryName="Unity Executable">
|
||||
<option name="EXE_PATH" value="C:\Program Files\Unity\Hub\Editor\6000.3.10f1\Editor\Unity.exe" />
|
||||
<option name="PROGRAM_PARAMETERS" value="-projectPath D:\Learning_Progress\Projects\BABA_YAGA -debugCodeOptimization" />
|
||||
<option name="WORKING_DIRECTORY" value="D:\Learning_Progress\Projects\BABA_YAGA" />
|
||||
<option name="PASS_PARENT_ENVS" value="1" />
|
||||
<option name="ENV_FILE_PATHS" value="" />
|
||||
<option name="REDIRECT_INPUT_PATH" value="" />
|
||||
<option name="MIXED_MODE_DEBUG" value="0" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="Unit Tests (batch mode)" type="RunUnityExe" factoryName="Unity Executable">
|
||||
<option name="EXE_PATH" value="C:\Program Files\Unity\Hub\Editor\6000.3.10f1\Editor\Unity.exe" />
|
||||
<option name="PROGRAM_PARAMETERS" value="-runTests -batchmode -projectPath D:\Learning_Progress\Projects\BABA_YAGA -testResults Logs/results.xml -logFile Logs/Editor.log -testPlatform EditMode -debugCodeOptimization" />
|
||||
<option name="WORKING_DIRECTORY" value="D:\Learning_Progress\Projects\BABA_YAGA" />
|
||||
<option name="PASS_PARENT_ENVS" value="1" />
|
||||
<option name="ENV_FILE_PATHS" value="" />
|
||||
<option name="REDIRECT_INPUT_PATH" value="" />
|
||||
<option name="MIXED_MODE_DEBUG" value="0" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="Attach to Unity Editor" type="UNITY_DEBUG_RUN_CONFIGURATION" factoryName="Unity Debug" show_console_on_std_err="false" show_console_on_std_out="false" port="50000" address="localhost" useMixedMode="false">
|
||||
<option name="allowRunningInParallel" value="false" />
|
||||
<option name="listenPortForConnections" value="false" />
|
||||
<option name="pid" />
|
||||
<option name="projectPathOnTarget" />
|
||||
<option name="runtimes">
|
||||
<list />
|
||||
</option>
|
||||
<option name="selectedOptions">
|
||||
<list />
|
||||
</option>
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="Attach to" type="UnityDevicePlayer" factoryName="UnityAttachToDevicePlayer">
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="d308d1cb-09fc-4331-ba20-00f7b43d1576" name="Changes" comment="" />
|
||||
<created>1780826181670</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1780826181670</updated>
|
||||
<workItem from="1780826183468" duration="14868000" />
|
||||
<workItem from="1780842142322" duration="182000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
<component name="UnityProjectConfiguration" hasMinimizedUI="true" />
|
||||
<component name="UnityProjectDiscoverer">
|
||||
<option name="hasUnityReference" value="true" />
|
||||
<option name="unityProject" value="true" />
|
||||
<option name="unityProjectFolder" value="true" />
|
||||
</component>
|
||||
<component name="UnityUnitTestConfiguration" currentTestLauncher="Both" />
|
||||
<component name="VcsManagerConfiguration">
|
||||
<option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager>
|
||||
<breakpoints>
|
||||
<breakpoint enabled="true" type="DotNet_Exception_Breakpoints">
|
||||
<properties exception="System.OperationCanceledException" breakIfHandledByOtherCode="false" displayValue="System.OperationCanceledException" />
|
||||
<option name="timeStamp" value="1" />
|
||||
</breakpoint>
|
||||
<breakpoint enabled="true" type="DotNet_Exception_Breakpoints">
|
||||
<properties exception="System.Threading.Tasks.TaskCanceledException" breakIfHandledByOtherCode="false" displayValue="System.Threading.Tasks.TaskCanceledException" />
|
||||
<option name="timeStamp" value="2" />
|
||||
</breakpoint>
|
||||
<breakpoint enabled="true" type="DotNet_Exception_Breakpoints">
|
||||
<properties exception="System.Threading.ThreadAbortException" breakIfHandledByOtherCode="false" displayValue="System.Threading.ThreadAbortException" />
|
||||
<option name="timeStamp" value="3" />
|
||||
</breakpoint>
|
||||
</breakpoints>
|
||||
</breakpoint-manager>
|
||||
</component>
|
||||
</project>
|
||||
9
.idea/.idea.HALLUCINATE/.idea/encodings.xml
generated
9
.idea/.idea.HALLUCINATE/.idea/encodings.xml
generated
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise">
|
||||
<file url="file://$PROJECT_DIR$/Assets/Scripts/Elo_System_Spec.txt" charset="ISO-8859-1" />
|
||||
<file url="file://$PROJECT_DIR$/Assets/Scripts/GameSetup/Maze/Crawler.cs" charset="ISO-8859-1" />
|
||||
<file url="file://$PROJECT_DIR$/Assets/Scripts/GameSetup/Maze/Extensions.cs" charset="ISO-8859-1" />
|
||||
<file url="file://$PROJECT_DIR$/Assets/Scripts/GameSetup/Maze/Wilsons.cs" charset="ISO-8859-1" />
|
||||
</component>
|
||||
</project>
|
||||
232
.idea/.idea.HALLUCINATE/.idea/workspace.xml
generated
232
.idea/.idea.HALLUCINATE/.idea/workspace.xml
generated
@@ -1,232 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AutoImportSettings">
|
||||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="f9183c68-daf0-43b8-be4c-fad79983f91b" name="Changes" comment="">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/.idea.HALLUCINATE/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.HALLUCINATE/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Assets/Fonts/BitcountSingleInk-VariableFont_CRSV,ELSH,ELXP,SZP1,SZP2,XPN1,XPN2,YPN1,YPN2,slnt,wght SDF.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Fonts/BitcountSingleInk-VariableFont_CRSV,ELSH,ELXP,SZP1,SZP2,XPN1,XPN2,YPN1,YPN2,slnt,wght SDF.asset" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Assets/Prefabs/NPC/xNPC.prefab" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Prefabs/NPC/xNPC.prefab" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Assets/Scripts/AI NPC/EnemyAI.cs" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Scripts/AI NPC/EnemyAI.cs" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="EmbeddingIndexingInfo">
|
||||
<option name="cachedIndexableFilesCount" value="77" />
|
||||
<option name="fileBasedEmbeddingIndicesEnabled" value="true" />
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="HighlightingSettingsPerFile">
|
||||
<setting file="file://$PROJECT_DIR$/Assets/InventoryData.json" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/Scripts/Audio/AudioManager.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/Scripts/Network/BasicSpawner.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/Scripts/UI/LobbyController.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/Third Parties/Photon/Fusion/Editor/Fusion.Unity.Editor.cs" root0="SKIP_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/UI/MainPanelSettings.asset" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Library/PackageCache/com.unity.render-pipelines.core@04ab0eefa0c3/Editor/Utilities/LocalizationHelper.cs" root0="SKIP_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Library/PackageCache/com.unity.timeline@7f8b2fb101b6/Editor/Localization/Localization.cs" root0="SKIP_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Library/PackageCache/com.unity.ugui@bb329a87fcdc/Runtime/UGUI/EventSystem/EventSystem.cs" root0="SKIP_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Library/PackageCache/com.wooshii.foldericons@201a18f355d3/FolderIcons/Editor/FolderIcons.cs" root0="SKIP_HIGHLIGHTING" />
|
||||
</component>
|
||||
<component name="McpProjectServerCommands">
|
||||
<commands />
|
||||
<urls />
|
||||
</component>
|
||||
<component name="MetaFilesCheckinStateConfiguration" checkMetaFiles="true" />
|
||||
<component name="ProblemsViewState">
|
||||
<option name="selectedTabId" value="CurrentFile" />
|
||||
</component>
|
||||
<component name="ProjectColorInfo">{
|
||||
"associatedIndex": 4
|
||||
}</component>
|
||||
<component name="ProjectId" id="3BU6ZYP0raS9lWcA2Qy4TxVBVes" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent">{
|
||||
"keyToString": {
|
||||
"ModuleVcsDetector.initialDetectionPerformed": "true",
|
||||
"RunOnceActivity.MCP Project settings loaded": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
|
||||
"RunOnceActivity.git.unshallow": "true",
|
||||
"RunOnceActivity.typescript.service.memoryLimit.init": "true",
|
||||
"com.intellij.ml.llm.matterhorn.ej.ui.settings.DefaultModelSelectionForGA.v1": "true",
|
||||
"git-widget-placeholder": "main",
|
||||
"junie.onboarding.icon.badge.shown": "true",
|
||||
"node.js.detected.package.eslint": "true",
|
||||
"node.js.detected.package.tslint": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"settings.editor.selected.configurable": "editor.preferences.completion",
|
||||
"to.speed.mode.migration.done": "true",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
}
|
||||
}</component>
|
||||
<component name="RunManager" selected="Attach to Unity Editor.Attach to Unity Editor">
|
||||
<configuration name="Standalone Player" type="RunUnityExe" factoryName="Unity Executable">
|
||||
<option name="EXE_PATH" value="$PROJECT_DIR$/Build\HALLUCINATE.exe" />
|
||||
<option name="PROGRAM_PARAMETERS" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="D:\BAI MUTIPLAY" />
|
||||
<option name="PASS_PARENT_ENVS" value="1" />
|
||||
<option name="ENV_FILE_PATHS" value="" />
|
||||
<option name="REDIRECT_INPUT_PATH" value="" />
|
||||
<option name="MIXED_MODE_DEBUG" value="0" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="Start Unity" type="RunUnityExe" factoryName="Unity Executable">
|
||||
<option name="EXE_PATH" value="C:\Program Files\Unity\Hub\Editor\6000.3.10f1\Editor\Unity.exe" />
|
||||
<option name="PROGRAM_PARAMETERS" value="-projectPath E:\Learning_Progress\Projects\HALLUCINATE -debugCodeOptimization" />
|
||||
<option name="WORKING_DIRECTORY" value="E:\Learning_Progress\Projects\HALLUCINATE" />
|
||||
<option name="PASS_PARENT_ENVS" value="1" />
|
||||
<option name="ENV_FILE_PATHS" value="" />
|
||||
<option name="REDIRECT_INPUT_PATH" value="" />
|
||||
<option name="MIXED_MODE_DEBUG" value="0" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="Unit Tests (batch mode)" type="RunUnityExe" factoryName="Unity Executable">
|
||||
<option name="EXE_PATH" value="C:\Program Files\Unity\Hub\Editor\6000.3.10f1\Editor\Unity.exe" />
|
||||
<option name="PROGRAM_PARAMETERS" value="-runTests -batchmode -projectPath E:\Learning_Progress\Projects\HALLUCINATE -testResults Logs/results.xml -logFile Logs/Editor.log -testPlatform EditMode -debugCodeOptimization" />
|
||||
<option name="WORKING_DIRECTORY" value="E:\Learning_Progress\Projects\HALLUCINATE" />
|
||||
<option name="PASS_PARENT_ENVS" value="1" />
|
||||
<option name="ENV_FILE_PATHS" value="" />
|
||||
<option name="REDIRECT_INPUT_PATH" value="" />
|
||||
<option name="MIXED_MODE_DEBUG" value="0" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="Attach to Unity Editor" type="UNITY_DEBUG_RUN_CONFIGURATION" factoryName="Unity Debug" show_console_on_std_err="false" show_console_on_std_out="false" port="50000" address="localhost" useMixedMode="false">
|
||||
<option name="allowRunningInParallel" value="false" />
|
||||
<option name="listenPortForConnections" value="false" />
|
||||
<option name="pid" />
|
||||
<option name="projectPathOnTarget" />
|
||||
<option name="runtimes">
|
||||
<list />
|
||||
</option>
|
||||
<option name="selectedOptions">
|
||||
<list />
|
||||
</option>
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="Attach to" type="UnityDevicePlayer" factoryName="UnityAttachToDevicePlayer">
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="f9183c68-daf0-43b8-be4c-fad79983f91b" name="Changes" comment="" />
|
||||
<created>1774531360140</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1774531360140</updated>
|
||||
<workItem from="1774531363039" duration="637000" />
|
||||
<workItem from="1774584797007" duration="56000" />
|
||||
<workItem from="1774584869078" duration="12146000" />
|
||||
<workItem from="1774667976147" duration="2000" />
|
||||
<workItem from="1774800709148" duration="3094000" />
|
||||
<workItem from="1774803886905" duration="118000" />
|
||||
<workItem from="1774804030241" duration="2187000" />
|
||||
<workItem from="1774840339107" duration="4306000" />
|
||||
<workItem from="1774882297975" duration="4578000" />
|
||||
<workItem from="1774961115405" duration="11806000" />
|
||||
<workItem from="1774977520102" duration="3069000" />
|
||||
<workItem from="1775097804358" duration="1044000" />
|
||||
<workItem from="1775100366425" duration="2192000" />
|
||||
<workItem from="1775106342316" duration="15040000" />
|
||||
<workItem from="1775313757656" duration="8722000" />
|
||||
<workItem from="1776130728673" duration="7161000" />
|
||||
<workItem from="1776255558934" duration="1896000" />
|
||||
<workItem from="1776780627914" duration="11380000" />
|
||||
<workItem from="1776848005294" duration="47000" />
|
||||
<workItem from="1776910642766" duration="2290000" />
|
||||
<workItem from="1776940053256" duration="13616000" />
|
||||
<workItem from="1777113431258" duration="10253000" />
|
||||
<workItem from="1777150520438" duration="58000" />
|
||||
<workItem from="1777150592854" duration="4699000" />
|
||||
<workItem from="1777181837663" duration="1519000" />
|
||||
<workItem from="1777269364664" duration="40284000" />
|
||||
<workItem from="1777373072815" duration="1852000" />
|
||||
<workItem from="1777376778745" duration="10727000" />
|
||||
<workItem from="1777392719306" duration="13382000" />
|
||||
<workItem from="1777443280908" duration="5223000" />
|
||||
<workItem from="1777484328779" duration="32427000" />
|
||||
<workItem from="1777568077522" duration="8613000" />
|
||||
<workItem from="1777604072510" duration="12724000" />
|
||||
<workItem from="1777629255838" duration="2209000" />
|
||||
<workItem from="1777631506531" duration="2333000" />
|
||||
<workItem from="1777639175483" duration="9746000" />
|
||||
<workItem from="1777652919998" duration="1890000" />
|
||||
<workItem from="1777732628340" duration="74000" />
|
||||
<workItem from="1777732739619" duration="808000" />
|
||||
<workItem from="1777818351880" duration="313000" />
|
||||
<workItem from="1777991464807" duration="4843000" />
|
||||
<workItem from="1779019500395" duration="11374000" />
|
||||
<workItem from="1779293096539" duration="3004000" />
|
||||
<workItem from="1779962085481" duration="671000" />
|
||||
<workItem from="1780000221080" duration="1566000" />
|
||||
<workItem from="1780139911301" duration="1008000" />
|
||||
<workItem from="1780140952531" duration="441000" />
|
||||
<workItem from="1780141455151" duration="159000" />
|
||||
<workItem from="1780141729457" duration="9450000" />
|
||||
<workItem from="1780364354282" duration="4357000" />
|
||||
<workItem from="1780409218377" duration="9852000" />
|
||||
<workItem from="1780494322686" duration="643000" />
|
||||
<workItem from="1780633654231" duration="7070000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
<component name="UnityCheckinConfiguration" checkUnsavedScenes="true" />
|
||||
<component name="UnityProjectConfiguration" hasMinimizedUI="true" />
|
||||
<component name="UnityProjectDiscoverer">
|
||||
<option name="hasUnityReference" value="true" />
|
||||
<option name="unityProject" value="true" />
|
||||
<option name="unityProjectFolder" value="true" />
|
||||
</component>
|
||||
<component name="UnityUnitTestConfiguration" currentTestLauncher="Both" />
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
<option name="TAB_STATES">
|
||||
<map>
|
||||
<entry key="MAIN">
|
||||
<value>
|
||||
<State />
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager>
|
||||
<breakpoints>
|
||||
<breakpoint enabled="true" type="DotNet_Exception_Breakpoints">
|
||||
<properties exception="System.OperationCanceledException" breakIfHandledByOtherCode="false" displayValue="System.OperationCanceledException" />
|
||||
<option name="timeStamp" value="1" />
|
||||
</breakpoint>
|
||||
<breakpoint enabled="true" type="DotNet_Exception_Breakpoints">
|
||||
<properties exception="System.Threading.Tasks.TaskCanceledException" breakIfHandledByOtherCode="false" displayValue="System.Threading.Tasks.TaskCanceledException" />
|
||||
<option name="timeStamp" value="2" />
|
||||
</breakpoint>
|
||||
<breakpoint enabled="true" type="DotNet_Exception_Breakpoints">
|
||||
<properties exception="System.Threading.ThreadAbortException" breakIfHandledByOtherCode="false" displayValue="System.Threading.ThreadAbortException" />
|
||||
<option name="timeStamp" value="3" />
|
||||
</breakpoint>
|
||||
</breakpoints>
|
||||
</breakpoint-manager>
|
||||
</component>
|
||||
<component name="XSLT-Support.FileAssociations.UIState">
|
||||
<expand />
|
||||
<select />
|
||||
</component>
|
||||
</project>
|
||||
15
.idea/.idea.HALLUCINATION/.idea/.gitignore
generated
vendored
15
.idea/.idea.HALLUCINATION/.idea/.gitignore
generated
vendored
@@ -1,15 +0,0 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Rider ignored files
|
||||
/projectSettingsUpdater.xml
|
||||
/contentModel.xml
|
||||
/modules.xml
|
||||
/.idea.HALLUCINATION.iml
|
||||
# Ignored default folder with query files
|
||||
/queries/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
@@ -100,8 +100,7 @@ BlendTree:
|
||||
m_Name: Idle
|
||||
m_Childs:
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 5908583710877457969, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: 5908583710877457969, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: -0.5
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 1
|
||||
@@ -117,8 +116,7 @@ BlendTree:
|
||||
m_DirectBlendParameter: InputHorizontal
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 5908583710877457969, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: 5908583710877457969, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: 0.5
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: -1
|
||||
@@ -738,8 +736,7 @@ BlendTree:
|
||||
m_Name: CroouchIdleAiming
|
||||
m_Childs:
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: -0.5
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 1
|
||||
@@ -755,8 +752,7 @@ BlendTree:
|
||||
m_DirectBlendParameter: InputHorizontal
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: 0.5
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: -1
|
||||
@@ -942,8 +938,7 @@ AnimatorState:
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 6273134904810983842, guid: 632f8ebe81a772e4998224dabbbf836b,
|
||||
type: 3}
|
||||
m_Motion: {fileID: 6273134904810983842, guid: 632f8ebe81a772e4998224dabbbf836b, type: 3}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
@@ -1066,8 +1061,7 @@ BlendTree:
|
||||
m_Name: CrouchIdle
|
||||
m_Childs:
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: -0.5
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 2
|
||||
@@ -1083,8 +1077,7 @@ BlendTree:
|
||||
m_DirectBlendParameter: InputHorizontal
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: 0.5
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: -2
|
||||
@@ -1371,8 +1364,7 @@ BlendTree:
|
||||
m_Name: Blend Tree
|
||||
m_Childs:
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 6944727830613845018, guid: f63fbd0ba70f1554c9dc5f893ff28546,
|
||||
type: 3}
|
||||
m_Motion: {fileID: 6944727830613845018, guid: f63fbd0ba70f1554c9dc5f893ff28546, type: 3}
|
||||
m_Threshold: -170
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 1
|
||||
@@ -1380,8 +1372,7 @@ BlendTree:
|
||||
m_DirectBlendParameter: InputHorizontal
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 5927633979316069339, guid: f63fbd0ba70f1554c9dc5f893ff28546,
|
||||
type: 3}
|
||||
m_Motion: {fileID: 5927633979316069339, guid: f63fbd0ba70f1554c9dc5f893ff28546, type: 3}
|
||||
m_Threshold: -90
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 1
|
||||
@@ -1389,8 +1380,7 @@ BlendTree:
|
||||
m_DirectBlendParameter: InputHorizontal
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7173170133434809738, guid: f63fbd0ba70f1554c9dc5f893ff28546,
|
||||
type: 3}
|
||||
m_Motion: {fileID: 7173170133434809738, guid: f63fbd0ba70f1554c9dc5f893ff28546, type: 3}
|
||||
m_Threshold: 0
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 1
|
||||
@@ -1398,8 +1388,7 @@ BlendTree:
|
||||
m_DirectBlendParameter: InputHorizontal
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -4636754764438762427, guid: f63fbd0ba70f1554c9dc5f893ff28546,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -4636754764438762427, guid: f63fbd0ba70f1554c9dc5f893ff28546, type: 3}
|
||||
m_Threshold: 90
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 1
|
||||
@@ -1407,8 +1396,7 @@ BlendTree:
|
||||
m_DirectBlendParameter: InputHorizontal
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -606276786794296147, guid: f63fbd0ba70f1554c9dc5f893ff28546,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -606276786794296147, guid: f63fbd0ba70f1554c9dc5f893ff28546, type: 3}
|
||||
m_Threshold: 170
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 1
|
||||
@@ -14728,14 +14716,17 @@ AnimatorStateMachine:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Base Layer
|
||||
m_ChildStates: []
|
||||
m_ChildStates:
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 4416801500611958025}
|
||||
m_Position: {x: -358.64734, y: -43.860413, z: 0}
|
||||
m_ChildStateMachines:
|
||||
- serializedVersion: 1
|
||||
m_StateMachine: {fileID: 1107191697213795204}
|
||||
m_Position: {x: -288, y: -120, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_StateMachine: {fileID: 1107822795797827924}
|
||||
m_Position: {x: -288, y: -180, z: 0}
|
||||
m_Position: {x: -290, y: -180, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_StateMachine: {fileID: 2678945455928377032}
|
||||
m_Position: {x: -290, y: -240, z: 0}
|
||||
@@ -20946,8 +20937,7 @@ BlendTree:
|
||||
m_Name: Bow_Idle
|
||||
m_Childs:
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -744450954914381049, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -744450954914381049, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: -0.5
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 2
|
||||
@@ -20963,8 +20953,7 @@ BlendTree:
|
||||
m_DirectBlendParameter: InputHorizontal
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -744450954914381049, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -744450954914381049, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: 0.5
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: -2
|
||||
@@ -33694,7 +33683,7 @@ AnimatorStateMachine:
|
||||
m_ChildStates:
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 1102974793704474096}
|
||||
m_Position: {x: 264, y: 168, z: 0}
|
||||
m_Position: {x: 260, y: 170, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 1102332861771149508}
|
||||
m_Position: {x: 260, y: 70, z: 0}
|
||||
@@ -33710,7 +33699,7 @@ AnimatorStateMachine:
|
||||
m_AnyStatePosition: {x: 48, y: 168, z: 0}
|
||||
m_EntryPosition: {x: 50, y: 120, z: 0}
|
||||
m_ExitPosition: {x: 504, y: 120, z: 0}
|
||||
m_ParentStateMachinePosition: {x: 24, y: -24, z: 0}
|
||||
m_ParentStateMachinePosition: {x: 30, y: -20, z: 0}
|
||||
m_DefaultState: {fileID: 1102332861771149508}
|
||||
--- !u!1107 &1107815003637627098
|
||||
AnimatorStateMachine:
|
||||
@@ -35894,8 +35883,7 @@ BlendTree:
|
||||
m_Name: Crouch Idle
|
||||
m_Childs:
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: -0.5
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 2
|
||||
@@ -35911,8 +35899,7 @@ BlendTree:
|
||||
m_DirectBlendParameter: InputHorizontal
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: 0.5
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: -2
|
||||
@@ -36272,6 +36259,32 @@ AnimatorStateTransition:
|
||||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &4416801500611958025
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: TestRun
|
||||
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: 7400012, guid: 37c6cfe59f56e8a4799011397a870a8b, type: 3}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1101 &4602781940129309487
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
@@ -36478,8 +36491,7 @@ BlendTree:
|
||||
m_Name: Idle Aiming
|
||||
m_Childs:
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: -0.5
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 2
|
||||
@@ -36487,8 +36499,7 @@ BlendTree:
|
||||
m_DirectBlendParameter: InputHorizontal
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: -0.2
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 0.5
|
||||
@@ -36504,8 +36515,7 @@ BlendTree:
|
||||
m_DirectBlendParameter: InputHorizontal
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: 0.2
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: -0.5
|
||||
@@ -36513,8 +36523,7 @@ BlendTree:
|
||||
m_DirectBlendParameter: InputHorizontal
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: 0.5
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: -2
|
||||
@@ -36682,8 +36691,7 @@ BlendTree:
|
||||
m_Name: Holding Melee Idle
|
||||
m_Childs:
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -5508357832084655506, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -5508357832084655506, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: -1
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 1
|
||||
@@ -36699,8 +36707,7 @@ BlendTree:
|
||||
m_DirectBlendParameter: InputHorizontal
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: -5508357832084655506, guid: 009c43c371cbf974f860ee540816fa3d,
|
||||
type: 3}
|
||||
m_Motion: {fileID: -5508357832084655506, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||
m_Threshold: 1
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: -1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ea7d09efcbeafdd4690e2b2b3236d043
|
||||
guid: ebed31fbd0a3be4499c2fe54022858b7
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
BIN
Assets/Audio/Background/LurkingSloth-320bit(chosic.com).mp3
Normal file
BIN
Assets/Audio/Background/LurkingSloth-320bit(chosic.com).mp3
Normal file
Binary file not shown.
@@ -0,0 +1,23 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5a569249b0485d347a698461b0334585
|
||||
AudioImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 8
|
||||
defaultSettings:
|
||||
serializedVersion: 2
|
||||
loadType: 0
|
||||
sampleRateSetting: 0
|
||||
sampleRateOverride: 44100
|
||||
compressionFormat: 1
|
||||
quality: 1
|
||||
conversionMode: 0
|
||||
preloadAudioData: 0
|
||||
platformSettingOverrides: {}
|
||||
forceToMono: 0
|
||||
normalize: 1
|
||||
loadInBackground: 0
|
||||
ambisonic: 0
|
||||
3D: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -57,7 +57,7 @@ AudioMixerGroupController:
|
||||
m_Send: 00000000000000000000000000000000
|
||||
m_Effects:
|
||||
- {fileID: -5864968286415327506}
|
||||
m_UserColorIndex: 0
|
||||
m_UserColorIndex: 3
|
||||
m_Mute: 0
|
||||
m_Solo: 0
|
||||
m_BypassEffects: 0
|
||||
@@ -76,7 +76,15 @@ AudioMixerController:
|
||||
m_SuspendThreshold: -80
|
||||
m_EnableSuspend: 1
|
||||
m_UpdateMode: 0
|
||||
m_ExposedParameters: []
|
||||
m_ExposedParameters:
|
||||
- guid: 9d220dd29b931844f8bf0cabe811b681
|
||||
name: MasterVolume
|
||||
- guid: bf1d95a6c9abe924fa3d98795325cc1b
|
||||
name: MusicVolume
|
||||
- guid: 27be8a879c26ddd4585dbedff31a33e3
|
||||
name: SFXVolume
|
||||
- guid: 6b8a96f21df846741a0036e2a182ec15
|
||||
name: UIVolume
|
||||
m_AudioMixerGroupViews:
|
||||
- guids:
|
||||
- f31c09d88c9703d4aae5faeb43b19082
|
||||
@@ -104,7 +112,7 @@ AudioMixerGroupController:
|
||||
m_Send: 00000000000000000000000000000000
|
||||
m_Effects:
|
||||
- {fileID: 24400004}
|
||||
m_UserColorIndex: 0
|
||||
m_UserColorIndex: 1
|
||||
m_Mute: 0
|
||||
m_Solo: 0
|
||||
m_BypassEffects: 0
|
||||
@@ -148,7 +156,7 @@ AudioMixerGroupController:
|
||||
m_Send: 00000000000000000000000000000000
|
||||
m_Effects:
|
||||
- {fileID: -8884289898024163737}
|
||||
m_UserColorIndex: 0
|
||||
m_UserColorIndex: 2
|
||||
m_Mute: 0
|
||||
m_Solo: 0
|
||||
m_BypassEffects: 0
|
||||
@@ -167,7 +175,7 @@ AudioMixerGroupController:
|
||||
m_Send: 00000000000000000000000000000000
|
||||
m_Effects:
|
||||
- {fileID: -4762669937127778309}
|
||||
m_UserColorIndex: 0
|
||||
m_UserColorIndex: 4
|
||||
m_Mute: 0
|
||||
m_Solo: 0
|
||||
m_BypassEffects: 0
|
||||
|
||||
71
Assets/Editor/ReadmeUpdater.cs
Normal file
71
Assets/Editor/ReadmeUpdater.cs
Normal file
@@ -0,0 +1,71 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
|
||||
public class ReadmeUpdater : EditorWindow
|
||||
{
|
||||
private const string PythonScriptPath = "BABA_YAGA_Updater/main.py";
|
||||
private const string VenvPythonPath = "BABA_YAGA_Updater/.venv/Scripts/python.exe";
|
||||
private const string UpdaterDir = "BABA_YAGA_Updater";
|
||||
|
||||
[MenuItem("BABA YAGA/Update README")]
|
||||
public static void UpdateReadme()
|
||||
{
|
||||
string projectRoot = Directory.GetParent(Application.dataPath).FullName;
|
||||
string fullVenvPath = Path.Combine(projectRoot, VenvPythonPath);
|
||||
string fullScriptPath = Path.Combine(projectRoot, PythonScriptPath);
|
||||
string workingDir = Path.Combine(projectRoot, UpdaterDir);
|
||||
|
||||
if (!File.Exists(fullVenvPath))
|
||||
{
|
||||
UnityEngine.Debug.LogError($"[README Updater] Python venv not found at: {fullVenvPath}. Please ensure the .venv is set up in BABA_YAGA_Updater.");
|
||||
return;
|
||||
}
|
||||
|
||||
UnityEngine.Debug.Log("[README Updater] Starting update process...");
|
||||
|
||||
ProcessStartInfo startInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = fullVenvPath,
|
||||
Arguments = $"\"{fullScriptPath}\"",
|
||||
WorkingDirectory = workingDir,
|
||||
UseShellExecute = false,
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
StandardOutputEncoding = System.Text.Encoding.UTF8,
|
||||
StandardErrorEncoding = System.Text.Encoding.UTF8,
|
||||
CreateNoWindow = true
|
||||
};
|
||||
|
||||
// Force Python to use UTF-8 for IO to handle emojis
|
||||
startInfo.EnvironmentVariables["PYTHONIOENCODING"] = "utf-8";
|
||||
|
||||
using (Process process = Process.Start(startInfo))
|
||||
{
|
||||
using (StreamReader reader = process.StandardOutput)
|
||||
{
|
||||
string result = reader.ReadToEnd();
|
||||
if (!string.IsNullOrEmpty(result))
|
||||
UnityEngine.Debug.Log($"[README Updater] Output:\n{result}");
|
||||
}
|
||||
|
||||
using (StreamReader reader = process.StandardError)
|
||||
{
|
||||
string errors = reader.ReadToEnd();
|
||||
if (!string.IsNullOrEmpty(errors))
|
||||
UnityEngine.Debug.LogError($"[README Updater] Errors:\n{errors}");
|
||||
}
|
||||
|
||||
process.WaitForExit();
|
||||
if (process.ExitCode == 0)
|
||||
{
|
||||
UnityEngine.Debug.Log("🎉 [README Updater] README.md successfully updated!");
|
||||
}
|
||||
else
|
||||
{
|
||||
UnityEngine.Debug.LogError($"[README Updater] Process exited with code {process.ExitCode}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Editor/ReadmeUpdater.cs.meta
Normal file
2
Assets/Editor/ReadmeUpdater.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ae55b686282bc5248a82e3164817a074
|
||||
@@ -5218,9 +5218,9 @@ Material:
|
||||
- _OutlineWidth: 0
|
||||
- _PerspectiveFilter: 0.875
|
||||
- _Reflectivity: 10
|
||||
- _ScaleRatioA: 1
|
||||
- _ScaleRatioB: 1
|
||||
- _ScaleRatioC: 1
|
||||
- _ScaleRatioA: 0.9
|
||||
- _ScaleRatioB: 0.73125
|
||||
- _ScaleRatioC: 0.73125
|
||||
- _ScaleX: 1
|
||||
- _ScaleY: 1
|
||||
- _ShaderFlags: 0
|
||||
|
||||
144
Assets/Materials/skubox.mat
Normal file
144
Assets/Materials/skubox.mat
Normal file
@@ -0,0 +1,144 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &-6888318783798700149
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 11
|
||||
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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: skubox
|
||||
m_Shader: {fileID: 108, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords:
|
||||
- _MAPPING_LATITUDE_LONGITUDE_LAYOUT
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses:
|
||||
- MOTIONVECTORS
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BaseMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 2800000, guid: f6c8ebeb4fbe2954ba666fb8de1138f1, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _SpecGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_Lightmaps:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_LightmapsInd:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_ShadowMasks:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _AddPrecomputedVelocity: 0
|
||||
- _AlphaClip: 0
|
||||
- _AlphaToMask: 0
|
||||
- _Blend: 0
|
||||
- _BlendModePreserveSpecular: 1
|
||||
- _BumpScale: 1
|
||||
- _ClearCoatMask: 0
|
||||
- _ClearCoatSmoothness: 0
|
||||
- _Cull: 2
|
||||
- _Cutoff: 0.5
|
||||
- _DetailAlbedoMapScale: 1
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _DstBlendAlpha: 0
|
||||
- _EnvironmentReflections: 1
|
||||
- _Exposure: 1
|
||||
- _GlossMapScale: 0
|
||||
- _Glossiness: 0
|
||||
- _GlossyReflections: 0
|
||||
- _ImageType: 0
|
||||
- _Layout: 0
|
||||
- _Mapping: 1
|
||||
- _Metallic: 0
|
||||
- _MirrorOnBack: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.005
|
||||
- _QueueOffset: 0
|
||||
- _ReceiveShadows: 1
|
||||
- _Rotation: 0
|
||||
- _Smoothness: 0.5
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _SrcBlendAlpha: 1
|
||||
- _Surface: 0
|
||||
- _WorkflowMode: 1
|
||||
- _XRMotionVectorsPass: 1
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||
- _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
@@ -1,8 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 921c5d99d764f7e4184745c7ab001a30
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
guid: 7adfd3fc58213974581401c16602cb05
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -37,6 +37,7 @@ Material:
|
||||
disabledShaderPasses:
|
||||
- MOTIONVECTORS
|
||||
- DepthOnly
|
||||
- SHADOWCASTER
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
@@ -66,7 +67,7 @@ Material:
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Texture: {fileID: 2800000, guid: 2b09e034ca4296047993ed266a80d617, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
|
||||
@@ -132,7 +132,7 @@ Material:
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 0.066176444, g: 0.066176444, b: 0.066176444, a: 0.9338235}
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _Color: {r: 0.06617642, g: 0.06617642, b: 0.06617642, a: 0.9338235}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c862e7051fa82514e8cb688cd9667d93
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ed59a5af28246c141afd7603a3a94af3
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2fdd0acc5f279f54299e93076a7ad92d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: da4f77c9ec1cc314ca268a68c1441354
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2c2915ce8b97ca744bfd4f5ea2471af1
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f934eecf73f7e0e438ff1a0fffa1893e
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -14,6 +14,7 @@ GameObject:
|
||||
- component: {fileID: 6087599376744356948}
|
||||
- component: {fileID: 3563399533700019190}
|
||||
- component: {fileID: 681314853465352057}
|
||||
- component: {fileID: 4042483058127329834}
|
||||
m_Layer: 0
|
||||
m_Name: KamikazeAI
|
||||
m_TagString: Untagged
|
||||
@@ -155,3 +156,41 @@ MonoBehaviour:
|
||||
patrolRadius: 12
|
||||
patrolWaitTime: 2
|
||||
explosionEffectPrefab: {fileID: 8568474719719117872, guid: 39bf32dcd9299df4ca44fd10a817eda4, type: 3}
|
||||
--- !u!114 &4042483058127329834
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6425756872251228809}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f56a83ea88140fa4f869bb2f7ffdb184, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Invector.vHealthController
|
||||
openCloseEvents: 0
|
||||
openCloseWindow: 1
|
||||
selectedToolbar: 0
|
||||
_isDead: 1
|
||||
_currentHealth: 0
|
||||
isImmortal: 0
|
||||
fillHealthOnStart: 1
|
||||
_maxHealth: 100
|
||||
_healthRecovery: 0
|
||||
_healthRecoveryDelay: 0
|
||||
checkHealthEvents: []
|
||||
_onStartReceiveDamage:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
_onReceiveDamage:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
_onDead:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
onChangeHealth:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
onResetHealth:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
|
||||
@@ -88,6 +88,7 @@ GameObject:
|
||||
- component: {fileID: 7721795325225879236}
|
||||
- component: {fileID: 1194338186308686302}
|
||||
- component: {fileID: 1620994605374968907}
|
||||
- component: {fileID: 3045503552244378433}
|
||||
m_Layer: 5
|
||||
m_Name: Canvas
|
||||
m_TagString: Untagged
|
||||
@@ -102,7 +103,7 @@ RectTransform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3381350595760429543}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalRotation: {x: 0, y: -1, z: 0, w: 0}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
@@ -110,7 +111,7 @@ RectTransform:
|
||||
- {fileID: 6775114823217050358}
|
||||
- {fileID: 2685789783496722106}
|
||||
m_Father: {fileID: 6442306242859885696}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: -180, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 2.09}
|
||||
@@ -191,6 +192,21 @@ CanvasGroup:
|
||||
m_Interactable: 1
|
||||
m_BlocksRaycasts: 1
|
||||
m_IgnoreParentGroups: 0
|
||||
--- !u!114 &3045503552244378433
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3381350595760429543}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ea510cea4b9ed1547ae4725a2ded949a, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Hallucinate.UI.ChatBubble
|
||||
textDisplay: {fileID: 4454520411962799200}
|
||||
canvasGroup: {fileID: 1620994605374968907}
|
||||
bubbleRect: {fileID: 6775114823217050358}
|
||||
--- !u!1 &5687887011233860168
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -219,7 +235,7 @@ Transform:
|
||||
m_GameObject: {fileID: 5687887011233860168}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0.041, y: 1.5, z: -0.007}
|
||||
m_LocalPosition: {x: 0.041, y: 1.5, z: 0.595}
|
||||
m_LocalScale: {x: 0.05, y: 0.05, z: 0.05}
|
||||
m_ConstrainProportionsScale: 1
|
||||
m_Children: []
|
||||
@@ -299,10 +315,10 @@ BoxCollider:
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
m_Enabled: 0
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 1, z: 1}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Size: {x: 1, y: 1, z: 1.2136346}
|
||||
m_Center: {x: 0, y: 0, z: -0.106817186}
|
||||
--- !u!1 &6192986059782212342
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -452,10 +468,14 @@ GameObject:
|
||||
- component: {fileID: 8272839718325411334}
|
||||
- component: {fileID: 5770331367975928816}
|
||||
- component: {fileID: 4112854993683970537}
|
||||
- component: {fileID: 3240800621832008763}
|
||||
- component: {fileID: 8239948856752686218}
|
||||
- component: {fileID: 6469822191588635990}
|
||||
- component: {fileID: 9027690817715396964}
|
||||
- component: {fileID: 2252266660326254214}
|
||||
- component: {fileID: 4329414276869835007}
|
||||
m_Layer: 0
|
||||
m_Name: xNPC
|
||||
m_TagString: Untagged
|
||||
m_TagString: Enemy
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
@@ -491,26 +511,40 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::EnemyAI
|
||||
player: {fileID: 0}
|
||||
viewAngle: 90
|
||||
viewRadius: 20
|
||||
targetLayerMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
obstacleLayerMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
patrolPoints: []
|
||||
moveSpeed: 3
|
||||
chaseSpeed: 5
|
||||
moveSpeed: 5
|
||||
rotateSpeed: 20
|
||||
patrolWaitTime: 2
|
||||
patrolSpeed: 2
|
||||
patrolRadius: 100
|
||||
playerHasArtifact: 0
|
||||
isAggroedBySound: 0
|
||||
laserPrefab: {fileID: 3965388737199864462, guid: fbec2b501d70daa4c9cb481ba53fc0b8, type: 3}
|
||||
firePoint: {fileID: 5863061020199015852}
|
||||
minShootDelay: 1
|
||||
maxShootDelay: 3
|
||||
rotateSpeed: 50
|
||||
dodgeForce: 8
|
||||
maxShootDelay: 5
|
||||
dodgeForce: 3
|
||||
dodgeDuration: 0.5
|
||||
dodgeCooldown: 3
|
||||
dodgeCooldown: 2
|
||||
isPanicking: 0
|
||||
isEnraged: 0
|
||||
panicHealthThreshold: 40
|
||||
regenRate: 2
|
||||
regenDelay: 2
|
||||
minStrafeDuration: 0.5
|
||||
maxStrafeDuration: 2.2
|
||||
maxSpreadAngle: 10
|
||||
burstInterval: 0.12
|
||||
approachWeight: 0.35
|
||||
minCombatDistance: 5
|
||||
npcName: Guard
|
||||
persona: You are a grumpy guard protecting gold.
|
||||
talkRange: 5
|
||||
talkCooldown: 30
|
||||
isTalking: 0
|
||||
suspicionLevel: 0
|
||||
investigationThreshold: 30
|
||||
alertNeighborsThreshold: 70
|
||||
alertRange: 20
|
||||
--- !u!195 &5770331367975928816
|
||||
NavMeshAgent:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -560,7 +594,7 @@ Rigidbody:
|
||||
m_Interpolate: 0
|
||||
m_Constraints: 112
|
||||
m_CollisionDetection: 0
|
||||
--- !u!114 &3240800621832008763
|
||||
--- !u!114 &8239948856752686218
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
@@ -569,12 +603,113 @@ MonoBehaviour:
|
||||
m_GameObject: {fileID: 7522161431095319480}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ea510cea4b9ed1547ae4725a2ded949a, type: 3}
|
||||
m_Script: {fileID: 11500000, guid: 210b37cfe4a84a34a91d0a9e58856a60, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Hallucinate.UI.ChatBubble
|
||||
textDisplay: {fileID: 4454520411962799200}
|
||||
canvasGroup: {fileID: 1620994605374968907}
|
||||
bubbleRect: {fileID: 6775114823217050358}
|
||||
m_EditorClassIdentifier: Assembly-CSharp::FieldOfView
|
||||
viewAngle: 90
|
||||
viewRadius: 20
|
||||
obstacleLayerMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 128
|
||||
targetLayerMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 256
|
||||
canSeePlayer: 0
|
||||
lastKnownPlayerPosition: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &6469822191588635990
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7522161431095319480}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 35bba55c2a743d042ab1fff35e29db50, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::AnimatorAI
|
||||
forceGrounded: 1
|
||||
movementBoost: 1.5
|
||||
dampTime: 0.1
|
||||
--- !u!136 &9027690817715396964
|
||||
CapsuleCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7522161431095319480}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_Radius: 0.4324358
|
||||
m_Height: 1.8474874
|
||||
m_Direction: 1
|
||||
m_Center: {x: 0, y: 0.92911196, z: 0.11156863}
|
||||
--- !u!114 &2252266660326254214
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7522161431095319480}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f56a83ea88140fa4f869bb2f7ffdb184, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Invector.vHealthController
|
||||
openCloseEvents: 0
|
||||
openCloseWindow: 1
|
||||
selectedToolbar: 0
|
||||
_isDead: 1
|
||||
_currentHealth: 0
|
||||
isImmortal: 0
|
||||
fillHealthOnStart: 1
|
||||
_maxHealth: 100
|
||||
_healthRecovery: 0
|
||||
_healthRecoveryDelay: 0
|
||||
checkHealthEvents: []
|
||||
_onStartReceiveDamage:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
_onReceiveDamage:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
_onDead:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
onChangeHealth:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
onResetHealth:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!114 &4329414276869835007
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7522161431095319480}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 9d3efef3ad62cd548b0f85eb11858ed1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Invector.vHitDamageParticle
|
||||
openCloseEvents: 0
|
||||
openCloseWindow: 1
|
||||
selectedToolbar: 0
|
||||
defaultDamageEffects:
|
||||
- {fileID: 120346, guid: b8f2fe1ee1a01724cb72f5b0e6bd2eef, type: 3}
|
||||
customDamageEffects: []
|
||||
--- !u!1001 &7561534673732472622
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -601,7 +736,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 400132, guid: f32cd9f795c1282478d3bc3fbd8b2831, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 400132, guid: f32cd9f795c1282478d3bc3fbd8b2831, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
@@ -609,7 +744,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 400132, guid: f32cd9f795c1282478d3bc3fbd8b2831, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -1
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 400132, guid: f32cd9f795c1282478d3bc3fbd8b2831, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
@@ -621,7 +756,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 400132, guid: f32cd9f795c1282478d3bc3fbd8b2831, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: -180
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 400132, guid: f32cd9f795c1282478d3bc3fbd8b2831, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
@@ -630,18 +765,18 @@ PrefabInstance:
|
||||
- target: {fileID: 9500000, guid: f32cd9f795c1282478d3bc3fbd8b2831, type: 3}
|
||||
propertyPath: m_Avatar
|
||||
value:
|
||||
objectReference: {fileID: 9000000, guid: 340f99b8334a14c4a8a01dce6e1e5348, type: 3}
|
||||
objectReference: {fileID: 9000000, guid: f32cd9f795c1282478d3bc3fbd8b2831, type: 3}
|
||||
- target: {fileID: 9500000, guid: f32cd9f795c1282478d3bc3fbd8b2831, type: 3}
|
||||
propertyPath: m_Controller
|
||||
value:
|
||||
objectReference: {fileID: 9100000, guid: 87885946b43e2d1449e1d5aa2042f8a8, type: 2}
|
||||
- target: {fileID: 9500000, guid: f32cd9f795c1282478d3bc3fbd8b2831, type: 3}
|
||||
propertyPath: m_UpdateMode
|
||||
value: 1
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9500000, guid: f32cd9f795c1282478d3bc3fbd8b2831, type: 3}
|
||||
propertyPath: m_AnimatePhysics
|
||||
value: 1
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
|
||||
@@ -4197,6 +4197,11 @@ MonoBehaviour:
|
||||
_spawnParticle: 1
|
||||
_spawnStepMark: 1
|
||||
_useTriggerEnter: 1
|
||||
emitAINoise: 1
|
||||
aiNoiseRange: 10
|
||||
npcLayer:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
leftFootTrigger: {fileID: 11408204}
|
||||
rightFootTrigger: {fileID: 11477308}
|
||||
currentStep: {fileID: 0}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -27,12 +27,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1178214796800900241}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.076, z: 0.124}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1804537267582578112}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!135 &1178214796804358001
|
||||
SphereCollider:
|
||||
@@ -42,9 +43,17 @@ SphereCollider:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1178214796800900241}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
serializedVersion: 3
|
||||
m_Radius: 0.5
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1178214796806424509
|
||||
@@ -83,6 +92,7 @@ MonoBehaviour:
|
||||
inputDelay: 0.1
|
||||
playAnimationWhileHoldingButton: 1
|
||||
doubleButtomTime: 0.25
|
||||
canDoAction: 1
|
||||
actionName: Action
|
||||
actionTag: Action
|
||||
disableOnStart: 0
|
||||
@@ -96,6 +106,7 @@ MonoBehaviour:
|
||||
customCameraState: Default
|
||||
playAnimation:
|
||||
crossFadeTransition: 0.25
|
||||
animatorLayer: 0
|
||||
endActionManualy: 0
|
||||
endExitTimeAnimation: 0.8
|
||||
animatorActionState: 0
|
||||
@@ -238,6 +249,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 1178214796800926091}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -252,6 +264,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 1178214796800926091}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -262,6 +275,9 @@ MonoBehaviour:
|
||||
m_StringArgument:
|
||||
m_BoolArgument: 0
|
||||
m_CallState: 2
|
||||
OnCancelAction:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
targetEquipPoint:
|
||||
twoHandWeapon: 1
|
||||
weapon: {fileID: 1804537267582261728}
|
||||
@@ -271,6 +287,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 1178214796800926091}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -282,6 +299,7 @@ MonoBehaviour:
|
||||
m_BoolArgument: 0
|
||||
m_CallState: 2
|
||||
- m_Target: {fileID: 1830727322889391579}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: set_enabled
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -296,6 +314,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 1830727322889391579}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: set_enabled
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -344,6 +363,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 8342309185592125983}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -355,6 +375,7 @@ MonoBehaviour:
|
||||
m_BoolArgument: 0
|
||||
m_CallState: 2
|
||||
- m_Target: {fileID: 1770855500603019112}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: InstantiateObject
|
||||
m_Mode: 1
|
||||
m_Arguments:
|
||||
@@ -371,6 +392,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 8342309185592125983}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -387,6 +409,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 0}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -425,9 +448,9 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1178214796814376033}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 0, y: 0.5}
|
||||
@@ -457,6 +480,7 @@ MonoBehaviour:
|
||||
m_Material: {fileID: 2100000, guid: a33be1e1efa8ca14286b77d062313a4e, type: 2}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
@@ -502,10 +526,10 @@ RectTransform:
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0.2619354, w: 0.9650854}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.0013280489, y: 0.0013280488, z: 0.0013280488}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1178214796814376033}
|
||||
m_Father: {fileID: 1804537267582578112}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
@@ -529,7 +553,9 @@ Canvas:
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_AdditionalShaderChannelsFlag: 25
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
@@ -555,6 +581,7 @@ MonoBehaviour:
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 1
|
||||
m_PresetInfoIsWorld: 0
|
||||
--- !u!114 &1178214796806402205
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -636,9 +663,9 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1178214796814376033}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
@@ -668,6 +695,7 @@ MonoBehaviour:
|
||||
m_Material: {fileID: 2100000, guid: a33be1e1efa8ca14286b77d062313a4e, type: 2}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
@@ -715,12 +743,12 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000041723246}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1178214796814260335}
|
||||
- {fileID: 1178214796814260911}
|
||||
- {fileID: 1178214796814384871}
|
||||
m_Father: {fileID: 1178214796814369163}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
@@ -750,6 +778,7 @@ MonoBehaviour:
|
||||
m_Material: {fileID: 2100000, guid: a33be1e1efa8ca14286b77d062313a4e, type: 2}
|
||||
m_Color: {r: 0, g: 0, b: 0, a: 0.627451}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
@@ -780,6 +809,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 1178214796800906329}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -791,6 +821,7 @@ MonoBehaviour:
|
||||
m_BoolArgument: 0
|
||||
m_CallState: 2
|
||||
- m_Target: {fileID: 1178214796801013577}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -808,6 +839,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 1178214796800906329}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -819,6 +851,7 @@ MonoBehaviour:
|
||||
m_BoolArgument: 1
|
||||
m_CallState: 2
|
||||
- m_Target: {fileID: 1178214796801013577}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -857,9 +890,9 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1178214796814376033}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 0, y: 0.5}
|
||||
@@ -889,6 +922,7 @@ MonoBehaviour:
|
||||
m_Material: {fileID: 2100000, guid: a33be1e1efa8ca14286b77d062313a4e, type: 2}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
@@ -903,40 +937,12 @@ MonoBehaviour:
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!54 &5753856815630206312
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1804537267582261728}
|
||||
serializedVersion: 2
|
||||
m_Mass: 1
|
||||
m_Drag: 0
|
||||
m_AngularDrag: 0.05
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 0
|
||||
--- !u!65 &6470183431665213616
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1804537267582261728}
|
||||
m_Material: {fileID: 13400000, guid: c77abc477d4de2a4197e1f08cebc364e, type: 2}
|
||||
m_IsTrigger: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_Size: {x: 0.11955705, y: 0.17964685, z: 0.85108244}
|
||||
m_Center: {x: -0.0013062507, y: 0.054864466, z: 0.13716096}
|
||||
--- !u!1001 &1804537267582149120
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: 130016, guid: 95173cd142940384c81611787936f938, type: 3}
|
||||
@@ -991,20 +997,32 @@ PrefabInstance:
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 11429992, guid: 95173cd142940384c81611787936f938, type: 3}
|
||||
propertyPath: selectedToolbar
|
||||
value: 2
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents:
|
||||
- {fileID: 114382262437889658, guid: 95173cd142940384c81611787936f938, type: 3}
|
||||
- {fileID: 3978637271864031997, guid: 95173cd142940384c81611787936f938, type: 3}
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects:
|
||||
- targetCorrespondingSourceObject: {fileID: 430016, guid: 95173cd142940384c81611787936f938, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 1178214796814369163}
|
||||
- targetCorrespondingSourceObject: {fileID: 430016, guid: 95173cd142940384c81611787936f938, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 1178214796800604863}
|
||||
m_AddedComponents:
|
||||
- targetCorrespondingSourceObject: {fileID: 130016, guid: 95173cd142940384c81611787936f938, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 5753856815630206312}
|
||||
- targetCorrespondingSourceObject: {fileID: 130016, guid: 95173cd142940384c81611787936f938, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 6470183431665213616}
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 95173cd142940384c81611787936f938, type: 3}
|
||||
--- !u!4 &1804537267582578112 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 430016, guid: 95173cd142940384c81611787936f938,
|
||||
type: 3}
|
||||
m_PrefabInstance: {fileID: 1804537267582149120}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &1770855500603019112 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 114937068035861864, guid: 95173cd142940384c81611787936f938,
|
||||
type: 3}
|
||||
m_CorrespondingSourceObject: {fileID: 114937068035861864, guid: 95173cd142940384c81611787936f938, type: 3}
|
||||
m_PrefabInstance: {fileID: 1804537267582149120}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
@@ -1013,15 +1031,66 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: de8c6f6fb33efc547afa68f68e220d74, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1 &8342309185592125983 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 7696325297335060511, guid: 95173cd142940384c81611787936f938,
|
||||
type: 3}
|
||||
m_PrefabInstance: {fileID: 1804537267582149120}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &1804537267582261728 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 130016, guid: 95173cd142940384c81611787936f938,
|
||||
type: 3}
|
||||
m_CorrespondingSourceObject: {fileID: 130016, guid: 95173cd142940384c81611787936f938, type: 3}
|
||||
m_PrefabInstance: {fileID: 1804537267582149120}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!54 &5753856815630206312
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1804537267582261728}
|
||||
serializedVersion: 5
|
||||
m_Mass: 1
|
||||
m_LinearDamping: 0
|
||||
m_AngularDamping: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 0
|
||||
--- !u!65 &6470183431665213616
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1804537267582261728}
|
||||
m_Material: {fileID: 13400000, guid: c77abc477d4de2a4197e1f08cebc364e, type: 2}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 0.11955705, y: 0.17964685, z: 0.85108244}
|
||||
m_Center: {x: -0.0013062507, y: 0.054864466, z: 0.13716096}
|
||||
--- !u!4 &1804537267582578112 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 430016, guid: 95173cd142940384c81611787936f938, type: 3}
|
||||
m_PrefabInstance: {fileID: 1804537267582149120}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &8342309185592125983 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 7696325297335060511, guid: 95173cd142940384c81611787936f938, type: 3}
|
||||
m_PrefabInstance: {fileID: 1804537267582149120}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
|
||||
@@ -1,34 +1,5 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!54 &4054124028099797856
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4881589711078705830}
|
||||
serializedVersion: 2
|
||||
m_Mass: 1
|
||||
m_Drag: 0
|
||||
m_AngularDrag: 0.05
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 0
|
||||
--- !u!65 &7941838468431302446
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4881589711078705830}
|
||||
m_Material: {fileID: 13400000, guid: c77abc477d4de2a4197e1f08cebc364e, type: 2}
|
||||
m_IsTrigger: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_Size: {x: 0.12160286, y: 0.2082051, z: 0.32264447}
|
||||
m_Center: {x: 0.021650568, y: 0.006185949, z: 0.103613794}
|
||||
--- !u!1 &7903731139681717537
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -55,12 +26,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7903731139681717537}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.056, z: 0.087}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4881589711078555334}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!135 &7903731139668604497
|
||||
SphereCollider:
|
||||
@@ -70,9 +42,17 @@ SphereCollider:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7903731139681717537}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
serializedVersion: 3
|
||||
m_Radius: 0.5
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &7903731139670676279
|
||||
@@ -111,6 +91,7 @@ MonoBehaviour:
|
||||
inputDelay: 0.1
|
||||
playAnimationWhileHoldingButton: 1
|
||||
doubleButtomTime: 0.25
|
||||
canDoAction: 1
|
||||
actionName: Action
|
||||
actionTag: Action
|
||||
disableOnStart: 0
|
||||
@@ -124,6 +105,7 @@ MonoBehaviour:
|
||||
customCameraState: Default
|
||||
playAnimation:
|
||||
crossFadeTransition: 0.25
|
||||
animatorLayer: 0
|
||||
endActionManualy: 0
|
||||
endExitTimeAnimation: 0.8
|
||||
animatorActionState: 0
|
||||
@@ -266,6 +248,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 7903731139681943551}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -280,6 +263,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 7903731139681943551}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -290,6 +274,9 @@ MonoBehaviour:
|
||||
m_StringArgument:
|
||||
m_BoolArgument: 0
|
||||
m_CallState: 2
|
||||
OnCancelAction:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
targetEquipPoint:
|
||||
twoHandWeapon: 1
|
||||
weapon: {fileID: 4881589711078705830}
|
||||
@@ -299,6 +286,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 7903731139681943551}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -356,12 +344,12 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000041723246}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 7903731139695343497}
|
||||
- {fileID: 7903731139695326533}
|
||||
- {fileID: 7903731139695282545}
|
||||
m_Father: {fileID: 7903731139695313889}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
@@ -391,6 +379,7 @@ MonoBehaviour:
|
||||
m_Material: {fileID: 2100000, guid: a33be1e1efa8ca14286b77d062313a4e, type: 2}
|
||||
m_Color: {r: 0, g: 0, b: 0, a: 0.627451}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
@@ -421,6 +410,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 7903731139681958997}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -432,6 +422,7 @@ MonoBehaviour:
|
||||
m_BoolArgument: 0
|
||||
m_CallState: 2
|
||||
- m_Target: {fileID: 7903731139681936937}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -449,6 +440,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 7903731139681958997}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -460,6 +452,7 @@ MonoBehaviour:
|
||||
m_BoolArgument: 1
|
||||
m_CallState: 2
|
||||
- m_Target: {fileID: 7903731139681936937}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -498,9 +491,9 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 7903731139695298027}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
@@ -530,6 +523,7 @@ MonoBehaviour:
|
||||
m_Material: {fileID: 2100000, guid: a33be1e1efa8ca14286b77d062313a4e, type: 2}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
@@ -576,9 +570,9 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 7903731139695298027}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 0, y: 0.5}
|
||||
@@ -608,6 +602,7 @@ MonoBehaviour:
|
||||
m_Material: {fileID: 2100000, guid: a33be1e1efa8ca14286b77d062313a4e, type: 2}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
@@ -653,10 +648,10 @@ RectTransform:
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.0013280489, y: 0.0013280488, z: 0.0013280488}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 7903731139695298027}
|
||||
m_Father: {fileID: 4881589711078555334}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
@@ -680,7 +675,9 @@ Canvas:
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_AdditionalShaderChannelsFlag: 25
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
@@ -706,6 +703,7 @@ MonoBehaviour:
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 1
|
||||
m_PresetInfoIsWorld: 0
|
||||
--- !u!114 &7903731139670638581
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -787,9 +785,9 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 7903731139695298027}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 0, y: 0.5}
|
||||
@@ -819,6 +817,7 @@ MonoBehaviour:
|
||||
m_Material: {fileID: 2100000, guid: a33be1e1efa8ca14286b77d062313a4e, type: 2}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
@@ -838,6 +837,7 @@ PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: 170828, guid: a0ef3c70b27799d409935f45a6537bb0, type: 3}
|
||||
@@ -892,19 +892,88 @@ PrefabInstance:
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 11470846, guid: a0ef3c70b27799d409935f45a6537bb0, type: 3}
|
||||
propertyPath: hitLayer.m_Bits
|
||||
value: 4294967295
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 11470846, guid: a0ef3c70b27799d409935f45a6537bb0, type: 3}
|
||||
propertyPath: selectedToolbar
|
||||
value: 2
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents:
|
||||
- {fileID: 114790386807353386, guid: a0ef3c70b27799d409935f45a6537bb0, type: 3}
|
||||
- {fileID: 114554122684540132, guid: a0ef3c70b27799d409935f45a6537bb0, type: 3}
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects:
|
||||
- targetCorrespondingSourceObject: {fileID: 470828, guid: a0ef3c70b27799d409935f45a6537bb0, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 7903731139695313889}
|
||||
- targetCorrespondingSourceObject: {fileID: 470828, guid: a0ef3c70b27799d409935f45a6537bb0, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 7903731139681598825}
|
||||
m_AddedComponents:
|
||||
- targetCorrespondingSourceObject: {fileID: 170828, guid: a0ef3c70b27799d409935f45a6537bb0, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 4054124028099797856}
|
||||
- targetCorrespondingSourceObject: {fileID: 170828, guid: a0ef3c70b27799d409935f45a6537bb0, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 7941838468431302446}
|
||||
m_SourcePrefab: {fileID: 100100000, guid: a0ef3c70b27799d409935f45a6537bb0, type: 3}
|
||||
--- !u!4 &4881589711078555334 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 470828, guid: a0ef3c70b27799d409935f45a6537bb0,
|
||||
type: 3}
|
||||
m_CorrespondingSourceObject: {fileID: 470828, guid: a0ef3c70b27799d409935f45a6537bb0, type: 3}
|
||||
m_PrefabInstance: {fileID: 4881589711078871530}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &4881589711078705830 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 170828, guid: a0ef3c70b27799d409935f45a6537bb0,
|
||||
type: 3}
|
||||
m_CorrespondingSourceObject: {fileID: 170828, guid: a0ef3c70b27799d409935f45a6537bb0, type: 3}
|
||||
m_PrefabInstance: {fileID: 4881589711078871530}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!54 &4054124028099797856
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4881589711078705830}
|
||||
serializedVersion: 5
|
||||
m_Mass: 1
|
||||
m_LinearDamping: 0
|
||||
m_AngularDamping: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 0
|
||||
--- !u!65 &7941838468431302446
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4881589711078705830}
|
||||
m_Material: {fileID: 13400000, guid: c77abc477d4de2a4197e1f08cebc364e, type: 2}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 0.12160286, y: 0.2082051, z: 0.32264447}
|
||||
m_Center: {x: 0.021650568, y: 0.006185949, z: 0.103613794}
|
||||
|
||||
@@ -25,12 +25,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 105388}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.049999997, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 422732}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &3302298
|
||||
MeshFilter:
|
||||
@@ -51,10 +52,17 @@ MeshRenderer:
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -76,9 +84,12 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &115092
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -105,16 +116,17 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 115092}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0.59600043, y: 0.23841888, z: -5.476}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 422732}
|
||||
- {fileID: 480898}
|
||||
- {fileID: 488976}
|
||||
- {fileID: 22488062}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!136 &13688376
|
||||
CapsuleCollider:
|
||||
@@ -124,8 +136,17 @@ CapsuleCollider:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 115092}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_Radius: 0.35
|
||||
m_Height: 1.08
|
||||
m_Direction: 1
|
||||
@@ -143,12 +164,13 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
openCloseEvents: 0
|
||||
openCloseWindow: 0
|
||||
selectedToolbar: 0
|
||||
openCloseWindow: 1
|
||||
selectedToolbar: 4
|
||||
inputType: 0
|
||||
actionInput:
|
||||
useInput: 1
|
||||
isAxisInUse: 0
|
||||
isUnityInput: 0
|
||||
keyboard: E
|
||||
keyboardAxis: 0
|
||||
joystick: A
|
||||
@@ -165,6 +187,7 @@ MonoBehaviour:
|
||||
inputDelay: 0.1
|
||||
playAnimationWhileHoldingButton: 1
|
||||
doubleButtomTime: 0.25
|
||||
canDoAction: 1
|
||||
actionName: Action
|
||||
actionTag: Action
|
||||
disableOnStart: 0
|
||||
@@ -177,11 +200,12 @@ MonoBehaviour:
|
||||
destroyDelay: 0
|
||||
customCameraState: Default
|
||||
playAnimation:
|
||||
crossFadeTransition: 0.25
|
||||
animatorLayer: 0
|
||||
endActionManualy: 0
|
||||
endExitTimeAnimation: 0.8
|
||||
animatorActionState: 0
|
||||
resetAnimatorActionState: 1
|
||||
useAnimatorMatchTarget: 1
|
||||
matchTarget: {fileID: 0}
|
||||
avatarTarget: 0
|
||||
useLocalX: 0
|
||||
@@ -285,10 +309,6 @@ MonoBehaviour:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
matchPos: {x: 0, y: 0, z: 0}
|
||||
matchRot: 0
|
||||
startMatchTarget: 0
|
||||
endMatchTarget: 0
|
||||
onPressActionDelay: 0
|
||||
OnPressActionInput:
|
||||
m_PersistentCalls:
|
||||
@@ -315,6 +335,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 128644}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -332,6 +353,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 128644}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -348,6 +370,9 @@ MonoBehaviour:
|
||||
OnInvalidate:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
OnCancelAction:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
itemListData: {fileID: 11400000, guid: 1493f9d9326e8014494b8cb04de38f25, type: 2}
|
||||
onCollectDelay: 0
|
||||
textDelay: 0.25
|
||||
@@ -400,12 +425,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 121230}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 422732}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &3398494
|
||||
MeshFilter:
|
||||
@@ -426,10 +452,17 @@ MeshRenderer:
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -451,9 +484,12 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &127422
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -479,12 +515,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 127422}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.049999997, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 488976}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &3382610
|
||||
MeshFilter:
|
||||
@@ -505,10 +542,17 @@ MeshRenderer:
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -530,9 +574,12 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &128644
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -563,10 +610,10 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: -1.4210853e-14, z: -0.0000003258414, w: -1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.000713446, y: 0.00071344554, z: 0.00071344554}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 22482840}
|
||||
m_Father: {fileID: 479482}
|
||||
m_RootOrder: 3
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
@@ -590,7 +637,9 @@ Canvas:
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_AdditionalShaderChannelsFlag: 25
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
@@ -616,6 +665,7 @@ MonoBehaviour:
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 1
|
||||
m_PresetInfoIsWorld: 0
|
||||
--- !u!114 &11473088
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -673,14 +723,15 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 128768}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: -0.707106, z: 0, w: 0.7071076}
|
||||
m_LocalPosition: {x: -0.009500027, y: 0.51312, z: 0.013957024}
|
||||
m_LocalScale: {x: 2.086288, y: 2.44284, z: 2.0862887}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 492078}
|
||||
- {fileID: 474350}
|
||||
m_Father: {fileID: 479482}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &131120
|
||||
GameObject:
|
||||
@@ -705,14 +756,15 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 131120}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: -0.707106, z: 0, w: 0.7071076}
|
||||
m_LocalPosition: {x: -0.00950098, y: 0.51312, z: -0.15503883}
|
||||
m_LocalScale: {x: 2.086288, y: 2.44284, z: 2.0862887}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 448248}
|
||||
- {fileID: 450808}
|
||||
m_Father: {fileID: 479482}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &139748
|
||||
GameObject:
|
||||
@@ -739,12 +791,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 139748}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.049999997, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 480898}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &3373558
|
||||
MeshFilter:
|
||||
@@ -765,10 +818,17 @@ MeshRenderer:
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -790,9 +850,12 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &152304
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -818,12 +881,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 152304}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 488976}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &3344262
|
||||
MeshFilter:
|
||||
@@ -844,10 +908,17 @@ MeshRenderer:
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -869,9 +940,12 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &154240
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -900,9 +974,9 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 22482840}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 0, y: 0.5}
|
||||
@@ -932,6 +1006,7 @@ MonoBehaviour:
|
||||
m_Material: {fileID: 2100000, guid: a33be1e1efa8ca14286b77d062313a4e, type: 2}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
@@ -971,12 +1046,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 164052}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 480898}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &3359494
|
||||
MeshFilter:
|
||||
@@ -997,10 +1073,17 @@ MeshRenderer:
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -1022,9 +1105,12 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &164286
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1053,9 +1139,9 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 22482840}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
@@ -1085,6 +1171,7 @@ MonoBehaviour:
|
||||
m_Material: {fileID: 2100000, guid: a33be1e1efa8ca14286b77d062313a4e, type: 2}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
@@ -1132,12 +1219,12 @@ RectTransform:
|
||||
m_LocalRotation: {x: -0.000000003090828, y: -1, z: -0.000000028749422, w: 0.00000044703478}
|
||||
m_LocalPosition: {x: 0, y: 0, z: -0.0020311438}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 22489296}
|
||||
- {fileID: 22497104}
|
||||
- {fileID: 22432168}
|
||||
m_Father: {fileID: 22488062}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
@@ -1167,6 +1254,7 @@ MonoBehaviour:
|
||||
m_Material: {fileID: 2100000, guid: a33be1e1efa8ca14286b77d062313a4e, type: 2}
|
||||
m_Color: {r: 0, g: 0, b: 0, a: 0.627451}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
@@ -1197,6 +1285,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 154240}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -1208,6 +1297,7 @@ MonoBehaviour:
|
||||
m_BoolArgument: 0
|
||||
m_CallState: 2
|
||||
- m_Target: {fileID: 196296}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -1225,6 +1315,7 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 154240}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -1236,6 +1327,7 @@ MonoBehaviour:
|
||||
m_BoolArgument: 1
|
||||
m_CallState: 2
|
||||
- m_Target: {fileID: 196296}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
@@ -1269,14 +1361,15 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 187208}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: -0.707106, z: 0, w: 0.7071076}
|
||||
m_LocalPosition: {x: -0.009499073, y: 0.51312, z: 0.18504047}
|
||||
m_LocalScale: {x: 2.086288, y: 2.44284, z: 2.0862887}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 451406}
|
||||
- {fileID: 438440}
|
||||
m_Father: {fileID: 479482}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &196296
|
||||
GameObject:
|
||||
@@ -1306,9 +1399,9 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 22482840}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 0, y: 0.5}
|
||||
@@ -1338,6 +1431,7 @@ MonoBehaviour:
|
||||
m_Material: {fileID: 2100000, guid: a33be1e1efa8ca14286b77d062313a4e, type: 2}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
|
||||
@@ -31,7 +31,6 @@ RectTransform:
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 22430624}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 0, y: 0.5}
|
||||
@@ -101,13 +100,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 117034}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.2588187, y: 0, z: 0, w: 0.96592593}
|
||||
m_LocalPosition: {x: -0.0133, y: 0.5573, z: -0.0121}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 405752}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &3352832
|
||||
MeshFilter:
|
||||
@@ -134,6 +133,11 @@ MeshRenderer:
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -156,9 +160,11 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &125278
|
||||
GameObject:
|
||||
@@ -194,7 +200,6 @@ RectTransform:
|
||||
m_Children:
|
||||
- {fileID: 22430624}
|
||||
m_Father: {fileID: 405752}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
@@ -218,7 +223,9 @@ Canvas:
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_AdditionalShaderChannelsFlag: 25
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
@@ -310,7 +317,6 @@ RectTransform:
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 22430624}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
@@ -390,7 +396,6 @@ RectTransform:
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 22430624}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 0, y: 0.5}
|
||||
@@ -470,7 +475,6 @@ RectTransform:
|
||||
- {fileID: 22490896}
|
||||
- {fileID: 22451678}
|
||||
m_Father: {fileID: 22475414}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
@@ -611,6 +615,7 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 199660}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0.39214686, y: 0.2389014, z: -20.878284}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
@@ -619,7 +624,6 @@ Transform:
|
||||
- {fileID: 463598}
|
||||
- {fileID: 22475414}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!136 &13694850
|
||||
CapsuleCollider:
|
||||
@@ -629,8 +633,17 @@ CapsuleCollider:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 199660}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_Radius: 0.35
|
||||
m_Height: 1.08
|
||||
m_Direction: 1
|
||||
@@ -648,8 +661,8 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
openCloseEvents: 0
|
||||
openCloseWindow: 0
|
||||
selectedToolbar: 0
|
||||
openCloseWindow: 1
|
||||
selectedToolbar: 2
|
||||
inputType: 0
|
||||
actionInput:
|
||||
useInput: 1
|
||||
@@ -867,11 +880,15 @@ MonoBehaviour:
|
||||
name:
|
||||
amount: 1
|
||||
attributes:
|
||||
- name: 0
|
||||
value: 1
|
||||
- name: 2
|
||||
value: 36
|
||||
isOpen: 0
|
||||
isBool: 0
|
||||
changeAttributes: 0
|
||||
- name: 6
|
||||
value: 8
|
||||
isOpen: 0
|
||||
isBool: 0
|
||||
changeAttributes: 1
|
||||
autoEquip: 1
|
||||
addToEquipArea: 1
|
||||
indexArea: 0
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -14,6 +14,7 @@ GameObject:
|
||||
- component: {fileID: 411349647056113735}
|
||||
- component: {fileID: 2417107839128453854}
|
||||
- component: {fileID: 6433774282585127385}
|
||||
- component: {fileID: -8021594009672363794}
|
||||
m_Layer: 0
|
||||
m_Name: "_LazerPr\u1ECDectile"
|
||||
m_TagString: Untagged
|
||||
@@ -31,8 +32,8 @@ Transform:
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.69, z: 0.267}
|
||||
m_LocalScale: {x: 0.1, y: 0.1, z: 0.1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_LocalScale: {x: 0.05, y: 0.05, z: 0.05}
|
||||
m_ConstrainProportionsScale: 1
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
@@ -108,7 +109,7 @@ SphereCollider:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
@@ -245,5 +246,34 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 4e4f602386d4d484ea7a2a3b0c19ac21, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LaserProjectile
|
||||
speed: 5
|
||||
lifeTime: 5
|
||||
speed: 70
|
||||
lifeTime: 2
|
||||
damageAmount: 10
|
||||
hitSound: Laser_Hit
|
||||
--- !u!54 &-8021594009672363794
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3965388737199864462}
|
||||
serializedVersion: 5
|
||||
m_Mass: 1
|
||||
m_LinearDamping: 0
|
||||
m_AngularDamping: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 1
|
||||
m_Interpolate: 0
|
||||
m_Constraints: 112
|
||||
m_CollisionDetection: 1
|
||||
|
||||
@@ -17,27 +17,27 @@ MonoBehaviour:
|
||||
Clip: {fileID: 8300000, guid: fecdee2673ce2f542a3db1a8b56d1571, type: 3}
|
||||
DefaultVolume: 1
|
||||
DefaultPitch: 1
|
||||
MixerGroup: {fileID: 0}
|
||||
MixerGroup: {fileID: 24300002, guid: a622ceda579315442bd0a82d6626974c, type: 2}
|
||||
- Name: UI_Warning
|
||||
Clip: {fileID: 8300000, guid: 32b49cf6b9e2e8e408663785554c3e75, type: 3}
|
||||
DefaultVolume: 1
|
||||
DefaultPitch: 1
|
||||
MixerGroup: {fileID: 0}
|
||||
MixerGroup: {fileID: 24300002, guid: a622ceda579315442bd0a82d6626974c, type: 2}
|
||||
- Name: UI_Click
|
||||
Clip: {fileID: 8300000, guid: 30f85fcee050492448db7f91217910b3, type: 3}
|
||||
DefaultVolume: 1
|
||||
DefaultPitch: 1
|
||||
MixerGroup: {fileID: 0}
|
||||
MixerGroup: {fileID: 24300002, guid: a622ceda579315442bd0a82d6626974c, type: 2}
|
||||
- Name: Item_Pickup
|
||||
Clip: {fileID: 8300000, guid: b1ae905972eed154497f5454b22ba711, type: 3}
|
||||
DefaultVolume: 1
|
||||
DefaultPitch: 1
|
||||
MixerGroup: {fileID: 0}
|
||||
MixerGroup: {fileID: 24300002, guid: a622ceda579315442bd0a82d6626974c, type: 2}
|
||||
- Name: Enemy_Alert
|
||||
Clip: {fileID: 8300000, guid: d5f9671eecb70364f8282999c81d8295, type: 3}
|
||||
DefaultVolume: 1
|
||||
DefaultPitch: 1
|
||||
MixerGroup: {fileID: 0}
|
||||
MixerGroup: {fileID: 24300002, guid: a622ceda579315442bd0a82d6626974c, type: 2}
|
||||
- Name: Enemy_Shoot
|
||||
Clip: {fileID: 8300000, guid: de0b7f47746d51f48b733b64b307540e, type: 3}
|
||||
DefaultVolume: 1
|
||||
@@ -47,14 +47,14 @@ MonoBehaviour:
|
||||
Clip: {fileID: 8300000, guid: e14cb014b8c41bf4a98768f2e4b4c1d7, type: 3}
|
||||
DefaultVolume: 1
|
||||
DefaultPitch: 1
|
||||
MixerGroup: {fileID: 0}
|
||||
MixerGroup: {fileID: 24300002, guid: a622ceda579315442bd0a82d6626974c, type: 2}
|
||||
- Name: NPC_Interact
|
||||
Clip: {fileID: 8300000, guid: 6d36adcf33e186c4cbe64a4c149e138f, type: 3}
|
||||
DefaultVolume: 1
|
||||
DefaultPitch: 1
|
||||
MixerGroup: {fileID: 0}
|
||||
MixerGroup: {fileID: 24300002, guid: a622ceda579315442bd0a82d6626974c, type: 2}
|
||||
- Name: NPC_Response
|
||||
Clip: {fileID: 8300000, guid: 7c266b12aa7ed1a49bf7ea0889d32302, type: 3}
|
||||
DefaultVolume: 1
|
||||
DefaultPitch: 1
|
||||
MixerGroup: {fileID: 0}
|
||||
MixerGroup: {fileID: 24300002, guid: a622ceda579315442bd0a82d6626974c, type: 2}
|
||||
|
||||
@@ -12,12 +12,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Fragment Grenade
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft:
|
||||
- item: {fileID: 0}
|
||||
amount: 3
|
||||
- item: {fileID: 0}
|
||||
amount: 1
|
||||
price: 0
|
||||
id: 26
|
||||
description: Fragment Grenade
|
||||
type: 0
|
||||
@@ -27,8 +21,7 @@ MonoBehaviour:
|
||||
maxStack: 6
|
||||
amount: 0
|
||||
originalObject: {fileID: 170736, guid: c221411e499bdd94f90413254abf7860, type: 3}
|
||||
dropObject: {fileID: 4018256157275831458, guid: a04c9098c7a452447912f6c5069bd095,
|
||||
type: 3}
|
||||
dropObject: {fileID: 4018256157275831458, guid: a04c9098c7a452447912f6c5069bd095, type: 3}
|
||||
attributes: []
|
||||
isInEquipArea: 0
|
||||
isEquiped: 0
|
||||
@@ -58,12 +51,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Molotov
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft:
|
||||
- item: {fileID: 0}
|
||||
amount: 3
|
||||
- item: {fileID: 0}
|
||||
amount: 1
|
||||
price: 0
|
||||
id: 27
|
||||
description: Molotov
|
||||
type: 0
|
||||
@@ -72,10 +59,8 @@ MonoBehaviour:
|
||||
createNewItem: 1
|
||||
maxStack: 6
|
||||
amount: 0
|
||||
originalObject: {fileID: 4687494058105681854, guid: 356e6f81e6f18534ba6b80a6d008642a,
|
||||
type: 3}
|
||||
dropObject: {fileID: 4018256157275831458, guid: c37d3b92b2a9da3468bc2a821919c0ca,
|
||||
type: 3}
|
||||
originalObject: {fileID: 4687494058105681854, guid: 356e6f81e6f18534ba6b80a6d008642a, type: 3}
|
||||
dropObject: {fileID: 4018256157275831458, guid: c37d3b92b2a9da3468bc2a821919c0ca, type: 3}
|
||||
attributes: []
|
||||
isInEquipArea: 0
|
||||
isEquiped: 0
|
||||
@@ -150,8 +135,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Sniper Ammo
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 19
|
||||
description:
|
||||
type: 3
|
||||
@@ -191,8 +174,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: RPG Ammo
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 18
|
||||
description:
|
||||
type: 3
|
||||
@@ -232,8 +213,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Handgun Ammo
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 14
|
||||
description:
|
||||
type: 3
|
||||
@@ -273,8 +252,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: RPG
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 16
|
||||
description: Very destructive
|
||||
type: 2
|
||||
@@ -322,8 +299,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Sniper
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 15
|
||||
description: Attached with a scope
|
||||
type: 2
|
||||
@@ -371,8 +346,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Shotgun Shells
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 17
|
||||
description: Shotgun Ammo
|
||||
type: 3
|
||||
@@ -412,8 +385,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Shotgun
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 12
|
||||
description: Tactical Shotgun
|
||||
type: 2
|
||||
@@ -461,8 +432,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Rifle Ammo
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 13
|
||||
description:
|
||||
type: 3
|
||||
@@ -502,8 +471,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Great Shield
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 9
|
||||
description: 'Great Shield
|
||||
|
||||
@@ -516,10 +483,8 @@ MonoBehaviour:
|
||||
createNewItem: 1
|
||||
maxStack: 1
|
||||
amount: 0
|
||||
originalObject: {fileID: 1000012874595254, guid: d4ca9135af96d5142987a1f1427b099a,
|
||||
type: 3}
|
||||
dropObject: {fileID: 8587624101741613191, guid: e26f928aabf2af048b7def78ec83a486,
|
||||
type: 3}
|
||||
originalObject: {fileID: 1000012874595254, guid: d4ca9135af96d5142987a1f1427b099a, type: 3}
|
||||
dropObject: {fileID: 8587624101741613191, guid: e26f928aabf2af048b7def78ec83a486, type: 3}
|
||||
attributes:
|
||||
- name: 3
|
||||
value: 0
|
||||
@@ -561,8 +526,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Short Katana
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 1
|
||||
description: Melee Weapon
|
||||
type: 1
|
||||
@@ -571,10 +534,8 @@ MonoBehaviour:
|
||||
createNewItem: 1
|
||||
maxStack: 1
|
||||
amount: 0
|
||||
originalObject: {fileID: 1000011247033104, guid: 43ec053b9c111644e80b4ddb5f535508,
|
||||
type: 3}
|
||||
dropObject: {fileID: 3314097323225006234, guid: 0f2c84cd3287333448744ce0451196cd,
|
||||
type: 3}
|
||||
originalObject: {fileID: 1000011247033104, guid: 43ec053b9c111644e80b4ddb5f535508, type: 3}
|
||||
dropObject: {fileID: 3314097323225006234, guid: 0f2c84cd3287333448744ce0451196cd, type: 3}
|
||||
attributes:
|
||||
- name: 2
|
||||
value: 25
|
||||
@@ -620,8 +581,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Great Sword
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 7
|
||||
description: Melee Weapon
|
||||
type: 1
|
||||
@@ -630,10 +589,8 @@ MonoBehaviour:
|
||||
createNewItem: 1
|
||||
maxStack: 1
|
||||
amount: 0
|
||||
originalObject: {fileID: 1000014209087140, guid: d03b45803e637bb4fb00a1ca9030d66e,
|
||||
type: 3}
|
||||
dropObject: {fileID: 4500584118820961459, guid: eca1e51be6676704dbb7f23b4947883b,
|
||||
type: 3}
|
||||
originalObject: {fileID: 1000014209087140, guid: d03b45803e637bb4fb00a1ca9030d66e, type: 3}
|
||||
dropObject: {fileID: 4500584118820961459, guid: eca1e51be6676704dbb7f23b4947883b, type: 3}
|
||||
attributes:
|
||||
- name: 2
|
||||
value: 30
|
||||
@@ -679,8 +636,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Great Katana
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 8
|
||||
description: Melee Weapon
|
||||
type: 1
|
||||
@@ -689,10 +644,8 @@ MonoBehaviour:
|
||||
createNewItem: 1
|
||||
maxStack: 1
|
||||
amount: 0
|
||||
originalObject: {fileID: 1000013423493360, guid: 6bbee781522ce5243a02bf72cd914cf5,
|
||||
type: 3}
|
||||
dropObject: {fileID: 2197774501603174495, guid: 7dcfb29ec0c968041b99dd41d13cec28,
|
||||
type: 3}
|
||||
originalObject: {fileID: 1000013423493360, guid: 6bbee781522ce5243a02bf72cd914cf5, type: 3}
|
||||
dropObject: {fileID: 2197774501603174495, guid: 7dcfb29ec0c968041b99dd41d13cec28, type: 3}
|
||||
attributes:
|
||||
- name: 2
|
||||
value: 25
|
||||
@@ -738,8 +691,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Assault Rifle
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 11
|
||||
description: Attached with a Scope
|
||||
type: 2
|
||||
@@ -795,8 +746,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Small Shield
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 6
|
||||
description: 'Small Shield
|
||||
|
||||
@@ -807,10 +756,8 @@ MonoBehaviour:
|
||||
createNewItem: 1
|
||||
maxStack: 1
|
||||
amount: 0
|
||||
originalObject: {fileID: 1000010116632662, guid: 2232bbcc5a195274c9744c2c6352e910,
|
||||
type: 3}
|
||||
dropObject: {fileID: 862192267840601332, guid: d07ef1bfe3f5bf4469394a9c723bbbc1,
|
||||
type: 3}
|
||||
originalObject: {fileID: 1000010116632662, guid: 2232bbcc5a195274c9744c2c6352e910, type: 3}
|
||||
dropObject: {fileID: 862192267840601332, guid: d07ef1bfe3f5bf4469394a9c723bbbc1, type: 3}
|
||||
attributes:
|
||||
- name: 3
|
||||
value: 0
|
||||
@@ -852,8 +799,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Handgun
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 10
|
||||
description: Semi-Automatic Pistol
|
||||
type: 2
|
||||
@@ -901,12 +846,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Health Up Potion
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft:
|
||||
- item: {fileID: 0}
|
||||
amount: 3
|
||||
- item: {fileID: 0}
|
||||
amount: 1
|
||||
price: 0
|
||||
id: 5
|
||||
description: Increases the MaxHealth
|
||||
type: 0
|
||||
@@ -950,8 +889,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Axe
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 0
|
||||
description: Melee Weapon
|
||||
type: 1
|
||||
@@ -960,10 +897,8 @@ MonoBehaviour:
|
||||
createNewItem: 1
|
||||
maxStack: 1
|
||||
amount: 0
|
||||
originalObject: {fileID: 1000010725870802, guid: 0cf98a7633e41834ba19e8626f1ceadc,
|
||||
type: 3}
|
||||
dropObject: {fileID: 880292917891664030, guid: 4ce32edaf6024884898e95f24f9f763a,
|
||||
type: 3}
|
||||
originalObject: {fileID: 1000010725870802, guid: 0cf98a7633e41834ba19e8626f1ceadc, type: 3}
|
||||
dropObject: {fileID: 880292917891664030, guid: 4ce32edaf6024884898e95f24f9f763a, type: 3}
|
||||
attributes:
|
||||
- name: 3
|
||||
value: 35
|
||||
@@ -1009,12 +944,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Stamina Up Potion
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft:
|
||||
- item: {fileID: 0}
|
||||
amount: 1
|
||||
- item: {fileID: 0}
|
||||
amount: 3
|
||||
price: 0
|
||||
id: 4
|
||||
description: Increases the MaxStamina
|
||||
type: 0
|
||||
@@ -1058,8 +987,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Short Sword
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 3
|
||||
description: Melee Weapon
|
||||
type: 1
|
||||
@@ -1068,10 +995,8 @@ MonoBehaviour:
|
||||
createNewItem: 1
|
||||
maxStack: 1
|
||||
amount: 0
|
||||
originalObject: {fileID: 1000012884940116, guid: 5dc53aa14e78ec54fbf2281c1abb7f47,
|
||||
type: 3}
|
||||
dropObject: {fileID: 819158048279699071, guid: 0f25b0bc9b7934840b324072cedb3325,
|
||||
type: 3}
|
||||
originalObject: {fileID: 1000012884940116, guid: 5dc53aa14e78ec54fbf2281c1abb7f47, type: 3}
|
||||
dropObject: {fileID: 819158048279699071, guid: 0f25b0bc9b7934840b324072cedb3325, type: 3}
|
||||
attributes:
|
||||
- name: 2
|
||||
value: 15
|
||||
@@ -1117,12 +1042,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Health Potion
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft:
|
||||
- item: {fileID: 0}
|
||||
amount: 3
|
||||
- item: {fileID: 0}
|
||||
amount: 1
|
||||
price: 0
|
||||
id: 2
|
||||
description: Recover Health
|
||||
type: 0
|
||||
@@ -1166,8 +1085,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: vRifle Shooter Edition
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 22
|
||||
description: Special Edition attached with Grenade Launcher
|
||||
type: 2
|
||||
@@ -1176,8 +1093,7 @@ MonoBehaviour:
|
||||
createNewItem: 1
|
||||
maxStack: 1
|
||||
amount: 0
|
||||
originalObject: {fileID: 1262530654451378, guid: 33cb40cfd0904344d8306765a5600135,
|
||||
type: 3}
|
||||
originalObject: {fileID: 1262530654451378, guid: 33cb40cfd0904344d8306765a5600135, type: 3}
|
||||
dropObject: {fileID: 1530631430177172, guid: 1e6c72f3eacde6c4fa1f5824e22ce56c, type: 3}
|
||||
attributes:
|
||||
- name: 2
|
||||
@@ -1224,8 +1140,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: KeyCard Red
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 23
|
||||
description: Open Red Doors
|
||||
type: 0
|
||||
@@ -1265,8 +1179,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Dual Swords
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 24
|
||||
description: Melee Weapon
|
||||
type: 1
|
||||
@@ -1275,10 +1187,8 @@ MonoBehaviour:
|
||||
createNewItem: 1
|
||||
maxStack: 1
|
||||
amount: 0
|
||||
originalObject: {fileID: 1000012884940116, guid: f0df66e0950da4642afce9f6382ab231,
|
||||
type: 3}
|
||||
dropObject: {fileID: 5960025752436353048, guid: 25e7bf6c702446e47bbc7ce3a6aaaeb5,
|
||||
type: 3}
|
||||
originalObject: {fileID: 1000012884940116, guid: f0df66e0950da4642afce9f6382ab231, type: 3}
|
||||
dropObject: {fileID: 5960025752436353048, guid: 25e7bf6c702446e47bbc7ce3a6aaaeb5, type: 3}
|
||||
attributes:
|
||||
- name: 2
|
||||
value: 10
|
||||
@@ -1324,8 +1234,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Arrows
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 21
|
||||
description: Arrows to use with Bow
|
||||
type: 3
|
||||
@@ -1365,8 +1273,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: vBow
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 20
|
||||
description: Bow and Arrow
|
||||
type: 4
|
||||
@@ -1375,8 +1281,7 @@ MonoBehaviour:
|
||||
createNewItem: 0
|
||||
maxStack: 1
|
||||
amount: 0
|
||||
originalObject: {fileID: 1112735122421166, guid: adec6ca436555694f9b67251716d6768,
|
||||
type: 3}
|
||||
originalObject: {fileID: 1112735122421166, guid: adec6ca436555694f9b67251716d6768, type: 3}
|
||||
dropObject: {fileID: 1000012655258636, guid: cf28841817afdab4c8060f470a322c37, type: 3}
|
||||
attributes:
|
||||
- name: 6
|
||||
@@ -1411,8 +1316,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Buletproof Vest
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft: []
|
||||
price: 0
|
||||
id: 25
|
||||
description: Buletproof Vest
|
||||
type: 6
|
||||
@@ -1452,12 +1355,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Smoke Grenade
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft:
|
||||
- item: {fileID: 0}
|
||||
amount: 3
|
||||
- item: {fileID: 0}
|
||||
amount: 1
|
||||
price: 0
|
||||
id: 28
|
||||
description: Smoke Grenade
|
||||
type: 0
|
||||
@@ -1466,10 +1363,8 @@ MonoBehaviour:
|
||||
createNewItem: 1
|
||||
maxStack: 6
|
||||
amount: 0
|
||||
originalObject: {fileID: 2275447201054405111, guid: e82c600a04131f842b97ae50bebfd25d,
|
||||
type: 3}
|
||||
dropObject: {fileID: 4018256157275831458, guid: 83a0af047816b1e44b48e9b37982ccba,
|
||||
type: 3}
|
||||
originalObject: {fileID: 2275447201054405111, guid: e82c600a04131f842b97ae50bebfd25d, type: 3}
|
||||
dropObject: {fileID: 4018256157275831458, guid: 83a0af047816b1e44b48e9b37982ccba, type: 3}
|
||||
attributes: []
|
||||
isInEquipArea: 0
|
||||
isEquiped: 0
|
||||
@@ -1499,12 +1394,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1adabc1ae49fd3c44a36cc9152ebb0f9, type: 3}
|
||||
m_Name: Stun Grenade
|
||||
m_EditorClassIdentifier:
|
||||
itemsToCraft:
|
||||
- item: {fileID: 0}
|
||||
amount: 3
|
||||
- item: {fileID: 0}
|
||||
amount: 1
|
||||
price: 0
|
||||
id: 29
|
||||
description: Stun Grenade
|
||||
type: 0
|
||||
@@ -1513,10 +1402,8 @@ MonoBehaviour:
|
||||
createNewItem: 1
|
||||
maxStack: 6
|
||||
amount: 0
|
||||
originalObject: {fileID: 2275447201054405111, guid: df29a1ce804661b4d91e53c7c6e7e384,
|
||||
type: 3}
|
||||
dropObject: {fileID: 4018256157275831458, guid: 092023529ae5aa0488c373ee62d54549,
|
||||
type: 3}
|
||||
originalObject: {fileID: 2275447201054405111, guid: df29a1ce804661b4d91e53c7c6e7e384, type: 3}
|
||||
dropObject: {fileID: 4018256157275831458, guid: 092023529ae5aa0488c373ee62d54549, type: 3}
|
||||
attributes: []
|
||||
isInEquipArea: 0
|
||||
isEquiped: 0
|
||||
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -1,16 +1,163 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.AI;
|
||||
using Invector;
|
||||
using Invector.vEventSystems;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class AnimatorAI : MonoBehaviour
|
||||
public class AnimatorAI : MonoBehaviour, vIAnimatorStateInfoController
|
||||
{
|
||||
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||
void Start()
|
||||
protected Animator animator;
|
||||
protected NavMeshAgent agent;
|
||||
protected vHealthController healthController;
|
||||
protected EnemyAI enemyAI;
|
||||
protected KamikazeAI kamikazeAI;
|
||||
|
||||
[Header("Force Settings")]
|
||||
public bool forceGrounded = true;
|
||||
public float movementBoost = 1.2f;
|
||||
public float dampTime = 0.1f;
|
||||
|
||||
public vAnimatorStateInfos animatorStateInfos { get; protected set; }
|
||||
|
||||
#region Animator Parameters
|
||||
protected vAnimatorParameter isDead, isGrounded, isStrafing, isSprinting, isAiming;
|
||||
protected vAnimatorParameter verticalVelocity, horizontalVelocity, inputMagnitude;
|
||||
protected vAnimatorParameter groundDistance, moveSet_ID, attackID, triggerReaction, resetState;
|
||||
#endregion
|
||||
|
||||
protected Vector3 lastPosition;
|
||||
protected float currentV, currentH, currentMagnitude, calculatedSpeed;
|
||||
|
||||
protected virtual void Awake()
|
||||
{
|
||||
|
||||
animator = GetComponentInChildren<Animator>();
|
||||
if (animator == null) animator = GetComponentInParent<Animator>();
|
||||
|
||||
agent = GetComponent<NavMeshAgent>();
|
||||
if (agent == null) agent = GetComponentInParent<NavMeshAgent>();
|
||||
|
||||
healthController = GetComponentInChildren<vHealthController>();
|
||||
enemyAI = GetComponent<EnemyAI>();
|
||||
kamikazeAI = GetComponent<KamikazeAI>();
|
||||
|
||||
if (animator)
|
||||
{
|
||||
animator.applyRootMotion = false;
|
||||
animator.updateMode = AnimatorUpdateMode.Normal;
|
||||
|
||||
// Reset all layers initially to prevent T-Pose
|
||||
for (int i = 1; i < animator.layerCount; i++) animator.SetLayerWeight(i, 0f);
|
||||
|
||||
animatorStateInfos = new vAnimatorStateInfos(animator);
|
||||
InitializeParameters();
|
||||
Debug.Log($"<color=green>[AnimSystem]</color> Đã kích hoạt trên {gameObject.name}");
|
||||
}
|
||||
|
||||
lastPosition = transform.position;
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
protected virtual void OnEnable() { this.Register(); }
|
||||
protected virtual void OnDisable() { this.UnRegister(); }
|
||||
|
||||
protected virtual void InitializeParameters()
|
||||
{
|
||||
|
||||
isDead = ValidateAndInit("isDead");
|
||||
isGrounded = ValidateAndInit("isGrounded");
|
||||
if (!isGrounded.isValid) isGrounded = ValidateAndInit("IsGrounded");
|
||||
isStrafing = ValidateAndInit("IsStrafing");
|
||||
isSprinting = ValidateAndInit("IsSprinting");
|
||||
isAiming = ValidateAndInit("IsAiming");
|
||||
verticalVelocity = ValidateAndInit("InputVertical");
|
||||
horizontalVelocity = ValidateAndInit("InputHorizontal");
|
||||
inputMagnitude = ValidateAndInit("InputMagnitude");
|
||||
groundDistance = ValidateAndInit("GroundDistance");
|
||||
moveSet_ID = ValidateAndInit("MoveSet_ID");
|
||||
attackID = ValidateAndInit("AttackID");
|
||||
triggerReaction = ValidateAndInit("TriggerReaction");
|
||||
resetState = ValidateAndInit("ResetState");
|
||||
}
|
||||
|
||||
private vAnimatorParameter ValidateAndInit(string pName) => new vAnimatorParameter(animator, pName);
|
||||
|
||||
protected virtual void Update()
|
||||
{
|
||||
if (animator == null || agent == null) return;
|
||||
|
||||
UpdateMovementParameters();
|
||||
UpdateCombatParameters();
|
||||
}
|
||||
|
||||
protected virtual void UpdateMovementParameters()
|
||||
{
|
||||
SetBool(isGrounded, forceGrounded);
|
||||
SetFloat(groundDistance, 0f);
|
||||
|
||||
Vector3 delta = transform.position - lastPosition;
|
||||
calculatedSpeed = delta.magnitude / Time.deltaTime;
|
||||
lastPosition = transform.position;
|
||||
|
||||
Vector3 localVel = transform.InverseTransformDirection(delta / Time.deltaTime);
|
||||
|
||||
float maxS = (enemyAI) ? enemyAI.moveSpeed : (kamikazeAI ? agent.speed : 3f);
|
||||
if (maxS <= 0) maxS = 3f;
|
||||
|
||||
float targetV = (localVel.z / maxS) * movementBoost;
|
||||
float targetH = (localVel.x / maxS) * movementBoost;
|
||||
|
||||
currentV = Mathf.Lerp(currentV, targetV, 10f * Time.deltaTime);
|
||||
currentH = Mathf.Lerp(currentH, targetH, 10f * Time.deltaTime);
|
||||
currentMagnitude = new Vector2(currentH, currentV).magnitude;
|
||||
|
||||
// ÉP GIÁ TRỊ VÀO ANIMATOR
|
||||
SetFloat(verticalVelocity, currentV);
|
||||
SetFloat(horizontalVelocity, currentH);
|
||||
SetFloat(inputMagnitude, currentMagnitude);
|
||||
}
|
||||
|
||||
protected virtual void UpdateCombatParameters()
|
||||
{
|
||||
// 1. Kiểm tra trạng thái AI
|
||||
bool isShooting = (enemyAI && enemyAI.IsShootingBurst);
|
||||
bool hasArtifact = (enemyAI && enemyAI.playerHasArtifact);
|
||||
|
||||
// 2. Cập nhật MoveSet và Aiming
|
||||
SetInt(moveSet_ID, hasArtifact ? 1 : 0);
|
||||
SetBool(isAiming, hasArtifact);
|
||||
SetBool(isStrafing, hasArtifact);
|
||||
|
||||
// 3. Xử lý BẮN SÚNG (Layer 6 trong Animator của bạn)
|
||||
if (isShooting)
|
||||
{
|
||||
// Bật Layer bắn súng lên 1 (Smooth)
|
||||
animator.SetLayerWeight(6, Mathf.Lerp(animator.GetLayerWeight(6), 1f, 15f * Time.deltaTime));
|
||||
SetInt(attackID, 1); // Kích hoạt animation bắn trong Blend Tree của Layer 6
|
||||
}
|
||||
else
|
||||
{
|
||||
// Tắt Layer bắn súng về 0
|
||||
animator.SetLayerWeight(6, Mathf.Lerp(animator.GetLayerWeight(6), 0f, 10f * Time.deltaTime));
|
||||
SetInt(attackID, 0);
|
||||
}
|
||||
|
||||
if (enemyAI && enemyAI.IsDodging) SetAnimatorTrigger(triggerReaction);
|
||||
}
|
||||
|
||||
#region Helpers
|
||||
protected void SetBool(vAnimatorParameter p, bool v) { if (p.isValid) animator.SetBool(p, v); }
|
||||
protected void SetFloat(vAnimatorParameter p, float v) { if (p.isValid) animator.SetFloat(p, v, dampTime, Time.deltaTime); }
|
||||
protected void SetInt(vAnimatorParameter p, int v) { if (p.isValid) animator.SetInteger(p, v); }
|
||||
|
||||
public void SetAnimatorTrigger(vAnimatorParameter trigger)
|
||||
{
|
||||
if (trigger.isValid) StartCoroutine(SetTriggerRoutine(trigger));
|
||||
}
|
||||
|
||||
private IEnumerator SetTriggerRoutine(int targetHash)
|
||||
{
|
||||
animator.SetTrigger(targetHash);
|
||||
yield return new WaitForSeconds(0.1f);
|
||||
animator.ResetTrigger(targetHash);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
@@ -1,16 +1,47 @@
|
||||
using Invector;
|
||||
using UnityEngine;
|
||||
|
||||
public class AutoDestroy : MonoBehaviour
|
||||
{
|
||||
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||
public int damageAmount = 30;
|
||||
void Start()
|
||||
{
|
||||
|
||||
Destroy(gameObject,2f);
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
// Debug: Log tên và tag của bất cứ thứ gì đạn chạm vào
|
||||
Debug.Log(
|
||||
$"Laser collided with: {other.name} | Tag: {other.tag} | Layer: {LayerMask.LayerToName(other.gameObject.layer)}");
|
||||
|
||||
// Kiểm tra nếu trúng Player
|
||||
if (other.CompareTag("Player") || other.GetComponentInParent<vIHealthController>() != null)
|
||||
{
|
||||
var healthController = other.GetComponentInParent<vIHealthController>();
|
||||
|
||||
if (healthController != null)
|
||||
{
|
||||
Debug.Log(
|
||||
$"<color=red>HIT PLAYER!</color> Found health controller on {healthController.gameObject.name}. Applying {damageAmount} damage.");
|
||||
var damage = new vDamage(damageAmount);
|
||||
damage.sender = transform;
|
||||
damage.hitPosition = transform.position;
|
||||
healthController.TakeDamage(damage);
|
||||
}
|
||||
|
||||
// Luôn phá hủy đạn khi trúng Player
|
||||
Impact();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void Impact()
|
||||
{
|
||||
|
||||
|
||||
// Phá hủy đạn ngay lập tức
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,13 +14,19 @@ namespace Hallucinate.UI
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
mainCameraTransform = Camera.main.transform;
|
||||
canvasGroup.alpha = 0;
|
||||
gameObject.SetActive(false);
|
||||
if (canvasGroup != null) canvasGroup.alpha = 0;
|
||||
// gameObject.SetActive(false); // Bỏ dòng này để tránh tắt nhầm NPC gốc
|
||||
}
|
||||
|
||||
private void LateUpdate()
|
||||
{
|
||||
// Tìm Camera nếu chưa có (Tránh lỗi Null nếu Camera chưa spawn hoặc bị xóa)
|
||||
if (mainCameraTransform == null)
|
||||
{
|
||||
if (Camera.main != null) mainCameraTransform = Camera.main.transform;
|
||||
else return;
|
||||
}
|
||||
|
||||
// Billboard effect
|
||||
transform.LookAt(transform.position + mainCameraTransform.rotation * Vector3.forward, mainCameraTransform.rotation * Vector3.up);
|
||||
}
|
||||
|
||||
133
Assets/Scripts/AI NPC/ConversationManager.cs
Normal file
133
Assets/Scripts/AI NPC/ConversationManager.cs
Normal file
@@ -0,0 +1,133 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using System;
|
||||
|
||||
namespace Hallucinate.AI
|
||||
{
|
||||
public class ConversationManager : MonoBehaviour
|
||||
{
|
||||
public static ConversationManager Instance { get; private set; }
|
||||
|
||||
[Header("Settings")]
|
||||
public int maxSimultaneousConversations = 3;
|
||||
public float maxConversationDuration = 120f; // 2 minutes
|
||||
|
||||
private List<ConversationSession> activeSessions = new List<ConversationSession>();
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (Instance == null) Instance = this;
|
||||
else Destroy(gameObject);
|
||||
}
|
||||
|
||||
public bool CanStartConversation()
|
||||
{
|
||||
return activeSessions.Count < maxSimultaneousConversations;
|
||||
}
|
||||
|
||||
public void StartConversation(EnemyAI initiator, EnemyAI responder)
|
||||
{
|
||||
if (!CanStartConversation()) return;
|
||||
|
||||
ConversationSession session = new ConversationSession(initiator, responder, maxConversationDuration);
|
||||
activeSessions.Add(session);
|
||||
StartCoroutine(RunConversation(session));
|
||||
}
|
||||
|
||||
private IEnumerator RunConversation(ConversationSession session)
|
||||
{
|
||||
Debug.Log($"<color=cyan>[ConvManager]</color> Starting: {session.initiator.npcName} & {session.responder.npcName}");
|
||||
|
||||
// Phase 1: Initiator speaks
|
||||
bool phase1Complete = false;
|
||||
session.RequestDialogue(session.initiator, (success) => phase1Complete = true);
|
||||
|
||||
float startTime = Time.time;
|
||||
while (!phase1Complete && Time.time < startTime + 10f) yield return null;
|
||||
|
||||
if (phase1Complete && !session.isInterrupted)
|
||||
{
|
||||
yield return new WaitForSeconds(4f); // Reading time
|
||||
|
||||
// Phase 2: Responder speaks
|
||||
bool phase2Complete = false;
|
||||
session.RequestDialogue(session.responder, (success) => phase2Complete = true);
|
||||
|
||||
float phase2StartTime = Time.time;
|
||||
while (!phase2Complete && Time.time < phase2StartTime + 10f) yield return null;
|
||||
}
|
||||
|
||||
yield return new WaitForSeconds(4f);
|
||||
EndConversation(session);
|
||||
}
|
||||
|
||||
public void EndConversation(ConversationSession session)
|
||||
{
|
||||
if (activeSessions.Contains(session))
|
||||
{
|
||||
session.Cleanup();
|
||||
activeSessions.Remove(session);
|
||||
Debug.Log($"<color=cyan>[ConvManager]</color> Ended session. Active: {activeSessions.Count}");
|
||||
}
|
||||
}
|
||||
|
||||
public void InterruptConversation(EnemyAI npc)
|
||||
{
|
||||
ConversationSession session = activeSessions.Find(s => s.initiator == npc || s.responder == npc);
|
||||
if (session != null)
|
||||
{
|
||||
session.isInterrupted = true;
|
||||
EndConversation(session);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ConversationSession
|
||||
{
|
||||
public EnemyAI initiator;
|
||||
public EnemyAI responder;
|
||||
public float durationLimit;
|
||||
public bool isInterrupted;
|
||||
|
||||
public ConversationSession(EnemyAI initiator, EnemyAI responder, float limit)
|
||||
{
|
||||
this.initiator = initiator;
|
||||
this.responder = responder;
|
||||
this.durationLimit = limit;
|
||||
|
||||
initiator.isTalking = true;
|
||||
responder.isTalking = true;
|
||||
|
||||
// Set references for Gizmos and Facing
|
||||
initiator.SetTalkingPartner(responder);
|
||||
responder.SetTalkingPartner(initiator);
|
||||
}
|
||||
|
||||
public void RequestDialogue(EnemyAI speaker, Action<bool> callback)
|
||||
{
|
||||
if (isInterrupted) { callback?.Invoke(false); return; }
|
||||
|
||||
EnemyAI listener = (speaker == initiator) ? responder : initiator;
|
||||
|
||||
// Face each other
|
||||
speaker.FaceTarget(listener.transform.position);
|
||||
listener.FaceTarget(speaker.transform.position);
|
||||
|
||||
string prompt = $"You are {speaker.npcName} talking to {listener.npcName}. Previous context: None. " +
|
||||
"Keep it natural and short.";
|
||||
|
||||
GeminiService.Instance.GetResponse(speaker.persona, prompt, (json) => {
|
||||
if (isInterrupted) { callback?.Invoke(false); return; }
|
||||
speaker.ProcessDialogueResult(json);
|
||||
callback?.Invoke(true);
|
||||
});
|
||||
}
|
||||
|
||||
public void Cleanup()
|
||||
{
|
||||
if (initiator != null) initiator.isTalking = false;
|
||||
if (responder != null) responder.isTalking = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/AI NPC/ConversationManager.cs.meta
Normal file
2
Assets/Scripts/AI NPC/ConversationManager.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ebf63e5e8f429234b89a746833c4ca4e
|
||||
@@ -1,12 +1,28 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AI;
|
||||
using UnityEngine.AI;
|
||||
using System.Linq;
|
||||
using UnityEngine.InputSystem;
|
||||
using Invector;
|
||||
using Invector.vCharacterController;
|
||||
using Random = UnityEngine.Random;
|
||||
|
||||
[Serializable]
|
||||
public class DialogueResult
|
||||
{
|
||||
public string text;
|
||||
public float speedMod;
|
||||
public float suspicionMod;
|
||||
public float aggressionMod; // Ảnh hưởng delay bắn (0.1 -> 1.0)
|
||||
public float braveryMod; // Ảnh hưởng ngưỡng Panic
|
||||
public float healthMod; // Hồi máu hoặc mất máu tâm lý
|
||||
}
|
||||
|
||||
[RequireComponent(typeof(NavMeshAgent))]
|
||||
[RequireComponent(typeof(Rigidbody))]
|
||||
[RequireComponent(typeof(FieldOfView))]
|
||||
[RequireComponent(typeof(vHealthController))]
|
||||
public class EnemyAI : MonoBehaviour
|
||||
{
|
||||
[Header("References")]
|
||||
@@ -14,229 +30,414 @@ public class EnemyAI : MonoBehaviour
|
||||
private NavMeshAgent agent;
|
||||
private Rigidbody rb;
|
||||
private FieldOfView fov;
|
||||
private Collider mainCollider;
|
||||
private vHealthController health;
|
||||
|
||||
[Header("Movement & Rotation")]
|
||||
[Header("Movement Settings")]
|
||||
public float moveSpeed = 3f;
|
||||
public float rotateSpeed = 50f;
|
||||
public float rotateSpeed = 10f;
|
||||
|
||||
[Header("Patrol Waypoints")]
|
||||
public Transform[] patrolPoints;
|
||||
public float patrolWaitTime = 2f;
|
||||
private int currentPatrolIndex = 0;
|
||||
private float currentWaitTime;
|
||||
[Header("Patrol Settings")]
|
||||
public float patrolWaitTime = 2f;
|
||||
private float currentWaitTime = 0f;
|
||||
public float patrolSpeed = 2.5f;
|
||||
public float patrolRadius = 12f;
|
||||
private Vector3 startPosition;
|
||||
|
||||
[Header("Artifact State")]
|
||||
[Header("Combat State")]
|
||||
public bool playerHasArtifact;
|
||||
|
||||
[Header("Laser Weapon")]
|
||||
public bool isAggroedBySound;
|
||||
public GameObject laserPrefab;
|
||||
public Transform firePoint;
|
||||
public float minShootDelay = 1f;
|
||||
public float maxShootDelay = 3f;
|
||||
public float minShootDelay = 1.8f; // Tăng nhẹ delay để đỡ khó
|
||||
public float maxShootDelay = 4.0f;
|
||||
private float nextShootTime;
|
||||
|
||||
[Header("Conversation")]
|
||||
[Header("Dodge Settings")]
|
||||
public float dodgeForce = 8f;
|
||||
public float dodgeDuration = 0.2f;
|
||||
public float dodgeCooldown = 2.0f; // Tăng cooldown né đòn
|
||||
private bool isDodging = false;
|
||||
private float nextDodgeTime = 0f;
|
||||
|
||||
[Header("Advanced AI States")]
|
||||
public bool isPanicking = false;
|
||||
public bool isEnraged = false;
|
||||
public float panicHealthThreshold = 50f; // Chạy ngược lại khi < 50% máu
|
||||
public float regenRate = 1.5f;
|
||||
public float regenDelay = 5f;
|
||||
private float lastDamageTime;
|
||||
|
||||
[Header("Personality (Randomized)")]
|
||||
private float personalApproachWeight;
|
||||
private float personalMinCombatDistance;
|
||||
private float personalBurstMax;
|
||||
private float personalStrafeIntensity;
|
||||
|
||||
[Header("Artifact Combat Upgrades")]
|
||||
public float minStrafeDuration = 0.5f;
|
||||
public float maxStrafeDuration = 2.2f;
|
||||
public float maxSpreadAngle = 7f;
|
||||
public float burstInterval = 0.15f;
|
||||
|
||||
public float approachWeight = 0.35f;
|
||||
public float minCombatDistance = 5.0f;
|
||||
|
||||
private float nextStrafeChangeTime;
|
||||
private int strafeDirectionSign = 1;
|
||||
private bool isShootingBurst = false;
|
||||
|
||||
public bool IsDodging => isDodging;
|
||||
public bool IsShootingBurst => isShootingBurst;
|
||||
|
||||
[Header("Conversation Settings")]
|
||||
public string npcName = "Guard";
|
||||
public string persona = "You are a grumpy guard protecting gold.";
|
||||
public float talkRange = 4f;
|
||||
public float talkCooldown = 30f;
|
||||
[TextArea] public string persona = "You are a bored security guard.";
|
||||
public float talkRange = 12f;
|
||||
public float talkCooldown = 60f;
|
||||
private float lastTalkTime;
|
||||
private bool isTalking;
|
||||
public bool isTalking;
|
||||
private EnemyAI talkingPartner;
|
||||
private Hallucinate.UI.ChatBubble chatBubble;
|
||||
|
||||
[Header("Dodge Settings (Rigidbody)")]
|
||||
public float dodgeForce = 8f;
|
||||
public float dodgeDuration = 0.25f;
|
||||
public float dodgeCooldown = 1.5f;
|
||||
private bool isDodging = false;
|
||||
private float nextDodgeTime;
|
||||
[Header("Suspicion Settings")]
|
||||
public float suspicionLevel = 0f;
|
||||
public float investigationThreshold = 30f;
|
||||
public float alertNeighborsThreshold = 70f;
|
||||
public float alertRange = 30f;
|
||||
|
||||
public Node rootNode;
|
||||
|
||||
// Gốc của Cây hành vi
|
||||
public Node behaviorTreeRoot;
|
||||
|
||||
private void Start()
|
||||
void Start()
|
||||
{
|
||||
agent = GetComponent<NavMeshAgent>();
|
||||
rb = GetComponent<Rigidbody>();
|
||||
fov = GetComponent<FieldOfView>();
|
||||
chatBubble = GetComponentInChildren<Hallucinate.UI.ChatBubble>(true);
|
||||
mainCollider = GetComponent<Collider>();
|
||||
health = GetComponent<vHealthController>();
|
||||
|
||||
agent.speed = moveSpeed;
|
||||
|
||||
// Tự động tìm tất cả điểm PatrolPoint trong Map
|
||||
patrolPoints = GameObject.FindGameObjectsWithTag("PatrolPoint")
|
||||
.Select(go => go.transform).ToArray();
|
||||
// RANDOM TÍNH CÁCH
|
||||
personalApproachWeight = Random.Range(0.2f, 0.7f);
|
||||
personalMinCombatDistance = Random.Range(3f, 8f);
|
||||
personalBurstMax = Random.Range(2, 5);
|
||||
personalStrafeIntensity = Random.Range(0.5f, 1.5f);
|
||||
|
||||
// Cấu hình Rigidbody để không bị đổ ngã khi va chạm vật lý thông thường
|
||||
rb.isKinematic = true;
|
||||
rb.freezeRotation = true;
|
||||
health.onReceiveDamage.AddListener(OnReceiveDamage);
|
||||
health.onDead.AddListener(OnDead);
|
||||
|
||||
FindPlayer();
|
||||
InitBehaviorTree();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (player == null) FindPlayer();
|
||||
|
||||
// Thực thi cây hành vi liên tục mỗi khung hình
|
||||
behaviorTreeRoot?.Evaluate();
|
||||
}
|
||||
|
||||
private void FindPlayer()
|
||||
{
|
||||
GameObject playerObj = GameObject.FindGameObjectWithTag("Player");
|
||||
if (playerObj != null) player = playerObj.transform;
|
||||
}
|
||||
|
||||
private void InitBehaviorTree()
|
||||
{
|
||||
// Ưu tiên số 1: Kiểm tra và thực hiện né đòn
|
||||
var dodgeNode = new TaskNode(CheckAndActionDodge);
|
||||
|
||||
// Ưu tiên số 2: Có cổ vật -> Đứng lại tập trung bắn hạ
|
||||
var laserSequence = new Sequence(new List<Node>
|
||||
if (gameObject.layer == LayerMask.NameToLayer("Default"))
|
||||
{
|
||||
new TaskNode(CheckHasArtifact),
|
||||
new TaskNode(ActionFocusAndShoot)
|
||||
});
|
||||
|
||||
// Ưu tiên số 3: Tương tác tầm nhìn (Đuổi theo hoặc Đi kiểm tra vết tích)
|
||||
var trackingSelector = new Selector(new List<Node>
|
||||
{
|
||||
// Nhìn thấy trực tiếp -> dí theo
|
||||
new Sequence(new List<Node> { new TaskNode(CheckCanSeePlayer), new TaskNode(ActionChasePlayer) }),
|
||||
// Mất dấu -> đi đến vị trí cuối cùng để điều tra
|
||||
new Sequence(new List<Node> { new TaskNode(CheckHasInvestigateTarget), new TaskNode(ActionInvestigate) })
|
||||
});
|
||||
|
||||
// Ưu tiên số 4: Gần NPC khác -> nói chuyện (Mới)
|
||||
var talkSequence = new Sequence(new List<Node>
|
||||
{
|
||||
new TaskNode(CheckCanTalkToNPC),
|
||||
new TaskNode(ActionTalk)
|
||||
});
|
||||
|
||||
// Ưu tiên số 5: Mặc định đi tuần tra vòng quanh Map
|
||||
var patrolNode = new TaskNode(ActionPatrol);
|
||||
|
||||
// Tạo cây tổng hợp theo thứ tự ưu tiên từ trên xuống dưới
|
||||
behaviorTreeRoot = new Selector(new List<Node>
|
||||
{
|
||||
dodgeNode,
|
||||
laserSequence,
|
||||
trackingSelector,
|
||||
talkSequence,
|
||||
patrolNode
|
||||
});
|
||||
}
|
||||
|
||||
#region CONDITIONS & COMPOSITE NODES
|
||||
|
||||
private NodeState CheckAndActionDodge()
|
||||
{
|
||||
if (isDodging) return NodeState.Running;
|
||||
|
||||
// ĐIỀU KIỆN NÉ: Phải nhìn thấy Player VÀ Player nhấn chuột trái VÀ hết cooldown né
|
||||
if (fov.canSeePlayer && Input.GetMouseButtonDown(0) && Time.time >= nextDodgeTime)
|
||||
{
|
||||
StartCoroutine(DodgeRollRoutine());
|
||||
nextDodgeTime = Time.time + dodgeCooldown;
|
||||
return NodeState.Running;
|
||||
int enemyLayer = LayerMask.NameToLayer("Enemy");
|
||||
if (enemyLayer != -1)
|
||||
{
|
||||
gameObject.layer = enemyLayer;
|
||||
Debug.Log($"[AI {npcName}] Đã chuyển sang Layer: Enemy");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"[AI {npcName}] CẢNH BÁO: Không tìm thấy Layer 'Enemy' trong Project! Hãy tạo Layer 'Enemy' để súng có thể bắn trúng.");
|
||||
}
|
||||
}
|
||||
|
||||
rb.isKinematic = true;
|
||||
rb.freezeRotation = true;
|
||||
startPosition = transform.position;
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
GameObject playerObj = GameObject.FindGameObjectWithTag("Player");
|
||||
if (playerObj != null) player = playerObj.transform;
|
||||
}
|
||||
|
||||
InitTree();
|
||||
}
|
||||
|
||||
void InitTree()
|
||||
{
|
||||
var dodgeSequence = new Sequence(new List<Node> { new TaskNode(CheckDodgeConditions), new TaskNode(ActionDodge) });
|
||||
var panicSequence = new Sequence(new List<Node> { new TaskNode(CheckPanicConditions), new TaskNode(ActionRetreat) }); // Thay Panic bằng Retreat
|
||||
var laserSequence = new Sequence(new List<Node> { new TaskNode(CheckCombatConditions), new TaskNode(ActionFocusAndShoot) });
|
||||
var chaseSequence = new Sequence(new List<Node> { new TaskNode(CheckCanSeePlayer), new TaskNode(ActionChasePlayer) });
|
||||
var investigateSequence = new Sequence(new List<Node> { new TaskNode(CheckHasInvestigateTarget), new TaskNode(ActionInvestigate) });
|
||||
var talkSequence = new Sequence(new List<Node> { new TaskNode(CheckCanTalkToNPC), new TaskNode(ActionTalk) });
|
||||
var patrolAction = new TaskNode(ActionPatrol);
|
||||
|
||||
rootNode = new Selector(new List<Node>
|
||||
{
|
||||
dodgeSequence,
|
||||
panicSequence,
|
||||
laserSequence,
|
||||
chaseSequence,
|
||||
investigateSequence,
|
||||
talkSequence,
|
||||
patrolAction
|
||||
});
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (player == null || health.isDead) return;
|
||||
|
||||
if (mainCollider != null && !mainCollider.enabled) mainCollider.enabled = true;
|
||||
|
||||
HandleHealthRegen();
|
||||
|
||||
suspicionLevel = Mathf.Max(0, suspicionLevel - Time.deltaTime * 0.5f);
|
||||
if (suspicionLevel <= 0f && !isEnraged) isAggroedBySound = false;
|
||||
|
||||
if (!isTalking && !isDodging && !isPanicking && agent.isStopped)
|
||||
agent.isStopped = false;
|
||||
|
||||
rootNode?.Evaluate();
|
||||
}
|
||||
|
||||
private void HandleHealthRegen()
|
||||
{
|
||||
if (Time.time > lastDamageTime + regenDelay && health.currentHealth < health.maxHealth)
|
||||
{
|
||||
float currentRegenSpeed = regenRate;
|
||||
float healthPercent = (float)health.currentHealth / health.maxHealth;
|
||||
|
||||
// Tăng tốc hồi máu khi máu cực thấp (< 25%)
|
||||
if (healthPercent < 0.25f)
|
||||
currentRegenSpeed *= 4f;
|
||||
else if (healthPercent < 0.5f)
|
||||
currentRegenSpeed *= 2f;
|
||||
|
||||
health.AddHealth((int)(currentRegenSpeed * Time.deltaTime));
|
||||
}
|
||||
}
|
||||
|
||||
#region HEALTH EVENTS
|
||||
|
||||
private void OnReceiveDamage(vDamage damage)
|
||||
{
|
||||
lastDamageTime = Time.time;
|
||||
isAggroedBySound = true;
|
||||
suspicionLevel = 100f;
|
||||
StopConversation();
|
||||
|
||||
// PHẢN ỨNG TỨC THÌ: Alert toàn bộ lân cận
|
||||
AlertNeighbors(damage.hitPosition);
|
||||
|
||||
// PHẢN ỨNG TỨC THÌ: Reset delay bắn để phản công nhanh hoặc né
|
||||
nextShootTime = Time.time + 0.5f;
|
||||
|
||||
// Né đòn Elden Ring (Tăng tỉ lệ né khi trúng dame)
|
||||
if (Time.time > nextDodgeTime && !isDodging && Random.value < 0.7f)
|
||||
{
|
||||
StartCoroutine(DodgeRollRoutine());
|
||||
}
|
||||
|
||||
// Tự động Enrage nếu bị dồn vào đường cùng (nhưng đồng thời vẫn có thể bỏ chạy nếu không phẫn nộ)
|
||||
if (health.currentHealth < health.maxHealth * 0.2f && !isEnraged)
|
||||
{
|
||||
EnterEnrageMode();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDead(GameObject killer)
|
||||
{
|
||||
Debug.Log($"<color=black>[AI {npcName}] DIED.</color>");
|
||||
|
||||
// 1. Vô hiệu hóa va chạm và di chuyển ngay lập tức
|
||||
if (mainCollider != null) mainCollider.enabled = false;
|
||||
agent.enabled = false;
|
||||
|
||||
// 2. Kích hoạt Enrage cho đồng đội xung quanh
|
||||
Collider[] hitColliders = Physics.OverlapSphere(transform.position, alertRange);
|
||||
foreach (var hit in hitColliders)
|
||||
{
|
||||
EnemyAI ally = hit.GetComponentInParent<EnemyAI>();
|
||||
if (ally != null && ally != this) ally.EnterEnrageMode();
|
||||
}
|
||||
|
||||
// 3. Tự hủy sau 3 giây (để kịp chạy animation chết hoặc hiệu ứng)
|
||||
Destroy(gameObject, 3f);
|
||||
|
||||
this.enabled = false;
|
||||
}
|
||||
|
||||
public void EnterEnrageMode()
|
||||
{
|
||||
if (isEnraged) return;
|
||||
isEnraged = true;
|
||||
isPanicking = false;
|
||||
|
||||
moveSpeed *= 1.3f; // Giảm nhẹ buff speed
|
||||
minShootDelay *= 0.6f;
|
||||
maxShootDelay *= 0.6f;
|
||||
|
||||
if (chatBubble != null) chatBubble.Show("I'LL TAKE YOU DOWN WITH ME!", 2f);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region CONDITIONS
|
||||
|
||||
private NodeState CheckDodgeConditions()
|
||||
{
|
||||
if (isDodging) return NodeState.Success;
|
||||
// Tự né khi thấy Player đang bắn
|
||||
if (fov != null && fov.canSeePlayer && Mouse.current.leftButton.isPressed && Time.time > nextDodgeTime)
|
||||
return NodeState.Success;
|
||||
return NodeState.Failure;
|
||||
}
|
||||
|
||||
private NodeState CheckPanicConditions()
|
||||
{
|
||||
if (isEnraged) return NodeState.Failure; // Đang điên thì không sợ, chiến đến chết
|
||||
|
||||
// Nếu máu dưới ngưỡng thiết lập (ví dụ 50%), kích hoạt trạng thái tháo chạy
|
||||
if (health.currentHealth < (health.maxHealth * (panicHealthThreshold / 100f)))
|
||||
{
|
||||
return NodeState.Success;
|
||||
}
|
||||
|
||||
isPanicking = false;
|
||||
return NodeState.Failure;
|
||||
}
|
||||
|
||||
private NodeState CheckCombatConditions()
|
||||
{
|
||||
bool shouldCombat = playerHasArtifact || isAggroedBySound || isEnraged;
|
||||
if (shouldCombat) StopConversation();
|
||||
return shouldCombat ? NodeState.Success : NodeState.Failure;
|
||||
}
|
||||
|
||||
private NodeState CheckCanSeePlayer()
|
||||
{
|
||||
bool canSee = fov != null && fov.canSeePlayer;
|
||||
if (canSee) { StopConversation(); AlertNeighbors(transform.position); suspicionLevel = 100; }
|
||||
return canSee ? NodeState.Success : NodeState.Failure;
|
||||
}
|
||||
|
||||
private NodeState CheckHasInvestigateTarget()
|
||||
{
|
||||
if (fov != null && fov.lastKnownPlayerPosition != Vector3.zero && suspicionLevel > investigationThreshold)
|
||||
return NodeState.Success;
|
||||
return NodeState.Failure;
|
||||
}
|
||||
|
||||
private NodeState CheckCanTalkToNPC()
|
||||
{
|
||||
if (playerHasArtifact || fov.canSeePlayer) return NodeState.Failure;
|
||||
if (Time.time < lastTalkTime + talkCooldown) return NodeState.Failure;
|
||||
if (isTalking) return NodeState.Success;
|
||||
if (playerHasArtifact || isAggroedBySound || isEnraged || (fov != null && fov.canSeePlayer)) return NodeState.Failure;
|
||||
if (Time.time < lastTalkTime + talkCooldown || isTalking) return NodeState.Failure;
|
||||
if (Hallucinate.AI.ConversationManager.Instance == null || !Hallucinate.AI.ConversationManager.Instance.CanStartConversation()) return NodeState.Failure;
|
||||
|
||||
// Tìm NPC gần nhất
|
||||
Collider[] hitColliders = Physics.OverlapSphere(transform.position, talkRange);
|
||||
foreach (var hit in hitColliders)
|
||||
{
|
||||
if (hit.gameObject != gameObject && hit.CompareTag("Enemy"))
|
||||
if (hit.gameObject == gameObject) continue;
|
||||
EnemyAI other = hit.GetComponentInParent<EnemyAI>();
|
||||
if (other != null && !other.isTalking && !other.isEnraged)
|
||||
{
|
||||
EnemyAI other = hit.GetComponent<EnemyAI>();
|
||||
if (other != null && !other.isTalking && Time.time >= other.lastTalkTime + talkCooldown)
|
||||
if (gameObject.GetInstanceID() < other.gameObject.GetInstanceID())
|
||||
{
|
||||
talkingPartner = other;
|
||||
Hallucinate.AI.ConversationManager.Instance.StartConversation(this, other);
|
||||
return NodeState.Success;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NodeState.Failure;
|
||||
}
|
||||
|
||||
private NodeState CheckHasArtifact()
|
||||
{
|
||||
if (playerHasArtifact) StopConversation();
|
||||
return playerHasArtifact ? NodeState.Success : NodeState.Failure;
|
||||
}
|
||||
|
||||
private NodeState CheckCanSeePlayer()
|
||||
{
|
||||
if (fov.canSeePlayer) StopConversation();
|
||||
return fov.canSeePlayer ? NodeState.Success : NodeState.Failure;
|
||||
}
|
||||
|
||||
private NodeState CheckHasInvestigateTarget()
|
||||
{
|
||||
return fov.lastKnownPlayerPosition != Vector3.zero ? NodeState.Success : NodeState.Failure;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ACTIONS
|
||||
|
||||
// Coroutine xử lý né bằng lực đẩy Rigidbody một cách thực tế
|
||||
private IEnumerator DodgeRollRoutine()
|
||||
public void HearNoise(Vector3 location, float volume)
|
||||
{
|
||||
isDodging = true;
|
||||
agent.enabled = false; // Tắt định vị NavMesh để nhường quyền cho Vật lý
|
||||
rb.isKinematic = false; // Bật chế độ vật lý động để nhận lực lực đẩy
|
||||
suspicionLevel += volume * 20f;
|
||||
if (fov != null) fov.lastKnownPlayerPosition = location;
|
||||
if (suspicionLevel >= investigationThreshold) isAggroedBySound = true;
|
||||
if (suspicionLevel >= alertNeighborsThreshold) AlertNeighbors(location);
|
||||
StopConversation();
|
||||
}
|
||||
|
||||
// Tính toán hướng né: Vuông góc với hướng nhìn của Player (Tránh sang trái hoặc phải)
|
||||
Vector3 directionToPlayer = (player.position - transform.position).normalized;
|
||||
Vector3 perpendicularDir = new Vector3(-directionToPlayer.z, 0, directionToPlayer.x);
|
||||
public void AlertNeighbors(Vector3 threatPos)
|
||||
{
|
||||
Collider[] hitColliders = Physics.OverlapSphere(transform.position, alertRange);
|
||||
foreach (var hit in hitColliders)
|
||||
{
|
||||
EnemyAI neighbor = hit.GetComponentInParent<EnemyAI>();
|
||||
if (neighbor != null && neighbor != this)
|
||||
{
|
||||
neighbor.TriggerCombatAlert(threatPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void TriggerCombatAlert(Vector3 sourceLocation)
|
||||
{
|
||||
if (isEnraged) return;
|
||||
suspicionLevel = 100f;
|
||||
isAggroedBySound = true;
|
||||
if (fov != null) fov.lastKnownPlayerPosition = sourceLocation;
|
||||
StopConversation();
|
||||
}
|
||||
|
||||
// Hành động tháo chạy khi máu thấp
|
||||
private NodeState ActionRetreat()
|
||||
{
|
||||
isPanicking = true;
|
||||
agent.isStopped = false;
|
||||
agent.speed = moveSpeed * 1.3f; // Chạy nhanh hơn bình thường để thoát thân
|
||||
|
||||
// Chọn ngẫu nhiên trái hoặc phải
|
||||
Vector3 dodgeDirection = (Random.Range(0, 2) == 0 ? perpendicularDir : -perpendicularDir).normalized;
|
||||
// Tính toán hướng ngược lại với Player
|
||||
Vector3 retreatDir = (transform.position - player.position).normalized;
|
||||
Vector3 targetPos = transform.position + retreatDir * 15f + Random.insideUnitSphere * 5f;
|
||||
|
||||
if (!agent.pathPending && agent.remainingDistance < 1f)
|
||||
{
|
||||
NavMeshHit hit;
|
||||
if (NavMesh.SamplePosition(targetPos, out hit, 10f, 1))
|
||||
{
|
||||
agent.SetDestination(hit.position);
|
||||
}
|
||||
}
|
||||
|
||||
// Tác dụng lực đẩy Impulse tức thì
|
||||
rb.AddForce(dodgeDirection * dodgeForce, ForceMode.Impulse);
|
||||
if (chatBubble != null && Random.value < 0.005f) chatBubble.Show("I NEED TO RECOVER!", 1.5f);
|
||||
|
||||
yield return new WaitForSeconds(dodgeDuration);
|
||||
// Khi máu đã hồi phục trên 50%, dừng chạy và quay lại tấn công
|
||||
if (health.currentHealth >= health.maxHealth * 0.5f)
|
||||
{
|
||||
isPanicking = false;
|
||||
return NodeState.Success;
|
||||
}
|
||||
|
||||
// Kết thúc né: Trả lại quyền điều khiển cho NavMeshAgent
|
||||
rb.linearVelocity = Vector3.zero; // Cú pháp chuẩn của Unity 6 (thay cho rb.velocity)
|
||||
rb.isKinematic = true;
|
||||
agent.enabled = true;
|
||||
isDodging = false;
|
||||
return NodeState.Running;
|
||||
}
|
||||
|
||||
private NodeState ActionTalk()
|
||||
{
|
||||
if (isTalking) { agent.isStopped = true; return NodeState.Running; }
|
||||
return NodeState.Failure;
|
||||
}
|
||||
|
||||
private void StopConversation()
|
||||
{
|
||||
if (isTalking && Hallucinate.AI.ConversationManager.Instance != null)
|
||||
{
|
||||
Hallucinate.AI.ConversationManager.Instance.InterruptConversation(this);
|
||||
}
|
||||
}
|
||||
|
||||
private NodeState ActionPatrol()
|
||||
{
|
||||
if (patrolPoints.Length == 0) return NodeState.Failure;
|
||||
|
||||
Debug.Log("Patrolling...");
|
||||
isPanicking = false;
|
||||
agent.isStopped = false;
|
||||
agent.speed = moveSpeed * 0.6f; // Đi tuần tra chậm rãi quay theo hướng đi tự động của NavMesh
|
||||
|
||||
agent.SetDestination(patrolPoints[currentPatrolIndex].position);
|
||||
|
||||
agent.speed = patrolSpeed;
|
||||
if (!agent.pathPending && agent.remainingDistance <= agent.stoppingDistance)
|
||||
{
|
||||
currentWaitTime += Time.deltaTime;
|
||||
if (currentWaitTime >= patrolWaitTime)
|
||||
{
|
||||
currentPatrolIndex = (currentPatrolIndex + 1) % patrolPoints.Length;
|
||||
currentWaitTime = 0f;
|
||||
Vector3 randomDest = startPosition + Random.insideUnitSphere * patrolRadius;
|
||||
NavMeshHit hit;
|
||||
if (NavMesh.SamplePosition(randomDest, out hit, patrolRadius, 1)) agent.SetDestination(hit.position);
|
||||
currentWaitTime = 0f;
|
||||
}
|
||||
}
|
||||
return NodeState.Running;
|
||||
@@ -244,131 +445,159 @@ public class EnemyAI : MonoBehaviour
|
||||
|
||||
private NodeState ActionChasePlayer()
|
||||
{
|
||||
Debug.Log("Chasing Player!");
|
||||
isPanicking = false;
|
||||
agent.isStopped = false;
|
||||
agent.speed = moveSpeed; // Chạy nhanh hết tốc lực
|
||||
agent.speed = moveSpeed;
|
||||
agent.SetDestination(player.position);
|
||||
|
||||
return NodeState.Running;
|
||||
}
|
||||
|
||||
private NodeState ActionInvestigate()
|
||||
{
|
||||
Debug.Log("Investigating Last Position...");
|
||||
agent.isStopped = false;
|
||||
agent.speed = moveSpeed * 0.8f;
|
||||
agent.speed = moveSpeed * 0.7f;
|
||||
agent.SetDestination(fov.lastKnownPlayerPosition);
|
||||
|
||||
if (!agent.pathPending && agent.remainingDistance <= agent.stoppingDistance)
|
||||
if (Vector3.Distance(transform.position, fov.lastKnownPlayerPosition) < 1.5f)
|
||||
{
|
||||
// Đến nơi rồi mà không thấy ai, xóa vị trí cuối cùng để quay lại tuần tra
|
||||
fov.lastKnownPlayerPosition = Vector3.zero;
|
||||
return NodeState.Success;
|
||||
currentWaitTime += Time.deltaTime;
|
||||
if (currentWaitTime > 3f) { fov.lastKnownPlayerPosition = Vector3.zero; return NodeState.Success; }
|
||||
}
|
||||
return NodeState.Running;
|
||||
}
|
||||
|
||||
private NodeState ActionFocusAndShoot()
|
||||
{
|
||||
Debug.Log("Focus and Shoot!");
|
||||
agent.isStopped = true; // Dừng di chuyển để đứng ngắm bắn cố định
|
||||
isPanicking = false;
|
||||
if (player == null) return NodeState.Failure;
|
||||
if (agent.hasPath) agent.ResetPath();
|
||||
agent.isStopped = false;
|
||||
|
||||
// Tự xoay người hướng thẳng về phía Player
|
||||
Vector3 dir = player.position - transform.position;
|
||||
dir.y = 0f;
|
||||
if (dir != Vector3.zero)
|
||||
Vector3 targetPos = player.position;
|
||||
if (!playerHasArtifact && fov != null && !fov.canSeePlayer && fov.lastKnownPlayerPosition != Vector3.zero)
|
||||
targetPos = fov.lastKnownPlayerPosition;
|
||||
|
||||
Vector3 bodyDir = (targetPos - transform.position);
|
||||
bodyDir.y = 0f;
|
||||
if (bodyDir != Vector3.zero)
|
||||
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(bodyDir), rotateSpeed * Time.deltaTime);
|
||||
|
||||
if (Time.time >= nextStrafeChangeTime)
|
||||
{
|
||||
Quaternion targetRotation = Quaternion.LookRotation(dir);
|
||||
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotateSpeed * Time.deltaTime);
|
||||
strafeDirectionSign = new int[] { -1, 1, 0 }[Random.Range(0, 3)];
|
||||
nextStrafeChangeTime = Time.time + Random.Range(minStrafeDuration, maxStrafeDuration);
|
||||
}
|
||||
|
||||
// Đếm ngược thời gian bắn ngẫu nhiên
|
||||
if (Time.time >= nextShootTime)
|
||||
Vector3 moveDir = Vector3.zero;
|
||||
if (strafeDirectionSign != 0 && bodyDir != Vector3.zero)
|
||||
{
|
||||
ShootLaser();
|
||||
Vector3 normal = bodyDir.normalized;
|
||||
moveDir = new Vector3(-normal.z, 0, normal.x) * strafeDirectionSign * personalStrafeIntensity;
|
||||
|
||||
float dist = Vector3.Distance(transform.position, targetPos);
|
||||
if (dist > personalMinCombatDistance) moveDir += normal * personalApproachWeight;
|
||||
}
|
||||
|
||||
if (moveDir != Vector3.zero)
|
||||
{
|
||||
agent.speed = moveSpeed * (isEnraged ? 1f : 0.75f);
|
||||
agent.Move(moveDir.normalized * agent.speed * Time.deltaTime);
|
||||
}
|
||||
|
||||
if (firePoint != null)
|
||||
firePoint.rotation = Quaternion.LookRotation((targetPos + Vector3.up * 1f) - firePoint.position);
|
||||
|
||||
if (Time.time >= nextShootTime && !isShootingBurst)
|
||||
{
|
||||
int burstCount = Random.Range(1, (int)personalBurstMax + (isEnraged ? 2 : 0));
|
||||
StartCoroutine(ShootBurstRoutine(burstCount));
|
||||
nextShootTime = Time.time + Random.Range(minShootDelay, maxShootDelay);
|
||||
}
|
||||
|
||||
return NodeState.Running;
|
||||
}
|
||||
|
||||
private void ShootLaser()
|
||||
private IEnumerator ShootBurstRoutine(int bulletCount)
|
||||
{
|
||||
if (laserPrefab == null || firePoint == null) return;
|
||||
Instantiate(laserPrefab, firePoint.position, firePoint.rotation);
|
||||
isShootingBurst = true;
|
||||
for (int i = 0; i < bulletCount; i++)
|
||||
{
|
||||
if (laserPrefab == null || firePoint == null) break;
|
||||
float spread = isEnraged ? maxSpreadAngle * 0.5f : maxSpreadAngle;
|
||||
Quaternion rot = firePoint.rotation * Quaternion.Euler(Random.Range(-spread, spread), Random.Range(-spread, spread), 0f);
|
||||
Instantiate(laserPrefab, firePoint.position, rot);
|
||||
yield return new WaitForSeconds(isEnraged ? burstInterval * 0.7f : burstInterval);
|
||||
}
|
||||
isShootingBurst = false;
|
||||
}
|
||||
|
||||
private NodeState ActionTalk()
|
||||
private NodeState ActionDodge()
|
||||
{
|
||||
if (talkingPartner == null) return NodeState.Failure;
|
||||
|
||||
if (!isTalking)
|
||||
{
|
||||
isTalking = true;
|
||||
agent.isStopped = true;
|
||||
|
||||
// Xoay về phía bạn
|
||||
FaceTarget(talkingPartner.transform.position);
|
||||
|
||||
// Bắt đầu hội thoại qua Gemini
|
||||
StartNPCConversation();
|
||||
}
|
||||
|
||||
if (!isDodging) StartCoroutine(DodgeRollRoutine());
|
||||
return NodeState.Running;
|
||||
}
|
||||
|
||||
private void StartNPCConversation()
|
||||
private IEnumerator DodgeRollRoutine()
|
||||
{
|
||||
string prompt = $"You are {npcName}. You are talking to your fellow guard {talkingPartner.npcName}. " +
|
||||
"Keep it short (1 sentence). Topic: gold security or complaining about work.";
|
||||
isDodging = true;
|
||||
agent.enabled = false;
|
||||
rb.isKinematic = false;
|
||||
if (mainCollider != null) mainCollider.enabled = true;
|
||||
|
||||
Hallucinate.AI.GeminiService.Instance.GetResponse(persona, prompt, (response) => {
|
||||
if (chatBubble != null) chatBubble.Show(response);
|
||||
|
||||
// Hẹn giờ kết thúc hội thoại
|
||||
Invoke(nameof(EndConversation), 5f);
|
||||
});
|
||||
Vector3 dir = (player.position - transform.position).normalized;
|
||||
Vector3 perp = new Vector3(-dir.z, 0, dir.x) * (Random.value > 0.5f ? 1 : -1);
|
||||
rb.AddForce(perp * (isEnraged ? dodgeForce * 1.3f : dodgeForce), ForceMode.Impulse);
|
||||
|
||||
// Thông báo cho bạn diễn cũng dừng lại để "nghe"
|
||||
talkingPartner.OnPartnerTalked(this);
|
||||
yield return new WaitForSeconds(dodgeDuration);
|
||||
rb.linearVelocity = Vector3.zero;
|
||||
rb.isKinematic = true;
|
||||
agent.enabled = true;
|
||||
nextDodgeTime = Time.time + (isEnraged ? dodgeCooldown * 0.6f : dodgeCooldown);
|
||||
isDodging = false;
|
||||
}
|
||||
|
||||
public void OnPartnerTalked(EnemyAI partner)
|
||||
public void ProcessDialogueResult(string json)
|
||||
{
|
||||
isTalking = true;
|
||||
talkingPartner = partner;
|
||||
agent.isStopped = true;
|
||||
FaceTarget(partner.transform.position);
|
||||
|
||||
// Chờ bạn nói xong mới phản hồi
|
||||
Invoke(nameof(EndConversation), 6f);
|
||||
}
|
||||
|
||||
private void EndConversation()
|
||||
{
|
||||
isTalking = false;
|
||||
lastTalkTime = Time.time;
|
||||
if (agent != null) agent.isStopped = false;
|
||||
talkingPartner = null;
|
||||
}
|
||||
|
||||
private void StopConversation()
|
||||
{
|
||||
if (!isTalking) return;
|
||||
CancelInvoke(nameof(EndConversation));
|
||||
EndConversation();
|
||||
if (chatBubble != null) chatBubble.Show("Suỵt! Có gì đó không ổn...", 2f);
|
||||
}
|
||||
|
||||
private void FaceTarget(Vector3 targetPos)
|
||||
{
|
||||
Vector3 dir = targetPos - transform.position;
|
||||
dir.y = 0;
|
||||
if (dir != Vector3.zero)
|
||||
try
|
||||
{
|
||||
transform.rotation = Quaternion.LookRotation(dir);
|
||||
DialogueResult result = JsonUtility.FromJson<DialogueResult>(json);
|
||||
if (chatBubble != null) chatBubble.Show(result.text);
|
||||
|
||||
// Áp dụng modifiers từ Gemini
|
||||
moveSpeed = Mathf.Clamp(moveSpeed + result.speedMod, 1f, 8f);
|
||||
suspicionLevel = Mathf.Clamp(suspicionLevel + result.suspicionMod, 0, 100);
|
||||
|
||||
// Modifier hung hãn: giảm delay bắn (max 50%)
|
||||
minShootDelay = Mathf.Clamp(minShootDelay * (1f - result.aggressionMod), 0.5f, 5f);
|
||||
maxShootDelay = Mathf.Clamp(maxShootDelay * (1f - result.aggressionMod), 1f, 10f);
|
||||
|
||||
// Modifier can đảm: thay đổi ngưỡng panic
|
||||
panicHealthThreshold = Mathf.Clamp(panicHealthThreshold - result.braveryMod, 0, 80);
|
||||
|
||||
// Modifier máu
|
||||
if (result.healthMod != 0)
|
||||
{
|
||||
health.AddHealth((int)result.healthMod);
|
||||
}
|
||||
|
||||
lastTalkTime = Time.time;
|
||||
Debug.Log($"[AI {npcName}] Gemini influence: Speed:{result.speedMod}, Aggro:{result.aggressionMod}, Bravery:{result.braveryMod}");
|
||||
}
|
||||
catch { if (chatBubble != null) chatBubble.Show(json); }
|
||||
}
|
||||
|
||||
public void SetTalkingPartner(EnemyAI partner) { talkingPartner = partner; }
|
||||
public void FaceTarget(Vector3 pos)
|
||||
{
|
||||
Vector3 dir = (pos - transform.position);
|
||||
dir.y = 0;
|
||||
if (dir != Vector3.zero) transform.rotation = Quaternion.LookRotation(dir);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
private void OnDrawGizmos()
|
||||
{
|
||||
Gizmos.color = isEnraged ? Color.red : Color.green;
|
||||
Gizmos.DrawWireSphere(transform.position, alertRange);
|
||||
}
|
||||
}
|
||||
@@ -21,9 +21,21 @@ namespace Hallucinate.AI
|
||||
public class GeminiService : MonoBehaviour
|
||||
{
|
||||
public static GeminiService Instance { get; private set; }
|
||||
private int activeRequests = 0;
|
||||
private const int MAX_CONCURRENT_REQUESTS = 5;
|
||||
|
||||
[SerializeField] private string apiKey = "AQ.Ab8RN6I2hU_p8yHiPNNHtWzYBiLugbPP22gC6lzTWaYEWj4v0g"; // Replace with your key
|
||||
[SerializeField] private string geminiURL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-flash-latest:generateContent";
|
||||
[SerializeField] private string[] apiKeys = { "YOUR_KEY_1", "YOUR_KEY_2" };
|
||||
private int currentKeyIndex = 0;
|
||||
|
||||
[SerializeField] private string geminiURL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent";
|
||||
private float nextRequestTime = 0f;
|
||||
|
||||
private string[] fallbackDialogues = {
|
||||
"{ \"text\": \"Nice weather, isn't it?\", \"speedMod\": 0.0, \"suspicionMod\": -5.0, \"aggressionMod\": 0.0, \"braveryMod\": 0.0, \"healthMod\": 0.0 }",
|
||||
"{ \"text\": \"Did you hear something? Probably just a rat.\", \"speedMod\": 0.0, \"suspicionMod\": 2.0, \"aggressionMod\": 0.1, \"braveryMod\": -5.0, \"healthMod\": 0.0 }",
|
||||
"{ \"text\": \"I'm so tired of this shift.\", \"speedMod\": -0.2, \"suspicionMod\": 0.0, \"aggressionMod\": -0.1, \"braveryMod\": 5.0, \"healthMod\": 0.0 }",
|
||||
"{ \"text\": \"You looks strong, I should be careful.\", \"speedMod\": 0.1, \"suspicionMod\": 5.0, \"aggressionMod\": -0.2, \"braveryMod\": 10.0, \"healthMod\": 0.0 }"
|
||||
};
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
@@ -31,19 +43,58 @@ namespace Hallucinate.AI
|
||||
else { Destroy(gameObject); }
|
||||
}
|
||||
|
||||
private string GetNextKey()
|
||||
{
|
||||
if (apiKeys == null || apiKeys.Length == 0) return "";
|
||||
string key = apiKeys[currentKeyIndex];
|
||||
currentKeyIndex = (currentKeyIndex + 1) % apiKeys.Length;
|
||||
return key;
|
||||
}
|
||||
|
||||
public void GetResponse(string persona, string prompt, Action<string> onComplete)
|
||||
{
|
||||
if (Time.time < nextRequestTime)
|
||||
{
|
||||
Debug.LogWarning("[Gemini] API is cooling down. Using fallback.");
|
||||
onComplete?.Invoke(fallbackDialogues[UnityEngine.Random.Range(0, fallbackDialogues.Length)]);
|
||||
return;
|
||||
}
|
||||
|
||||
if (activeRequests >= MAX_CONCURRENT_REQUESTS)
|
||||
{
|
||||
onComplete?.Invoke(fallbackDialogues[UnityEngine.Random.Range(0, fallbackDialogues.Length)]);
|
||||
return;
|
||||
}
|
||||
StartCoroutine(PostRequest(persona, prompt, onComplete));
|
||||
}
|
||||
|
||||
private IEnumerator PostRequest(string persona, string prompt, Action<string> onComplete)
|
||||
{
|
||||
activeRequests++;
|
||||
|
||||
string jsonInstruction = " Respond ONLY with a JSON object: { " +
|
||||
"'text': 'dialogue content', " +
|
||||
"'speedMod': 0.0 (change movement speed), " +
|
||||
"'suspicionMod': 0.0 (change suspicion level), " +
|
||||
"'aggressionMod': 0.0 (0.1 to 0.5 makes NPC shoot faster, negative makes them slower), " +
|
||||
"'braveryMod': 0.0 (positive makes them less likely to panic, negative makes them scared), " +
|
||||
"'healthMod': 0.0 (positive heals NPC, negative damages them) " +
|
||||
"}. Keep values realistic.";
|
||||
|
||||
string escapedPersona = persona.Replace("\"", "\\\"");
|
||||
string escapedPrompt = prompt.Replace("\"", "\\\"");
|
||||
|
||||
var jsonBody = $@"{{
|
||||
""systemInstruction"": {{""parts"": [{{ ""text"": ""{persona}"" }}]}},
|
||||
""contents"": [{{""parts"": [{{ ""text"": ""{prompt}"" }}]}}]
|
||||
""systemInstruction"": {{""parts"": [{{ ""text"": ""{escapedPersona} {jsonInstruction}"" }}]}},
|
||||
""contents"": [{{""parts"": [{{ ""text"": ""{escapedPrompt}"" }}]}}],
|
||||
""generationConfig"": {{
|
||||
""maxOutputTokens"": 150,
|
||||
""temperature"": 0.8,
|
||||
""responseMimeType"": ""application/json""
|
||||
}}
|
||||
}}";
|
||||
|
||||
var requestURL = $"{geminiURL}?key={apiKey}";
|
||||
var requestURL = $"{geminiURL}?key={GetNextKey()}";
|
||||
|
||||
using (var request = new UnityWebRequest(requestURL, "POST"))
|
||||
{
|
||||
@@ -56,21 +107,24 @@ namespace Hallucinate.AI
|
||||
|
||||
if (request.result == UnityWebRequest.Result.Success)
|
||||
{
|
||||
try
|
||||
var response = JsonUtility.FromJson<GeminiResponse>(request.downloadHandler.text);
|
||||
if (response?.candidates?.Length > 0 && response.candidates[0].content?.parts?.Length > 0)
|
||||
{
|
||||
var response = JsonUtility.FromJson<GeminiResponse>(request.downloadHandler.text);
|
||||
if (response?.candidates != null && response.candidates.Length > 0)
|
||||
{
|
||||
onComplete?.Invoke(response.candidates[0].content.parts[0].text);
|
||||
}
|
||||
onComplete?.Invoke(response.candidates[0].content.parts[0].text);
|
||||
}
|
||||
catch (Exception e) { Debug.LogError($"[Gemini] JSON Parse Error: {e.Message}"); }
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError($"[Gemini] API Error: {request.error}");
|
||||
if (request.responseCode == 429)
|
||||
{
|
||||
nextRequestTime = Time.time + 60f;
|
||||
}
|
||||
onComplete?.Invoke(fallbackDialogues[UnityEngine.Random.Range(0, fallbackDialogues.Length)]);
|
||||
}
|
||||
}
|
||||
|
||||
activeRequests--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
28
Assets/Scripts/AI NPC/GeminiTest.cs
Normal file
28
Assets/Scripts/AI NPC/GeminiTest.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
using UnityEngine;
|
||||
using Hallucinate.AI;
|
||||
|
||||
public class GeminiTest : MonoBehaviour
|
||||
{
|
||||
void Start()
|
||||
{
|
||||
Debug.Log("<color=cyan>[Gemini Test]</color> Bắt đầu kiểm tra kết nối API...");
|
||||
|
||||
if (GeminiService.Instance == null)
|
||||
{
|
||||
Debug.LogError("<color=red>[Gemini Test]</color> Không tìm thấy GeminiService Instance! Hãy đảm bảo bạn đã kéo script GeminiService vào một GameObject trong Scene.");
|
||||
return;
|
||||
}
|
||||
|
||||
string testPersona = "Bạn là một robot kiểm tra hệ thống.";
|
||||
string testPrompt = "Chào bạn, nếu bạn nhận được tin nhắn này, hãy trả lời: 'Kết nối Gemini thành công!'";
|
||||
|
||||
GeminiService.Instance.GetResponse(testPersona, testPrompt, (response) => {
|
||||
string finalMsg = response;
|
||||
try {
|
||||
DialogueResult result = JsonUtility.FromJson<DialogueResult>(response);
|
||||
finalMsg = result.text;
|
||||
} catch { }
|
||||
Debug.Log($"<color=green>[Gemini Test] Phản hồi từ API:</color> {finalMsg}");
|
||||
});
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/AI NPC/GeminiTest.cs.meta
Normal file
2
Assets/Scripts/AI NPC/GeminiTest.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e61a7aa4c1a936a43a97cf67a6e6a559
|
||||
@@ -67,12 +67,17 @@ public class GerminiNPC : MonoBehaviour
|
||||
string prompt = $"Ta muốn bán cho ông món đồ này: {playerHeldItem}";
|
||||
|
||||
Hallucinate.AI.GeminiService.Instance.GetResponse(npcPersona, prompt, (response) => {
|
||||
Debug.Log($"<color=green>Tom:</color> {response}");
|
||||
string finalMsg = response;
|
||||
try {
|
||||
DialogueResult result = JsonUtility.FromJson<DialogueResult>(response);
|
||||
finalMsg = result.text;
|
||||
} catch { }
|
||||
|
||||
Debug.Log($"<color=green>Tom:</color> {finalMsg}");
|
||||
AudioManager.Instance?.Play(responseSound, position: transform.position);
|
||||
|
||||
// Nếu có ChatBubble gắn kèm thì hiển thị luôn
|
||||
var bubble = GetComponentInChildren<Hallucinate.UI.ChatBubble>(true);
|
||||
if (bubble != null) bubble.Show(response);
|
||||
if (bubble != null) bubble.Show(finalMsg);
|
||||
});
|
||||
|
||||
yield break;
|
||||
|
||||
@@ -106,7 +106,7 @@ public class KamikazeAI : MonoBehaviour
|
||||
// HÀM TUẦN TRA NGẪU NHIÊN MỚI
|
||||
private NodeState ActionRandomPatrol()
|
||||
{
|
||||
Debug.Log("Wandering randomly...");
|
||||
// Debug.Log("Wandering randomly...");
|
||||
agent.isStopped = false;
|
||||
agent.speed = patrolSpeed;
|
||||
|
||||
|
||||
@@ -1,36 +1,85 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using Hallucinate.Audio;
|
||||
using Invector;
|
||||
|
||||
public class LaserProjectile : MonoBehaviour
|
||||
{
|
||||
public float speed = 5f;
|
||||
public float speed = 15f; // Tăng tốc độ đạn để cảm giác mượt hơn
|
||||
public float lifeTime = 5f;
|
||||
public int damageAmount = 10;
|
||||
|
||||
[Header("Audio")]
|
||||
public string hitSound = "Laser_Hit";
|
||||
|
||||
private void Start()
|
||||
{
|
||||
// Tự hủy sau một khoảng thời gian nếu không trúng gì
|
||||
Destroy(gameObject, lifeTime);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
transform.position +=
|
||||
transform.forward *
|
||||
speed *
|
||||
Time.deltaTime;
|
||||
// Di chuyển đạn
|
||||
transform.position += transform.forward * speed * Time.deltaTime;
|
||||
}
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
if (other.CompareTag("Player"))
|
||||
// Debug: Log tên và tag của bất cứ thứ gì đạn chạm vào
|
||||
Debug.Log($"Laser collided with: {other.name} | Tag: {other.tag} | Layer: {LayerMask.LayerToName(other.gameObject.layer)}");
|
||||
|
||||
// 1. Kiểm tra nếu trúng Player hoặc đối tượng có Health
|
||||
var healthController = other.GetComponentInParent<vIHealthController>();
|
||||
if (other.CompareTag("Player") || healthController != null)
|
||||
{
|
||||
Debug.Log("Player Hit");
|
||||
if (healthController != null)
|
||||
{
|
||||
Debug.Log($"<color=red>HIT PLAYER!</color> Applying {damageAmount} damage.");
|
||||
var damage = new vDamage(damageAmount);
|
||||
damage.sender = transform;
|
||||
damage.hitPosition = transform.position;
|
||||
healthController.TakeDamage(damage);
|
||||
}
|
||||
|
||||
Impact();
|
||||
return;
|
||||
}
|
||||
|
||||
AudioManager.Instance?.Play(hitSound, position: transform.position);
|
||||
// KIỂM TRA LAYER "GROUND"
|
||||
if (other.gameObject.layer == LayerMask.NameToLayer("Ground"))
|
||||
{
|
||||
Debug.Log("<color=yellow>Laser hit GROUND layer.</color>");
|
||||
Impact();
|
||||
return;
|
||||
}
|
||||
// Phá hủy đạn nếu trúng tường, sàn nhà (mọi thứ không phải trigger khác)
|
||||
|
||||
Destroy(gameObject);
|
||||
|
||||
// 2. Phá hủy đạn nếu trúng Ground, Tường, hoặc bất kỳ vật thể đặc nào (không phải Trigger)
|
||||
|
||||
if (!other.isTrigger)
|
||||
{
|
||||
Debug.Log($"Laser hit solid object: {other.name} (Ground/Obstacle). Destroying.");
|
||||
Impact();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCollisionEnter(Collision other)
|
||||
{
|
||||
if (other.gameObject.layer == LayerMask.NameToLayer("Ground") || other.gameObject.tag == "Ground")
|
||||
{
|
||||
Impact();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void Impact()
|
||||
{
|
||||
// Chạy âm thanh
|
||||
AudioManager.Instance?.Play(hitSound, position: transform.position);
|
||||
|
||||
// Phá hủy đạn ngay lập tức
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
32
Assets/Scripts/AI NPC/NoiseEmitter.cs
Normal file
32
Assets/Scripts/AI NPC/NoiseEmitter.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Hallucinate.AI
|
||||
{
|
||||
public class NoiseEmitter : MonoBehaviour
|
||||
{
|
||||
[Header("Settings")]
|
||||
public float defaultNoiseRange = 10f;
|
||||
public LayerMask npcLayer;
|
||||
|
||||
public void EmitNoise(float volumeMultiplier = 1f)
|
||||
{
|
||||
float range = defaultNoiseRange * volumeMultiplier;
|
||||
Collider[] hitColliders = Physics.OverlapSphere(transform.position, range, npcLayer);
|
||||
|
||||
foreach (var hit in hitColliders)
|
||||
{
|
||||
EnemyAI npc = hit.GetComponentInParent<EnemyAI>();
|
||||
if (npc != null)
|
||||
{
|
||||
npc.HearNoise(transform.position, volumeMultiplier);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDrawGizmosSelected()
|
||||
{
|
||||
Gizmos.color = new Color(1, 1, 0, 0.3f);
|
||||
Gizmos.DrawWireSphere(transform.position, defaultNoiseRange);
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/AI NPC/NoiseEmitter.cs.meta
Normal file
2
Assets/Scripts/AI NPC/NoiseEmitter.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 67d06596d1741d34594e4a68adcaf257
|
||||
@@ -1,16 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class RagNPC : MonoBehaviour
|
||||
{
|
||||
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||
void Start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 30cdc86fe97fa95428a4b31052cfb22f
|
||||
@@ -1,44 +1,53 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
using System.Collections;
|
||||
using Hallucinate.Audio; // Import namespace for AudioManager
|
||||
using Hallucinate.Audio;
|
||||
|
||||
public class FinishGate : MonoBehaviour
|
||||
{
|
||||
[Header("Cài đặt UI Chính")]
|
||||
public GameObject winPanel;
|
||||
public GameObject warningUI; // Thông báo "Bạn chưa nhặt rương nào!"
|
||||
public GameObject losePanel; // Bảng Lose
|
||||
public GameObject welcomeUI; // THÔNG BÁO 1: "Chào mừng!"
|
||||
public GameObject warningUI; // THÔNG BÁO 2: "Bạn chưa nhặt rương nào!"
|
||||
|
||||
[Header("Cài đặt Sao trên HUD (Giao diện chính)")]
|
||||
[Header("Cài đặt Sao trên HUD")]
|
||||
public GameObject hudStar1;
|
||||
public GameObject hudStar2;
|
||||
public GameObject hudStar3;
|
||||
|
||||
[Header("Cài đặt Sao trên Bảng Win (Kết thúc)")]
|
||||
[Header("Cài đặt Sao trên Bảng Win")]
|
||||
public GameObject winStar1;
|
||||
public GameObject winStar2;
|
||||
public GameObject winStar3;
|
||||
|
||||
[Header("Cài đặt Âm thanh")]
|
||||
public string winSound = "UI_Win";
|
||||
public string loseSound = "UI_Lose"; // Âm thanh thua
|
||||
public string warningSound = "UI_Warning";
|
||||
public string clickSound = "UI_Click";
|
||||
|
||||
[Header("Cấu hình Tag")]
|
||||
public string playerTag = "Player";
|
||||
|
||||
private bool hasEnteredOnce = false; // Theo dõi lần chạm cổng đầu tiên
|
||||
|
||||
private void Start()
|
||||
{
|
||||
Time.timeScale = 1f;
|
||||
|
||||
if (winPanel != null) winPanel.SetActive(false);
|
||||
if (losePanel != null) losePanel.SetActive(false);
|
||||
if (welcomeUI != null) welcomeUI.SetActive(false);
|
||||
if (warningUI != null) warningUI.SetActive(false);
|
||||
|
||||
// Ẩn tất cả sao lúc bắt đầu
|
||||
UpdateStarsUI(0);
|
||||
UpdateWinStarsUI(0);
|
||||
}
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
if (other.CompareTag("Check"))
|
||||
if (other.CompareTag(playerTag))
|
||||
{
|
||||
PlayerInventory player = other.GetComponentInChildren<PlayerInventory>();
|
||||
if (player == null) player = other.GetComponentInParent<PlayerInventory>();
|
||||
@@ -47,55 +56,81 @@ public class FinishGate : MonoBehaviour
|
||||
{
|
||||
if (player.treasuresCollected > 0)
|
||||
{
|
||||
Debug.Log($"<color=green>[Gate]</color> VỀ ĐÍCH! Kết thúc màn chơi với {player.treasuresCollected} sao.");
|
||||
WinGame(player.treasuresCollected);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("<color=yellow>[Gate]</color> Bạn chưa nhặt rương nào, hãy đi tìm rương trước khi về.");
|
||||
StopAllCoroutines();
|
||||
StartCoroutine(ShowTempUI(warningUI));
|
||||
// Nếu là lần đầu tiên -> Hiện Welcome. Nếu là lần sau -> Hiện Warning.
|
||||
if (!hasEnteredOnce)
|
||||
{
|
||||
hasEnteredOnce = true;
|
||||
StartCoroutine(ShowTempUI(welcomeUI));
|
||||
}
|
||||
else
|
||||
{
|
||||
StartCoroutine(ShowTempUI(warningUI));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Hàm public để TreasureItem có thể gọi cập nhật HUD ngay khi nhặt
|
||||
public void UpdateStarsUI(int count)
|
||||
{
|
||||
if (hudStar1) hudStar1.SetActive(count >= 1);
|
||||
if (hudStar2) hudStar2.SetActive(count >= 2);
|
||||
if (hudStar3) hudStar3.SetActive(count >= 3);
|
||||
if (hudStar1 != null) hudStar1.SetActive(count >= 1);
|
||||
if (hudStar2 != null) hudStar2.SetActive(count >= 2);
|
||||
if (hudStar3 != null) hudStar3.SetActive(count >= 3);
|
||||
}
|
||||
|
||||
void UpdateWinStarsUI(int count)
|
||||
private void UpdateWinStarsUI(int count)
|
||||
{
|
||||
if (winStar1) winStar1.SetActive(count >= 1);
|
||||
if (winStar2) winStar2.SetActive(count >= 2);
|
||||
if (winStar3) winStar3.SetActive(count >= 3);
|
||||
if (winStar1 != null) winStar1.SetActive(count >= 1);
|
||||
if (winStar2 != null) winStar2.SetActive(count >= 2);
|
||||
if (winStar3 != null) winStar3.SetActive(count >= 3);
|
||||
}
|
||||
|
||||
void WinGame(int count)
|
||||
private void WinGame(int count)
|
||||
{
|
||||
if (winPanel != null)
|
||||
{
|
||||
winPanel.SetActive(true);
|
||||
UpdateWinStarsUI(count); // Hiện số sao tương ứng trên bảng kết thúc
|
||||
UpdateWinStarsUI(count);
|
||||
}
|
||||
|
||||
AudioManager.PlayGlobal(winSound); // Chạy âm thanh thắng cuộc
|
||||
|
||||
AudioManager.PlayGlobal(winSound);
|
||||
Time.timeScale = 0f;
|
||||
Cursor.lockState = CursorLockMode.None;
|
||||
Cursor.visible = true;
|
||||
}
|
||||
|
||||
IEnumerator ShowTempUI(GameObject ui)
|
||||
public void LoseGame()
|
||||
{
|
||||
if (losePanel != null)
|
||||
{
|
||||
losePanel.SetActive(true);
|
||||
}
|
||||
|
||||
AudioManager.PlayGlobal(loseSound);
|
||||
Time.timeScale = 0f;
|
||||
Cursor.lockState = CursorLockMode.None;
|
||||
Cursor.visible = true;
|
||||
}
|
||||
|
||||
private IEnumerator ShowTempUI(GameObject ui)
|
||||
{
|
||||
if (ui == null) yield break;
|
||||
|
||||
// Tắt tất cả UI tạm thời khác trước khi bật cái mới để tránh đè chữ
|
||||
if (welcomeUI != null) welcomeUI.SetActive(false);
|
||||
if (warningUI != null) warningUI.SetActive(false);
|
||||
|
||||
ui.SetActive(true);
|
||||
|
||||
if (ui == warningUI) AudioManager.PlayGlobal(warningSound); // Chạy âm thanh cảnh báo
|
||||
if (ui == warningUI)
|
||||
{
|
||||
AudioManager.PlayGlobal(warningSound);
|
||||
}
|
||||
|
||||
yield return new WaitForSeconds(3f);
|
||||
ui.SetActive(false);
|
||||
@@ -103,17 +138,17 @@ public class FinishGate : MonoBehaviour
|
||||
|
||||
public void RestartGame()
|
||||
{
|
||||
AudioManager.PlayGlobal(clickSound); // Âm thanh click nút
|
||||
AudioManager.PlayGlobal(clickSound);
|
||||
Time.timeScale = 1f;
|
||||
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
|
||||
}
|
||||
|
||||
public void QuitGame()
|
||||
{
|
||||
AudioManager.PlayGlobal(clickSound); // Âm thanh click nút
|
||||
AudioManager.PlayGlobal(clickSound);
|
||||
Application.Quit();
|
||||
#if UNITY_EDITOR
|
||||
UnityEditor.EditorApplication.isPlaying = false;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,52 +1,55 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using Hallucinate.Audio;
|
||||
using Hallucinate.Audio;
|
||||
|
||||
public class TreasureItem : MonoBehaviour
|
||||
{
|
||||
[Header("Cài đặt UI thông báo")]
|
||||
public GameObject notificationText; // Text "Đã nhặt Cổ vật"
|
||||
[Tooltip("Kéo Text 'Đã nhặt được cổ vật hãy trốn thoát ra khỏi đây' vào đây")]
|
||||
public GameObject notificationText;
|
||||
|
||||
[Header("Cài đặt Âm thanh")]
|
||||
public string pickupSound = "Item_Pickup";
|
||||
|
||||
[Header("Cấu hình Tag")]
|
||||
public string playerTag = "Player";
|
||||
|
||||
private bool isCollected = false;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
if (notificationText != null)
|
||||
{
|
||||
notificationText.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
if (other.CompareTag("Player"))
|
||||
if (!isCollected && other.CompareTag(playerTag))
|
||||
{
|
||||
PlayerInventory player = other.GetComponentInChildren<PlayerInventory>();
|
||||
if (player == null) player = other.GetComponentInParent<PlayerInventory>();
|
||||
|
||||
if (player != null)
|
||||
{
|
||||
// 1. Tăng số lượng rương đang giữ
|
||||
isCollected = true;
|
||||
player.treasuresCollected++;
|
||||
Debug.Log($"<color=cyan>[Chest]</color> NHẶT THÀNH CÔNG! Số rương hiện tại: {player.treasuresCollected}");
|
||||
|
||||
// 2. Cập nhật sao trên HUD ngay lập tức (Tìm FinishGate để mượn hàm update)
|
||||
FinishGate gate = Object.FindAnyObjectByType<FinishGate>();
|
||||
if (gate != null)
|
||||
{
|
||||
gate.UpdateStarsUI(player.treasuresCollected);
|
||||
}
|
||||
|
||||
// 3. Kích hoạt trạng thái truy đuổi cho toàn bộ Enemy AI
|
||||
SetEnemiesAlertState(true);
|
||||
|
||||
// 4. Chạy âm thanh nhặt đồ
|
||||
if (AudioManager.Instance != null)
|
||||
{
|
||||
AudioManager.Instance.Play(pickupSound, position: transform.position);
|
||||
}
|
||||
|
||||
if (notificationText != null)
|
||||
{
|
||||
StopAllCoroutines();
|
||||
StartCoroutine(ShowNotification());
|
||||
}
|
||||
|
||||
// Biến mất rương
|
||||
gameObject.SetActive(false);
|
||||
StartCoroutine(HandlePickupRoutine());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -56,14 +59,38 @@ public class TreasureItem : MonoBehaviour
|
||||
EnemyAI[] allEnemies = Object.FindObjectsByType<EnemyAI>(FindObjectsSortMode.None);
|
||||
foreach (EnemyAI enemy in allEnemies)
|
||||
{
|
||||
enemy.playerHasArtifact = state;
|
||||
if (enemy != null) enemy.playerHasArtifact = state;
|
||||
}
|
||||
}
|
||||
|
||||
IEnumerator ShowNotification()
|
||||
private IEnumerator HandlePickupRoutine()
|
||||
{
|
||||
notificationText.SetActive(true);
|
||||
yield return new WaitForSeconds(2f);
|
||||
notificationText.SetActive(false);
|
||||
HideTreasureModel();
|
||||
|
||||
if (notificationText != null)
|
||||
{
|
||||
notificationText.SetActive(true);
|
||||
}
|
||||
|
||||
yield return new WaitForSeconds(3f); // Tăng lên 3s để người chơi kịp đọc dòng chữ dài
|
||||
|
||||
if (notificationText != null)
|
||||
{
|
||||
notificationText.SetActive(false);
|
||||
}
|
||||
|
||||
gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void HideTreasureModel()
|
||||
{
|
||||
Collider col = GetComponent<Collider>();
|
||||
if (col != null) col.enabled = false;
|
||||
|
||||
MeshRenderer[] renderers = GetComponentsInChildren<MeshRenderer>();
|
||||
foreach (MeshRenderer r in renderers)
|
||||
{
|
||||
r.enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,4 +12,4 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 2f22f37f63bcec14080b11ce5e381ce6, type: 3}
|
||||
m_Name: vEditorStartupPrefs
|
||||
m_EditorClassIdentifier:
|
||||
displayWelcomeScreen: 1
|
||||
displayWelcomeScreen: 0
|
||||
|
||||
@@ -98,6 +98,13 @@ namespace Invector.vCharacterController
|
||||
private void OnDead(GameObject arg0)
|
||||
{
|
||||
ShowText("You are Dead!");
|
||||
|
||||
// Gọi hàm LoseGame từ script FinishGate khi người chơi chết
|
||||
FinishGate gate = Object.FindAnyObjectByType<FinishGate>();
|
||||
if (gate != null)
|
||||
{
|
||||
gate.LoseGame();
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void UpdateHUD(vThirdPersonController cc)
|
||||
|
||||
@@ -318,6 +318,14 @@ namespace Invector.vCharacterController
|
||||
currentStaminaRecoveryDelay = 2f;
|
||||
}
|
||||
|
||||
public override void TakeDamage(vDamage damage)
|
||||
{
|
||||
Debug.Log($"Player TakeDamage called. Damage: {damage.damageValue}. Current Health before: {currentHealth}");
|
||||
base.TakeDamage(damage);
|
||||
Debug.Log($"Player Health after: {currentHealth}");
|
||||
// Additional logic for player-specific damage handling can be added here
|
||||
}
|
||||
|
||||
|
||||
#region Check Action Triggers
|
||||
|
||||
|
||||
@@ -38,6 +38,13 @@ namespace Invector
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("_useTriggerEnter"));
|
||||
serializedObject.FindProperty("debugTextureName").boolValue = EditorGUILayout.Toggle("Debug Texture Name", serializedObject.FindProperty("debugTextureName").boolValue);
|
||||
|
||||
GUILayout.BeginVertical("box");
|
||||
GUILayout.Box("AI Noise Settings", GUILayout.ExpandWidth(true));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("emitAINoise"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("aiNoiseRange"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("npcLayer"));
|
||||
GUILayout.EndVertical();
|
||||
|
||||
if (serializedObject.FindProperty("animationType").enumValueIndex == (int)AnimationType.Humanoid)
|
||||
{
|
||||
GUILayout.BeginHorizontal("box");
|
||||
|
||||
@@ -13,19 +13,24 @@ Material:
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords:
|
||||
- _COLOROVERLAY_ON
|
||||
- _DISTORTION_ON
|
||||
- _FADING_ON
|
||||
- _FLIPBOOKBLENDING_ON
|
||||
- _SOFTPARTICLES_ON
|
||||
- _SURFACE_TYPE_TRANSPARENT
|
||||
m_InvalidKeywords:
|
||||
- EFFECT_BUMP
|
||||
- _ALPHABLEND_ON
|
||||
- _FLIPBOOKBLENDING_OFF
|
||||
- _REQUIRE_UV2
|
||||
m_LightmapFlags: 0
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
m_CustomRenderQueue: 3000
|
||||
stringTagMap:
|
||||
RenderType: Opaque
|
||||
disabledShaderPasses: []
|
||||
RenderType: Transparent
|
||||
disabledShaderPasses:
|
||||
- DepthOnly
|
||||
- SHADOWCASTER
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
@@ -88,8 +93,8 @@ Material:
|
||||
- _DistortionEnabled: 1
|
||||
- _DistortionStrength: 1
|
||||
- _DistortionStrengthScaled: 0.1
|
||||
- _DstBlend: 0
|
||||
- _DstBlendAlpha: 0
|
||||
- _DstBlend: 10
|
||||
- _DstBlendAlpha: 10
|
||||
- _EmissionEnabled: 1
|
||||
- _FlipbookBlending: 1
|
||||
- _FlipbookMode: 1
|
||||
@@ -108,11 +113,11 @@ Material:
|
||||
- _SoftParticlesFarFadeDistance: 1
|
||||
- _SoftParticlesNearFadeDistance: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _SrcBlend: 5
|
||||
- _SrcBlendAlpha: 1
|
||||
- _Surface: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
- _ZWrite: 0
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _BaseColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0}
|
||||
@@ -121,7 +126,7 @@ Material:
|
||||
- _ColorAddSubDiff: {r: 1, g: 0, b: 0, a: 0}
|
||||
- _EmisColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0.31132078, g: 0.31132078, b: 0.31132078, a: 1}
|
||||
- _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0}
|
||||
- _SoftParticleFadeParams: {r: 0, g: 1, b: 0, a: 0}
|
||||
- _TintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
|
||||
@@ -20,6 +20,11 @@ namespace Invector
|
||||
public bool SpawnParticle { get { return _spawnParticle; } set { _spawnParticle = value; } }
|
||||
public bool SpawnStepMark { get { return _spawnStepMark; } set { _spawnStepMark = value; } }
|
||||
|
||||
[Header("AI Noise Settings")]
|
||||
public bool emitAINoise = true;
|
||||
public float aiNoiseRange = 10f;
|
||||
public LayerMask npcLayer;
|
||||
|
||||
protected int surfaceIndex = 0;
|
||||
protected Terrain terrain;
|
||||
protected TerrainCollider terrainCollider;
|
||||
@@ -248,6 +253,37 @@ namespace Invector
|
||||
currentFootStep.spawnParticleEffect = SpawnParticle;
|
||||
currentFootStep.spawnStepMarkEffect = SpawnStepMark;
|
||||
SpawnSurfaceEffect(currentFootStep);
|
||||
|
||||
if (emitAINoise) EmitAINoise();
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void EmitAINoise()
|
||||
{
|
||||
float currentRange = aiNoiseRange;
|
||||
float currentVolume = Volume;
|
||||
|
||||
// Kiểm tra trạng thái ngồi từ Animator
|
||||
Animator anim = GetComponent<Animator>();
|
||||
if (anim != null)
|
||||
{
|
||||
// Nếu đang ngồi (IsCrouching = true), giảm 50% vùng phát hiện và âm lượng
|
||||
if (anim.GetBool("IsCrouching"))
|
||||
{
|
||||
currentRange *= 0.5f;
|
||||
currentVolume *= 0.5f;
|
||||
}
|
||||
}
|
||||
|
||||
// Tìm tất cả Collider trong bán kính tiếng động thuộc Layer NPC
|
||||
Collider[] hitColliders = Physics.OverlapSphere(transform.position, currentRange, npcLayer);
|
||||
foreach (var hit in hitColliders)
|
||||
{
|
||||
var npc = hit.GetComponentInParent<EnemyAI>();
|
||||
if (npc != null)
|
||||
{
|
||||
npc.HearNoise(transform.position, currentVolume);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -51,6 +51,9 @@ namespace Invector.vShooter
|
||||
{
|
||||
AddTrailPosition();
|
||||
}
|
||||
|
||||
// Log diagnostic: Kiểm tra Layer mà đạn có thể bắn trúng
|
||||
Debug.Log($"<color=cyan>PROJECTILE SPAWNED:</color> HitLayer Mask: {hitLayer.value}. Đảm bảo Layer của Enemy nằm trong mask này.");
|
||||
}
|
||||
|
||||
protected virtual void Update()
|
||||
@@ -61,6 +64,7 @@ namespace Invector.vShooter
|
||||
transform.rotation = Quaternion.LookRotation(_rigidBody.linearVelocity.normalized, transform.up);
|
||||
}
|
||||
|
||||
// Thực hiện raycast để kiểm tra va chạm
|
||||
if (Physics.Linecast(previousPosition, transform.position + transform.forward * 0.5f, out hitInfo, hitLayer))
|
||||
{
|
||||
if (!hitInfo.collider)
|
||||
@@ -98,17 +102,39 @@ namespace Invector.vShooter
|
||||
damage.hitPosition = hitInfo.point;
|
||||
damage.receiver = hitInfo.collider.transform;
|
||||
damage.force = transform.forward * damage.damageValue * forceMultiplier;
|
||||
|
||||
if (damage.damageValue > 0)
|
||||
{
|
||||
onPassDamage.Invoke(damage);
|
||||
|
||||
hitInfo.collider.gameObject.ApplyDamage(damage, damage.sender ? damage.sender.GetComponent<vIMeleeFighter>() : null);
|
||||
// 1. Log khi trúng bất cứ thứ gì
|
||||
Debug.Log($"<color=yellow>PROJECTILE HIT:</color> {hitInfo.collider.name} | Tag: {hitInfo.collider.tag} | Layer: {LayerMask.LayerToName(hitInfo.collider.gameObject.layer)}");
|
||||
|
||||
// 2. Tìm đối tượng nhận sát thương (ưu tiên tìm ở cha nếu trúng collider con)
|
||||
var damageReceiver = hitInfo.collider.gameObject.GetComponentInParent<vIDamageReceiver>();
|
||||
|
||||
if (damageReceiver != null)
|
||||
{
|
||||
if (hitInfo.collider.CompareTag("Enemy") || damageReceiver.gameObject.CompareTag("Enemy"))
|
||||
{
|
||||
Debug.Log($"<color=green>APPLYING DAMAGE TO ENEMY:</color> {damageReceiver.gameObject.name}. Damage: {damage.damageValue}");
|
||||
}
|
||||
|
||||
// Gửi sát thương đến đối tượng tìm thấy
|
||||
damageReceiver.gameObject.ApplyDamage(damage, damage.sender ? damage.sender.GetComponent<vIMeleeFighter>() : null);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"<color=orange>NO DAMAGE RECEIVER FOUND</color> on {hitInfo.collider.name} or its parents. Đảm bảo Enemy có component vHealthController.");
|
||||
}
|
||||
}
|
||||
|
||||
var rigb = hitInfo.collider.gameObject.GetComponent<Rigidbody>();
|
||||
if (rigb)
|
||||
if (rigb && !rigb.isKinematic)
|
||||
{
|
||||
rigb.AddForce(transform.forward * damage.damageValue * forceMultiplier, ForceMode.Impulse);
|
||||
// GIẢM LỰC ĐẨY: Chỉ dùng 10% lực để NPC không bị bay quá xa
|
||||
float realisticForce = (damage.damageValue * forceMultiplier) * 0.1f;
|
||||
rigb.AddForce(transform.forward * realisticForce, ForceMode.Impulse);
|
||||
}
|
||||
|
||||
startPosition = transform.position;
|
||||
@@ -268,8 +294,20 @@ namespace Invector.vShooter
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
// DIAGNOSTIC X-RAY: Kiểm tra xem có trúng cái gì mà bị HitLayer cấm không?
|
||||
RaycastHit diagHit;
|
||||
if (Physics.Linecast(previousPosition, transform.position + transform.forward * 0.5f, out diagHit, ~0)) // ~0 là tất cả layer
|
||||
{
|
||||
if (diagHit.collider.CompareTag("Enemy") || diagHit.collider.name.Contains("Guard") || diagHit.collider.GetComponentInParent<EnemyAI>() != null)
|
||||
{
|
||||
Debug.LogError($"<color=red>LAYER BLOCK DETECTED!</color> Đạn vừa bay xuyên qua {diagHit.collider.name}. " +
|
||||
$"Đối tượng này ở Layer: {LayerMask.LayerToName(diagHit.collider.gameObject.layer)} ({diagHit.collider.gameObject.layer}). " +
|
||||
$"NHƯNG súng của bạn đang dùng HitLayer Mask: {hitLayer.value}, không bao gồm layer này!");
|
||||
}
|
||||
}
|
||||
|
||||
if (debugTrajetory)
|
||||
{
|
||||
Debug.DrawLine(transform.position, previousPosition, debugColor, 10f);
|
||||
@@ -277,7 +315,8 @@ namespace Invector.vShooter
|
||||
}
|
||||
|
||||
previousPosition = transform.position;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -242,6 +242,21 @@ namespace Invector.vShooter
|
||||
#endregion
|
||||
|
||||
#region Protected Methods
|
||||
protected virtual void Start()
|
||||
{
|
||||
// TỰ ĐỘNG SỬA LỖI LAYER: Đảm bảo súng luôn có thể bắn trúng Enemy
|
||||
int enemyLayer = LayerMask.NameToLayer("Enemy");
|
||||
if (enemyLayer != -1)
|
||||
{
|
||||
// Cưỡng bức thêm Layer Enemy vào mask (Dùng toán tử bit OR)
|
||||
hitLayer.value |= (1 << enemyLayer);
|
||||
Debug.Log($"<color=green>[WEAPON AUTO-FIX]</color> {gameObject.name} hiện đã có thể bắn trúng Layer 'Enemy' (Mask mới: {hitLayer.value}).");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("<color=red>[WEAPON ERROR]</color> Bạn chưa tạo Layer tên là 'Enemy' trong Project Settings > Tags and Layers!");
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void OnDestroy()
|
||||
{
|
||||
@@ -256,6 +271,14 @@ namespace Invector.vShooter
|
||||
{
|
||||
ShootBullet(startPoint, endPoint);
|
||||
ShotEffect();
|
||||
|
||||
// Gửi tín hiệu tiếng súng cho toàn bộ AI lân cận
|
||||
var hitColliders = Physics.OverlapSphere(muzzle.position, 50f);
|
||||
foreach (var hit in hitColliders)
|
||||
{
|
||||
var ai = hit.GetComponentInParent<EnemyAI>();
|
||||
if (ai != null) ai.TriggerCombatAlert(muzzle.position);
|
||||
}
|
||||
}
|
||||
public virtual Vector3 Dispersion(Vector3 aim, float dispersion)
|
||||
{
|
||||
@@ -297,11 +320,32 @@ namespace Invector.vShooter
|
||||
|
||||
protected virtual void ShootBullet(Vector3 startPoint, Vector3 endPoint)
|
||||
{
|
||||
// TỰ ĐỘNG SỬA LỖI LAYER (Cưỡng bức mỗi khi bắn):
|
||||
int enemyLayer = LayerMask.NameToLayer("Enemy");
|
||||
if (enemyLayer != -1)
|
||||
{
|
||||
// Ép thêm Layer Enemy vào mask nếu nó bị thiếu
|
||||
if ((hitLayer.value & (1 << enemyLayer)) == 0)
|
||||
{
|
||||
hitLayer.value |= (1 << enemyLayer);
|
||||
Debug.Log($"<color=orange>[WEAPON FORCE-FIX]</color> Đã cưỡng bức thêm Layer 'Enemy' vào {gameObject.name} khi bắn.");
|
||||
}
|
||||
}
|
||||
|
||||
var dir = endPoint - startPoint;
|
||||
//StartCoroutine(DebugDispersion(startPoint, endPoint));
|
||||
var rotation = Quaternion.LookRotation(dir);
|
||||
GameObject bulletObject = null;
|
||||
var velocityChanged = 0f;
|
||||
|
||||
if (projectile == null)
|
||||
{
|
||||
Debug.LogError($"<color=red>WEAPON ERROR:</color> No Projectile Prefab assigned to {gameObject.name}!");
|
||||
return;
|
||||
}
|
||||
|
||||
Debug.Log($"<color=white>WEAPON SHOOT:</color> Spawning projectile. HitLayer: {hitLayer.value}");
|
||||
|
||||
if (dispersion > 0 && projectile)
|
||||
{
|
||||
for (int i = 0; i < projectilesPerShot; i++)
|
||||
@@ -311,6 +355,12 @@ namespace Invector.vShooter
|
||||
bulletObject = Instantiate(projectile, startPoint, spreadRotation);
|
||||
|
||||
var pCtrl = bulletObject.GetComponent<vProjectileControl>();
|
||||
if (pCtrl == null)
|
||||
{
|
||||
Debug.LogError($"<color=red>PROJECTILE ERROR:</color> {projectile.name} does not have vProjectileControl script!");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (pCtrl.debugTrajetory && i == 0)
|
||||
{
|
||||
startPoint.DebugPoint(Color.red, 10, 0.1f);
|
||||
@@ -338,6 +388,13 @@ namespace Invector.vShooter
|
||||
{
|
||||
bulletObject = Instantiate(projectile, startPoint, rotation);
|
||||
var pCtrl = bulletObject.GetComponent<vProjectileControl>();
|
||||
|
||||
if (pCtrl == null)
|
||||
{
|
||||
Debug.LogError($"<color=red>PROJECTILE ERROR:</color> {projectile.name} does not have vProjectileControl script!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (pCtrl.debugTrajetory)
|
||||
{
|
||||
startPoint.DebugPoint(Color.red, 10, 0.1f);
|
||||
|
||||
BIN
Assets/Textures/hdr_high.png
Normal file
BIN
Assets/Textures/hdr_high.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 44 MiB |
130
Assets/Textures/hdr_high.png.meta
Normal file
130
Assets/Textures/hdr_high.png.meta
Normal file
@@ -0,0 +1,130 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f6c8ebeb4fbe2954ba666fb8de1138f1
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 0
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 16384
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
10
BABA_YAGA_Updater/.gitignore
vendored
Normal file
10
BABA_YAGA_Updater/.gitignore
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
.env
|
||||
credentials.json
|
||||
token.json
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
.venv/
|
||||
venv/
|
||||
ENV/
|
||||
env/
|
||||
21
BABA_YAGA_Updater/config/settings.py
Normal file
21
BABA_YAGA_Updater/config/settings.py
Normal file
@@ -0,0 +1,21 @@
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# Load .env file if it exists
|
||||
load_dotenv()
|
||||
|
||||
class Settings:
|
||||
# Google Sheets Configuration
|
||||
SPREADSHEET_ID = os.getenv("SPREADSHEET_ID", "")
|
||||
SHEET_RANGE = os.getenv("SHEET_RANGE", "Sheet1!A2:E") # Default range
|
||||
CREDENTIALS_FILE = os.getenv("CREDENTIALS_FILE", "credentials.json")
|
||||
TOKEN_FILE = os.getenv("TOKEN_FILE", "token.json")
|
||||
|
||||
# README Configuration
|
||||
README_PATH = os.getenv("README_PATH", "../README.md")
|
||||
|
||||
# Section Markers
|
||||
START_MARKER = "<!-- START_UPDATES -->"
|
||||
END_MARKER = "<!-- END_UPDATES -->"
|
||||
|
||||
settings = Settings()
|
||||
15
BABA_YAGA_Updater/core/models.py
Normal file
15
BABA_YAGA_Updater/core/models.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional
|
||||
|
||||
class Task(BaseModel):
|
||||
phase: str
|
||||
task_id: str
|
||||
task_name: str
|
||||
assignee: str
|
||||
start_date: str
|
||||
end_date: str
|
||||
progress_val: str
|
||||
status: str
|
||||
|
||||
class ProgressReport(BaseModel):
|
||||
tasks: list[Task]
|
||||
73
BABA_YAGA_Updater/main.py
Normal file
73
BABA_YAGA_Updater/main.py
Normal file
@@ -0,0 +1,73 @@
|
||||
import sys
|
||||
import os
|
||||
from services.gsheet_client import GSheetClient
|
||||
from mappers.sheet_mapper import SheetMapper
|
||||
from mappers.markdown_builder import MarkdownBuilder
|
||||
from services.readme_editor import ReadmeEditor
|
||||
from config.settings import settings
|
||||
|
||||
def main():
|
||||
try:
|
||||
print("🚀 Starting README Update Process...")
|
||||
|
||||
# 1. Fetch data from Google Sheets
|
||||
client = GSheetClient()
|
||||
raw_rows = client.fetch_data()
|
||||
|
||||
if not raw_rows:
|
||||
print("⚠️ No data found in the spreadsheet or error occurred.")
|
||||
return
|
||||
|
||||
# 2. Map raw rows to Core Models
|
||||
report = SheetMapper.map_rows_to_report(raw_rows)
|
||||
print(f"✅ Data fetched: {len(report.tasks)} tasks parsed.")
|
||||
|
||||
# 3. Prepare Dynamic Content
|
||||
markdown_table = MarkdownBuilder.build_table(report)
|
||||
progress_summary = MarkdownBuilder.build_team_progress(report)
|
||||
|
||||
# 4. First, update the local section files with the new dynamic data
|
||||
print("🔧 Injecting data into local sections...")
|
||||
editor = ReadmeEditor()
|
||||
|
||||
# Inject progress into 08_team_standards.md
|
||||
editor.inject_content_between_markers(
|
||||
"sections/08_team_standards.md",
|
||||
progress_summary,
|
||||
"<!-- START_PROGRESS -->",
|
||||
"<!-- END_PROGRESS -->"
|
||||
)
|
||||
|
||||
# Inject task table into 07_roadmap.md (or whichever section has the marker)
|
||||
# Note: Your main README markers were originally in 07_roadmap or similar
|
||||
editor.inject_content_between_markers(
|
||||
"sections/07_roadmap.md",
|
||||
markdown_table,
|
||||
"<!-- START_UPDATES -->",
|
||||
"<!-- END_UPDATES -->"
|
||||
)
|
||||
|
||||
# 5. Aggregate all sections into one big README content
|
||||
print("📚 Aggregating all sections from 00 to 10...")
|
||||
all_sections_content = ""
|
||||
section_files = sorted([f for f in os.listdir("sections") if f.endswith(".md")])
|
||||
|
||||
for filename in section_files:
|
||||
file_path = os.path.join("sections", filename)
|
||||
with open(file_path, "r", encoding="utf-8") as f:
|
||||
all_sections_content += f.read() + "\n\n---\n\n"
|
||||
|
||||
# 6. Update the ROOT README.md (../README.md)
|
||||
print(f"📄 Updating Root README.md at: {settings.README_PATH}")
|
||||
root_editor = ReadmeEditor(file_path=settings.README_PATH)
|
||||
if root_editor.update_whole_readme(all_sections_content):
|
||||
print("🎉 Root README.md successfully updated from all sections!")
|
||||
else:
|
||||
print("❌ Failed to update Root README.md.")
|
||||
|
||||
except Exception as e:
|
||||
print(f"💥 An unexpected error occurred: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
115
BABA_YAGA_Updater/mappers/markdown_builder.py
Normal file
115
BABA_YAGA_Updater/mappers/markdown_builder.py
Normal file
@@ -0,0 +1,115 @@
|
||||
from core.models import ProgressReport, Task
|
||||
|
||||
class MarkdownBuilder:
|
||||
@staticmethod
|
||||
def _parse_progress(p_val: str) -> int:
|
||||
if p_val == "1":
|
||||
return 100
|
||||
try:
|
||||
return int(p_val.replace("%", ""))
|
||||
except:
|
||||
return 0
|
||||
|
||||
@staticmethod
|
||||
def _get_status_badge(status: str) -> str:
|
||||
s = status.upper().strip()
|
||||
if "COMPLETED" in s:
|
||||
return ""
|
||||
if "DURING" in s or "PROCESS" in s:
|
||||
return ""
|
||||
if "NOT STARTED" in s:
|
||||
return ""
|
||||
return f"`{status}`"
|
||||
|
||||
@staticmethod
|
||||
def build_table(report: ProgressReport) -> str:
|
||||
if not report.tasks:
|
||||
return "_No tasks found._"
|
||||
|
||||
header = "| Phase | ID | Task | Assignee | Timeline | Progress | Status |\n"
|
||||
separator = "| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n"
|
||||
rows = []
|
||||
|
||||
current_phase = ""
|
||||
for task in report.tasks:
|
||||
phase_display = f"**{task.phase}**" if task.phase != current_phase else ""
|
||||
current_phase = task.phase
|
||||
|
||||
badge = MarkdownBuilder._get_status_badge(task.status)
|
||||
prog_val = MarkdownBuilder._parse_progress(task.progress_val)
|
||||
|
||||
filled = prog_val // 10
|
||||
bar = "█" * filled + "░" * (10 - filled)
|
||||
|
||||
rows.append(
|
||||
f"| {phase_display} | `{task.task_id}` | {task.task_name} | `{task.assignee}` | {task.start_date} - {task.end_date} | `{bar} {prog_val}%` | {badge} |"
|
||||
)
|
||||
|
||||
return header + separator + "\n".join(rows)
|
||||
|
||||
@staticmethod
|
||||
def build_team_progress(report: ProgressReport) -> str:
|
||||
if not report.tasks:
|
||||
return ""
|
||||
|
||||
phases = {}
|
||||
for t in report.tasks:
|
||||
if t.phase not in phases:
|
||||
phases[t.phase] = []
|
||||
phases[t.phase].append(t)
|
||||
|
||||
total_tasks = len(report.tasks)
|
||||
completed = len([t for t in report.tasks if "COMPLETED" in t.status.upper()])
|
||||
in_progress = len([t for t in report.tasks if "DURING" in t.status.upper()])
|
||||
avg_progress = sum(MarkdownBuilder._parse_progress(t.progress_val) for t in report.tasks) / total_tasks
|
||||
|
||||
# Build phase rows — NO leading spaces (prevents GitHub treating them as code blocks)
|
||||
phase_rows_html = ""
|
||||
colors = ["#B026FF", "#33CCFF", "#FF3333", "#FFD700"]
|
||||
for i, (name, t_list) in enumerate(phases.items()):
|
||||
p_total = len(t_list)
|
||||
p_done = len([t for t in t_list if "COMPLETED" in t.status.upper()])
|
||||
p_avg = sum(MarkdownBuilder._parse_progress(t.progress_val) for t in t_list) / p_total
|
||||
color = colors[i % len(colors)]
|
||||
|
||||
# Key fix: use textwrap.dedent-style — keep lines flush left, no indentation
|
||||
phase_rows_html += (
|
||||
f'<tr>'
|
||||
f'<td colspan="2" style="padding-top:10px;font-size:12px;color:#EEE;">'
|
||||
f'<table width="100%" border="0" cellpadding="0" cellspacing="0">'
|
||||
f'<tr><td align="left">{name}</td><td align="right">{p_avg:.0f}% ({p_done}/{p_total})</td></tr>'
|
||||
f'</table>'
|
||||
f'<div style="width:100%;background:#222;height:6px;border-radius:3px;overflow:hidden;margin-top:4px;">'
|
||||
f'<div style="width:{p_avg}%;background:{color};height:100%;"></div>'
|
||||
f'</div>'
|
||||
f'</td>'
|
||||
f'</tr>'
|
||||
)
|
||||
|
||||
# Entire dashboard on as few lines as possible — no indented lines
|
||||
dashboard = (
|
||||
'<div align="center">'
|
||||
'<table width="100%" border="0" cellpadding="0" cellspacing="0" style="background:#0D1117;border:1px solid #30363D;border-radius:8px;">'
|
||||
'<tr>'
|
||||
'<td width="40%" align="center" valign="middle" style="padding:25px;border-right:1px solid #30363D;">'
|
||||
'<img src="https://api.iconify.design/lucide/target.svg?color=%23FFD700" width="32" height="32"/>'
|
||||
f'<div style="margin:10px 0 5px 0;color:#FFD700;font-size:12px;letter-spacing:1px;font-weight:bold;">SYSTEM READINESS</div>'
|
||||
f'<div style="font-size:48px;font-weight:800;color:#FFF;margin:5px 0;">{avg_progress:.1f}%</div>'
|
||||
'<table border="0" cellpadding="0" cellspacing="0" style="margin-top:15px;">'
|
||||
'<tr>'
|
||||
f'<td align="center" style="padding:0 10px;"><div style="color:#2ea44f;font-size:16px;font-weight:bold;">{completed}</div><div style="color:#8B949E;font-size:9px;">DONE</div></td>'
|
||||
f'<td style="border-left:1px solid #30363D;padding:0 10px;" align="center"><div style="color:#005cc5;font-size:16px;font-weight:bold;">{in_progress}</div><div style="color:#8B949E;font-size:9px;">ACTIVE</div></td>'
|
||||
f'<td style="border-left:1px solid #30363D;padding:0 10px;" align="center"><div style="color:#8B949E;font-size:16px;font-weight:bold;">{total_tasks - completed - in_progress}</div><div style="color:#8B949E;font-size:9px;">BACKLOG</div></td>'
|
||||
'</tr>'
|
||||
'</table>'
|
||||
'</td>'
|
||||
'<td width="60%" valign="top" style="padding:20px;">'
|
||||
'<div style="color:#8B949E;font-size:11px;text-transform:uppercase;letter-spacing:1px;font-weight:bold;margin-bottom:10px;">Phase Breakdown</div>'
|
||||
f'<table width="100%" border="0" cellpadding="0" cellspacing="0">{phase_rows_html}</table>'
|
||||
'</td>'
|
||||
'</tr>'
|
||||
'</table>'
|
||||
'</div>'
|
||||
)
|
||||
|
||||
return dashboard
|
||||
34
BABA_YAGA_Updater/mappers/sheet_mapper.py
Normal file
34
BABA_YAGA_Updater/mappers/sheet_mapper.py
Normal file
@@ -0,0 +1,34 @@
|
||||
from core.models import Task, ProgressReport
|
||||
|
||||
class SheetMapper:
|
||||
@staticmethod
|
||||
def map_rows_to_report(rows: list[list]) -> ProgressReport:
|
||||
tasks = []
|
||||
current_phase = "General"
|
||||
|
||||
for row in rows:
|
||||
if not row or len(row) < 2:
|
||||
continue
|
||||
|
||||
# Detect Phase row (e.g. Row 1: ['', 'Phase 1: ...'])
|
||||
# Phase rows usually have few columns or column 2/3 is empty
|
||||
if len(row) <= 2 or (len(row) > 2 and row[2] == ""):
|
||||
if row[1] and "Phase" in row[1]:
|
||||
current_phase = row[1].strip()
|
||||
continue
|
||||
|
||||
# Detect Task row (e.g. Row 2: ['', '1.1', 'Task Name', ...])
|
||||
if len(row) >= 10:
|
||||
task = Task(
|
||||
phase=current_phase,
|
||||
task_id=row[1],
|
||||
task_name=row[2],
|
||||
assignee=row[3],
|
||||
start_date=row[4],
|
||||
end_date=row[5],
|
||||
progress_val=row[8],
|
||||
status=row[9]
|
||||
)
|
||||
tasks.append(task)
|
||||
|
||||
return ProgressReport(tasks=tasks)
|
||||
5
BABA_YAGA_Updater/requirements.txt
Normal file
5
BABA_YAGA_Updater/requirements.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
google-api-python-client
|
||||
google-auth-httplib2
|
||||
google-auth-oauthlib
|
||||
python-dotenv
|
||||
pydantic
|
||||
107
BABA_YAGA_Updater/sections/00_header.md
Normal file
107
BABA_YAGA_Updater/sections/00_header.md
Normal file
@@ -0,0 +1,107 @@
|
||||
<div align="center">
|
||||
|
||||
<!-- ANIMATED BANNER (Sử dụng SVG Pulse hoặc GIF) -->
|
||||
<p align="center">
|
||||
<img src="https://scove-vault.duckdns.org/files/api/public/dl/S8eQwp-Y" alt="Animated Header" />
|
||||
</p>
|
||||
|
||||
### ⚡ THE ASYMMETRIC PSYCHOLOGICAL SURVIVAL ENGINE
|
||||
**"Thị giác là một lời nói dối. Bóng tối là sự thật duy nhất."**
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/VERSION-6000.3.10f1_LTS-white?style=for-the-badge&logo=unity&logoColor=black" />
|
||||
<img src="https://img.shields.io/badge/NETWORKING-PHOTON_FUSION-0055FF?style=for-the-badge&logo=purescript&logoColor=white" />
|
||||
<img src="https://img.shields.io/badge/STATUS-ACTIVE_DEVELOPMENT-FFD700?style=for-the-badge&logo=pulse&logoColor=black" />
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
<!-- GRID LAYOUT CHO CÁC CHỈ SỐ DỰ ÁN -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" align="center">
|
||||
<tr style="border: none;">
|
||||
<td align="center" style="border: none; padding: 20px;">
|
||||
<img src="https://api.iconify.design/lucide/brain-circuit.svg?color=%23FF3333" width="40" height="40"><br>
|
||||
<strong>Cognitive War</strong><br><small>Tâm lý chiến</small>
|
||||
</td>
|
||||
<td align="center" style="border: none; padding: 20px;">
|
||||
<img src="https://api.iconify.design/lucide/audio-lines.svg?color=%2333FF33" width="40" height="40"><br>
|
||||
<strong>Spatial Audio</strong><br><small>Âm thanh 3D</small>
|
||||
</td>
|
||||
<td align="center" style="border: none; padding: 20px;">
|
||||
<img src="https://api.iconify.design/lucide/expand.svg?color=%2333CCFF" width="40" height="40"><br>
|
||||
<strong>Procedural Maze</strong><br><small>Mê cung vô tận</small>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
---
|
||||
|
||||
</div>
|
||||
|
||||
## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333&flip=horizontal" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision)
|
||||
|
||||
<div align="center">
|
||||
<img src="https://scove-vault.duckdns.org/files/api/public/dl/clQLry_-" width="100%" style="border-radius: 10px; border: 1px solid #333;">
|
||||
</div>
|
||||
|
||||
> **BABA_YAGA** không chỉ là một trò chơi; nó là một thí nghiệm về sự cô lập. Dự án được xây dựng trên triết lý **"High-Stakes Hide & Seek"**, nơi mỗi giây im lặng đều mang trọng lượng ngàn cân.
|
||||
|
||||
### 💠 Các Trụ Cột Cốt Lõi (Core Pillars)
|
||||
|
||||
- 🎛️ **Minimalist UI (The "Invisible" HUD):** Chúng tôi loại bỏ mọi rào cản giữa người chơi và môi trường. Không thanh máu, không bản đồ con. Mọi thông tin đều được phản hồi qua nhịp tim, nhịp thở và độ mờ của tầm nhìn.
|
||||
- 🔊 **Spatial Audio Positioning:** Âm thanh là vũ khí. Seeker phải học cách "nhìn bằng tai", trong khi Trapper có thể sử dụng tiếng động giả để điều hướng con mồi vào bẫy.
|
||||
- 💡 **Dynamic Lighting & Shadow Manipulation:** Ánh sáng trong BABA_YAGA là một tài nguyên hữu hạn. Việc bật đèn pin có thể giúp bạn thấy đường, nhưng đồng thời biến bạn thành một ngọn hải đăng cho kẻ đi săn.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
### <img src="https://api.iconify.design/lucide/command.svg?color=%23FFFFFF" width="22" height="22" style="vertical-align: middle;"> DANH MỤC HỆ THỐNG
|
||||
|
||||
<!-- TABLE OF CONTENTS 2 COLUMNS NO BORDER -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="border: none; border-collapse: collapse; width: 90%;">
|
||||
<tr style="border: none;">
|
||||
<td style="border: none; padding: 12px;" width="50%">
|
||||
<img src="https://api.iconify.design/lucide/telescope.svg?color=%23888888" width="18" style="vertical-align: middle;">
|
||||
<a href="#vision" style="text-decoration: none; color: #E0E0E0; font-weight: bold;">Tầm nhìn & Triết lý</a>
|
||||
</td>
|
||||
<td style="border: none; padding: 12px;" width="50%">
|
||||
<img src="https://api.iconify.design/lucide/box.svg?color=%23888888" width="18" style="vertical-align: middle;">
|
||||
<a href="#mechanics" style="text-decoration: none; color: #E0E0E0; font-weight: bold;">Cơ chế Core Gameplay</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="border: none;">
|
||||
<td style="border: none; padding: 12px;">
|
||||
<img src="https://api.iconify.design/lucide/git-branch.svg?color=%23888888" width="18" style="vertical-align: middle;">
|
||||
<a href="#arch" style="text-decoration: none; color: #E0E0E0; font-weight: bold;">Kiến trúc Technical</a>
|
||||
</td>
|
||||
<td style="border: none; padding: 12px;">
|
||||
<img src="https://api.iconify.design/lucide/network.svg?color=%23888888" width="18" style="vertical-align: middle;">
|
||||
<a href="#networking" style="text-decoration: none; color: #E0E0E0; font-weight: bold;">Đồng bộ Photon Fusion</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="border: none;">
|
||||
<td style="border: none; padding: 12px;">
|
||||
<img src="https://api.iconify.design/lucide/activity.svg?color=%23888888" width="18" style="vertical-align: middle;">
|
||||
<a href="#comeback" style="text-decoration: none; color: #E0E0E0; font-weight: bold;">Hệ thống Adaptive Difficulty</a>
|
||||
</td>
|
||||
<td style="border: none; padding: 12px;">
|
||||
<img src="https://api.iconify.design/lucide/map-pinned.svg?color=%23888888" width="18" style="vertical-align: middle;">
|
||||
<a href="#roadmap" style="text-decoration: none; color: #E0E0E0; font-weight: bold;">Lộ trình Roadmap</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="border: none;">
|
||||
<td style="border: none; padding: 12px;">
|
||||
<img src="https://api.iconify.design/lucide/terminal.svg?color=%23888888" width="18" style="vertical-align: middle;">
|
||||
<a href="#install" style="text-decoration: none; color: #E0E0E0; font-weight: bold;">Hướng dẫn Triển khai</a>
|
||||
</td>
|
||||
<td style="border: none; padding: 12px;">
|
||||
<img src="https://api.iconify.design/lucide/files.svg?color=%23888888" width="18" style="vertical-align: middle;">
|
||||
<a href="#folders" style="text-decoration: none; color: #E0E0E0; font-weight: bold;">Cấu trúc Workspace</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
---
|
||||
|
||||
</div>
|
||||
46
BABA_YAGA_Updater/sections/01_vision.md
Normal file
46
BABA_YAGA_Updater/sections/01_vision.md
Normal file
@@ -0,0 +1,46 @@
|
||||
<div id="vision"></div>
|
||||
|
||||
## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision)
|
||||
|
||||
<div align="center">
|
||||
<img src="https://scove-vault.duckdns.org/files/api/public/dl/SCjSqhKH" width="100%" style="border-radius: 12px; border: 1px solid #222; box-shadow: 0 4px 20px rgba(0,0,0,0.5); alt="Animated Header";>
|
||||
<br>
|
||||
<img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="100%" height="2px">
|
||||
</div>
|
||||
|
||||
> **BABA_YAGA** được định nghĩa là một trải nghiệm **"Psychological Asymmetric Survival"**. Chúng tôi không xây dựng một trò chơi hành động nhanh, mà xây dựng một môi trường nơi **sự kiên nhẫn** là vũ khí và **tư duy logic** là chìa khóa để sống sót. Trọng tâm của dự án xoay quanh việc thao túng nhận thức của người chơi thông qua ba trụ cột kỹ thuật:
|
||||
|
||||
<br>
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;">
|
||||
<tr style="border: none;">
|
||||
<td width="33%" align="center" style="border: none; padding: 15px; background: rgba(255,255,255,0.03); border-radius: 10px 0 0 10px;">
|
||||
<img src="https://api.iconify.design/lucide/monitor-off.svg?color=%23888888" width="32" height="32" />
|
||||
<br><br>
|
||||
<strong>The "Zero-UI" Philosophy</strong>
|
||||
<br>
|
||||
<p style="font-size: 13px; color: #999;">Triệt tiêu hoàn toàn các yếu tố HUD truyền thống. Người chơi phải quan sát nhịp thở, vết máu và môi trường để tự đánh giá trạng thái nhân vật.</p>
|
||||
</td>
|
||||
<td width="33%" align="center" style="border: none; padding: 15px; background: rgba(255,255,255,0.05);">
|
||||
<img src="https://api.iconify.design/lucide/audio-waveform.svg?color=%2344FF44" width="32" height="32" />
|
||||
<br><br>
|
||||
<strong>Acoustic Navigation</strong>
|
||||
<br>
|
||||
<p style="font-size: 13px; color: #999;">Hệ thống Spatial Audio biến âm thanh thành "bản đồ thị giác thứ hai". Tận dụng HRTF để định vị chính xác đối phương qua các tiếng động siêu nhỏ.</p>
|
||||
</td>
|
||||
<td width="33%" align="center" style="border: none; padding: 15px; background: rgba(255,255,255,0.03); border-radius: 0 10px 10px 0;">
|
||||
<img src="https://api.iconify.design/lucide/lightbulb.svg?color=%23FFD700" width="32" height="32" />
|
||||
<br><br>
|
||||
<strong>Tactical Photometry</strong>
|
||||
<br>
|
||||
<p style="font-size: 13px; color: #999;">Ánh sáng là tài nguyên chiến thuật. Việc quản lý photon (đèn pin, nến, lửa) quyết định ranh giới giữa kẻ đi săn và con mồi.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
|
||||
<div align="right">
|
||||
<img src="https://api.iconify.design/lucide/info.svg?color=%23555555" width="14" style="vertical-align: middle;">
|
||||
<small><i>Dự án đang trong giai đoạn Technical Alpha, tập trung tối ưu hóa hệ thống Perception.</i></small>
|
||||
</div>
|
||||
158
BABA_YAGA_Updater/sections/02_mechanics.md
Normal file
158
BABA_YAGA_Updater/sections/02_mechanics.md
Normal file
@@ -0,0 +1,158 @@
|
||||
<div id="mechanics"></div>
|
||||
|
||||
## <img src="https://api.iconify.design/lucide/gamepad-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Cơ chế Cốt lõi (Core Mechanics)
|
||||
|
||||
> Kiến trúc gameplay của **BABA_YAGA** được xây dựng dựa trên nguyên lý **"Thông tin Bất xứng" (Information Asymmetry)**. Hai phe tham gia không chỉ khác biệt về công cụ, mà còn trải nghiệm trò chơi ở hai chiều không gian và logic hoàn toàn trái ngược nhau.
|
||||
|
||||
<br>
|
||||
|
||||
### <img src="https://api.iconify.design/lucide/scale-3d.svg?color=%23E0E0E0" width="22" height="22" style="vertical-align: middle;"> Hệ sinh thái Bất đối xứng (The Asymmetric Paradigm)
|
||||
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: none;">
|
||||
<!-- HEADER ROW -->
|
||||
<tr>
|
||||
<td width="50%" align="left" style="background: rgba(255,215,0,0.05); padding: 15px; border-radius: 8px 0 0 0; border-bottom: 2px solid rgba(255,215,0,0.3);">
|
||||
<h3 style="margin: 0; color: #FFD700;">
|
||||
<img src="https://api.iconify.design/lucide/footprints.svg?color=%23FFD700" width="24" style="vertical-align: middle;"> THE SEEKER
|
||||
</h3>
|
||||
<small style="color: #999;">Thực thể Động (Kinetic Survivor)</small>
|
||||
</td>
|
||||
<td width="50%" align="left" style="background: rgba(255,51,51,0.05); padding: 15px; border-radius: 0 8px 0 0; border-bottom: 2px solid rgba(255,51,51,0.3);">
|
||||
<h3 style="margin: 0; color: #FF3333;">
|
||||
<img src="https://api.iconify.design/lucide/cctv.svg?color=%23FF3333" width="24" style="vertical-align: middle;"> THE TRAPPER
|
||||
</h3>
|
||||
<small style="color: #999;">Kiến trúc sư Bóng tối (Environment Architect)</small>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- ROW 1: VAI TRÒ -->
|
||||
<tr>
|
||||
<td style="padding: 12px 15px; border-bottom: 1px solid rgba(255,255,255,0.05);">
|
||||
<strong><img src="https://api.iconify.design/lucide/crosshair.svg?color=%23888888" width="16" style="vertical-align: middle;"> Vai trò (Role)</strong><br>
|
||||
Chủ động điều hướng (Navigation), quản lý tài nguyên sinh tồn và tìm điểm Extraction Point. Phải di chuyển liên tục để tránh bị cô lập.
|
||||
</td>
|
||||
<td style="padding: 12px 15px; border-bottom: 1px solid rgba(255,255,255,0.05);">
|
||||
<strong><img src="https://api.iconify.design/lucide/shield-ban.svg?color=%23888888" width="16" style="vertical-align: middle;"> Vai trò (Role)</strong><br>
|
||||
Thiết lập hệ thống phòng ngự tĩnh, chặn luồng di chuyển (Choke points) và dồn ép tâm lý con mồi vào bẫy tử thần.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- ROW 2: TẦM NHÌN -->
|
||||
<tr>
|
||||
<td style="padding: 12px 15px; border-bottom: 1px solid rgba(255,255,255,0.05);">
|
||||
<strong><img src="https://api.iconify.design/lucide/eye.svg?color=%23888888" width="16" style="vertical-align: middle;"> Tầm nhìn (Perception)</strong><br>
|
||||
Góc nhìn thứ nhất <b>(Immersive FPS)</b>. Bị giới hạn hoàn toàn bởi bóng tối, chỉ thấy được những gì chùm sáng đèn pin quét qua.
|
||||
</td>
|
||||
<td style="padding: 12px 15px; border-bottom: 1px solid rgba(255,255,255,0.05);">
|
||||
<strong><img src="https://api.iconify.design/lucide/monitor.svg?color=%23888888" width="16" style="vertical-align: middle;"> Tầm nhìn (Perception)</strong><br>
|
||||
Góc nhìn Thượng đế <b>(Top-down / Surveillance Cams)</b>. Quản lý bản đồ qua hệ thống Heatmap và Camera an ninh đa điểm.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- ROW 3: ĐỘNG LỰC HỌC -->
|
||||
<tr>
|
||||
<td style="padding: 12px 15px; border-bottom: 1px solid rgba(255,255,255,0.05);">
|
||||
<strong><img src="https://api.iconify.design/lucide/wind.svg?color=%23888888" width="16" style="vertical-align: middle;"> Cơ động (Mobility)</strong><br>
|
||||
Tốc độ bứt tốc cao <b>(Sprinting: 9.0m/s)</b>. Khả năng tương tác vật lý trực tiếp với môi trường (Vaulting, Sliding).
|
||||
</td>
|
||||
<td style="padding: 12px 15px; border-bottom: 1px solid rgba(255,255,255,0.05);">
|
||||
<strong><img src="https://api.iconify.design/lucide/ghost.svg?color=%23888888" width="16" style="vertical-align: middle;"> Cơ động (Mobility)</strong><br>
|
||||
Tốc độ vật lý thấp, nhưng bù đắp bằng khả năng <b>Dịch chuyển Tức thời (Teleportation)</b> qua các node mạng lưới bóng tối.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- ROW 4: CÔNG CỤ -->
|
||||
<tr>
|
||||
<td style="padding: 12px 15px; border-radius: 0 0 0 8px;">
|
||||
<strong><img src="https://api.iconify.design/lucide/wrench.svg?color=%23888888" width="16" style="vertical-align: middle;"> Khí tài (Arsenal)</strong><br>
|
||||
<img src="https://img.shields.io/badge/-Flashlight-black?style=flat&logo=dcent&logoColor=white"/>
|
||||
<img src="https://img.shields.io/badge/-Dash_Mechanic-black?style=flat&logo=dash&logoColor=white"/>
|
||||
<img src="https://img.shields.io/badge/-Parkour_Rig-black?style=flat&logo=framer&logoColor=white"/>
|
||||
</td>
|
||||
<td style="padding: 12px 15px; border-radius: 0 0 8px 0;">
|
||||
<strong><img src="https://api.iconify.design/lucide/server-cog.svg?color=%23888888" width="16" style="vertical-align: middle;"> Khí tài (Arsenal)</strong><br>
|
||||
<img src="https://img.shields.io/badge/-Bear_Traps-black?style=flat&logo=target&logoColor=red"/>
|
||||
<img src="https://img.shields.io/badge/-Decoy_Audio-black?style=flat&logo=audacity&logoColor=red"/>
|
||||
<img src="https://img.shields.io/badge/-Door_Override-black?style=flat&logo=lock&logoColor=red"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
|
||||
### <img src="https://api.iconify.design/lucide/refresh-cw.svg?color=%23E0E0E0" width="22" height="22" style="vertical-align: middle;"> Vòng lặp Gameplay & Đồng bộ Hóa (Deterministic Game Loop)
|
||||
|
||||
> Toàn bộ logic bên dưới được xử lý trong `FixedUpdateNetwork()` của Photon Fusion. Chúng tôi sử dụng kiến trúc **Server Reconciliation** kết hợp **Client Prediction** để đảm bảo Seeker di chuyển mượt mà (không delay), trong khi Trapper vẫn có quyền kiểm soát toàn vẹn trạng thái bản đồ (Server Authority).
|
||||
|
||||
*(Lưu ý kỹ thuật: Sơ đồ dưới đây đã được cấu trúc lại thuộc tính HTML bên trong để đảm bảo khả năng render không bị lỗi trên các bộ phân tích Markdown của GitHub/Gitea)*
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
classDef initStyle fill:#1a2b3c,stroke:#33CCFF,stroke-width:2px,color:#E0E0E0;
|
||||
classDef seekerStyle fill:#332200,stroke:#FFD700,stroke-width:2px,color:#FFD700;
|
||||
classDef trapperStyle fill:#2b0000,stroke:#FF3333,stroke-width:2px,color:#FF3333;
|
||||
classDef netStyle fill:#111111,stroke:#888888,stroke-dasharray:5 5,color:#E0E0E0;
|
||||
classDef winStyle fill:#003311,stroke:#00FF55,stroke-width:3px,color:#00FF55;
|
||||
classDef criticalStyle fill:#4d0000,stroke:#FF0000,stroke-width:2px,color:#FF0000;
|
||||
|
||||
subgraph Initialization ["1. KHỞI TẠO HỆ THỐNG (NET-SYNC)"]
|
||||
A["🚀 Bắt đầu Trận đấu"] --> B{"🤝 Matchmaking\nPhoton Fusion"}
|
||||
B --> C["🎭 Phân vai: Seeker vs Trapper"]
|
||||
C --> D["🧩 Maze Generator\nPrims/Wilsons"]
|
||||
D --> E["🏛️ Baking NavMesh & Colliders"]
|
||||
E --> F["👤 Character Auto-Setup"]
|
||||
F --> G["📍 Spawn Players"]
|
||||
end
|
||||
class A,B,C,D,E,F,G initStyle;
|
||||
|
||||
subgraph Active_Round ["2. VÒNG LẶP CHIẾN ĐẤU (CORE LOOP)"]
|
||||
G --> Loop(["⚙️ TICK: FixedUpdateNetwork"])
|
||||
|
||||
subgraph Seeker_Logic ["⚡ SEEKER - POV 1st Person"]
|
||||
S1["⌨️ Input: WASD/Space"] --> S2["🏃 State: Move/Dash"]
|
||||
S2 --> S3{"❓ Hành động?"}
|
||||
S3 -- "Sprinting" --> S4["🔊 Noise Up"]
|
||||
S3 -- "Sneaking" --> S5["🔇 Noise Down"]
|
||||
S3 -- "Flashlight" --> S6["🔦 Lộ vị trí"]
|
||||
S4 & S5 & S6 --> S_Check{"🔍 Check Env"}
|
||||
S_Check -- "Dẫm bẫy" --> S_Trap["⚠️ Bị khống chế"]
|
||||
end
|
||||
|
||||
subgraph Trapper_Logic ["🔧 TRAPPER - Strategy View"]
|
||||
T1["🖱️ Mouse Input"] --> T2["🗺️ View: Heatmap/Cams"]
|
||||
T2 --> T3{"🔨 Kỹ năng?"}
|
||||
T3 -- "Đặt bẫy" --> T4["💾 Sync Trap"]
|
||||
T3 -- "Scan" --> T5["📡 Ping Seeker"]
|
||||
T3 -- "Lock" --> T6["🚪 Khóa cửa"]
|
||||
T4 & T5 & T6 --> T_Check{"👁️ Theo dõi"}
|
||||
end
|
||||
|
||||
subgraph Network_Sync ["🌐 NETWORK SYNC LAYER"]
|
||||
Loop --> NS1["⏩ Client Prediction"]
|
||||
NS1 --> NS2["🔄 Server Reconciliation"]
|
||||
NS2 --> NS3["📦 State Sync"]
|
||||
end
|
||||
end
|
||||
class S1,S2,S3,S4,S5,S6,S_Check seekerStyle;
|
||||
class T1,T2,T3,T4,T5,T6,T_Check trapperStyle;
|
||||
class NS1,NS2,NS3,Loop netStyle;
|
||||
class S_Trap criticalStyle;
|
||||
|
||||
subgraph Result_Logic ["3. KẾT THÚC & THƯỞNG"]
|
||||
S_Check -- "Chạm Exit" --> Win_S["🏆 SEEKER THẮNG"]
|
||||
T_Check -- "Bắt được Seeker" --> Win_T["🏆 TRAPPER THẮNG"]
|
||||
Loop -- "Timer = 0" --> Win_T
|
||||
|
||||
Win_S & Win_T --> Post_Match["📊 Thống kê Match"]
|
||||
Post_Match --> Buff{"⚖️ Hệ thống Adaptive"}
|
||||
Buff -- "Thua liên tiếp" --> Buff_Apply["💎 Kích hoạt Comeback Buff"]
|
||||
Buff_Apply --> A
|
||||
end
|
||||
class Win_S,Win_T winStyle;
|
||||
class Post_Match,Buff,Buff_Apply initStyle;
|
||||
|
||||
S_Trap -.->|"Cảnh báo State"| T_Check
|
||||
S4 -.->|"Phát xạ Sóng âm"| T2
|
||||
T4 -.->|"Collision Vô hình"| S_Check
|
||||
NS3 --> Loop
|
||||
```
|
||||
112
BABA_YAGA_Updater/sections/03_architecture.md
Normal file
112
BABA_YAGA_Updater/sections/03_architecture.md
Normal file
@@ -0,0 +1,112 @@
|
||||
<div id="arch"></div>
|
||||
|
||||
## <img src="https://api.iconify.design/lucide/cpu.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Kỹ thuật (Technical Architecture)
|
||||
|
||||
> Hệ thống của **BABA_YAGA** được thiết kế theo chuẩn **Modular Architecture** (Kiến trúc Module), tách biệt hoàn toàn giữa logic xử lý vật lý (Kinematics), trạng thái mạng (Net-State) và phản hồi thị giác (Visual Feedbacks). Điều này đảm bảo hiệu năng cao (High Tickrate) ngay cả trong các môi trường mê cung phức tạp.
|
||||
|
||||
<br>
|
||||
|
||||
### <img src="https://api.iconify.design/lucide/git-merge.svg?color=%23E0E0E0" width="22" height="22" style="vertical-align: middle;"> 1. Advanced Kinematic FSM & Camera Dynamics
|
||||
|
||||
Hệ thống điều khiển nhân vật cốt lõi được xây dựng trên mô hình **Finite State Machine (FSM)** phân cấp. Không chỉ xử lý nội suy vật lý mượt mà, hệ thống còn tích hợp trực tiếp với **Procedural Camera Dynamics** (Head-bob, Dynamic FOV, Tilt) để tạo ra sự cộng hưởng về cảm giác nhập vai, đồng thời duy trì tính đồng bộ tuyệt đối qua lớp mạng (Networking Layer).
|
||||
|
||||
*(Lưu ý: Sơ đồ trạng thái dưới đây đã được tối ưu hóa cho thuật toán dự đoán phía Client)*
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
direction TB
|
||||
|
||||
state "👣 KINEMATIC GROUND" as Ground {
|
||||
[*] --> Idle
|
||||
|
||||
state Idle {
|
||||
I_P: ⚓ Vel < 0.1m/s
|
||||
I_C: 📈 Breathing Cam (0.5Hz)
|
||||
}
|
||||
|
||||
Idle --> Moving : Input.mag > 0.1
|
||||
state Moving {
|
||||
M_P: 🚶 Speed 2-4m/s
|
||||
M_C: 🎥 Head Bob (1.2Hz)
|
||||
}
|
||||
|
||||
Moving --> Sneaking : Hold [Sneak]
|
||||
state Sneaking {
|
||||
Sn_P: 🔇 Acoustic Profile -50%
|
||||
Sn_C: ⬇️ Collider Height Down
|
||||
}
|
||||
|
||||
Moving --> Sprinting : Hold [Sprint]
|
||||
Sneaking --> Moving : Release [Sneak]
|
||||
|
||||
state Sprinting {
|
||||
Sp_P: ⚡ Speed > 6.5m/s
|
||||
Sp_C: 🔵 Dynamic FOV Warp
|
||||
}
|
||||
|
||||
Sprinting --> Moving : Stamina Depleted
|
||||
}
|
||||
|
||||
state "🪶 AIRBORNE DYNAMICS" as Air {
|
||||
state Jump {
|
||||
J_P: ⬆️ AddForce Up
|
||||
}
|
||||
state Falling {
|
||||
F_P: 📉 Gravity x1.5
|
||||
}
|
||||
state Landing {
|
||||
L_P: 📐 Impact Raycast
|
||||
}
|
||||
|
||||
Jump --> Falling : Vel.y < 0
|
||||
Falling --> Landing : KCC.IsGrounded == true
|
||||
}
|
||||
|
||||
state "🎯 UTILITY / ACTION" as Utility {
|
||||
state Dashing {
|
||||
D_P: 💨 Vector Burst (15m/s)
|
||||
}
|
||||
state Interacting {
|
||||
Int_P: 🔒 Root Motion Lock
|
||||
}
|
||||
}
|
||||
|
||||
state "🌐 NET-SYNC LAYER" as Net {
|
||||
state "Input Authority (Client)" as IA
|
||||
state "State Authority (Server)" as SA
|
||||
IA --> SA : Send Input Tick
|
||||
SA --> IA : Force Reconcile
|
||||
}
|
||||
|
||||
Ground --> Air : KCC.IsGrounded == false
|
||||
Air --> Ground : OnLandEvent.Fire()
|
||||
Ground --> Utility : InvokeAbility()
|
||||
Utility --> Ground : Action Complete
|
||||
|
||||
note left of Ground
|
||||
💾 Sync: KCC Velocity
|
||||
🗂️ State: Networked Enum
|
||||
end note
|
||||
|
||||
note right of Net
|
||||
⚙️ Photon Fusion
|
||||
🛡️ Anti-Cheat Validated
|
||||
end note
|
||||
```
|
||||
<br>
|
||||
<img src="https://api.iconify.design/lucide/radar.svg?color=%23E0E0E0" width="22" height="22" style="vertical-align: middle;"> 2. Tactical Environment Scanner & Interaction
|
||||
|
||||
Việc tương tác trong một môi trường bị giới hạn hoàn toàn về tầm nhìn đòi hỏi một hệ thống truy vấn không gian (Spatial Querying) cực kỳ chính xác. Chúng tôi từ chối sử dụng cơ chế Raycast điểm đơn thông thường.
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse; margin-top: 10px;">
|
||||
<tr>
|
||||
<td width="80px" align="center" style="background: rgba(51, 204, 255, 0.1); border-radius: 8px 0 0 8px; border-left: 3px solid #33CCFF;">
|
||||
<img src="https://api.iconify.design/lucide/scan-line.svg?color=%2333CCFF" width="40" height="40">
|
||||
</td>
|
||||
<td style="background: rgba(255,255,255,0.03); padding: 15px; border-radius: 0 8px 8px 0;">
|
||||
<h4 style="margin: 0 0 5px 0; color: #E0E0E0;">Hệ thống lõi: <code>EnvironmentScanner.cs</code></h4>
|
||||
<p style="font-size: 14px; color: #999; margin: 0; line-height: 1.5;">
|
||||
Sử dụng kết hợp <code>Physics.OverlapSphereNonAlloc</code> để tối ưu hóa bộ nhớ (Zero Garbage Collection) và <code>SphereCast</code> để tính toán đường đạn thể tích. Hệ thống tự động phân tích và trích xuất các đối tượng thỏa mãn đa hình <strong>Interface <code>IInteractable</code></strong>, đảm bảo người chơi có thể kích hoạt các thiết bị (Cửa, Máy phát điện, Bẫy) một cách mượt mà ngay cả khi chúng hoàn toàn chìm trong bóng tối.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
86
BABA_YAGA_Updater/sections/04_maze.md
Normal file
86
BABA_YAGA_Updater/sections/04_maze.md
Normal file
@@ -0,0 +1,86 @@
|
||||
## <img src="https://api.iconify.design/lucide/globe.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Mạng (Advanced Netcode Architecture)
|
||||
|
||||
> Để đảm bảo tính công bằng trong một tựa game mang nặng yếu tố hành động lén lút và phản xạ ngàn cân treo sợi tóc, **BABA_YAGA** sử dụng **Photon Fusion (State Sync)** làm lõi đồng bộ. Hệ thống được tinh chỉnh để mô phỏng cảm giác "Độ trễ bằng 0" (Zero-Latency Feel) thông qua kiến trúc mạng tất định (Deterministic Network).
|
||||
|
||||
<br>
|
||||
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: none;">
|
||||
<tr style="border: none;">
|
||||
<td width="33%" align="center" style="border: none; padding: 15px; background: rgba(51,204,255,0.05); border-radius: 8px 0 0 8px; border-bottom: 2px solid rgba(51,204,255,0.3);">
|
||||
<img src="https://api.iconify.design/lucide/fast-forward.svg?color=%2333CCFF" width="28" height="28" />
|
||||
<br><br>
|
||||
<strong style="color: #E0E0E0;">Client-Side Prediction</strong>
|
||||
<br>
|
||||
<p style="font-size: 13px; color: #999; margin-top: 5px;">Mô phỏng trước các chuyển động của người chơi trên Local Client, loại bỏ hoàn toàn độ trễ Input Delay khi di chuyển hoặc lướt.</p>
|
||||
</td>
|
||||
<td width="33%" align="center" style="border: none; padding: 15px; background: rgba(255,51,51,0.05); border-bottom: 2px solid rgba(255,51,51,0.3);">
|
||||
<img src="https://api.iconify.design/lucide/shield-check.svg?color=%23FF3333" width="28" height="28" />
|
||||
<br><br>
|
||||
<strong style="color: #E0E0E0;">Server Authority</strong>
|
||||
<br>
|
||||
<p style="font-size: 13px; color: #999; margin-top: 5px;">Máy chủ nắm quyền quyết định cuối cùng. Ngăn chặn triệt để các hành vi gian lận như Speedhack, Teleport hay thao túng Hitbox.</p>
|
||||
</td>
|
||||
<td width="33%" align="center" style="border: none; padding: 15px; background: rgba(255,215,0,0.05); border-radius: 0 8px 8px 0; border-bottom: 2px solid rgba(255,215,0,0.3);">
|
||||
<img src="https://api.iconify.design/lucide/history.svg?color=%23FFD700" width="28" height="28" />
|
||||
<br><br>
|
||||
<strong style="color: #E0E0E0;">Lag Compensation</strong>
|
||||
<br>
|
||||
<p style="font-size: 13px; color: #999; margin-top: 5px;">Rewind trạng thái Hitbox trên Server về đúng thời điểm Client thực hiện thao tác (Ping), đảm bảo tính chính xác cho các cú vồ/bẫy.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
|
||||
### <img src="https://api.iconify.design/lucide/workflow.svg?color=%23E0E0E0" width="22" height="22" style="vertical-align: middle;"> Vòng xoay Dữ liệu Mạng (Network Data Flow Pipeline)
|
||||
|
||||
> Biểu đồ dưới đây mô tả luồng xử lý thông tin tại mỗi **Tick (Khung hình mạng)**. Việc phân tách rõ ràng giữa *Logical State* (trạng thái mạng) và *Visual Presentation* (hiển thị hình ảnh) giúp khung hình của game (FPS) không bị khóa vào Tickrate của Server.
|
||||
|
||||
*(Lưu ý: Các trích xuất HTML trong sơ đồ đã được chuẩn hóa để tương thích hoàn toàn với bộ phân tích Markdown)*
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
autonumber
|
||||
|
||||
box rgba(51, 204, 255, 0.05) "⚡ LOCAL ENVIRONMENT (Client Auth)"
|
||||
participant IR as "🖱️ Input"
|
||||
participant CP as "💻 Local Player"
|
||||
end
|
||||
|
||||
box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)"
|
||||
participant NT as "📡 Network Layer"
|
||||
participant S as "🖥️ Server Tick"
|
||||
end
|
||||
|
||||
box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS"
|
||||
participant RP as "👥 Proxies"
|
||||
end
|
||||
|
||||
Note over IR,CP: [PHASE 1] DATA ACQUISITION
|
||||
IR->>CP: OnMove / OnAbility (Raw Input)
|
||||
CP->>CP: 📦 Pack NetworkInputStruct
|
||||
|
||||
Note over CP: [PHASE 2] FORWARD PREDICTION
|
||||
CP->>CP: ⚡ Run Local Kinematics (Tick N)
|
||||
CP->>NT: 📤 Transmit Input Payload
|
||||
|
||||
rect rgba(255, 51, 51, 0.1)
|
||||
Note over NT,S: [PHASE 3] SERVER VALIDATION (Simulation)
|
||||
NT->>S: Deliver UDP Packet
|
||||
S->>S: 🛡️ Validate Rules & Apply Physics
|
||||
S-->>NT: 📢 Broadcast State Snapshot (Tick N)
|
||||
end
|
||||
|
||||
Note over NT,CP: [PHASE 4] RECONCILIATION PROTOCOL
|
||||
NT-->>CP: State Snapshot (Global Truth)
|
||||
CP->>CP: ⚖️ Check Desync (Threshold)
|
||||
CP->>CP: 🔄 Snap Pos & Resimulate if Error
|
||||
|
||||
Note over NT,RP: [PHASE 5] PROXY INTERPOLATION
|
||||
NT-->>RP: State Snapshot
|
||||
RP->>RP: 〰️ Lerp Position / Rotation Smoothly
|
||||
|
||||
Note over CP,RP: [PHASE 6] VISUAL RENDERING
|
||||
CP->>CP: 🎥 Update Local VFX / Camera Shake
|
||||
RP->>RP: 👻 Update Animator & Mesh Transforms
|
||||
```
|
||||
85
BABA_YAGA_Updater/sections/05_networking.md
Normal file
85
BABA_YAGA_Updater/sections/05_networking.md
Normal file
@@ -0,0 +1,85 @@
|
||||
<div id="networking"></div>
|
||||
|
||||
## <img src="https://api.iconify.design/lucide/globe-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Netcode (Deterministic Networking)
|
||||
|
||||
<div align="center">
|
||||
<img src="https://img.shields.io/badge/ENGINE-PHOTON_FUSION_2.0-0055FF?style=for-the-badge&logo=purescript&logoColor=white" />
|
||||
<img src="https://img.shields.io/badge/TOPOLOGY-CLIENT_HOSTED_SERVER-FF3333?style=for-the-badge&logo=server&logoColor=white" />
|
||||
<img src="https://img.shields.io/badge/TICKRATE-60_Hz-00FF55?style=for-the-badge&logo=activity&logoColor=black" />
|
||||
</div>
|
||||
|
||||
> Tựa game với nhịp độ sinh tồn căng thẳng không có chỗ cho sự sai lệch (Desync). **BABA_YAGA** vận hành trên kiến trúc **State Sync (Đồng bộ Trạng thái)** kết hợp quy trình **Dự đoán phía Client (Client-Side Prediction)** và **Bù trừ Độ trễ (Lag Compensation)**, mang lại cảm giác phản hồi tức thì "Zero-Latency" ngay cả ở mức Ping 100ms+.
|
||||
|
||||
<br>
|
||||
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: none;">
|
||||
<tr>
|
||||
<td width="50%" style="padding: 15px; background: rgba(51,204,255,0.05); border-left: 3px solid #33CCFF; border-bottom: 1px solid rgba(255,255,255,0.05);">
|
||||
<strong style="color: #33CCFF;"><img src="https://api.iconify.design/lucide/fast-forward.svg?color=%2333CCFF" width="18" style="vertical-align: middle;"> Client-Side Prediction (Dự đoán cục bộ)</strong><br>
|
||||
<p style="font-size: 13px; color: #AAA; margin-top: 8px;">Người chơi nội bộ (Local Player) thực thi các lệnh di chuyển, lướt, rọi đèn pin <b>ngay lập tức</b> mà không cần đợi Server cho phép. Tạo cảm giác điều khiển mượt mà như game Offline.</p>
|
||||
</td>
|
||||
<td width="50%" style="padding: 15px; background: rgba(255,51,51,0.05); border-left: 3px solid #FF3333; border-bottom: 1px solid rgba(255,255,255,0.05);">
|
||||
<strong style="color: #FF3333;"><img src="https://api.iconify.design/lucide/shield-check.svg?color=%23FF3333" width="18" style="vertical-align: middle;"> Server Reconciliation (Thuật toán Đối chiếu)</strong><br>
|
||||
<p style="font-size: 13px; color: #AAA; margin-top: 8px;">Máy chủ vẫn nắm quyền tối thượng (Authority). Nếu Client dự đoán sai (do va chạm với bẫy hoặc bị kẹt), Server sẽ ép Client "Rollback" về trạng thái chuẩn trong tích tắc (Snap Correction).</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
|
||||
### <img src="https://api.iconify.design/lucide/satellite-dish.svg?color=%23E0E0E0" width="22" height="22" style="vertical-align: middle;"> Network Data Flow (Luồng Đồng bộ Hóa)
|
||||
|
||||
> Sơ đồ biểu diễn vòng đời của một **Network Tick** từ khi người chơi nhấn phím đến khi hình ảnh được kết xuất (Render) trên màn hình của những người chơi khác.
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
autonumber
|
||||
|
||||
box rgba(51, 204, 255, 0.05) "⚡ LOCAL ENVIRONMENT (Client Auth)"
|
||||
participant IR as "🖱️ Input"
|
||||
participant CP as "💻 Local Player"
|
||||
end
|
||||
|
||||
box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)"
|
||||
participant NT as "📡 Network Layer"
|
||||
participant S as "🖥️ Server Tick"
|
||||
end
|
||||
|
||||
box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS"
|
||||
participant RP as "👥 Proxies"
|
||||
end
|
||||
|
||||
Note over IR,CP: [PHASE 1] DATA ACQUISITION
|
||||
IR->>CP: OnMove / OnAbility (Raw Input)
|
||||
CP->>CP: 📦 Pack NetworkInputStruct
|
||||
|
||||
Note over CP: [PHASE 2] FORWARD PREDICTION
|
||||
CP->>CP: ⚡ Run Local Kinematics (Tick N)
|
||||
CP->>NT: 📤 Transmit Input Payload
|
||||
|
||||
rect rgba(255, 51, 51, 0.1)
|
||||
Note over NT,S: [PHASE 3] SERVER VALIDATION (Simulation)
|
||||
NT->>S: Deliver UDP Packet
|
||||
S->>S: 🛡️ Validate Rules & Apply Physics
|
||||
S-->>NT: 📢 Broadcast State Snapshot (Tick N)
|
||||
end
|
||||
|
||||
Note over NT,CP: [PHASE 4] RECONCILIATION PROTOCOL
|
||||
NT-->>CP: State Snapshot (Global Truth)
|
||||
CP->>CP: ⚖️ Check Desync (Threshold)
|
||||
CP->>CP: 🔄 Snap Pos & Resimulate if Error
|
||||
|
||||
Note over NT,RP: [PHASE 5] PROXY INTERPOLATION
|
||||
NT-->>RP: State Snapshot
|
||||
RP->>RP: 〰️ Lerp Position / Rotation Smoothly
|
||||
|
||||
Note over CP,RP: [PHASE 6] VISUAL RENDERING
|
||||
CP->>CP: 🎥 Update Local VFX / Camera Shake
|
||||
RP->>RP: 👻 Update Animator & Mesh Transforms
|
||||
```
|
||||
<br>
|
||||
<div align="center">
|
||||
<img src="https://api.iconify.design/lucide/shield-alert.svg?color=%23555555" width="16" style="vertical-align: middle;">
|
||||
<small style="color: #888;"><i>Tất cả Logic Va chạm (Collision) và Phát hiện Âm thanh (Noise Detection) được phân tách hoàn toàn khỏi luồng Render đồ họa, ngăn chặn hiện tượng rách hình ảnh (Tearing) do lag mạng.</i></small>
|
||||
</div>
|
||||
```
|
||||
130
BABA_YAGA_Updater/sections/06_comeback.md
Normal file
130
BABA_YAGA_Updater/sections/06_comeback.md
Normal file
@@ -0,0 +1,130 @@
|
||||
<div id="comeback"></div>
|
||||
|
||||
## <img src="https://api.iconify.design/lucide/scale.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Hệ thống Cân bằng Thích ứng (Tiered "Despair" Mechanics)
|
||||
|
||||
<div align="center">
|
||||
<img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="100%" height="2px" style="filter: grayscale(100%) contrast(200%) sepia(100%) hue-rotate(300deg) saturate(500%);">
|
||||
</div>
|
||||
|
||||
> Để duy trì trạng thái **"Căng thẳng tột độ" (High-Stakes)** đến những giây phút cuối cùng, kiến trúc của **BABA_YAGA** tích hợp một động cơ cân bằng ngầm mang tên **"Despair Mechanics"**. Khi một thực thể bị đẩy vào chuỗi thất bại liên tiếp, Mê cung sẽ bẻ cong các quy tắc vật lý và logic thông thường để ban cho họ những đặc quyền sinh tồn phi mã, tạo ra những khoảnh khắc lật kèo (Comeback) chấn động mạng lưới.
|
||||
|
||||
<br>
|
||||
|
||||
### <img src="https://api.iconify.design/lucide/trending-up.svg?color=%23E0E0E0" width="22" height="22" style="vertical-align: middle;"> Phân tầng Bù trừ theo Chuỗi Thua (Progression Hierarchy)
|
||||
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; text-align: center;">
|
||||
<tr>
|
||||
<td width="33%" style="padding: 15px; background: rgba(255,255,255,0.03); border-right: 2px solid #222; border-radius: 8px 0 0 8px;">
|
||||
<img src="https://api.iconify.design/lucide/battery-low.svg?color=%23888888" width="32" height="32" /><br><br>
|
||||
<img src="https://img.shields.io/badge/LOSS_STREAK-1_ROUND-888888?style=flat-square" /><br>
|
||||
<h3 style="color: #E0E0E0; margin: 10px 0 5px 0;">TIER 1: Awakening</h3>
|
||||
<p style="font-size: 12px; color: #999;">Khởi động giao thức sinh tồn cơ bản. Lựa chọn 1 Buff thụ động (Nâng cấp chỉ số Base Stats như Tốc độ / Tầm nhìn).</p>
|
||||
</td>
|
||||
<td width="33%" style="padding: 15px; background: rgba(255,255,255,0.05); border-right: 2px solid #222;">
|
||||
<img src="https://api.iconify.design/lucide/battery-medium.svg?color=%23FF8C00" width="32" height="32" /><br><br>
|
||||
<img src="https://img.shields.io/badge/LOSS_STREAK-2_ROUNDS-FF8C00?style=flat-square" /><br>
|
||||
<h3 style="color: #FF8C00; margin: 10px 0 5px 0;">TIER 2: Evolution</h3>
|
||||
<p style="font-size: 12px; color: #999;">Tiến hóa cơ sở hạ tầng. Nhận đồng thời 1 Kỹ năng Chủ động (Active Skill) và 1 Đặc quyền Thụ động (Passive Perk).</p>
|
||||
</td>
|
||||
<td width="33%" style="padding: 15px; background: rgba(255,0,0,0.05); border-radius: 0 8px 8px 0;">
|
||||
<img src="https://api.iconify.design/lucide/battery-warning.svg?color=%23FF0000" width="32" height="32" /><br><br>
|
||||
<img src="https://img.shields.io/badge/LOSS_STREAK-3+_ROUNDS-FF0000?style=flat-square" /><br>
|
||||
<h3 style="color: #FF3333; margin: 10px 0 5px 0;">TIER 3: Manifestation</h3>
|
||||
<p style="font-size: 12px; color: #999;">Ghi đè hệ thống (Override Ruleset). Kích hoạt <strong>Ultimate Skill</strong> thay đổi hoàn toàn cục diện trận đấu trong thời gian ngắn.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
|
||||
---
|
||||
|
||||
### <img src="https://api.iconify.design/lucide/fingerprint.svg?color=%23FFD700" width="24" height="24" style="vertical-align: middle;"> THE SEEKER: Thức Tỉnh Bản Năng (Survival Evolution)
|
||||
|
||||
Khi Seeker liên tục bị bóng tối nuốt chửng, hệ thần kinh của họ sẽ bị ép buộc tiến hóa vượt giới hạn để chống lại môi trường khắc nghiệt:
|
||||
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border:collapse; border: none;">
|
||||
<tr>
|
||||
<td width="25%" style="padding: 12px; border-bottom: 1px solid #333; vertical-align: top;">
|
||||
<img src="https://img.shields.io/badge/TIER_1-SIXTH_SENSE-FFD700?style=for-the-badge" />
|
||||
</td>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #333; vertical-align: top;">
|
||||
<strong style="color: #E0E0E0;">Acoustic Resonance (Cộng hưởng Hạ âm)</strong><br>
|
||||
<span style="font-size: 14px; color: #AAA;">Kích hoạt khả năng cảm nhận tần số thấp. Seeker có thể nghe thấy nhịp tim đập dồn dập của chính mình khi Trapper tiến vào bán kính 15m, đóng vai trò như một radar sinh học mà không cần sử dụng thị giác.</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #333; vertical-align: top;">
|
||||
<img src="https://img.shields.io/badge/TIER_2-SHADOW_STEP-FF8C00?style=for-the-badge" />
|
||||
</td>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #333; vertical-align: top;">
|
||||
<strong style="color: #E0E0E0;">Kinematic Void (Bước chân Hư vô)</strong><br>
|
||||
<span style="font-size: 14px; color: #AAA;">Triệt tiêu hoàn toàn ma sát vật lý. Seeker không phát ra bất kỳ sóng âm nào (Noise Meter = 0) khi di chuyển trong 20 giây đầu tiên, cho phép thiết lập điểm mù chiến thuật (Blindspot) từ sớm.</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #333; vertical-align: top;">
|
||||
<img src="https://img.shields.io/badge/TIER_2-TRAP_REFLEX-FF8C00?style=for-the-badge" />
|
||||
</td>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #333; vertical-align: top;">
|
||||
<strong style="color: #E0E0E0;">Neural Overdrive (Phản xạ Tột độ)</strong><br>
|
||||
<span style="font-size: 14px; color: #AAA;">Có 50% cơ hội ghi đè (Bypass) cơ chế kích hoạt của bẫy cơ học đầu tiên vô tình chạm phải. Nếu bypass thành công, hệ thống bơm Adrenaline sẽ kích hoạt, cộng dồn 50% vận tốc bứt tốc trong 3 giây.</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 12px; background: rgba(255,215,0,0.05); vertical-align: top;">
|
||||
<img src="https://img.shields.io/badge/ULTIMATE-CHRONO_DASH-FF0000?style=for-the-badge" />
|
||||
</td>
|
||||
<td style="padding: 12px; background: rgba(255,215,0,0.05); vertical-align: top;">
|
||||
<strong style="color: #FFD700; text-transform: uppercase;">Temporal Displacement (Phá vỡ Thời Không)</strong><br>
|
||||
<span style="font-size: 14px; color: #AAA;">Trong 15 giây, thể lực (Stamina) bị khóa ở mức vô hạn. Seeker có thể <code>Dash</code> liên tục (Zero Cooldown) và đạt trạng thái <strong style="color: #FFF;">I-Frame</strong> (Miễn nhiễm khống chế). Lúc này, luật chơi đảo chiều: Seeker là kẻ săn lùng lối thoát.</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
|
||||
---
|
||||
|
||||
### <img src="https://api.iconify.design/lucide/cpu.svg?color=%23FF3333" width="24" height="24" style="vertical-align: middle;"> THE TRAPPER: Hiến Tế Không Gian (Dark Rituals)
|
||||
|
||||
Khi Trapper để mất quyền kiểm soát, Mê cung sẽ tự động phân rã sự ổn định của nó, cấp cho Trapper quyền truy cập vào các giao thức thao túng môi trường cực hạn:
|
||||
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border:collapse; border: none;">
|
||||
<tr>
|
||||
<td width="25%" style="padding: 12px; border-bottom: 1px solid #333; vertical-align: top;">
|
||||
<img src="https://img.shields.io/badge/TIER_1-PARANOIA_ECHO-FF3333?style=for-the-badge" />
|
||||
</td>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #333; vertical-align: top;">
|
||||
<strong style="color: #E0E0E0;">Aural Hallucination (Nhiễu loạn Nhận thức)</strong><br>
|
||||
<span style="font-size: 14px; color: #AAA;">Phát xạ 3 luồng tín hiệu âm thanh ảo đa hướng xung quanh Seeker. Các tín hiệu này can thiệp trực tiếp vào hệ thống Spatial Audio, tạo ảo giác về tiếng bước chân dồn dập nhằm đánh sập khả năng định vị của con mồi.</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #333; vertical-align: top;">
|
||||
<img src="https://img.shields.io/badge/TIER_2-GLOBAL_BLACKOUT-FF8C00?style=for-the-badge" />
|
||||
</td>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #333; vertical-align: top;">
|
||||
<strong style="color: #E0E0E0;">Photon Suppression (Triệt tiêu Quang năng)</strong><br>
|
||||
<span style="font-size: 14px; color: #AAA;">Hấp thụ toàn bộ ánh sáng trong khu vực. Đèn pin của Seeker sẽ bị ép vào trạng thái nhiễu loạn (Flicker) hoặc sập nguồn hoàn toàn trong 8 giây. Đây là khung cửa tử thần (Kill-window) hoàn hảo để thu hẹp khoảng cách.</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #333; vertical-align: top;">
|
||||
<img src="https://img.shields.io/badge/TIER_2-GHOSTING-FF8C00?style=for-the-badge" />
|
||||
</td>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #333; vertical-align: top;">
|
||||
<strong style="color: #E0E0E0;">Quantum Phase (Phi vật chất hóa)</strong><br>
|
||||
<span style="font-size: 14px; color: #AAA;">Tạm thời vô hiệu hóa Layer Collision của Trapper. Cấp khả năng đi xuyên qua các cánh cửa đã bị khóa mã hoặc các cấu trúc tường mỏng (Destructible Walls) trong 15 giây, bỏ qua mọi rào cản vật lý.</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 12px; background: rgba(255,51,51,0.05); vertical-align: top;">
|
||||
<img src="https://img.shields.io/badge/ULTIMATE-EYE_OF_ABYSS-FF0000?style=for-the-badge" />
|
||||
</td>
|
||||
<td style="padding: 12px; background: rgba(255,51,51,0.05); vertical-align: top;">
|
||||
<strong style="color: #FF3333; text-transform: uppercase;">Abyssal Omniscience (Nhãn quan Lưỡi Hái)</strong><br>
|
||||
<span style="font-size: 14px; color: #AAA;">Đồng bộ hóa trực tiếp với mạng lưới lõi của mê cung. Render vị trí thời gian thực của Seeker xuyên qua mọi vật cản (Absolute Wallhack) dưới dạng bóng tối (Silhouette) trong 20 giây. Không có góc khuất, không có lối thoát.</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user