迁移 Player/ProcedureGame/ShopUseCase 里的实体方法调用风格
- Player/ShopUseCase:调整了 Weapon 实体的打开方式 - ProcedureGame:调整初始化时的 Hud 和 Player 的初始化写法,流程更清楚
This commit is contained in:
parent
f896a4a9c8
commit
41ff2c6df8
|
|
@ -448,6 +448,11 @@ namespace SepCore.UI
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ShopPurchase(object sender, GameEventArgs e)
|
private void ShopPurchase(object sender, GameEventArgs e)
|
||||||
|
{
|
||||||
|
ShopPurchaseAsync(sender, e).Forget();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async UniTaskVoid ShopPurchaseAsync(object sender, GameEventArgs e)
|
||||||
{
|
{
|
||||||
if (sender is not ShopForm)
|
if (sender is not ShopForm)
|
||||||
{
|
{
|
||||||
|
|
@ -459,7 +464,7 @@ namespace SepCore.UI
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ShopPurchaseResult result = _useCase.TryPurchase(args.GoodsIndex);
|
ShopPurchaseResult result = await _useCase.TryPurchaseAsync(args.GoodsIndex);
|
||||||
if (result == null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,11 @@ namespace SepCore.Procedure
|
||||||
{
|
{
|
||||||
public abstract GameStateType GameStateType { get; }
|
public abstract GameStateType GameStateType { get; }
|
||||||
public abstract void OnInit(ProcedureGame master);
|
public abstract void OnInit(ProcedureGame master);
|
||||||
public abstract void OnEnter(IFsm<IProcedureManager> procedureOwner);
|
public abstract void OnEnter();
|
||||||
|
|
||||||
public abstract void OnUpdate(IFsm<IProcedureManager> procedureOwner, float elapseSeconds,
|
public abstract void OnUpdate(float elapseSeconds, float realElapseSeconds);
|
||||||
float realElapseSeconds);
|
|
||||||
|
|
||||||
public abstract void OnLeave(IFsm<IProcedureManager> procedureOwner);
|
public abstract void OnLeave();
|
||||||
public abstract void OnDestroy(IFsm<IProcedureManager> procedureOwner);
|
public abstract void OnDestroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -38,7 +38,7 @@ namespace SepCore.Procedure
|
||||||
_procedureGame = master;
|
_procedureGame = master;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnEnter(IFsm<IProcedureManager> procedureOwner)
|
public override void OnEnter()
|
||||||
{
|
{
|
||||||
_currentLevel = _procedureGame.CurrentLevel;
|
_currentLevel = _procedureGame.CurrentLevel;
|
||||||
|
|
||||||
|
|
@ -55,8 +55,7 @@ namespace SepCore.Procedure
|
||||||
if (Player != null) Player.Enable = true;
|
if (Player != null) Player.Enable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnUpdate(IFsm<IProcedureManager> procedureOwner, float elapseSeconds,
|
public override void OnUpdate(float elapseSeconds, float realElapseSeconds)
|
||||||
float realElapseSeconds)
|
|
||||||
{
|
{
|
||||||
if (_levelTimeLeft < 0)
|
if (_levelTimeLeft < 0)
|
||||||
{
|
{
|
||||||
|
|
@ -77,7 +76,7 @@ namespace SepCore.Procedure
|
||||||
GameEntry.Event.Fire(this, LevelProcessEventArgs.Create((int)_levelTimeLeft));
|
GameEntry.Event.Fire(this, LevelProcessEventArgs.Create((int)_levelTimeLeft));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnLeave(IFsm<IProcedureManager> procedureOwner)
|
public override void OnLeave()
|
||||||
{
|
{
|
||||||
// 隐藏所有敌人实体
|
// 隐藏所有敌人实体
|
||||||
_enemyManager.OnReset();
|
_enemyManager.OnReset();
|
||||||
|
|
@ -97,7 +96,7 @@ namespace SepCore.Procedure
|
||||||
HideEntityGroup("EnemyProjectile");
|
HideEntityGroup("EnemyProjectile");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnDestroy(IFsm<IProcedureManager> procedureOwner)
|
public override void OnDestroy()
|
||||||
{
|
{
|
||||||
_enemyManager = null;
|
_enemyManager = null;
|
||||||
_procedureGame = null;
|
_procedureGame = null;
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ namespace SepCore.Procedure
|
||||||
GameEntry.UIRouter.BindUIUseCase(UIFormType.LevelUpForm, useCase);
|
GameEntry.UIRouter.BindUIUseCase(UIFormType.LevelUpForm, useCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnEnter(IFsm<IProcedureManager> procedureOwner)
|
public override void OnEnter()
|
||||||
{
|
{
|
||||||
Log.Debug("GameStateLevelUp::OnEnter");
|
Log.Debug("GameStateLevelUp::OnEnter");
|
||||||
|
|
||||||
|
|
@ -36,8 +36,7 @@ namespace SepCore.Procedure
|
||||||
GameEntry.UIRouter.OpenUIAsync(UIFormType.LevelUpForm).Forget();
|
GameEntry.UIRouter.OpenUIAsync(UIFormType.LevelUpForm).Forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnUpdate(IFsm<IProcedureManager> procedureOwner, float elapseSeconds,
|
public override void OnUpdate(float elapseSeconds, float realElapseSeconds)
|
||||||
float realElapseSeconds)
|
|
||||||
{
|
{
|
||||||
if (IsCompleted)
|
if (IsCompleted)
|
||||||
{
|
{
|
||||||
|
|
@ -45,14 +44,14 @@ namespace SepCore.Procedure
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnLeave(IFsm<IProcedureManager> procedureOwner)
|
public override void OnLeave()
|
||||||
{
|
{
|
||||||
Log.Debug("GameStateLevelUp::OnLeave");
|
Log.Debug("GameStateLevelUp::OnLeave");
|
||||||
|
|
||||||
GameEntry.UIRouter.CloseUIAsync(UIFormType.LevelUpForm).Forget();
|
GameEntry.UIRouter.CloseUIAsync(UIFormType.LevelUpForm).Forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnDestroy(IFsm<IProcedureManager> procedureOwner)
|
public override void OnDestroy()
|
||||||
{
|
{
|
||||||
_procedureGame = null;
|
_procedureGame = null;
|
||||||
|
|
||||||
|
|
@ -60,6 +59,5 @@ namespace SepCore.Procedure
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,11 +22,12 @@ namespace SepCore.Procedure
|
||||||
Log.Debug("GameStateShop::OnInit");
|
Log.Debug("GameStateShop::OnInit");
|
||||||
_procedureGame = master;
|
_procedureGame = master;
|
||||||
|
|
||||||
var shopFormUseCase = new ShopUseCase(_procedureGame.Player, _procedureGame.CurrentLevel, () => ShopFinish = true);
|
var shopFormUseCase =
|
||||||
|
new ShopUseCase(_procedureGame.Player, _procedureGame.CurrentLevel, () => ShopFinish = true);
|
||||||
GameEntry.UIRouter.BindUIUseCase(UIFormType.ShopForm, shopFormUseCase);
|
GameEntry.UIRouter.BindUIUseCase(UIFormType.ShopForm, shopFormUseCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnEnter(IFsm<IProcedureManager> procedureOwner)
|
public override void OnEnter()
|
||||||
{
|
{
|
||||||
Log.Debug("GameStateShop::OnEnter");
|
Log.Debug("GameStateShop::OnEnter");
|
||||||
|
|
||||||
|
|
@ -35,8 +36,7 @@ namespace SepCore.Procedure
|
||||||
GameEntry.UIRouter.OpenUIAsync(UIFormType.ShopForm).Forget();
|
GameEntry.UIRouter.OpenUIAsync(UIFormType.ShopForm).Forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnUpdate(IFsm<IProcedureManager> procedureOwner, float elapseSeconds,
|
public override void OnUpdate(float elapseSeconds, float realElapseSeconds)
|
||||||
float realElapseSeconds)
|
|
||||||
{
|
{
|
||||||
if (ShopFinish)
|
if (ShopFinish)
|
||||||
{
|
{
|
||||||
|
|
@ -44,14 +44,14 @@ namespace SepCore.Procedure
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnLeave(IFsm<IProcedureManager> procedureOwner)
|
public override void OnLeave()
|
||||||
{
|
{
|
||||||
Log.Debug("GameStateShop::OnLeave");
|
Log.Debug("GameStateShop::OnLeave");
|
||||||
|
|
||||||
GameEntry.UIRouter.CloseUIAsync(UIFormType.ShopForm).Forget();
|
GameEntry.UIRouter.CloseUIAsync(UIFormType.ShopForm).Forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnDestroy(IFsm<IProcedureManager> procedureOwner)
|
public override void OnDestroy()
|
||||||
{
|
{
|
||||||
_procedureGame = null;
|
_procedureGame = null;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Cysharp.Threading.Tasks;
|
using Cysharp.Threading.Tasks;
|
||||||
using SepCore.DataTable;
|
using SepCore.DataTable;
|
||||||
using SepCore.Definition;
|
using SepCore.Definition;
|
||||||
using SepCore.Entity;
|
using SepCore.Entity;
|
||||||
using GameFramework.Event;
|
|
||||||
using GameFramework.Fsm;
|
using GameFramework.Fsm;
|
||||||
using GameFramework.Procedure;
|
using GameFramework.Procedure;
|
||||||
using UnityGameFramework.Runtime;
|
using UnityGameFramework.Runtime;
|
||||||
using SepCore.UI;
|
using SepCore.AsyncTask;
|
||||||
|
|
||||||
namespace SepCore.Procedure
|
namespace SepCore.Procedure
|
||||||
{
|
{
|
||||||
|
|
@ -23,10 +23,6 @@ namespace SepCore.Procedure
|
||||||
{
|
{
|
||||||
public override bool UseNativeDialog => false;
|
public override bool UseNativeDialog => false;
|
||||||
|
|
||||||
private HudForm _hudForm;
|
|
||||||
private bool _hudInitialized;
|
|
||||||
|
|
||||||
private IFsm<IProcedureManager> _procedureOwner;
|
|
||||||
private PlayerData _currentPlayerData;
|
private PlayerData _currentPlayerData;
|
||||||
public int CurrentLevel = 1;
|
public int CurrentLevel = 1;
|
||||||
|
|
||||||
|
|
@ -50,7 +46,7 @@ namespace SepCore.Procedure
|
||||||
_gameStates[GameStateType.Shop].OnInit(this);
|
_gameStates[GameStateType.Shop].OnInit(this);
|
||||||
|
|
||||||
_currentGameState = GameStateType.Battle;
|
_currentGameState = GameStateType.Battle;
|
||||||
_gameStates[_currentGameState].OnEnter(_procedureOwner);
|
_gameStates[_currentGameState].OnEnter();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void BattleToShopOrLevelUp()
|
public void BattleToShopOrLevelUp()
|
||||||
|
|
@ -58,27 +54,27 @@ namespace SepCore.Procedure
|
||||||
CurrentLevel++;
|
CurrentLevel++;
|
||||||
if (_currentGameState == GameStateType.Shop || _currentGameState == GameStateType.LevelUp) return;
|
if (_currentGameState == GameStateType.Shop || _currentGameState == GameStateType.LevelUp) return;
|
||||||
|
|
||||||
_gameStates[_currentGameState].OnLeave(_procedureOwner);
|
_gameStates[_currentGameState].OnLeave();
|
||||||
_currentGameState = Player.PendingLevelPoints > 0 ? GameStateType.LevelUp : GameStateType.Shop;
|
_currentGameState = Player.PendingLevelPoints > 0 ? GameStateType.LevelUp : GameStateType.Shop;
|
||||||
_gameStates[_currentGameState].OnEnter(_procedureOwner);
|
_gameStates[_currentGameState].OnEnter();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ShopToBattle()
|
public void ShopToBattle()
|
||||||
{
|
{
|
||||||
if (_currentGameState == GameStateType.Battle) return;
|
if (_currentGameState == GameStateType.Battle) return;
|
||||||
|
|
||||||
_gameStates[_currentGameState].OnLeave(_procedureOwner);
|
_gameStates[_currentGameState].OnLeave();
|
||||||
_currentGameState = GameStateType.Battle;
|
_currentGameState = GameStateType.Battle;
|
||||||
_gameStates[_currentGameState].OnEnter(_procedureOwner);
|
_gameStates[_currentGameState].OnEnter();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LevelUpToShop()
|
public void LevelUpToShop()
|
||||||
{
|
{
|
||||||
if (_currentGameState == GameStateType.Shop) return;
|
if (_currentGameState == GameStateType.Shop) return;
|
||||||
|
|
||||||
_gameStates[_currentGameState].OnLeave(_procedureOwner);
|
_gameStates[_currentGameState].OnLeave();
|
||||||
_currentGameState = GameStateType.Shop;
|
_currentGameState = GameStateType.Shop;
|
||||||
_gameStates[_currentGameState].OnEnter(_procedureOwner);
|
_gameStates[_currentGameState].OnEnter();
|
||||||
}
|
}
|
||||||
|
|
||||||
#region FSM
|
#region FSM
|
||||||
|
|
@ -87,87 +83,65 @@ namespace SepCore.Procedure
|
||||||
{
|
{
|
||||||
base.OnEnter(procedureOwner);
|
base.OnEnter(procedureOwner);
|
||||||
|
|
||||||
_procedureOwner = procedureOwner;
|
|
||||||
GameEntry.SimulationWorld?.ClearSimulationState();
|
GameEntry.SimulationWorld?.ClearSimulationState();
|
||||||
|
|
||||||
GameEntry.Event.Subscribe(OpenUIFormSuccessEventArgs.EventId, OpenUIFormSuccess);
|
|
||||||
GameEntry.Event.Subscribe(ShowEntitySuccessEventArgs.EventId, ShowEntitySuccess);
|
|
||||||
|
|
||||||
CurrentLevel = 1;
|
CurrentLevel = 1;
|
||||||
_currentPlayerData = new PlayerData(-1, 1001);
|
_currentPlayerData = new PlayerData(-1, 1001);
|
||||||
GameEntry.Entity.ShowPlayer(_currentPlayerData);
|
|
||||||
|
|
||||||
GameEntry.UIRouter.OpenUIAsync(UIFormType.HudForm).Forget();
|
EnterAsync(procedureOwner).Forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnUpdate(IFsm<IProcedureManager> procedureOwner, float elapseSeconds,
|
protected override void OnUpdate(IFsm<IProcedureManager> procedureOwner, float elapseSeconds,
|
||||||
float realElapseSeconds)
|
float realElapseSeconds)
|
||||||
{
|
{
|
||||||
base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
|
base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
|
||||||
|
_gameStates?[_currentGameState].OnUpdate(elapseSeconds, realElapseSeconds);
|
||||||
_procedureOwner = procedureOwner;
|
|
||||||
|
|
||||||
if (!_hudInitialized && _hudForm != null && Player != null)
|
|
||||||
{
|
|
||||||
int selectedRoleId = _procedureOwner.GetData<VarInt32>("SelectedRoleId").Value;
|
|
||||||
var role = GameEntry.DataTable.GetDataTableRow<DRRole>(selectedRoleId);
|
|
||||||
Player.InitRole(role);
|
|
||||||
_hudInitialized = true;
|
|
||||||
InitGameState();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_hudInitialized)
|
|
||||||
_gameStates[_currentGameState].OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnLeave(IFsm<IProcedureManager> procedureOwner, bool isShutdown)
|
protected override void OnLeave(IFsm<IProcedureManager> procedureOwner, bool isShutdown)
|
||||||
|
{
|
||||||
|
if (_gameStates != null)
|
||||||
{
|
{
|
||||||
foreach (var state in _gameStates.Values)
|
foreach (var state in _gameStates.Values)
|
||||||
{
|
{
|
||||||
state.OnDestroy(procedureOwner);
|
state.OnDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
_gameStates.Clear();
|
_gameStates.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
GameEntry.UIRouter.CloseUIAsync(UIFormType.HudForm).Forget();
|
GameEntry.UIRouter.CloseUIAsync(UIFormType.HudForm).Forget();
|
||||||
|
|
||||||
_hudForm = null;
|
|
||||||
|
|
||||||
Player = null;
|
Player = null;
|
||||||
|
|
||||||
_procedureOwner = null;
|
|
||||||
GameEntry.SimulationWorld?.ClearSimulationState();
|
GameEntry.SimulationWorld?.ClearSimulationState();
|
||||||
|
|
||||||
GameEntry.Event.Unsubscribe(OpenUIFormSuccessEventArgs.EventId, OpenUIFormSuccess);
|
|
||||||
GameEntry.Event.Unsubscribe(ShowEntitySuccessEventArgs.EventId, ShowEntitySuccess);
|
|
||||||
|
|
||||||
base.OnLeave(procedureOwner, isShutdown);
|
base.OnLeave(procedureOwner, isShutdown);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Event Handler
|
private async UniTaskVoid EnterAsync(IFsm<IProcedureManager> procedureOwner)
|
||||||
|
|
||||||
private void OpenUIFormSuccess(object sender, GameEventArgs e)
|
|
||||||
{
|
{
|
||||||
if (!(e is OpenUIFormSuccessEventArgs args)) return;
|
try
|
||||||
|
|
||||||
if (args.UIForm.Logic is HudForm hudForm)
|
|
||||||
{
|
{
|
||||||
_hudForm = hudForm;
|
Player = await GameEntry.Entity.ShowPlayerAsync(_currentPlayerData);
|
||||||
}
|
await GameEntry.UIRouter.OpenUIAsync(UIFormType.HudForm);
|
||||||
|
|
||||||
|
int selectedRoleId = procedureOwner.GetData<VarInt32>("SelectedRoleId").Value;
|
||||||
|
var role = GameEntry.DataTable.GetDataTableRow<DRRole>(selectedRoleId);
|
||||||
|
if (role == null)
|
||||||
|
{
|
||||||
|
Log.Error("ProcedureGame.EnterAsync() can not load role '{0}'.", selectedRoleId.ToString());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ShowEntitySuccess(object sender, GameEventArgs e)
|
Player.InitRole(role);
|
||||||
|
InitGameState();
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
if (!(e is ShowEntitySuccessEventArgs args)) return;
|
Log.Error("ProcedureGame.EnterAsync() failed with exception '{0}'.", exception);
|
||||||
|
|
||||||
if (args.Entity.Logic is Player player)
|
|
||||||
{
|
|
||||||
Player = player;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
using Cysharp.Threading.Tasks;
|
||||||
using SepCore.Components;
|
using SepCore.Components;
|
||||||
using SepCore.Event;
|
using SepCore.Event;
|
||||||
using SepCore.DataTable;
|
using SepCore.DataTable;
|
||||||
using SepCore.Definition;
|
using SepCore.Definition;
|
||||||
using SepCore.Entity;
|
|
||||||
using GameFramework.Event;
|
|
||||||
using UnityGameFramework.Runtime;
|
|
||||||
using SepCore.Entity.Weapon;
|
using SepCore.Entity.Weapon;
|
||||||
using SepCore.CustomUtility;
|
using SepCore.CustomUtility;
|
||||||
|
using SepCore.AsyncTask;
|
||||||
|
|
||||||
namespace SepCore.Entity
|
namespace SepCore.Entity
|
||||||
{
|
{
|
||||||
|
|
@ -92,6 +92,28 @@ namespace SepCore.Entity
|
||||||
return _backpackComponent.AttachProp(prop);
|
return _backpackComponent.AttachProp(prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async UniTask<WeaponBase> AddWeaponAsync(WeaponData weaponData, float timeout = 30f)
|
||||||
|
{
|
||||||
|
if (weaponData == null || _backpackComponent == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
WeaponBase weapon = await GameEntry.Entity.ShowWeaponAsync(weaponData, timeout);
|
||||||
|
if (weapon == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_backpackComponent.AttachWeapon(weapon))
|
||||||
|
{
|
||||||
|
GameEntry.Entity.HideEntity(weapon);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return weapon;
|
||||||
|
}
|
||||||
|
|
||||||
public bool RemoveWeapon(WeaponBase weapon)
|
public bool RemoveWeapon(WeaponBase weapon)
|
||||||
{
|
{
|
||||||
if (weapon == null || _backpackComponent == null)
|
if (weapon == null || _backpackComponent == null)
|
||||||
|
|
@ -141,8 +163,8 @@ namespace SepCore.Entity
|
||||||
// BackpackComponent
|
// BackpackComponent
|
||||||
Coin = role.Coin;
|
Coin = role.Coin;
|
||||||
_backpackComponent.OnInit(this, role.WeaponCapacity);
|
_backpackComponent.OnInit(this, role.WeaponCapacity);
|
||||||
GameEntry.Entity.ShowWeapon(EntityDataFactory.Create(GameEntry.Entity.NextId(),
|
AddWeaponAsync(EntityDataFactory.Create(GameEntry.Entity.NextId(),
|
||||||
WeaponType.WeaponKnife, Id, _playerData.Camp));
|
WeaponType.WeaponKnife, Id, _playerData.Camp)).Forget();
|
||||||
|
|
||||||
// StatComponent
|
// StatComponent
|
||||||
foreach (var modifier in role.InitialProperties)
|
foreach (var modifier in role.InitialProperties)
|
||||||
|
|
@ -158,8 +180,7 @@ namespace SepCore.Entity
|
||||||
|
|
||||||
GameEntry.Event.Fire(this, PlayerExpChangeEventArgs.Create(0, 100));
|
GameEntry.Event.Fire(this, PlayerExpChangeEventArgs.Create(0, 100));
|
||||||
|
|
||||||
GameEntry.Event.Fire(this,
|
GameEntry.Event.Fire(this, PlayerCoinChangeEventArgs.Create(Coin, Coin));
|
||||||
PlayerCoinChangeEventArgs.Create(Coin, Coin));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#region FSM
|
#region FSM
|
||||||
|
|
@ -190,8 +211,6 @@ namespace SepCore.Entity
|
||||||
{
|
{
|
||||||
base.OnShow(userData);
|
base.OnShow(userData);
|
||||||
|
|
||||||
GameEntry.Event.Subscribe(ShowEntitySuccessEventArgs.EventId, ShowEntitySuccess);
|
|
||||||
|
|
||||||
_statComponent.OnInit();
|
_statComponent.OnInit();
|
||||||
|
|
||||||
if (userData is PlayerData playerData)
|
if (userData is PlayerData playerData)
|
||||||
|
|
@ -230,18 +249,5 @@ namespace SepCore.Entity
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Event Handlers
|
|
||||||
|
|
||||||
private void ShowEntitySuccess(object sender, GameEventArgs e)
|
|
||||||
{
|
|
||||||
if (!(e is ShowEntitySuccessEventArgs args)) return;
|
|
||||||
if (args.Entity.Logic is WeaponBase weapon)
|
|
||||||
{
|
|
||||||
_backpackComponent.AttachWeapon(weapon);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Cysharp.Threading.Tasks;
|
||||||
using SepCore.DataTable;
|
using SepCore.DataTable;
|
||||||
using SepCore.Definition;
|
using SepCore.Definition;
|
||||||
using SepCore.Entity;
|
using SepCore.Entity;
|
||||||
using SepCore.CustomUtility;
|
using SepCore.CustomUtility;
|
||||||
|
using SepCore.Entity.Weapon;
|
||||||
using GameFramework.DataTable;
|
using GameFramework.DataTable;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityGameFramework.Runtime;
|
using UnityGameFramework.Runtime;
|
||||||
|
|
@ -107,7 +109,7 @@ namespace SepCore.UI
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public ShopPurchaseResult TryPurchase(int goodsIndex)
|
public async UniTask<ShopPurchaseResult> TryPurchaseAsync(int goodsIndex)
|
||||||
{
|
{
|
||||||
if (goodsIndex < 0 || goodsIndex >= _selections.Count)
|
if (goodsIndex < 0 || goodsIndex >= _selections.Count)
|
||||||
{
|
{
|
||||||
|
|
@ -128,7 +130,7 @@ namespace SepCore.UI
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
DisplayItemRawData displayItem = ApplyGoodsPurchase(selection);
|
DisplayItemRawData displayItem = await ApplyGoodsPurchaseAsync(selection);
|
||||||
if (displayItem == null)
|
if (displayItem == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -318,7 +320,7 @@ namespace SepCore.UI
|
||||||
return Mathf.Max(1, finalPrice);
|
return Mathf.Max(1, finalPrice);
|
||||||
}
|
}
|
||||||
|
|
||||||
private DisplayItemRawData ApplyGoodsPurchase(ShopGoodsSelection goods)
|
private async UniTask<DisplayItemRawData> ApplyGoodsPurchaseAsync(ShopGoodsSelection goods)
|
||||||
{
|
{
|
||||||
if (goods == null || Player == null)
|
if (goods == null || Player == null)
|
||||||
{
|
{
|
||||||
|
|
@ -362,7 +364,13 @@ namespace SepCore.UI
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
GameEntry.Entity.ShowWeapon(weaponData);
|
WeaponBase weapon = await Player.AddWeaponAsync(weaponData);
|
||||||
|
if (weapon == null)
|
||||||
|
{
|
||||||
|
Log.Warning(
|
||||||
|
$"ShopFormUseCase::ApplyGoodsPurchase: Show weapon failed, weapon type id = {goods.GoodsTypeId}");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return new DisplayItemRawData
|
return new DisplayItemRawData
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue