mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-21 07:43:59 -07:00
Game, Simulation, etc: Separated 'update' and 'interpolate', and made 'update' return whether it's going fast enough (so callers can decide to do more updates per render). Changed some time variables to 'double' so they have enough precision in long games. Atlas: Added "Fast" playback button. Made simulation sometimes go at real-time speed, if it's just slightly too slow at rendering. VertexBuffer: Removed some non-useful glGetError calls. Entity: Commented out redundant Tick code. Fixed syntax error in disabled code that confused the IDE. Aura: Changed string code again, to simply use ASCII instead of UTF-16. (SpiderMonkey seems to handle it just as efficiently, for small strings.) Misc: Some more minor header-file cleanup. SVN log: Added feed link. This was SVN commit r4807.
154 lines
3.9 KiB
C++
154 lines
3.9 KiB
C++
#include "stdafx.h"
|
|
|
|
#include "Map.h"
|
|
|
|
#include "General/Datafile.h"
|
|
#include "ScenarioEditor/Tools/Common/Tools.h"
|
|
|
|
#include "GameInterface/Messages.h"
|
|
|
|
#include "wx/filename.h"
|
|
|
|
enum
|
|
{
|
|
ID_GenerateMap,
|
|
ID_GenerateRMS,
|
|
ID_SimPlay,
|
|
ID_SimFast,
|
|
ID_SimPause,
|
|
ID_SimReset
|
|
};
|
|
|
|
enum
|
|
{
|
|
SimInactive,
|
|
SimPlaying,
|
|
SimPlayingFast,
|
|
SimPaused
|
|
};
|
|
|
|
MapSidebar::MapSidebar(wxWindow* sidebarContainer, wxWindow* bottomBarContainer)
|
|
: Sidebar(sidebarContainer, bottomBarContainer), m_SimState(SimInactive)
|
|
{
|
|
// TODO: Less ugliness
|
|
// TODO: Intercept arrow keys and send them to the GL window
|
|
|
|
m_MainSizer->Add(new wxButton(this, ID_GenerateMap, _("Generate empty map")));
|
|
|
|
{
|
|
wxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
|
|
m_RMSText = new wxTextCtrl(this, wxID_ANY, _T("cantabrian_highlands"));
|
|
sizer->Add(m_RMSText);
|
|
sizer->Add(new wxButton(this, ID_GenerateRMS, _("Generate RMS")));
|
|
m_MainSizer->Add(sizer);
|
|
}
|
|
|
|
{
|
|
wxStaticBoxSizer* sizer = new wxStaticBoxSizer(wxHORIZONTAL, this, _("Simulation test"));
|
|
sizer->Add(new wxButton(this, ID_SimPlay, _("Play")), wxSizerFlags().Proportion(1));
|
|
sizer->Add(new wxButton(this, ID_SimFast, _("Fast")), wxSizerFlags().Proportion(1));
|
|
sizer->Add(new wxButton(this, ID_SimPause, _("Pause")), wxSizerFlags().Proportion(1));
|
|
sizer->Add(new wxButton(this, ID_SimReset, _("Reset")), wxSizerFlags().Proportion(1));
|
|
UpdateSimButtons();
|
|
m_MainSizer->Add(sizer, wxSizerFlags().Expand().Border(wxTOP, 16));
|
|
}
|
|
}
|
|
|
|
void MapSidebar::GenerateMap(wxCommandEvent& WXUNUSED(event))
|
|
{
|
|
POST_MESSAGE(GenerateMap, (9));
|
|
}
|
|
|
|
void MapSidebar::GenerateRMS(wxCommandEvent& WXUNUSED(event))
|
|
{
|
|
wxChar* argv[] = { _T("rmgen.exe"), 0, _T("_atlasrm"), 0 };
|
|
wxString scriptName = m_RMSText->GetValue();
|
|
argv[1] = const_cast<wxChar*>(scriptName.c_str());
|
|
|
|
wxString cwd = wxFileName::GetCwd();
|
|
wxFileName::SetCwd(Datafile::GetDataDirectory());
|
|
wxExecute(argv, wxEXEC_SYNC);
|
|
wxFileName::SetCwd(cwd);
|
|
|
|
POST_MESSAGE(LoadMap, (L"_atlasrm.pmp"));
|
|
}
|
|
|
|
void MapSidebar::UpdateSimButtons()
|
|
{
|
|
wxButton* button;
|
|
|
|
button = wxDynamicCast(FindWindow(ID_SimPlay), wxButton);
|
|
wxCHECK(button, );
|
|
button->Enable(m_SimState != SimPlaying);
|
|
|
|
button = wxDynamicCast(FindWindow(ID_SimFast), wxButton);
|
|
wxCHECK(button, );
|
|
button->Enable(m_SimState != SimPlayingFast);
|
|
|
|
button = wxDynamicCast(FindWindow(ID_SimPause), wxButton);
|
|
wxCHECK(button, );
|
|
button->Enable(m_SimState == SimPlaying || m_SimState == SimPlayingFast);
|
|
|
|
button = wxDynamicCast(FindWindow(ID_SimReset), wxButton);
|
|
wxCHECK(button, );
|
|
button->Enable(m_SimState != SimInactive);
|
|
}
|
|
|
|
void MapSidebar::OnSimPlay(wxCommandEvent& event)
|
|
{
|
|
float speed = 1.f;
|
|
int newState = SimPlaying;
|
|
if (event.GetId() == ID_SimFast)
|
|
{
|
|
speed = 8.f;
|
|
newState = SimPlayingFast;
|
|
}
|
|
|
|
if (m_SimState == SimInactive)
|
|
{
|
|
POST_MESSAGE(SimStateSave, (L"default", true));
|
|
POST_MESSAGE(SimPlay, (speed));
|
|
m_SimState = newState;
|
|
}
|
|
else // paused or already playing at a different speed
|
|
{
|
|
POST_MESSAGE(SimPlay, (speed));
|
|
m_SimState = newState;
|
|
}
|
|
UpdateSimButtons();
|
|
}
|
|
|
|
void MapSidebar::OnSimPause(wxCommandEvent& WXUNUSED(event))
|
|
{
|
|
if (m_SimState == SimPlaying || m_SimState == SimPlayingFast)
|
|
{
|
|
POST_MESSAGE(SimPlay, (0.f));
|
|
m_SimState = SimPaused;
|
|
}
|
|
UpdateSimButtons();
|
|
}
|
|
|
|
void MapSidebar::OnSimReset(wxCommandEvent& WXUNUSED(event))
|
|
{
|
|
if (m_SimState == SimPlaying || m_SimState == SimPlayingFast)
|
|
{
|
|
POST_MESSAGE(SimPlay, (0.f));
|
|
POST_MESSAGE(SimStateRestore, (L"default"));
|
|
m_SimState = SimInactive;
|
|
}
|
|
else if (m_SimState == SimPaused)
|
|
{
|
|
POST_MESSAGE(SimStateRestore, (L"default"));
|
|
m_SimState = SimInactive;
|
|
}
|
|
UpdateSimButtons();
|
|
}
|
|
|
|
BEGIN_EVENT_TABLE(MapSidebar, Sidebar)
|
|
EVT_BUTTON(ID_GenerateMap, MapSidebar::GenerateMap)
|
|
EVT_BUTTON(ID_GenerateRMS, MapSidebar::GenerateRMS)
|
|
EVT_BUTTON(ID_SimPlay, MapSidebar::OnSimPlay)
|
|
EVT_BUTTON(ID_SimFast, MapSidebar::OnSimPlay)
|
|
EVT_BUTTON(ID_SimPause, MapSidebar::OnSimPause)
|
|
EVT_BUTTON(ID_SimReset, MapSidebar::OnSimReset)
|
|
END_EVENT_TABLE();
|