chore: initial commit
This commit is contained in:
18
Assets/Scripts/World/BaseGames.World.asmdef
Normal file
18
Assets/Scripts/World/BaseGames.World.asmdef
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"precompiledReferences": [],
|
||||
"name": "BaseGames.World",
|
||||
"defineConstraints": [],
|
||||
"noEngineReferences": false,
|
||||
"versionDefines": [],
|
||||
"rootNamespace": "BaseGames.World",
|
||||
"references": [
|
||||
"BaseGames.Core",
|
||||
"BaseGames.Core.Events",
|
||||
"BaseGames.Core.Save"
|
||||
],
|
||||
"autoReferenced": true,
|
||||
"overrideReferences": false,
|
||||
"includePlatforms": []
|
||||
}
|
||||
7
Assets/Scripts/World/BaseGames.World.asmdef.meta
Normal file
7
Assets/Scripts/World/BaseGames.World.asmdef.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 81558e1e6a01fa943bcce6d66566ed7b
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
13
Assets/Scripts/World/IInteractable.cs
Normal file
13
Assets/Scripts/World/IInteractable.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace BaseGames.World
|
||||
{
|
||||
public interface IInteractable
|
||||
{
|
||||
bool CanInteract { get; }
|
||||
string InteractPrompt { get; }
|
||||
void Interact(Transform player);
|
||||
void OnPlayerEnterRange(Transform player);
|
||||
void OnPlayerExitRange();
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/World/IInteractable.cs.meta
Normal file
11
Assets/Scripts/World/IInteractable.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 36d04dce72e906e4bb052f5ff04894bd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Scripts/World/Map.meta
Normal file
8
Assets/Scripts/World/Map.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 707a251ab7e42284dbb474e17c76c801
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
0
Assets/Scripts/World/Map/.gitkeep
Normal file
0
Assets/Scripts/World/Map/.gitkeep
Normal file
17
Assets/Scripts/World/Map/BaseGames.World.Map.asmdef
Normal file
17
Assets/Scripts/World/Map/BaseGames.World.Map.asmdef
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"precompiledReferences": [],
|
||||
"name": "BaseGames.World.Map",
|
||||
"defineConstraints": [],
|
||||
"noEngineReferences": false,
|
||||
"versionDefines": [],
|
||||
"rootNamespace": "BaseGames.World.Map",
|
||||
"references": [
|
||||
"BaseGames.World",
|
||||
"BaseGames.Core.Save"
|
||||
],
|
||||
"autoReferenced": true,
|
||||
"overrideReferences": false,
|
||||
"includePlatforms": []
|
||||
}
|
||||
7
Assets/Scripts/World/Map/BaseGames.World.Map.asmdef.meta
Normal file
7
Assets/Scripts/World/Map/BaseGames.World.Map.asmdef.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ae09ef3fe95109847963c055501f16bc
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
3
Assets/Scripts/World/Map/_Placeholder.cs
Normal file
3
Assets/Scripts/World/Map/_Placeholder.cs
Normal file
@@ -0,0 +1,3 @@
|
||||
// Placeholder to prevent asmdef-no-scripts warning.
|
||||
namespace BaseGames.World.Map { }
|
||||
|
||||
11
Assets/Scripts/World/Map/_Placeholder.cs.meta
Normal file
11
Assets/Scripts/World/Map/_Placeholder.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f152c8530651afe41979707db9a5c2fa
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
58
Assets/Scripts/World/SavePoint.cs
Normal file
58
Assets/Scripts/World/SavePoint.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using UnityEngine;
|
||||
using BaseGames.Core;
|
||||
using BaseGames.Core.Events;
|
||||
using BaseGames.Core.Save;
|
||||
|
||||
namespace BaseGames.World
|
||||
{
|
||||
public class SavePoint : MonoBehaviour, IInteractable, ISaveable
|
||||
{
|
||||
[Header("Config")]
|
||||
[SerializeField] private string _savePointId;
|
||||
[SerializeField] private bool _restoreSpring = true;
|
||||
|
||||
[Header("Event Channels")]
|
||||
[SerializeField] private StringEventChannelSO _onSavePointActivated;
|
||||
[SerializeField] private VoidEventChannelSO _onFastTravelOpen;
|
||||
|
||||
private bool _isActivated;
|
||||
|
||||
// ── IInteractable ──────────────────────────────────────────────────────
|
||||
public bool CanInteract => true;
|
||||
public string InteractPrompt => _isActivated ? "休息" : "激活";
|
||||
|
||||
public void Interact(Transform player)
|
||||
{
|
||||
_isActivated = true;
|
||||
var restorer = player.GetComponentInChildren<IRestoreOnSave>();
|
||||
if (restorer != null)
|
||||
{
|
||||
restorer.FullRestore();
|
||||
if (_restoreSpring) restorer.RestoreSpring();
|
||||
}
|
||||
|
||||
_onSavePointActivated?.Raise(_savePointId);
|
||||
_onFastTravelOpen?.Raise();
|
||||
}
|
||||
|
||||
public void OnPlayerEnterRange(Transform player) { }
|
||||
public void OnPlayerExitRange() { }
|
||||
|
||||
// ── 存档集成 ────────────────────────────────────────────────────────────
|
||||
public bool IsActivated => _isActivated;
|
||||
public void SetActivated(bool val) => _isActivated = val;
|
||||
|
||||
public void OnSave(SaveData data)
|
||||
{
|
||||
if (_isActivated && !string.IsNullOrEmpty(_savePointId)
|
||||
&& !data.World.ActivatedSavePoints.Contains(_savePointId))
|
||||
data.World.ActivatedSavePoints.Add(_savePointId);
|
||||
}
|
||||
|
||||
public void OnLoad(SaveData data)
|
||||
{
|
||||
_isActivated = !string.IsNullOrEmpty(_savePointId)
|
||||
&& data.World.ActivatedSavePoints.Contains(_savePointId);
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/World/SavePoint.cs.meta
Normal file
11
Assets/Scripts/World/SavePoint.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 041d16d10df125a48b5878935b56f3c4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Scripts/World/Shop.meta
Normal file
8
Assets/Scripts/World/Shop.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d96c699a4f27e434a9d84107415cb90c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
0
Assets/Scripts/World/Shop/.gitkeep
Normal file
0
Assets/Scripts/World/Shop/.gitkeep
Normal file
17
Assets/Scripts/World/Shop/BaseGames.World.Shop.asmdef
Normal file
17
Assets/Scripts/World/Shop/BaseGames.World.Shop.asmdef
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"precompiledReferences": [],
|
||||
"name": "BaseGames.World.Shop",
|
||||
"defineConstraints": [],
|
||||
"noEngineReferences": false,
|
||||
"versionDefines": [],
|
||||
"rootNamespace": "BaseGames.World.Shop",
|
||||
"references": [
|
||||
"BaseGames.World",
|
||||
"BaseGames.Core.Events"
|
||||
],
|
||||
"autoReferenced": true,
|
||||
"overrideReferences": false,
|
||||
"includePlatforms": []
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7a7d22d0f9f2487469fc0d7e24aecc5c
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
3
Assets/Scripts/World/Shop/_Placeholder.cs
Normal file
3
Assets/Scripts/World/Shop/_Placeholder.cs
Normal file
@@ -0,0 +1,3 @@
|
||||
// Placeholder to prevent asmdef-no-scripts warning.
|
||||
namespace BaseGames.World.Shop { }
|
||||
|
||||
11
Assets/Scripts/World/Shop/_Placeholder.cs.meta
Normal file
11
Assets/Scripts/World/Shop/_Placeholder.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5aaebdd34d7a805429f8fb1ddfe7036c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
3
Assets/Scripts/World/_Placeholder.cs
Normal file
3
Assets/Scripts/World/_Placeholder.cs
Normal file
@@ -0,0 +1,3 @@
|
||||
// Placeholder to prevent asmdef-no-scripts warning.
|
||||
namespace BaseGames.World { }
|
||||
|
||||
11
Assets/Scripts/World/_Placeholder.cs.meta
Normal file
11
Assets/Scripts/World/_Placeholder.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ff42efce602d87546a55c9b1c9d5f778
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user