void processKeyboardEvent(SDL_Event *event, Console *console) { char currentChar = (char)event->key.keysym.sym; switch(currentChar) { case SDLK_RETURN: consoleNewLine(console); break; case SDLK_BACKSPACE: consoleDeleteChar(console); break; default: consoleAddChar(console, currentChar, true); break; } }
void consoleAddsCharProperly() { printf("* Console adds char properly..."); Console *console = (Console *) malloc(sizeof(Console)); memset(console, 0, sizeof(Console)); console->buffer = (char *) malloc(100 * sizeof(char)); memset(console->buffer, 0, 100 * sizeof(char)); consoleAddChar(console, 'a'); assert(*(console->buffer + 0) == 'a'); assert(console->offset == 1); free(console->buffer); free(console); printf(" [OK]\n"); }
//========================================================= void UInterface::keyboardFunc(unsigned char key, int x, int y, int console) { cout << "Key: " << key << endl; if (console == DOWN) { if (key == con->conChar) if (!con->conAni) con->conAni = 1; consoleAddChar (con, (char)key); glutPostRedisplay (); return; } //TODO all these will be replaced by a toolbar later in life switch (key) { case C_CONSOLECHAR: con->conAni = !con->conAni; break; case 'u': //Raise terrain keymode = 1; break; case 'r': //Zone residential keymode = 2; zone_type = 1; break; case 'c': //Zone commercial keymode = 2; zone_type = 2; break; case 'i': //Zone industrial keymode = 2; zone_type = 3; break; case 'x': //Dezone keymode = 2; zone_type = 0; break; case 'p': //Place power line keymode = 3; break; case 'd': //Lower terrain keymode = 4; break; case 'l': //Level terrain keymode = 5; break; case 'k': //Blow up keymode = 6; break; case 't': //Road keymode = 7; break; case 'g': //Grid lines lines = !lines; break; case 'f': //Ground ground = !ground; break; case 's': //Structures structs = !structs; break; case 'q': //Last Cell lastSquare = !lastSquare; break; case 'z': //Intermediete Runs interM = !interM; cout << "Turning off intermediete!" << endl; break; //Movement stuff case '[': parent->setRotate(parent->getRotate()-4); if (parent->getRotate()<0) parent->setRotate(360); break; case ']': parent->setRotate(parent->getRotate()+4); if (parent->getRotate()>360) parent->setRotate(0); break; case '-': if (parent->getCamY() >= 4.0f) { parent->setCamY(parent->getCamY()- 0.3f); parent->setLookY(parent->getLookY() - 0.3f); parent->setRotate(parent->getRotate()); //Update positions } break; case '=': if (parent->getCamY() <= 15.0f) { parent->setCamY(parent->getCamY() + 0.3f); parent->setLookY(parent->getLookY() + 0.3f); parent->setRotate(parent->getRotate()); //Update positions } break; case '8': //"Forward" parent->setLookX( parent->getLookX() - (float)sin(parent->getRotate()*PI/180) *0.3f); parent->setLookZ( parent->getLookZ() - (float)cos(parent->getRotate()*PI/180) *0.3f); parent->setRotate(parent->getRotate()); //Update positions break; case '2': //"Back" parent->setLookX( parent->getLookX() + (float)sin(parent->getRotate()*PI/180) *0.3f); parent->setLookZ( parent->getLookZ() + (float)cos(parent->getRotate()*PI/180) *0.3f); parent->setRotate(parent->getRotate()); //Update positions break; case '4': //Left parent->setLookX( parent->getLookX() + (float)sin(parent->getRotate()*PI/180) *0.3f); parent->setLookZ( parent->getLookZ() - (float)cos(parent->getRotate()*PI/180) *0.3f); parent->setRotate(parent->getRotate()); //Update positions break; } }