1
This commit is contained in:
@@ -205,6 +205,15 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
/// <summary>炮台扇形切换UI是否已显示</summary>
|
||||
protected bool _isTurretSwitcherActive = false;
|
||||
|
||||
// ⭐ 起飞炮台(FlyTurretData):轻点空白处触发起飞
|
||||
// 按下时先走正常开火流程,松开时判定为"轻点"(时长短+几乎没移动)才起飞,
|
||||
// 保证按住扫射的普通开火完全不受影响
|
||||
private bool _flyTapPending = false; // 本次按下待判定轻点
|
||||
private float _flyTapTime; // 按下时刻
|
||||
private Vector2 _flyTapPos; // 按下位置
|
||||
private const float flyTapMaxDuration = 0.25f; // 轻点判定:按下到松开最大时长(秒)
|
||||
private const float flyTapMaxMove = 40f; // 轻点判定:最大移动距离(像素)
|
||||
|
||||
int bulletCount = 0;
|
||||
public GameObject boardCast_Boss;
|
||||
|
||||
@@ -1042,6 +1051,28 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
|
||||
if (!isChangingTurret)
|
||||
{
|
||||
// ⭐ 起飞炮台(FlyTurretData):
|
||||
// 飞行/悬停中 → 点击空白处=改目标(点到哪飞到哪),立即响应;
|
||||
// 未起飞 → 仅记录轻点判定,继续走下方正常开火流程(松开时判定轻点才起飞),
|
||||
// 保证平时按住扫射/自动开火与普通炮台完全一致
|
||||
if (currSitData.currentTurret is FlyTurretData flyTurret)
|
||||
{
|
||||
if (flyTurret.IsFlying)
|
||||
{
|
||||
if (!_isPendingTurretLongPress && flyTurret.TakeoffToScreenPos(input.position))
|
||||
{
|
||||
HookFlyTurretUpwardFire(flyTurret);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (!_isPendingTurretLongPress && !currSitData.isDrillActive)
|
||||
{
|
||||
_flyTapPending = true;
|
||||
_flyTapTime = Time.time;
|
||||
_flyTapPos = input.position;
|
||||
}
|
||||
}
|
||||
|
||||
// ⭐ 本地金币校验:没钱不切换 Attack 状态,也不广播,避免无效请求
|
||||
if (!HasEnoughGoldToFire(toggle_Three.isOn))
|
||||
return;
|
||||
@@ -1088,6 +1119,10 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
return;
|
||||
}
|
||||
|
||||
// ⭐ 起飞炮台:飞行/悬停期间手指按住不旋转不开火(炮口固定朝上,子弹自行向上发射)
|
||||
if (currSitData.currentTurret is FlyTurretData flyHold && flyHold.IsFlying)
|
||||
return;
|
||||
|
||||
// 锁定模式:不手动旋转/开火,交给 HandleAutoRotate + HandleAutoFire
|
||||
// ⭐ 特殊鱼爆奖期间例外:自动锁定已禁用,玩家点击仍可手动旋转炮台瞄准发射方向
|
||||
if (toggle_Lock.isOn && !(currSitData != null && currSitData.isDrillActive)) return;
|
||||
@@ -1127,6 +1162,22 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
return;
|
||||
}
|
||||
|
||||
// ⭐ 起飞炮台:轻点空白处=起飞(按下时已正常开火,松开时判定轻点→触发起飞)
|
||||
// 长按/拖动扫射时此判定不通过,正常走下方 Idle,普通开火完全不受影响
|
||||
if (_flyTapPending)
|
||||
{
|
||||
_flyTapPending = false;
|
||||
if (currSitData.currentTurret is FlyTurretData flyTap
|
||||
&& !flyTap.IsFlying
|
||||
&& Time.time - _flyTapTime <= flyTapMaxDuration
|
||||
&& Vector2.Distance(input.position, _flyTapPos) <= flyTapMaxMove
|
||||
&& flyTap.TakeoffToScreenPos(input.position))
|
||||
{
|
||||
HookFlyTurretUpwardFire(flyTap);
|
||||
return; // 起飞:跳过下方 Idle 切换,避免打断起飞动画
|
||||
}
|
||||
}
|
||||
|
||||
currSitData.ChangeState(TurretState.Idle);
|
||||
SyncTurretState(TurretState.Idle);
|
||||
}
|
||||
@@ -1323,6 +1374,9 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
// ⭐ 特殊鱼爆奖(钻头/激光)期间禁用自动旋转:锁定跟随/自动扫射都让位,炮台方向只由玩家点击控制
|
||||
if (currSitData != null && currSitData.isDrillActive) return;
|
||||
|
||||
// ⭐ 起飞炮台:飞行/悬停期间禁用自动旋转(炮口固定朝上)
|
||||
if (currSitData != null && currSitData.currentTurret is FlyTurretData flyAuto && flyAuto.IsFlying) return;
|
||||
|
||||
// 锁定模式优先
|
||||
if (toggle_Lock.isOn && currSitData.isLock)
|
||||
{
|
||||
@@ -1425,6 +1479,9 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
// ⭐ 特殊鱼炮台(钻头)活动期间禁用普通开火,点击只发射钻头
|
||||
if (currSitData != null && currSitData.isDrillActive) return;
|
||||
|
||||
// ⭐ 起飞炮台:飞行/悬停期间禁用普通开火(此时由悬停逻辑自动向上发射);平时正常开火
|
||||
if (currSitData != null && currSitData.currentTurret is FlyTurretData flyFire && flyFire.IsFlying) return;
|
||||
|
||||
clickTime += Time.deltaTime;
|
||||
if (clickTime < attackTime) return;
|
||||
|
||||
@@ -1450,6 +1507,32 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
//FireBullet(currSitData, angle, isSanShe, isDouble, isLock);
|
||||
SyncFire(angle, isSanShe, isDouble, isLock);
|
||||
}
|
||||
|
||||
// ==================== 起飞炮台(FlyTurretData) ====================
|
||||
|
||||
/// <summary>给起飞炮台挂上向上开火回调(每次起飞前刷新,防止切炮台后回调丢失/错位)</summary>
|
||||
private void HookFlyTurretUpwardFire(FlyTurretData flyTurret)
|
||||
{
|
||||
if (flyTurret == null) return;
|
||||
flyTurret.onUpwardFire = OnFlyTurretUpwardFire;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 起飞炮台悬停时的向上开火:angle=0(正上方,aim-90约定)。
|
||||
/// 校验与普通开火一致(金币/子弹上限/退出倒计时),子弹照常走服务端同步链路。
|
||||
/// 不广播 TurretState:SyncFire 每 0.4 秒一发已带全部信息,逐发状态广播会刷屏网络。
|
||||
/// </summary>
|
||||
private void OnFlyTurretUpwardFire()
|
||||
{
|
||||
if (currSitData == null || _isLeavingCountdown) return;
|
||||
if (currSitData.isDrillActive) return;
|
||||
if (!HasEnoughGoldToFire(false)) return;
|
||||
if (IsBulletLimitReached(currSitData.user)) return;
|
||||
|
||||
// 0° = 正上方;起飞炮台不支持三连
|
||||
SyncFire(0f, false, toggle_Shuang != null && toggle_Shuang.isOn, false);
|
||||
}
|
||||
|
||||
/// <summary>战神激光命中延迟(秒):不开实体子弹,开火后延迟此时间直接发 KillFish 给后端(模拟弹道飞行)</summary>
|
||||
[Tooltip("战神激光命中延迟(秒):不开实体子弹,开火后延迟此时间直接发 KillFish 给后端")]
|
||||
public float laserHitDelay = 0.2f;
|
||||
@@ -1688,6 +1771,9 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
// ⭐ 特殊鱼炮台(钻头)活动期间禁用普通自动开火
|
||||
if (currSitData.isDrillActive) return;
|
||||
|
||||
// ⭐ 起飞炮台:飞行/悬停期间暂停自动开火(此时由悬停逻辑自动向上发射),平时正常自动开火
|
||||
if (currSitData.currentTurret is FlyTurretData flyAutoFire && flyAutoFire.IsFlying) return;
|
||||
|
||||
bool needAutoFire = toggle_SkillAuto.isOn || (toggle_Lock.isOn && currSitData.isLock && currSitData.lockFX.gameObject.activeSelf);
|
||||
if (!needAutoFire)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user