1
Fork 0
moonfall/AppMoonfallDev.cpp

217 lines
6.0 KiB
C++

/*
Moonfall Copyright (C) 2008 Alex Yatskov
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "Pch.h"
#include "AppMoonfall.h"
#include "DialogAssetPackager.h"
#include "FrameConsole.h"
#include "FrameMapEditor.h"
#include "FrameSpriteEditor.h"
void AppMoonfall::OnKeyDown(const InputKey& args)
{
if (args.key == '`')
{
m_frameConsole->Show();
m_frameConsole->Raise();
}
}
void AppMoonfall::OnConsoleInput(FrameConsole* console, const wxString& text)
{
const wxColor echoColor(0x80, 0x80, 0x80);
const wxString command = text.BeforeFirst(' ');
console->Write(wxT("> ") + text + wxT("\n"), echoColor);
if (command == wxT("/clear"))
{
console->Clear();
}
else if (command == wxT("/quit"))
{
ExitMainLoop();
}
else if (command == wxT("/help"))
{
console->Write(
wxT("/help\n")
#ifdef DEVELOPER
wxT("/edit [sprites | assets | maps]\n")
wxT("/show [layer | shapes | backdrop]\n")
wxT("/hide [layer | shapes | backdrop]\n")
wxT("/lua [code]\n")
wxT("/flush\n")
wxT("/vis\n")
#endif
wxT("/clear\n")
wxT("/quit\n"),
echoColor
);
}
#ifdef DEVELOPER
else if (command == wxT("/flush"))
{
System::FlushFiles();
System::FlushSurfaces();
}
else if (command == wxT("/lua"))
{
const wxString parameter = text.AfterFirst(' ');
m_binding.DoString(parameter.ToAscii());
}
else if (command == wxT("/edit"))
{
const wxString type = text.AfterFirst(' ');
if (type == wxT("sprites"))
{
if (m_frameSpriteEditor == NULL)
{
m_frameSpriteEditor = new FrameSpriteEditor(NULL, wxT("Assets/SpriteManifest.xml"));
}
m_frameSpriteEditor->Show();
m_frameSpriteEditor->Raise();
}
else if (type == wxT("assets"))
{
if (m_dialogAssetPackager == NULL)
{
m_dialogAssetPackager = new DialogAssetPackager(NULL, wxT("Assets"), wxT("Assets.pak"));
}
m_dialogAssetPackager->Show();
m_dialogAssetPackager->Raise();
}
else if (type == wxT("maps"))
{
if (m_frameMapEditor == NULL)
{
m_frameMapEditor = new FrameMapEditor(NULL);
}
m_frameMapEditor->Show();
m_frameMapEditor->Raise();
}
}
else if (command == wxT("/vis"))
{
IWorldContext * const context = System::QueryWorldContext();
if (context == NULL)
{
return;
}
const wchar_t* visibility[] = { L"hidden", L"visible" };
console->Write(wxString::Format(wxT("Backdrop: %s\n"), visibility[context->IsBackdropSpriteVisible()]), echoColor);
for (int i = 0; i < ACTOR_LAYER_COUNT; ++i)
{
console->Write(wxString::Format(wxT("Layer %d: %s\n"), i, visibility[context->IsLayerVisible(static_cast<const ActorLayer>(i))]), echoColor);
}
console->Write(wxString::Format(wxT("Shapes: %s\n"), visibility[context->AreShapesVisible()]), echoColor);
}
else if (command == wxT("/show") || command == wxT("/hide"))
{
IWorldContext * const context = System::QueryWorldContext();
if (context == NULL)
{
return;
}
const wxString remainder = text.AfterFirst(' ');
const wxString type = remainder.BeforeFirst(' ');
const bool show = command == wxT("/show");
if (type == wxT("layer"))
{
long layer = 0;
if (!remainder.AfterFirst(' ').ToLong(&layer))
{
return;
}
if (show)
{
context->ShowLayer(static_cast<ActorLayer>(layer));
}
else
{
context->HideLayer(static_cast<ActorLayer>(layer));
}
}
else if (type == wxT("shapes"))
{
if (show)
{
context->ShowShapes();
}
else
{
context->HideShapes();
}
}
else if (type == wxT("backdrop"))
{
if (show)
{
context->ShowBackdropSprite();
}
else
{
context->HideBackdropSprite();
}
}
}
#endif
else
{
console->Write(wxT("Unrecognized command ") + command + wxT("\n"), echoColor);
}
}
bool AppMoonfall::OnConsoleClose(FrameConsole* console)
{
return false;
}
void AppMoonfall::Trace(Trace::Level level, const char* text, const char* context)
{
static const wxColor s_colorLocation(0xff, 0xff, 0xff);
static const wxColor s_colors[] =
{
wxColor(0x00, 0xff, 0x00),
wxColor(0xff, 0xff, 0x00),
wxColor(0xff, 0x00, 0x00)
};
ASSERT(level < ARRAY_SIZE(s_colors));
if (m_frameConsole != NULL)
{
if (context != NULL)
{
m_frameConsole->Write(wxString::FromAscii(context) + wxT(" - "), s_colorLocation);
}
m_frameConsole->Write(wxString::FromAscii(text) + wxT("\n"), s_colors[level]);
}
#ifdef DEVELOPER
if (m_frameConsole != NULL && level >= Trace::LEVEL_WARNING)
{
m_frameConsole->Show();
}
#endif
}