diff --git a/Assets/GameMain/DataTables/tbglobalconfig.bytes b/Assets/GameMain/DataTables/tbglobalconfig.bytes
index 87dcf6a..2020384 100644
Binary files a/Assets/GameMain/DataTables/tbglobalconfig.bytes and b/Assets/GameMain/DataTables/tbglobalconfig.bytes differ
diff --git a/Assets/GameMain/DataTables/tbglobalconfig.json b/Assets/GameMain/DataTables/tbglobalconfig.json
index 108db4d..1b726f7 100644
--- a/Assets/GameMain/DataTables/tbglobalconfig.json
+++ b/Assets/GameMain/DataTables/tbglobalconfig.json
@@ -3,6 +3,9 @@
"weaponCapacity": 6,
"propMaxCount": -1,
"playerEntity": "Player",
+ "absorbSpeed": 15000,
+ "collectDistance": 350,
+ "defaultAbsorbRange": 3000,
"weaponRecycleRate": 300,
"shopGoodsCount": 4,
"shopPriceRandomPercent": 50,
@@ -24,6 +27,10 @@
"projectileLifeTime": 3000,
"projectileHeightOffset": 600,
"projectileSpeed": 12000,
- "projectileEntity": "Projectile"
+ "projectileEntity": "Projectile",
+ "damageTextYOffset": 1100,
+ "entityAsyncTimeout": 30000,
+ "enemyBodyRadius": 450,
+ "enemySeparationIterations": 2
}
]
\ No newline at end of file
diff --git a/Assets/GameMain/Scripts/Base/Gen/GlobalConfig.cs b/Assets/GameMain/Scripts/Base/Gen/GlobalConfig.cs
index 6ffec1a..198781e 100644
--- a/Assets/GameMain/Scripts/Base/Gen/GlobalConfig.cs
+++ b/Assets/GameMain/Scripts/Base/Gen/GlobalConfig.cs
@@ -20,6 +20,9 @@ public sealed partial class GlobalConfig : Luban.BeanBase
PropMaxCount = _buf.ReadInt();
PlayerEntity = _buf.ReadString();
PlayerEntity_Ref = null;
+ AbsorbSpeed = _buf.ReadInt();
+ CollectDistance = _buf.ReadInt();
+ DefaultAbsorbRange = _buf.ReadInt();
WeaponRecycleRate = _buf.ReadInt();
ShopGoodsCount = _buf.ReadInt();
ShopPriceRandomPercent = _buf.ReadInt();
@@ -43,6 +46,10 @@ public sealed partial class GlobalConfig : Luban.BeanBase
ProjectileSpeed = _buf.ReadInt();
ProjectileEntity = _buf.ReadString();
ProjectileEntity_Ref = null;
+ DamageTextYOffset = _buf.ReadInt();
+ EntityAsyncTimeout = _buf.ReadInt();
+ EnemyBodyRadius = _buf.ReadInt();
+ EnemySeparationIterations = _buf.ReadInt();
}
public static GlobalConfig DeserializeGlobalConfig(ByteBuf _buf)
@@ -64,6 +71,18 @@ public sealed partial class GlobalConfig : Luban.BeanBase
public readonly string PlayerEntity;
public EntityConfig PlayerEntity_Ref;
///
+ /// 自动收集速度
+ ///
+ public readonly int AbsorbSpeed;
+ ///
+ /// 自动收集距离
+ ///
+ public readonly int CollectDistance;
+ ///
+ /// 默认吸收距离
+ ///
+ public readonly int DefaultAbsorbRange;
+ ///
/// 武器回收价比例
///
public readonly int WeaponRecycleRate;
@@ -152,6 +171,22 @@ public sealed partial class GlobalConfig : Luban.BeanBase
///
public readonly string ProjectileEntity;
public EntityConfig ProjectileEntity_Ref;
+ ///
+ /// 伤害数字高度偏移
+ ///
+ public readonly int DamageTextYOffset;
+ ///
+ /// 实体生成超时时间
+ ///
+ public readonly int EntityAsyncTimeout;
+ ///
+ /// 敌人碰撞半径
+ ///
+ public readonly int EnemyBodyRadius;
+ ///
+ /// 敌人分离迭代次数
+ ///
+ public readonly int EnemySeparationIterations;
public const int __ID__ = -958250779;
public override int GetTypeId() => __ID__;
@@ -178,11 +213,18 @@ public sealed partial class GlobalConfig : Luban.BeanBase
+
+
+
ProjectileEntity_Ref = tables.TbEntityConfig.GetOrDefault(ProjectileEntity);
+
+
+
+
}
public override string ToString()
@@ -191,6 +233,9 @@ public sealed partial class GlobalConfig : Luban.BeanBase
+ "weaponCapacity:" + WeaponCapacity + ","
+ "propMaxCount:" + PropMaxCount + ","
+ "playerEntity:" + PlayerEntity + ","
+ + "absorbSpeed:" + AbsorbSpeed + ","
+ + "collectDistance:" + CollectDistance + ","
+ + "defaultAbsorbRange:" + DefaultAbsorbRange + ","
+ "weaponRecycleRate:" + WeaponRecycleRate + ","
+ "shopGoodsCount:" + ShopGoodsCount + ","
+ "shopPriceRandomPercent:" + ShopPriceRandomPercent + ","
@@ -213,6 +258,10 @@ public sealed partial class GlobalConfig : Luban.BeanBase
+ "projectileHeightOffset:" + ProjectileHeightOffset + ","
+ "projectileSpeed:" + ProjectileSpeed + ","
+ "projectileEntity:" + ProjectileEntity + ","
+ + "damageTextYOffset:" + DamageTextYOffset + ","
+ + "entityAsyncTimeout:" + EntityAsyncTimeout + ","
+ + "enemyBodyRadius:" + EnemyBodyRadius + ","
+ + "enemySeparationIterations:" + EnemySeparationIterations + ","
+ "}";
}
}
diff --git a/Assets/GameMain/Scripts/Base/Gen/TbGlobalConfig.cs b/Assets/GameMain/Scripts/Base/Gen/TbGlobalConfig.cs
index 4c6b621..20f6ffd 100644
--- a/Assets/GameMain/Scripts/Base/Gen/TbGlobalConfig.cs
+++ b/Assets/GameMain/Scripts/Base/Gen/TbGlobalConfig.cs
@@ -43,6 +43,18 @@ public partial class TbGlobalConfig
///
public string PlayerEntity => _data.PlayerEntity;
///
+ /// 自动收集速度
+ ///
+ public int AbsorbSpeed => _data.AbsorbSpeed;
+ ///
+ /// 自动收集距离
+ ///
+ public int CollectDistance => _data.CollectDistance;
+ ///
+ /// 默认吸收距离
+ ///
+ public int DefaultAbsorbRange => _data.DefaultAbsorbRange;
+ ///
/// 武器回收价比例
///
public int WeaponRecycleRate => _data.WeaponRecycleRate;
@@ -130,6 +142,22 @@ public partial class TbGlobalConfig
/// 投射物实体
///
public string ProjectileEntity => _data.ProjectileEntity;
+ ///
+ /// 伤害数字高度偏移
+ ///
+ public int DamageTextYOffset => _data.DamageTextYOffset;
+ ///
+ /// 实体生成超时时间
+ ///
+ public int EntityAsyncTimeout => _data.EntityAsyncTimeout;
+ ///
+ /// 敌人碰撞半径
+ ///
+ public int EnemyBodyRadius => _data.EnemyBodyRadius;
+ ///
+ /// 敌人分离迭代次数
+ ///
+ public int EnemySeparationIterations => _data.EnemySeparationIterations;
public void ResolveRef(Tables tables)
{
diff --git a/Assets/GameMain/Scripts/Procedure/Game/GameStateBase.cs b/Assets/GameMain/Scripts/Procedure/Game/GameStateBase.cs
index ae91c3b..21cf2d4 100644
--- a/Assets/GameMain/Scripts/Procedure/Game/GameStateBase.cs
+++ b/Assets/GameMain/Scripts/Procedure/Game/GameStateBase.cs
@@ -1,9 +1,3 @@
-using System.Collections;
-using System.Collections.Generic;
-using GameFramework.Fsm;
-using GameFramework.Procedure;
-using UnityEngine;
-
namespace SepCore.Procedure
{
public abstract class GameStateBase
diff --git a/Assets/GameMain/Scripts/Runtime/Components/AbsorbComponent.cs b/Assets/GameMain/Scripts/Runtime/Components/AbsorbComponent.cs
index ee88a85..8ca25ae 100644
--- a/Assets/GameMain/Scripts/Runtime/Components/AbsorbComponent.cs
+++ b/Assets/GameMain/Scripts/Runtime/Components/AbsorbComponent.cs
@@ -7,11 +7,7 @@ namespace SepCore.Components
{
public class AbsorbComponent : MonoBehaviour
{
- [SerializeField] private float _absorbRangeBase = 3f;
- [SerializeField] private float _absorbSpeed = 15f;
- [SerializeField] private float _collectDistance = 0.35f;
[SerializeField] private int _maxDetectCount = 64;
- [SerializeField] private LayerMask _detectLayerMask = ~0;
private Player _player;
private Transform _target;
@@ -21,38 +17,34 @@ namespace SepCore.Components
private StatProperty _absorbRangeStat;
private Action _absorbRangeStatCallback;
- private float AbsorbRange => Mathf.Max(0f, (_absorbRangeBase + _absorbRangeStat.Value) * _absorbRangeStat.Percent);
+ private float AbsorbRangeBase => GameEntry.Luban.Global.DefaultAbsorbRange / 1000f;
+ private float AbsorbSpeed => GameEntry.Luban.Global.AbsorbSpeed / 1000f;
+ private float CollectDistance => GameEntry.Luban.Global.CollectDistance / 1000f;
- public void OnInit(Player player, StatComponent statComponent = null)
+ private float AbsorbRange => Mathf.Max(0f, (AbsorbRangeBase + _absorbRangeStat.Value) * _absorbRangeStat.Percent);
+
+ public void OnInit(Player player, StatComponent statComponent)
{
_player = player;
- _target = player != null ? player.CachedTransform : null;
+ _target = player.CachedTransform;
_statComponent = statComponent;
_buffer = new Collider[Mathf.Max(1, _maxDetectCount)];
- if (_statComponent != null)
- {
- _absorbRangeStat = _statComponent.GetStat(StatType.AbsorbRange);
- _absorbRangeStatCallback = (modifier, isApply) =>
- _statComponent.UpdateStat(_absorbRangeStat, modifier, isApply);
- _statComponent.Subscribe(StatType.AbsorbRange, _absorbRangeStatCallback);
- }
- else
- {
- _absorbRangeStat = new StatProperty();
- }
+ _absorbRangeStat = _statComponent.GetStat(StatType.AbsorbRange);
+ _absorbRangeStatCallback = (modifier, isApply) =>
+ _statComponent.UpdateStat(_absorbRangeStat, modifier, isApply);
+ _statComponent.Subscribe(StatType.AbsorbRange, _absorbRangeStatCallback);
}
public void OnUpdate(float elapseSeconds, float realElapseSeconds)
{
- if (_player == null || !_player.Available || _target == null || _buffer == null) return;
+ if (!_player.Available) return;
int hitCount = Physics.OverlapSphereNonAlloc(
_target.position,
AbsorbRange,
_buffer,
- _detectLayerMask,
- QueryTriggerInteraction.Collide
+ Constant.Layer.DropLayerMask
);
for (int i = 0; i < hitCount; i++)
@@ -64,7 +56,7 @@ namespace SepCore.Components
if (coin != null && coin.Available)
{
AbsorbDrop(coin.CachedTransform, elapseSeconds);
- coin.TryCollect(_player, _collectDistance);
+ coin.TryCollect(_player, CollectDistance);
continue;
}
@@ -72,7 +64,7 @@ namespace SepCore.Components
if (exp != null && exp.Available)
{
AbsorbDrop(exp.CachedTransform, elapseSeconds);
- exp.TryCollect(_player, _collectDistance);
+ exp.TryCollect(_player, CollectDistance);
}
}
}
@@ -93,8 +85,7 @@ namespace SepCore.Components
private void AbsorbDrop(Transform drop, float deltaTime)
{
- if (drop == null || _target == null) return;
- drop.position = Vector3.MoveTowards(drop.position, _target.position, _absorbSpeed * deltaTime);
+ drop.position = Vector3.MoveTowards(drop.position, _target.position, AbsorbSpeed * deltaTime);
}
}
}
diff --git a/Assets/GameMain/Scripts/Runtime/Components/AttackComponent.cs b/Assets/GameMain/Scripts/Runtime/Components/AttackComponent.cs
deleted file mode 100644
index 05d51ff..0000000
--- a/Assets/GameMain/Scripts/Runtime/Components/AttackComponent.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using SepCore.Entity;
-using UnityEngine;
-
-namespace SepCore.Components
-{
- public class AttackComponent : MonoBehaviour
- {
- private bool _isAttacking = false;
- private List _weapons;
-
- public void SetIsAttacking(bool isAttacking) => _isAttacking = isAttacking;
-
- public void OnInit()
- {
- }
-
- public void OnUpdate(float elapsedTime, float realElapseSeconds)
- {
-
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/GameMain/Scripts/Runtime/Components/AttackComponent.cs.meta b/Assets/GameMain/Scripts/Runtime/Components/AttackComponent.cs.meta
deleted file mode 100644
index 76a3a6d..0000000
--- a/Assets/GameMain/Scripts/Runtime/Components/AttackComponent.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: a2b35b5ae4185cb4cab2d84b0569db3d
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/GameMain/Scripts/Runtime/Components/BackpackComponent.cs b/Assets/GameMain/Scripts/Runtime/Components/BackpackComponent.cs
index 89a6a78..826e8a3 100644
--- a/Assets/GameMain/Scripts/Runtime/Components/BackpackComponent.cs
+++ b/Assets/GameMain/Scripts/Runtime/Components/BackpackComponent.cs
@@ -94,7 +94,6 @@ namespace SepCore.Components
public void SetWeaponState(bool state)
{
- if (_weapons == null) return;
foreach (var weapon in _weapons)
{
weapon.SetEnabled(state);
diff --git a/Assets/GameMain/Scripts/Runtime/Components/HealthComponent.cs b/Assets/GameMain/Scripts/Runtime/Components/HealthComponent.cs
index 6363b04..39adc68 100644
--- a/Assets/GameMain/Scripts/Runtime/Components/HealthComponent.cs
+++ b/Assets/GameMain/Scripts/Runtime/Components/HealthComponent.cs
@@ -43,8 +43,6 @@ namespace SepCore.Components
{
_maxHealthBase = maxHealth;
_currentHealth = maxHealth;
- _statComponent = statComponent;
-
_statComponent = statComponent;
if (_statComponent != null)
{
@@ -98,7 +96,8 @@ namespace SepCore.Components
{
if (_isDead) return;
- if (_dodgeStat.Value > UnityEngine.Random.value)
+ float maxDodge = GameEntry.Luban.Global.MaxDodgeRate / 1000f;
+ if (UnityEngine.Random.value < Mathf.Clamp(_dodgeStat.Value, 0f, maxDodge))
{
damage = 0;
}
@@ -108,6 +107,8 @@ namespace SepCore.Components
float defensePercent = _defenseStat.Percent;
damage -= defenseValue;
damage = Mathf.CeilToInt(damage / defensePercent);
+ int minDamage = GameEntry.Luban.Global.MinDamage;
+ if (damage < minDamage) damage = minDamage;
}
_currentHealth -= damage;
@@ -118,8 +119,9 @@ namespace SepCore.Components
private void CauseDamage(int damage)
{
- if (damage <= 0 || GameEntry.DamageText == null) return;
- GameEntry.DamageText.ShowDamage(transform.position + Vector3.up * 1.1f, damage);
+ if (damage <= 0) return;
+ float yOffset = GameEntry.Luban.Global.DamageTextYOffset / 1000f;
+ GameEntry.DamageText.ShowDamage(transform.position + Vector3.up * yOffset, damage);
}
}
}
diff --git a/Assets/GameMain/Scripts/Runtime/Components/InputComponent.cs b/Assets/GameMain/Scripts/Runtime/Components/InputComponent.cs
index e453d14..6d760b5 100644
--- a/Assets/GameMain/Scripts/Runtime/Components/InputComponent.cs
+++ b/Assets/GameMain/Scripts/Runtime/Components/InputComponent.cs
@@ -15,9 +15,6 @@ namespace SepCore.Components
GameEntry.InputModule.RegisterListener(InputActionId.Move, OnMove);
}
- public void OnUpdate(float elapseSeconds, float realElapseSeconds)
- {
- }
public void OnReset()
{
diff --git a/Assets/GameMain/Scripts/Runtime/Components/MovementComponent.cs b/Assets/GameMain/Scripts/Runtime/Components/MovementComponent.cs
index dfafd00..862ec88 100644
--- a/Assets/GameMain/Scripts/Runtime/Components/MovementComponent.cs
+++ b/Assets/GameMain/Scripts/Runtime/Components/MovementComponent.cs
@@ -13,8 +13,8 @@ namespace SepCore.Components
[SerializeField] private Vector3 _direction;
[SerializeField] private Transform _cachedTransform;
[SerializeField] private bool _avoidEnemyOverlap;
- [SerializeField] private float _enemyBodyRadius = 0.45f;
- [SerializeField] private int _separationIterations = 2;
+ [SerializeField] private float _enemyBodyRadius;
+ [SerializeField] private int _separationIterations;
public float Speed => (_speedBase + _movementStat.Value) * _movementStat.Percent;
public bool AvoidEnemyOverlap => _avoidEnemyOverlap;
@@ -26,19 +26,24 @@ namespace SepCore.Components
[SerializeField] private float _speedBase;
private StatComponent _statComponent;
+ private Player _player;
+ private EnemyBase _enemy;
private StatProperty _movementStat;
private Action _movementStatCallback;
public void OnInit(float speed, Transform target, StatComponent statComponent = null,
- bool avoidEnemyOverlap = false, float enemyBodyRadius = 0.45f, int separationIterations = 2)
+ bool avoidEnemyOverlap = false, float? enemyBodyRadius = null, int? separationIterations = null)
{
_speedBase = speed;
_cachedTransform = target;
_direction = Vector3.forward;
_avoidEnemyOverlap = avoidEnemyOverlap;
- _enemyBodyRadius = Mathf.Max(0.01f, enemyBodyRadius);
- _separationIterations = Mathf.Max(1, separationIterations);
+ _enemyBodyRadius = Mathf.Max(0.01f, enemyBodyRadius ?? (GameEntry.Luban.Global.EnemyBodyRadius / 1000f));
+ _separationIterations = Mathf.Max(1, separationIterations ?? GameEntry.Luban.Global.EnemySeparationIterations);
+
+ TryGetComponent(out _player);
+ TryGetComponent(out _enemy);
_statComponent = statComponent;
if (_statComponent != null)
@@ -73,8 +78,10 @@ namespace SepCore.Components
_direction = Vector3.zero;
_isMoving = false;
_avoidEnemyOverlap = false;
- _enemyBodyRadius = 0.45f;
- _separationIterations = 2;
+ _enemyBodyRadius = GameEntry.Luban.Global.EnemyBodyRadius / 1000f;
+ _separationIterations = GameEntry.Luban.Global.EnemySeparationIterations;
+ _player = null;
+ _enemy = null;
if (_statComponent != null)
{
@@ -86,8 +93,7 @@ namespace SepCore.Components
if (transformToUnregister != null)
{
- var simulationWorld = GameEntry.SimulationWorld;
- simulationWorld?.UnregisterPlayerMovement(transformToUnregister);
+ GameEntry.SimulationWorld.UnregisterPlayerMovement(transformToUnregister);
}
}
@@ -112,12 +118,6 @@ namespace SepCore.Components
return;
}
- SimulationWorld simulationWorld = GameEntry.SimulationWorld;
- if (simulationWorld == null)
- {
- return;
- }
-
Vector3 direction = _direction;
direction.y = 0f;
if (direction.sqrMagnitude > Mathf.Epsilon)
@@ -125,15 +125,15 @@ namespace SepCore.Components
direction.Normalize();
}
- if (TryGetComponent(out Player _))
+ if (_player != null)
{
- simulationWorld.SyncPlayerMovementInput(_cachedTransform, _isMoving, direction, Speed);
+ GameEntry.SimulationWorld.SyncPlayerMovementInput(_cachedTransform, _isMoving, direction, Speed);
return;
}
- if (TryGetComponent(out EnemyBase enemy))
+ if (_enemy != null)
{
- simulationWorld.SyncEnemyMovementInput(enemy.Id, _isMoving, direction, Speed,
+ GameEntry.SimulationWorld.SyncEnemyMovementInput(_enemy.Id, _isMoving, direction, Speed,
_avoidEnemyOverlap, _enemyBodyRadius, _separationIterations);
}
}
diff --git a/Assets/GameMain/Scripts/Runtime/Components/StatComponent.cs b/Assets/GameMain/Scripts/Runtime/Components/StatComponent.cs
index 26a4f37..82f522b 100644
--- a/Assets/GameMain/Scripts/Runtime/Components/StatComponent.cs
+++ b/Assets/GameMain/Scripts/Runtime/Components/StatComponent.cs
@@ -7,13 +7,11 @@ namespace SepCore.Components
{
public class StatComponent : MonoBehaviour
{
- private Dictionary> _statModifiers;
- private Dictionary> _statModifierCallbacks;
+ private readonly Dictionary> _statModifiers = new();
+ private readonly Dictionary> _statModifierCallbacks = new();
public void OnInit()
{
- _statModifiers = new Dictionary>();
- _statModifierCallbacks = new Dictionary>();
}
public void OnReset()
@@ -26,13 +24,10 @@ namespace SepCore.Components
{
if (!_statModifiers.TryGetValue(modifier.StatType, out var modifiers))
{
- _statModifiers.Add(modifier.StatType, modifiers = new List());
- modifiers.Add(modifier);
- }
- else
- {
- modifiers.Add(modifier);
+ modifiers = new List();
+ _statModifiers.Add(modifier.StatType, modifiers);
}
+ modifiers.Add(modifier);
if (_statModifierCallbacks.TryGetValue(modifier.StatType, out var callbacks))
callbacks?.Invoke(modifier, true);
@@ -42,7 +37,7 @@ namespace SepCore.Components
{
if (_statModifiers.TryGetValue(modifier.StatType, out var modifiers))
{
- _statModifiers[modifier.StatType].Remove(modifier);
+ modifiers.Remove(modifier);
}
if (_statModifierCallbacks.TryGetValue(modifier.StatType, out var callbacks))
diff --git a/Assets/GameMain/Scripts/Runtime/EntityLogic/Player.cs b/Assets/GameMain/Scripts/Runtime/EntityLogic/Player.cs
index 8d0d705..1fcb494 100644
--- a/Assets/GameMain/Scripts/Runtime/EntityLogic/Player.cs
+++ b/Assets/GameMain/Scripts/Runtime/EntityLogic/Player.cs
@@ -64,7 +64,7 @@ namespace SepCore.Entity
get => _exp;
set
{
- if (_expRequires != null && _currentLevel + 1 < _expRequires.Length && value >= _expRequires[_currentLevel + 1])
+ if (_currentLevel + 1 < _expRequires.Length && value >= _expRequires[_currentLevel + 1])
{
value -= _expRequires[_currentLevel + 1];
_currentLevel++;
@@ -72,9 +72,9 @@ namespace SepCore.Entity
GameEntry.Event.Fire(this, PlayerLevelUpEventArgs.Create());
}
- int requiredExp = _expRequires != null && _currentLevel + 1 < _expRequires.Length
+ int requiredExp = _currentLevel + 1 < _expRequires.Length
? _expRequires[_currentLevel + 1]
- : 100;
+ : _expRequires[^1];
GameEntry.Event.Fire(this, PlayerExpChangeEventArgs.Create(value, requiredExp));
_exp = value;
}
@@ -84,24 +84,25 @@ namespace SepCore.Entity
public int PendingLevelPoints { get; set; }
- public IReadOnlyList Weapons => _backpackComponent != null ? _backpackComponent.Weapons : null;
- public IReadOnlyList Props => _backpackComponent != null ? _backpackComponent.Props : null;
- public int WeaponCapacity => _backpackComponent != null ? _backpackComponent.WeaponCapacity : 0;
+ public IReadOnlyList Weapons => _backpackComponent.Weapons;
+ public IReadOnlyList Props => _backpackComponent.Props;
+ public int WeaponCapacity => _backpackComponent.WeaponCapacity;
public bool AddProp(PropItem prop)
{
- if (prop == null || _backpackComponent == null) return false;
+ if (prop == null) return false;
return _backpackComponent.AttachProp(prop);
}
- public async UniTask AddWeaponAsync(WeaponData weaponData, float timeout = 30f)
+ public async UniTask AddWeaponAsync(WeaponData weaponData, float? timeout = null)
{
- if (weaponData == null || _backpackComponent == null)
+ if (weaponData == null)
{
return null;
}
- WeaponBase weapon = await GameEntry.Entity.ShowWeaponAsync(weaponData, timeout);
+ float actualTimeout = timeout ?? (GameEntry.Luban.Global.EntityAsyncTimeout / 1000f);
+ WeaponBase weapon = await GameEntry.Entity.ShowWeaponAsync(weaponData, actualTimeout);
if (weapon == null)
{
return null;
@@ -118,7 +119,7 @@ namespace SepCore.Entity
public bool RemoveWeapon(WeaponBase weapon)
{
- if (weapon == null || _backpackComponent == null)
+ if (weapon == null)
{
return false;
}
@@ -150,7 +151,7 @@ namespace SepCore.Entity
public void SetWeaponEnabled(bool enabled)
{
_weaponEnabled = enabled;
- _backpackComponent?.SetWeaponState(_enable && _weaponEnabled);
+ _backpackComponent.SetWeaponState(_enable && _weaponEnabled);
}
public void InitRole(RoleConfig role, LevelExperienceConfig expConfig)
@@ -168,22 +169,18 @@ namespace SepCore.Entity
AddWeaponAsync(EntityDataFactory.Create(GameEntry.Entity.NextId(), WeaponType.Knife, Id, _playerData.Camp)).Forget();
// StatComponent
- if (role.Modifiers != null)
+ foreach (var modifier in role.Modifiers)
{
- foreach (var modifier in role.Modifiers)
- {
- _statComponent.AddModifier(modifier);
- }
+ _statComponent.AddModifier(modifier);
}
- _expRequires = expConfig != null ? expConfig.ToTargetLevelArray() : null;
+ _expRequires = expConfig.ToTargetLevelArray();
// Fire Events
GameEntry.Event.Fire(this,
PlayerHealthChangeEventArgs.Create(0, _healthComponent.CurrentHealth, _healthComponent.MaxHealth));
- int initialTargetExp = _expRequires != null && _expRequires.Length > 1 ? _expRequires[1] : 100;
- GameEntry.Event.Fire(this, PlayerExpChangeEventArgs.Create(0, initialTargetExp));
+ GameEntry.Event.Fire(this, PlayerExpChangeEventArgs.Create(0, _expRequires[1]));
GameEntry.Event.Fire(this, PlayerCoinChangeEventArgs.Create(Coin, Coin));
}
@@ -203,13 +200,7 @@ namespace SepCore.Entity
_movementComponent = GetComponent();
_absorbComponent = GetComponent();
_statComponent = GetComponent();
- _healthComponent = GetComponent();
_backpackComponent = GetComponent();
-
- if (_absorbComponent == null)
- {
- _absorbComponent = gameObject.AddComponent();
- }
}
protected override void OnShow(object userData)
@@ -235,8 +226,6 @@ namespace SepCore.Entity
{
base.OnUpdate(elapseSeconds, realElapseSeconds);
- _inputComponent.OnUpdate(elapseSeconds, realElapseSeconds);
-
_movementComponent.SetDirection(_inputComponent.Direction);
_absorbComponent.OnUpdate(elapseSeconds, realElapseSeconds);
}
diff --git a/数据表/Datas/GlobalConfig_全局配置.xlsx b/数据表/Datas/GlobalConfig_全局配置.xlsx
index 3c16206..0e73089 100644
Binary files a/数据表/Datas/GlobalConfig_全局配置.xlsx and b/数据表/Datas/GlobalConfig_全局配置.xlsx differ