* implement missing graphics (affine BG, rotscaled bitmap sprite)

* fix potential crash upon exit
* more work on the input config UI
* misc fixes
This commit is contained in:
StapleButter
2017-03-24 20:53:01 +01:00
parent f7ac0090f0
commit 68eb4f6caf
9 changed files with 323 additions and 65 deletions

View File

@ -22,6 +22,37 @@
wxBEGIN_EVENT_TABLE(InputConfigDialog, wxDialog)
EVT_COMMAND(1001, wxEVT_BUTTON, InputConfigDialog::OnDerp)
EVT_COMMAND(100, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
EVT_COMMAND(101, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
EVT_COMMAND(102, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
EVT_COMMAND(103, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
EVT_COMMAND(104, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
EVT_COMMAND(105, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
EVT_COMMAND(106, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
EVT_COMMAND(107, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
EVT_COMMAND(108, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
EVT_COMMAND(109, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
EVT_COMMAND(110, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
EVT_COMMAND(111, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
EVT_COMMAND(200, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
EVT_COMMAND(201, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
EVT_COMMAND(202, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
EVT_COMMAND(203, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
EVT_COMMAND(204, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
EVT_COMMAND(205, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
EVT_COMMAND(206, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
EVT_COMMAND(207, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
EVT_COMMAND(208, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
EVT_COMMAND(209, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
EVT_COMMAND(210, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
EVT_COMMAND(211, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
EVT_TIMER(wxID_ANY, InputConfigDialog::OnPoll)
EVT_KEY_DOWN(InputConfigDialog::OnKeyDown)
wxEND_EVENT_TABLE()
@ -31,6 +62,9 @@ InputConfigDialog::InputConfigDialog(wxWindow* parent)
int keyorder[12] = {0, 1, 10, 11, 5, 4, 6, 7, 9, 8, 3, 2};
char keylabels[12][8] = {"A:", "B:", "Select:", "Start:", "Right:", "Left:", "Up:", "Down:", "R:", "L:", "X:", "Y:"};
memcpy(keymapping, Config::KeyMapping, 12*sizeof(int));
memcpy(joymapping, Config::JoyMapping, 12*sizeof(int));
wxBoxSizer* vboxmain = new wxBoxSizer(wxVERTICAL);
{
@ -39,24 +73,52 @@ InputConfigDialog::InputConfigDialog(wxWindow* parent)
wxStaticBox* kbdside = new wxStaticBox(p, wxID_ANY, "Keyboard");
{
wxGridSizer* grid = new wxGridSizer(2, 3, 0);
wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
wxPanel* p = new wxPanel(kbdside);
wxFlexGridSizer* grid = new wxFlexGridSizer(2, 3, 8);
for (int i = 0; i < 12; i++)
{
int j = keyorder[i];
wxStaticText* label = new wxStaticText(kbdside, wxID_ANY, keylabels[j]);
grid->Add(label);
wxStaticText* label = new wxStaticText(p, wxID_ANY, keylabels[j]);
grid->Add(label, 0, wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL);
const char* keyname = SDL_GetKeyName(SDL_GetKeyFromScancode((SDL_Scancode)Config::KeyMapping[j]));
wxButton* btn = new wxButton(kbdside, 100+i, keyname);
const char* keyname = SDL_GetScancodeName((SDL_Scancode)Config::KeyMapping[j]);
wxButton* btn = new wxButton(p, 100+j, keyname);
grid->Add(btn);
}
kbdside->SetSizer(grid);
p->SetSizer(grid);
sizer->Add(p, 0, wxALL, 15);
kbdside->SetSizer(sizer);
}
sizer->Add(kbdside);
wxStaticBox* joyside = new wxStaticBox(p, wxID_ANY, "Joystick");
{
wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
wxPanel* p = new wxPanel(joyside);
wxFlexGridSizer* grid = new wxFlexGridSizer(2, 3, 8);
for (int i = 0; i < 12; i++)
{
int j = keyorder[i];
wxStaticText* label = new wxStaticText(p, wxID_ANY, keylabels[j]);
grid->Add(label, 0, wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL);
const char* keyname = "zorp";//SDL_GetKeyName(SDL_GetKeyFromScancode((SDL_Scancode)Config::KeyMapping[j]));
wxButton* btn = new wxButton(p, 200+j, keyname);
grid->Add(btn);
}
p->SetSizer(grid);
sizer->Add(p, 0, wxALL, 15);
joyside->SetSizer(sizer);
}
sizer->Add(joyside);
p->SetSizer(sizer);
vboxmain->Add(p, 0, wxALL&(~wxBOTTOM), 15);
}
@ -78,4 +140,83 @@ InputConfigDialog::InputConfigDialog(wxWindow* parent)
SetSizer(vboxmain);
Fit();
polltimer = new wxTimer(this);
pollid = 0;
keystate = SDL_GetKeyboardState(&nkeys);
}
InputConfigDialog::~InputConfigDialog()
{
delete polltimer;
}
void InputConfigDialog::OnDerp(wxCommandEvent& event)
{
printf("OnDerp %d\n", event.GetId());
}
void InputConfigDialog::OnConfigureKey(wxCommandEvent& event)
{
pollid = event.GetId();
//pollbtn = (wxButton*)event.GetOwner();
polltimer->Start(100);
}
void InputConfigDialog::OnConfigureJoy(wxCommandEvent& event)
{
pollid = event.GetId();
//pollbtn = (wxButton*)event.GetSource();
polltimer->Start(100);
}
void InputConfigDialog::OnPoll(wxTimerEvent& event)
{
if (pollid < 100) return;
SDL_PumpEvents();
keystate = SDL_GetKeyboardState(&nkeys);
if (keystate[SDL_SCANCODE_ESCAPE])
{
polltimer->Stop();
//pollbtn->Enable(true);
pollid = 0;
return;
}
if (pollid >= 200)
{
//
}
else
{printf("poll kbd %d, %d, %d\n", pollid, nkeys, keystate[SDL_SCANCODE_A]);
int id = pollid - 100;
if (id >= 12) return;
for (int i = 0; i < nkeys; i++)
{
if (keystate[i])
{
keymapping[id] = i;
//pollbtn->Enable(true);
const char* keyname = SDL_GetScancodeName((SDL_Scancode)i);
//pollbtn->SetText(keyname);
printf("%s\n", keyname);
polltimer->Stop();
pollid = 0;
break;
}
}
}
}
void InputConfigDialog::OnKeyDown(wxKeyEvent& event)
{
printf("!!\n");
}