timesynk/context.c

152 lines
3.6 KiB
C

#include "context.h"
#include "player.h"
#include "game.h"
#include "stubs.h" // for interface calls
#include "main.h" // for is_running
#include "console.h" // for console stuff
void globalContext(int key_press) {
switch(key_press) {
case '`':
if (current_context != &consoleContext) {
current_context = &consoleContext;
} else {
current_context = &walkContext;
}
break;
default:
current_context(key_press);
break;
}
}
void consoleContext(int key_press) {
switch(key_press) {
case KEY_ESC:
current_context = &walkContext;
break;
case 13: // enter
// TODO: run command via string here
consoleProcessCommand(console_cmd);
console_cmd_offset = 0;
console_cmd_size = 0;
console_cmd[console_cmd_offset] = '\0';
break;
case 8:
case 127: // delete
console_cmd[console_cmd_offset-1] = '\0';
if (console_cmd_offset > 0)
console_cmd_offset--;
console_cmd_size--;
break;
default:
if (console_cmd_offset < 31) {
console_cmd[console_cmd_offset] = key_press;
console_cmd[console_cmd_offset+1] = '\0';
console_cmd_offset++;
console_cmd_size++;
}
break;
}
}
void walkContext(int key_press) {
switch(key_press) {
case 'y':
(*player_commands[PLAYER_MOVE])(NORTHWEST, 1);
break;
case 'u':
(*player_commands[PLAYER_MOVE])(NORTHEAST, 1);
break;
case KEY_UP:
case 'k':
(*player_commands[PLAYER_MOVE])(NORTH, 1);
break;
case KEY_DOWN:
case 'j':
(*player_commands[PLAYER_MOVE])(SOUTH, 1);
break;
case 'b':
(*player_commands[PLAYER_MOVE])(SOUTHWEST, 1);
break;
case 'n':
(*player_commands[PLAYER_MOVE])(SOUTHEAST, 1);
break;
case KEY_RIGHT:
case 'l':
(*player_commands[PLAYER_MOVE])(EAST, 1);
break;
case KEY_LEFT:
case 'h':
(*player_commands[PLAYER_MOVE])(WEST, 1);
break;
case 'a':
current_context = &activateContext;
interfacePrint("Activate what?");
break;
case 'L':
current_context = &lookContext;
interfacePrint("Look where?");
break;
}
}
void lookContext(int key_press) {
switch(key_press) {
case KEY_ESC:
interfacePrint("back in action, bb!");
break;
case KEY_UP:
case 'k':
(*player_commands[PLAYER_LOOK])(player->x, player->y-1);
break;
case KEY_DOWN:
case 'j':
(*player_commands[PLAYER_LOOK])(player->x, player->y+1);
break;
case KEY_RIGHT:
case 'l':
(*player_commands[PLAYER_LOOK])(player->x+1, player->y);
break;
case KEY_LEFT:
case 'h':
(*player_commands[PLAYER_LOOK])(player->x-1, player->y);
break;
case '.':
(*player_commands[PLAYER_LOOK])(player->x, player->y);
break;
default:
interfacePrint("invalid direction");
break;
}
current_context = &walkContext;
}
void activateContext(int key_press) {
switch(key_press) {
case KEY_ESC:
interfacePrint("back in action, bb!");
break;
case KEY_UP:
case 'k':
(*player_commands[PLAYER_ACTIVATE])(player->x, player->y-1);
break;
case KEY_DOWN:
case 'j':
(*player_commands[PLAYER_ACTIVATE])(player->x, player->y+1);
break;
case KEY_RIGHT:
case 'l':
(*player_commands[PLAYER_ACTIVATE])(player->x+1, player->y);
break;
case KEY_LEFT:
case 'h':
(*player_commands[PLAYER_ACTIVATE])(player->x-1, player->y);
break;
default:
interfacePrint("invalid direction");
break;
}
current_context = &walkContext;
}