Implement network region setting (but still not on the network end)

This commit is contained in:
simon.kagstrom 2010-02-21 10:25:39 +00:00
parent 37ca5e562b
commit 65f0844cae
10 changed files with 159 additions and 20 deletions

View File

@ -22,6 +22,20 @@
#define SCREENSHOT_X (DISPLAY_X / SCREENSHOT_FACTOR)
#define SCREENSHOT_Y (DISPLAY_Y / SCREENSHOT_FACTOR)
typedef enum
{
REGION_UNKNOWN = 0,
REGION_EUROPE = 1,
REGION_AFRICA = 2,
REGION_NORTH_AMERICA = 3,
REGION_SOUTH_AMERICA = 4,
REGION_MIDDLE_EAST = 5,
REGION_SOUTH_ASIA = 6,
REGION_EAST_ASIA = 7,
REGION_OCEANIA = 8,
REGION_ANTARTICA = 9,
} network_region_t;
typedef enum
{
/* Connection-related messages */

View File

@ -104,6 +104,7 @@ Prefs::Prefs()
snprintf(this->NetworkName, 32, "Unset name");
snprintf(this->NetworkServer, 64, "play.c64-network.org");
this->NetworkPort = 46215; // FIXME! Set back to 46214 when ready
this->NetworkRegion = REGION_UNKNOWN;
}
@ -226,6 +227,7 @@ bool Prefs::operator==(const Prefs &rhs) const
#endif
&& this->NetworkKey == rhs.NetworkKey
&& this->NetworkPort == rhs.NetworkPort
&& this->NetworkRegion == rhs.NetworkRegion
&& strcmp(this->NetworkServer, rhs.NetworkServer) == 0
&& strcmp(this->NetworkName, rhs.NetworkName) == 0
&& this->NetworkAvatar == rhs.NetworkAvatar
@ -392,11 +394,12 @@ void Prefs::Load(const char *filename)
strcpy(NetworkName, value);
else if (!strcmp(keyword, "NetworkServer"))
strcpy(NetworkServer, value);
#warning take back in real release
// else if (!strcmp(keyword, "NetworkPort"))
// NetworkPort = atoi(value);
else if (!strcmp(keyword, "NetworkPort"))
NetworkPort = atoi(value);
else if (!strcmp(keyword, "NetworkName"))
strcpy(NetworkName, value);
else if (!strcmp(keyword, "NetworkRegion"))
NetworkRegion = atoi(value);
else if (!strcmp(keyword, "NetworkAvatar"))
NetworkAvatar = atoi(value);
}
@ -497,6 +500,7 @@ bool Prefs::Save(const char *filename)
fprintf(file, "NetworkName = %s\n", NetworkName);
fprintf(file, "NetworkServer = %s\n", NetworkServer);
fprintf(file, "NetworkPort = %d\n", NetworkPort);
fprintf(file, "NetworkRegion = %d\n", NetworkRegion);
fclose(file);
ThePrefsOnDisk = *this;
return true;

View File

@ -178,6 +178,7 @@ private:
char NetworkName[32];
char NetworkServer[64];
int NetworkRegion;
int NetworkPort;
int NetworkKey;

View File

@ -42,6 +42,7 @@ static const char *get_theme_path(const char *dir, const char *what)
#include "bind_keys_menu.cpp"
#include "theme_menu.cpp"
#include "options_menu.cpp"
#include "network_region_menu.cpp"
#include "network_menu.cpp"
#include "game_info_menu.cpp"
#include "main_menu.cpp"
@ -112,6 +113,7 @@ Gui::Gui()
this->giv = NULL;
this->bkv = NULL;
this->nuv = NULL;
this->nrv = NULL;
}
Gui::~Gui()
@ -125,6 +127,7 @@ Gui::~Gui()
delete this->giv;
delete this->bkv;
delete this->nuv;
delete this->nrv;
delete this->cur_gameInfo;
delete this->timerController;
@ -235,6 +238,7 @@ bool Gui::setTheme(const char *path)
this->bkv = new BindKeysView();
this->giv = new GameInfoView();
this->nuv = new NetworkUserView();
this->nrv = new NetworkRegionView();
}
VirtualKeyboard::kbd->updateTheme();
@ -305,6 +309,9 @@ GuiView *Gui::popView()
this->views = (GuiView**)xrealloc(this->views,
sizeof(GuiView*) * this->n_views);
if (this->peekView())
this->peekView()->viewPushCallback();
return cur;
}

View File

@ -26,6 +26,7 @@ class NetworkView;
class ThemeView;
class GameInfoView;
class NetworkUserView;
class NetworkRegionView;
class VirtualKeyboard;
@ -111,6 +112,7 @@ public:
ThemeView *tv;
BindKeysView *bkv;
NetworkUserView *nuv;
NetworkRegionView *nrv;
GuiView **views;
int n_views;

View File

@ -62,10 +62,12 @@ public:
{
case 0:
case 1:
case 2:
VirtualKeyboard::kbd->activate();
VirtualKeyboard::kbd->registerListener(this);
break;
case 2:
Gui::gui->pushView(Gui::gui->nrv);
break;
case 4:
if ( strncmp(Gui::gui->np->NetworkName, "Unset", strlen("Unset")) == 0)
Gui::gui->pushDialogueBox(new DialogueBox(network_unset_name_dlg));
@ -104,8 +106,8 @@ private:
Gui::gui->np->NetworkName);
snprintf(this->strs[1], sizeof(this->strs[1]) - 1, "Server (%s)",
Gui::gui->np->NetworkServer);
snprintf(this->strs[2], sizeof(this->strs[2]) - 1, "Server port (%d)",
Gui::gui->np->NetworkPort);
snprintf(this->strs[2], sizeof(this->strs[2]) - 1, "Set region (%s)",
region_to_str(Gui::gui->np->NetworkRegion));
this->messages[0] = this->strs[0];
this->messages[1] = this->strs[1];

View File

@ -0,0 +1,99 @@
#include "gui.hh"
#include "menu.hh"
#include "help_box.hh"
#include "virtual_keyboard.hh"
#include <sysdeps.h>
#include <C64.h>
class NetworkRegionView;
class NetworkRegionMenu : public Menu
{
friend class NetworkRegionView;
public:
NetworkRegionMenu(Font *font) : Menu(font)
{
memset(this->messages, 0, sizeof(this->messages));
for (int i = REGION_UNKNOWN; i < REGION_ANTARTICA; i++)
this->messages[i] = region_to_str(i);
this->setText(this->messages);
}
~NetworkRegionMenu()
{
}
virtual void selectCallback(int which)
{
Gui::gui->np->NetworkRegion = which;
Gui::gui->popView();
}
virtual void escapeCallback(int which)
{
Gui::gui->popView();
}
virtual void hoverCallback(int which)
{
}
private:
void updateMessages()
{
}
const char *messages[REGION_ANTARTICA + 1];
HelpBox *help;
};
class NetworkRegionView : public GuiView
{
public:
NetworkRegionView() : GuiView()
{
this->menu = new NetworkRegionMenu(Gui::gui->default_font);
}
~NetworkRegionView()
{
delete this->menu;
}
void runLogic()
{
this->menu->runLogic();
}
void pushEvent(SDL_Event *ev)
{
this->menu->pushEvent(ev);
}
void viewPushCallback()
{
this->menu->updateMessages();
}
void draw(SDL_Surface *where)
{
SDL_Rect dst;
/* Blit the backgrounds */
dst = (SDL_Rect){20,45,300,400};
SDL_BlitSurface(Gui::gui->main_menu_bg, NULL, where, &dst);
dst = (SDL_Rect){350,13,0,0};
SDL_BlitSurface(Gui::gui->infobox, NULL, where, &dst);
this->menu->draw(where, 50, 70, 300, 400);
}
protected:
NetworkRegionMenu *menu;
};

View File

@ -48,20 +48,7 @@ public:
const char *getRegion()
{
switch (this->region)
{
case 1: return "Europe";
case 2: return "Africa";
case 3: return "North America";
case 4: return "South America";
case 5: return "Asia";
case 6: return "Australia";
case 7: return "Antartica"; // Likely, yes
default:
break;
}
return "Unknown";
return region_to_str(this->region);
}
SDL_Surface *scr;

View File

@ -8,6 +8,7 @@
#include <sysdeps.h>
#include <C64.h>
#include <Network.h>
#include "gui/font.hh"
#include "utils.hh"
@ -342,3 +343,23 @@ const char *ip_to_str(uint8_t *ip_in)
return out;
}
const char *region_to_str(int region)
{
switch (region)
{
case REGION_EUROPE: return "Europe";
case REGION_AFRICA: return "Africa";
case REGION_NORTH_AMERICA: return "North America";
case REGION_SOUTH_AMERICA: return "South America";
case REGION_EAST_ASIA: return "East asia";
case REGION_SOUTH_ASIA: return "South asia";
case REGION_MIDDLE_EAST: return "Middle east";
case REGION_OCEANIA: return "Oceania";
case REGION_ANTARTICA: return "Antartica"; // Likely, yes
default:
break;
}
return "Unknown";
}

View File

@ -86,4 +86,6 @@ void highlight_background(SDL_Surface *where, Font *font,
const char *ip_to_str(uint8_t *ip_in);
const char *region_to_str(int region);
#endif /* __UTILS_H__ */