做不出来

This commit is contained in:
SoulliesOfficial
2026-06-30 01:48:58 -04:00
parent 9a9e48f8a5
commit ddd387ef35
132 changed files with 8945 additions and 2943 deletions

View File

@@ -1,3 +1,4 @@
using Cielonos.MainGame.Effects;
using Cielonos.MainGame.Effects.Feedback;
using SLSUtilities.General;
using Unity.Mathematics;
@@ -31,7 +32,7 @@ namespace Cielonos.MainGame.Characters
player.landMovementSc.TurnToDirection(direction, 0f);
}
}
if(player.eventSm is PlayerEventSubmodule playerEventSm)
{
foreach(var action in playerEventSm.onDodgeAttempt.Values) action.Invoke(success);

View File

@@ -40,10 +40,11 @@ namespace Cielonos.MainGame.Characters
{
backpackSm.ObtainItem<Polychrome>();
backpackSm.ObtainItem<FutureWand>();
backpackSm.ObtainItem<DualHarmony>();
backpackSm.ObtainItem<Ascension>();
backpackSm.ObtainItem<Passion>();
backpackSm.ObtainItem<ThermalDetonator>();
backpackSm.ObtainItem<SpatialWarpCaliper>();
backpackSm.ObtainItem<PhotonWarper>();
foreach (MainWeaponBase mainWeapon in backpackSm.mainWeapons)
{

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using Cielonos.MainGame;
using Cielonos.MainGame.Buffs.Character;
using Cielonos.MainGame.Effects.Feedback;
using Cielonos.MainGame.UI;
@@ -197,9 +198,34 @@ namespace Cielonos.MainGame.Characters
public override void RecoverEnergy(float energyAmount, bool spawnText = true)
{
if (energyAmount <= 0) return;
if (Mathf.Abs(energyAmount) < 1e-5f) return;
AddEnergy(energyAmount);
if (energyAmount > 0)
{
float current = attributeSm[CharacterAttribute.Energy];
float max = attributeSm[CharacterAttribute.MaximumEnergy];
float availableSpace = max - current;
if (energyAmount > availableSpace)
{
attributeSm[CharacterAttribute.Energy] = max;
float conversionRate =
attributeSm.Has(CharacterAttribute.OverloadConversionRate) ?
attributeSm[CharacterAttribute.OverloadConversionRate] : 1f;
float overflowEnergy = (energyAmount - availableSpace) * conversionRate;
DistributeOverloadEnergy(overflowEnergy);
}
else
{
attributeSm[CharacterAttribute.Energy] += energyAmount;
}
}
else
{
attributeSm[CharacterAttribute.Energy] += energyAmount;
attributeSm[CharacterAttribute.Energy] = Mathf.Max(0, attributeSm[CharacterAttribute.Energy]);
}
if (spawnText)
{

View File

@@ -24,40 +24,7 @@ namespace Cielonos.MainGame.Characters
RecoverEnergy(energyRegenRate, false);
}
}
/// <summary>
/// 增减能量值,正值为增加(溢出部分按 OverloadConversionRate 转换为过载能量),负值为消耗。
/// UI 更新和 onEnergyChanged 事件由属性值变更回调自动触发。
/// </summary>
public void AddEnergy(float amount)
{
if (amount == 0) return;
if (amount > 0)
{
float current = attributeSm[CharacterAttribute.Energy];
float max = attributeSm[CharacterAttribute.MaximumEnergy];
float availableSpace = max - current;
if (amount > availableSpace)
{
attributeSm[CharacterAttribute.Energy] = max;
float conversionRate = attributeSm.Has(CharacterAttribute.OverloadConversionRate) ? attributeSm[CharacterAttribute.OverloadConversionRate] : 1f;
float overflowEnergy = (amount - availableSpace) * conversionRate;
DistributeOverloadEnergy(overflowEnergy);
}
else
{
attributeSm[CharacterAttribute.Energy] += amount;
}
}
else
{
attributeSm[CharacterAttribute.Energy] += amount;
attributeSm[CharacterAttribute.Energy] = Mathf.Max(0, attributeSm[CharacterAttribute.Energy]);
}
}
private void DistributeOverloadEnergy(float totalOverflowAmount)
{

View File

@@ -8,6 +8,7 @@ using UnityEngine.UI;
using SLSUtilities.General;
using Unity.Cinemachine;
using Ease = DG.Tweening.Ease;
using Cielonos.MainGame.Effects.Feedback;
namespace Cielonos.MainGame.Characters
{
@@ -44,6 +45,7 @@ namespace Cielonos.MainGame.Characters
// 用于存储独立的摄像机平滑旋转状态,防止跟随 Transform 的跳变
private float currentYaw;
private float currentPitch;
private bool wasShakingLastFrame;
private Tweener iconTween;
@@ -117,9 +119,29 @@ namespace Cielonos.MainGame.Characters
// 【2】接管并强制控制 OrbitalFollow 的轨道位置
var orbitalFollow = viewSc.lockingTargetCamera.GetComponent<CinemachineOrbitalFollow>();
// 直接强制摄像机在水平和垂直轨道上移动
orbitalFollow.HorizontalAxis.Value = currentYaw;
orbitalFollow.VerticalAxis.Value = currentPitch;
float horizontalOffset = 0f;
float verticalOffset = 0f;
var orbitShaker = viewSc.lockingTargetCamera.GetComponent<CameraOrbitShaker>();
bool isOrbitActive = orbitShaker != null && orbitShaker.enabled && orbitShaker.HasActiveShakes;
if (isOrbitActive)
{
horizontalOffset = orbitShaker.CurrentHorizontalOffset;
verticalOffset = orbitShaker.CurrentVerticalOffset;
wasShakingLastFrame = true;
}
else if (wasShakingLastFrame)
{
// 刚结束大招回旋的帧:将相机的最终物理轴值写入内部状态,防止数值突变
currentYaw = orbitalFollow.HorizontalAxis.Value;
currentPitch = orbitalFollow.VerticalAxis.Value;
wasShakingLastFrame = false;
}
// 直接强制摄像机在水平和垂直轨道上移动(包含大招/反馈的 Orbit 回旋偏差量)
orbitalFollow.HorizontalAxis.Value = currentYaw + horizontalOffset;
orbitalFollow.VerticalAxis.Value = currentPitch + verticalOffset;
float OF_Fade = camLockData.orbitalFollowFadeCurve.Evaluate(Mathf.Clamp01((horizontalDistance - camLockData.orbitalFollowFadeDistanceRange.x) /
(camLockData.orbitalFollowFadeDistanceRange.y - camLockData.orbitalFollowFadeDistanceRange.x)));
@@ -226,6 +248,7 @@ namespace Cielonos.MainGame.Characters
this.isLocking = false;
this.isAutoRotate = false;
viewSc.stateDrivenCamera.GetComponent<Animator>().SetBool("isLockTarget", false);
viewSc.currentCamera = viewSc.freeLookCamera; // 核心修复:更新当前相机引用为自由相机
Transform oldTargetPoint = targetPoint;
this.lockTarget = null;