Add scene debug layer toggles
This commit is contained in:
@@ -354,9 +354,9 @@ mindmap
|
|||||||
|
|
||||||
下一步:
|
下一步:
|
||||||
|
|
||||||
- `debug/debug_overlay.*` 已经提供碰撞和玩家包围盒绘制。
|
- `debug/debug_overlay.*` 已经提供碰撞、玩家包围盒、battle zone、camera lock 和 spawn point 绘制。
|
||||||
- `F1` 切换 debug overlay。
|
- `F1` 切换 debug overlay 总开关。
|
||||||
- 绘制平台碰撞、battle zone、camera lock 和 spawn point。
|
- `F3-F6` 分别切换碰撞/网格、玩家框、battle zone/camera、spawn point。
|
||||||
- 绘制 hitbox / hurtbox。
|
- 绘制 hitbox / hurtbox。
|
||||||
- 输出当前场景、角色状态、FPS。
|
- 输出当前场景、角色状态、FPS。
|
||||||
- 增加日志分级和异常状态重置入口。
|
- 增加日志分级和异常状态重置入口。
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
- `StageLayerSource` 已接入:`StageRect` 支持色块占位或 sprite 资源路径,资源不存在时回退色块。
|
- `StageLayerSource` 已接入:`StageRect` 支持色块占位或 sprite 资源路径,资源不存在时回退色块。
|
||||||
- `StageAssetSlots` 已建立:`game/assets/stage/stage_01/` 已预留 background、tiles、props、effects、audio 目录和素材来源记录。
|
- `StageAssetSlots` 已建立:`game/assets/stage/stage_01/` 已预留 background、tiles、props、effects、audio 目录和素材来源记录。
|
||||||
- `StageProps` 已统一:旧 `WhiteboxProp` 已移除,后景/前景 props 都走 `StageLayer`,其中 `props_front` 在角色之后绘制用于遮挡。
|
- `StageProps` 已统一:旧 `WhiteboxProp` 已移除,后景/前景 props 都走 `StageLayer`,其中 `props_front` 在角色之后绘制用于遮挡。
|
||||||
|
- `SceneDebug` 已扩展:`F1` 控制 debug 总开关,`F3-F6` 分别切换碰撞/网格、玩家框、battle zone/camera、spawn point。
|
||||||
|
|
||||||
## 2. 第一关场景目标
|
## 2. 第一关场景目标
|
||||||
|
|
||||||
@@ -260,9 +261,18 @@ game/assets/stage/stage_01/
|
|||||||
3. 已完成:`StageLayerSource` 扩展 `StageLayer`,让每个 rect 支持色块占位或 sprite 资源路径。
|
3. 已完成:`StageLayerSource` 扩展 `StageLayer`,让每个 rect 支持色块占位或 sprite 资源路径。
|
||||||
4. 已完成:`StageAssetSlots` 创建并记录 `stage_01` 资源槽位,不要求已有最终素材。
|
4. 已完成:`StageAssetSlots` 创建并记录 `stage_01` 资源槽位,不要求已有最终素材。
|
||||||
5. 已完成:`StageProps` 把 props 从旧 `WhiteboxProp` 迁移到统一 layer 数据,支持 back/front 两层。
|
5. 已完成:`StageProps` 把 props 从旧 `WhiteboxProp` 迁移到统一 layer 数据,支持 back/front 两层。
|
||||||
6. `SceneDebug`:补齐 F1 debug 总开关,并预留分项开关。
|
6. 已完成:`SceneDebug` 补齐 F1 debug 总开关,并预留/接入分项开关。
|
||||||
7. `SceneAcceptanceRun`:PC 和 Switch 都构建通过,PC 能从起点移动到终点并看到相机推进。
|
7. `SceneAcceptanceRun`:PC 和 Switch 都构建通过,PC 能从起点移动到终点并看到相机推进。
|
||||||
|
|
||||||
|
### Debug 快捷键
|
||||||
|
|
||||||
|
- `F1`:debug overlay 总开关。
|
||||||
|
- `F2`:debug 清当前 battle zone,占位模拟清场解锁。
|
||||||
|
- `F3`:碰撞矩形和场景网格。
|
||||||
|
- `F4`:玩家包围盒。
|
||||||
|
- `F5`:battle zone 触发框和 camera bounds。
|
||||||
|
- `F6`:敌人出生点。
|
||||||
|
|
||||||
### 素材落位标准
|
### 素材落位标准
|
||||||
|
|
||||||
素材准备好后只做这些操作:
|
素材准备好后只做这些操作:
|
||||||
|
|||||||
@@ -3,11 +3,14 @@
|
|||||||
namespace ns_game {
|
namespace ns_game {
|
||||||
|
|
||||||
struct DebugFlags {
|
struct DebugFlags {
|
||||||
|
bool enabled = true;
|
||||||
bool showStageGrid = true;
|
bool showStageGrid = true;
|
||||||
bool showCollision = true;
|
bool showCollision = true;
|
||||||
bool showActorBounds = true;
|
bool showActorBounds = true;
|
||||||
bool showBattleZones = true;
|
bool showBattleZones = true;
|
||||||
bool showSpawnPoints = true;
|
bool showSpawnPoints = true;
|
||||||
|
bool showHitboxes = false;
|
||||||
|
bool showEnemies = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ns_game
|
} // namespace ns_game
|
||||||
|
|||||||
@@ -69,6 +69,10 @@ void DebugOverlay::Render(const LevelDefinition& level, const DebugFlags& flags,
|
|||||||
const frostbite2D::Rect* playerBounds,
|
const frostbite2D::Rect* playerBounds,
|
||||||
const std::vector<BattleZoneDebugInfo>*
|
const std::vector<BattleZoneDebugInfo>*
|
||||||
battleZoneDebug) const {
|
battleZoneDebug) const {
|
||||||
|
if (!flags.enabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (flags.showCollision) {
|
if (flags.showCollision) {
|
||||||
drawCollision(level);
|
drawCollision(level);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,14 +34,7 @@ void WhiteboxScene::Update(float deltaTime) {
|
|||||||
bool WhiteboxScene::OnEvent(const frostbite2D::Event& event) {
|
bool WhiteboxScene::OnEvent(const frostbite2D::Event& event) {
|
||||||
if (event.getType() == frostbite2D::EventType::KeyDown) {
|
if (event.getType() == frostbite2D::EventType::KeyDown) {
|
||||||
const auto& keyEvent = static_cast<const frostbite2D::KeyEvent&>(event);
|
const auto& keyEvent = static_cast<const frostbite2D::KeyEvent&>(event);
|
||||||
if (!keyEvent.isRepeat() &&
|
if (!keyEvent.isRepeat() && handleDebugKey(keyEvent.getKeyCode())) {
|
||||||
keyEvent.getKeyCode() == frostbite2D::KeyCode::F1) {
|
|
||||||
toggleDebugOverlay();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (!keyEvent.isRepeat() &&
|
|
||||||
keyEvent.getKeyCode() == frostbite2D::KeyCode::F2) {
|
|
||||||
clearActiveBattleZone();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -103,16 +96,34 @@ void WhiteboxScene::configureCamera() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool WhiteboxScene::handleDebugKey(frostbite2D::KeyCode keyCode) {
|
||||||
|
switch (keyCode) {
|
||||||
|
case frostbite2D::KeyCode::F1:
|
||||||
|
toggleDebugOverlay();
|
||||||
|
return true;
|
||||||
|
case frostbite2D::KeyCode::F2:
|
||||||
|
clearActiveBattleZone();
|
||||||
|
return true;
|
||||||
|
case frostbite2D::KeyCode::F3:
|
||||||
|
debugFlags_.showCollision = !debugFlags_.showCollision;
|
||||||
|
debugFlags_.showStageGrid = debugFlags_.showCollision;
|
||||||
|
return true;
|
||||||
|
case frostbite2D::KeyCode::F4:
|
||||||
|
debugFlags_.showActorBounds = !debugFlags_.showActorBounds;
|
||||||
|
return true;
|
||||||
|
case frostbite2D::KeyCode::F5:
|
||||||
|
debugFlags_.showBattleZones = !debugFlags_.showBattleZones;
|
||||||
|
return true;
|
||||||
|
case frostbite2D::KeyCode::F6:
|
||||||
|
debugFlags_.showSpawnPoints = !debugFlags_.showSpawnPoints;
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void WhiteboxScene::toggleDebugOverlay() {
|
void WhiteboxScene::toggleDebugOverlay() {
|
||||||
const bool enabled = !(debugFlags_.showStageGrid || debugFlags_.showCollision ||
|
debugFlags_.enabled = !debugFlags_.enabled;
|
||||||
debugFlags_.showActorBounds ||
|
|
||||||
debugFlags_.showBattleZones ||
|
|
||||||
debugFlags_.showSpawnPoints);
|
|
||||||
debugFlags_.showStageGrid = enabled;
|
|
||||||
debugFlags_.showCollision = enabled;
|
|
||||||
debugFlags_.showActorBounds = enabled;
|
|
||||||
debugFlags_.showBattleZones = enabled;
|
|
||||||
debugFlags_.showSpawnPoints = enabled;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WhiteboxScene::beginCameraBoundsBlend(
|
void WhiteboxScene::beginCameraBoundsBlend(
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ private:
|
|||||||
frostbite2D::Camera* activeCamera() const;
|
frostbite2D::Camera* activeCamera() const;
|
||||||
std::vector<BattleZoneDebugInfo> buildBattleZoneDebugInfo() const;
|
std::vector<BattleZoneDebugInfo> buildBattleZoneDebugInfo() const;
|
||||||
void configureCamera();
|
void configureCamera();
|
||||||
|
bool handleDebugKey(frostbite2D::KeyCode keyCode);
|
||||||
void toggleDebugOverlay();
|
void toggleDebugOverlay();
|
||||||
void beginCameraBoundsBlend(const frostbite2D::Rect& targetBounds);
|
void beginCameraBoundsBlend(const frostbite2D::Rect& targetBounds);
|
||||||
void clearActiveBattleZone();
|
void clearActiveBattleZone();
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ void StageRenderer::Render(const LevelDefinition& level,
|
|||||||
}
|
}
|
||||||
drawLayer(level, layer);
|
drawLayer(level, layer);
|
||||||
}
|
}
|
||||||
if (debugFlags.showStageGrid) {
|
if (debugFlags.enabled && debugFlags.showStageGrid) {
|
||||||
drawGrid(level);
|
drawGrid(level);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user