DIRECTOR: Show Channels in ImGUI

This commit is contained in:
Eugene Sandulenko 2024-04-29 00:11:59 +02:00
parent 8287ac9ddc
commit 61e18b08f0
No known key found for this signature in database
GPG key ID: 014D387312D34F08

View file

@ -24,13 +24,19 @@
#include "director/director.h"
#include "director/lingo/lingo.h"
#include "director/debugtools.h"
#include "director/cast.h"
#include "director/channel.h"
#include "director/frame.h"
#include "director/movie.h"
#include "director/score.h"
#include "director/sprite.h"
namespace Director {
typedef struct ImGuiState {
bool _showCallStack;
bool _showVars;
bool _showScore;
bool _showChannels;
} ImGuiState;
ImGuiState *_state = nullptr;
@ -64,14 +70,114 @@ static void showVars() {
ImGui::End();
}
static void showScore() {
if (!_state->_showScore)
static void showChannels() {
if (!_state->_showChannels)
return;
ImGui::SetNextWindowPos(ImVec2(20, 160), ImGuiCond_FirstUseEver);
ImGui::SetNextWindowSize(ImVec2(120, 120), ImGuiCond_FirstUseEver);
if (ImGui::Begin("Score", &_state->_showScore)) {
ImGui::Text("WIP");
ImGui::SetNextWindowSize(ImVec2(240, 240), ImGuiCond_FirstUseEver);
if (ImGui::Begin("Channels", &_state->_showChannels)) {
Score *score = g_director->getCurrentMovie()->getScore();
Frame &frame = *score->_currentFrame;
CastMemberID defaultPalette = g_director->getCurrentMovie()->getCast()->_defaultPalette;
ImGui::Text("TMPO: tempo: %d, skipFrameFlag: %d, blend: %d, currentFPS: %d",
frame._mainChannels.tempo, frame._mainChannels.skipFrameFlag, frame._mainChannels.blend, score->_currentFrameRate);
if (!frame._mainChannels.palette.paletteId.isNull()) {
ImGui::Text("PAL: paletteId: %s, firstColor: %d, lastColor: %d, flags: %d, cycleCount: %d, speed: %d, frameCount: %d, fade: %d, delay: %d, style: %d, currentId: %s, defaultId: %s",
frame._mainChannels.palette.paletteId.asString().c_str(), frame._mainChannels.palette.firstColor, frame._mainChannels.palette.lastColor, frame._mainChannels.palette.flags,
frame._mainChannels.palette.cycleCount, frame._mainChannels.palette.speed, frame._mainChannels.palette.frameCount,
frame._mainChannels.palette.fade, frame._mainChannels.palette.delay, frame._mainChannels.palette.style, g_director->_lastPalette.asString().c_str(), defaultPalette.asString().c_str());
} else {
ImGui::Text("PAL: paletteId: 000, currentId: %s, defaultId: %s\n", g_director->_lastPalette.asString().c_str(), defaultPalette.asString().c_str());
}
ImGui::Text("TRAN: transType: %d, transDuration: %d, transChunkSize: %d",
frame._mainChannels.transType, frame._mainChannels.transDuration, frame._mainChannels.transChunkSize);
ImGui::Text("SND: 1 sound1: %d, soundType1: %d", frame._mainChannels.sound1.member, frame._mainChannels.soundType1);
ImGui::Text("SND: 2 sound2: %d, soundType2: %d", frame._mainChannels.sound2.member, frame._mainChannels.soundType2);
ImGui::Text("LSCR: actionId: %d", frame._mainChannels.actionId.member);
if (ImGui::BeginTable("Channels", 21, ImGuiTableFlags_Borders)) {
ImGui::TableSetupColumn("CH", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("castId", ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("vis", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("inkData", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("ink", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("trails", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("stretch", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("line", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("dims", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("type", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("fg", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("bg", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("script", ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("colorcode", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("blendAmount", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("unk3", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("constraint", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("puppet", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("moveable", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("movieRate", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableSetupColumn("movieTime", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader);
ImGui::TableAngledHeadersRow();
for (int i = 0; i < frame._numChannels; i++) {
Channel &channel = *score->_channels[i + 1];
Sprite &sprite = *channel._sprite;
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::Text("%-3d", i + 1);
ImGui::TableNextColumn();
if (sprite._castId.member) {
ImGui::Text("%s", sprite._castId.asString().c_str());
ImGui::TableNextColumn();
ImGui::Checkbox("", &channel._visible);
ImGui::TableNextColumn();
ImGui::Text("0x%02x", sprite._inkData);
ImGui::TableNextColumn();
ImGui::Text("%d", sprite._ink);
ImGui::TableNextColumn();
ImGui::Checkbox("", &sprite._trails);
ImGui::TableNextColumn();
ImGui::Checkbox("", &sprite._stretch);
ImGui::TableNextColumn();
ImGui::Text("%d", sprite._thickness);
ImGui::TableNextColumn();
ImGui::Text("%dx%d@%d,%d", channel._width, channel._height, channel._currentPoint.x, channel._currentPoint.y);
ImGui::TableNextColumn();
ImGui::Text("%d (%s)", sprite._spriteType, spriteType2str(sprite._spriteType));
ImGui::TableNextColumn();
ImGui::Text("%d", sprite._foreColor);
ImGui::TableNextColumn();
ImGui::Text("%d", sprite._backColor);
ImGui::TableNextColumn();
ImGui::Text("%s", sprite._scriptId.asString().c_str());
ImGui::TableNextColumn();
ImGui::Text("0x%x", sprite._colorcode);
ImGui::TableNextColumn();
ImGui::Text("0x%x", sprite._blendAmount);
ImGui::TableNextColumn();
ImGui::Text("0x%x", sprite._unk3);
ImGui::TableNextColumn();
ImGui::Text("%d", channel._constraint);
ImGui::TableNextColumn();
ImGui::Checkbox("", &sprite._puppet);
ImGui::TableNextColumn();
ImGui::Checkbox("", &sprite._moveable);
ImGui::TableNextColumn();
ImGui::Text("%f", channel._movieRate);
ImGui::TableNextColumn();
ImGui::Text("%d (%f)", channel._movieTime, (float)(channel._movieTime/60.0f));
} else {
ImGui::Text("000");
}
}
ImGui::EndTable();
}
}
ImGui::End();
}
@ -96,7 +202,7 @@ void onImGuiRender() {
if (ImGui::BeginMenu("View")) {
ImGui::MenuItem("CallStack", NULL, &_state->_showCallStack);
ImGui::MenuItem("Vars", NULL, &_state->_showVars);
ImGui::MenuItem("Score", NULL, &_state->_showScore);
ImGui::MenuItem("Channels", NULL, &_state->_showChannels);
ImGui::EndMenu();
}
ImGui::EndMainMenuBar();
@ -104,7 +210,7 @@ void onImGuiRender() {
showVars();
showCallStack();
showScore();
showChannels();
}
void onImGuiCleanup() {