00001 #include <stdio.h> 00002 #include <stdlib.h> 00003 #include <string.h> 00004 #ifdef WIN32 00005 #include <windows.h> 00006 #else 00007 #include <unistd.h> 00008 #endif 00009 #include <math.h> 00010 #include <GL/glut.h> 00011 #include <plib/pu.h> 00012 00013 #include "common_gui_funcs.h" 00014 #include "common_vars_gui.h" 00015 00016 class charCreator { 00017 public: 00018 charCreator(); 00019 ~charCreator(); 00020 bool _inputvals_ok(); 00021 puDialogBox* foo; 00022 private: 00023 void _display_screen(); 00024 puButtonBox* nation_chooser; 00025 puButtonBox* gender_switch; 00026 puInput* player_nick; 00027 puText* description; 00028 }; 00029 00030 charCreator* playerGen = NULL; 00031 00032 void kill_dialog(puObject* e) { 00033 playerGen->foo->hide(); 00034 delete playerGen->foo; 00035 playerGen->foo = NULL; 00036 } 00037 00038 void start_game_cb(puObject* o) { 00039 if (playerGen != NULL && playerGen->_inputvals_ok()) { 00040 printf("going playing\n"); 00041 } 00042 else { 00043 playerGen->foo = new puDialogBox(10, 40); 00044 00045 puFrame* dframe = new puFrame(0, display_height/2, display_width - 10, display_height/2 + 70); 00046 dframe->setLegend("invalid nickname or name already used..."); 00047 puOneShot* killer = new puOneShot(display_width-100, display_height/2+20, "OK"); 00048 killer->makeReturnDefault(true); 00049 killer->setCallback(kill_dialog); 00050 playerGen->foo->close(); 00051 playerGen->foo->reveal(); 00052 } 00053 } 00054 00055 void remove_char_creator (puObject* o) { 00056 total_menu->hide(); 00057 if (playerGen != NULL); 00058 delete playerGen; 00059 total_menu = NULL; 00060 playerGen = NULL; 00061 _make_main_menu(NULL); 00062 } 00063 00064 void make_char_creator (puObject* o) { 00065 remove_char_creator(NULL); 00066 playerGen = new charCreator(); 00067 } 00068 00069 bool charCreator::_inputvals_ok() { 00070 char s[80]; 00071 if (player_nick == NULL) 00072 return false; 00073 player_nick->getValue((char*)&s); 00074 if (strlen((const char*)&s) > 0) 00075 return true; 00076 return false; 00077 } 00078 00079 charCreator::charCreator() { 00080 _display_screen(); 00081 } 00082 00083 charCreator::~charCreator() { 00084 _clear_total_menu(); 00085 } 00086 00087 void charCreator::_display_screen() { 00088 _clear_total_menu(); 00089 total_menu = new puGroup(0,0); 00090 puFrame* top_frame = new puFrame(10, display_height-10, 00091 display_width - 10, display_height - 30); 00092 top_frame->setLegend("character creation"); 00093 top_frame->setColour(PUCOL_FOREGROUND, 0.2, 0.5, 0.9, 1.0); 00094 00095 puFrame* t1 = new puFrame(30, 50, 00096 display_width - 30 , display_height - 50); 00097 puGroup* p1 = new puGroup(30, display_height - 220); 00098 static char* nations_strings[] = {"english", "dutch", "french", "spanish", NULL}; 00099 nation_chooser = new puButtonBox(10, 0, 140, 130, nations_strings, 1); 00100 nation_chooser->setLabel("choose your nationality"); 00101 nation_chooser->setLabelPlace(PUPLACE_TOP_LEFT); 00102 p1->close(); 00103 p1->setChildColourScheme(PUCLASS_BUTTONBOX, 0.3, 0.6, 0.7, 0.8); 00104 p1->setChildStyle(PUCLASS_BUTTONBOX, PUSTYLE_NONE,0); 00105 00106 puGroup* p2 = new puGroup(30, display_height - 320); 00107 static char* gender_str[] = {"male", "female", NULL}; 00108 gender_switch = new puButtonBox(10, 0, 110, 70, gender_str, 1); 00109 gender_switch->setLabel("choose your gender"); 00110 gender_switch->setLabelPlace(PUPLACE_TOP_LEFT); 00111 p2->close(); 00112 p2->setChildColourScheme(PUCLASS_BUTTONBOX, 0.3, 0.6, 0.7, 0.8); 00113 p2->setChildStyle(PUCLASS_BUTTONBOX, PUSTYLE_NONE, 0); 00114 00115 puGroup* p3 = new puGroup(30, display_height - 420); 00116 player_nick = new puInput(10, 0, 220, 30); 00117 player_nick->setLabel("enter a nickname (no spaces, nothing funny;-)"); 00118 player_nick->setLabelPlace(PUPLACE_TOP_LEFT); 00119 player_nick->setValidData("0123456789abcdefghijklmnopqrstuvwxzy_-ABCDEFGHIJKLMNOPQRSTUVWXZY"); 00120 p3->close(); 00121 p3->setChildColourScheme(PUCLASS_BUTTONBOX|PUCLASS_INPUT, 0.3, 0.6, 0.7, 0.8); 00122 p3->setChildStyle(PUCLASS_BUTTONBOX|PUCLASS_INPUT, PUSTYLE_NONE, 0); 00123 00124 puButton* cancel_button = new puButton(10, 10, "main menu"); 00125 cancel_button->setCallback(remove_char_creator); 00126 00127 puButton* go_button = new puButton(200, 10, "go adventuring"); 00128 go_button->setCallback(start_game_cb); 00129 total_menu->close(); 00130 total_menu->setChildColourScheme(PUCLASS_BUTTON, 0.3, 0.6, 0.7, 0.8); 00131 } 00132