Old.Learning.Projects/mrpg2k/MasterConsole.cpp
Source: Old.Learning.Projects/mrpg2k/MasterConsole.cpp
// master console
// written by jared bruni
// www.lostsidedead.com
#include "thehead.h"
// update the console
void MasterConsole::update()
{
drawinput();
drawdata();
}
// keypress to console
void MasterConsole::keypress(WPARAM wParam)
{
switch(wParam)
{
case VK_UP:
case VK_DOWN:
case VK_LEFT:
case VK_RIGHT:
case VK_ESCAPE:
case VK_SHIFT:
case VK_CONTROL:
return;
break;
case VK_RETURN:
{
// pass command
printtext(input_data,RGB(0,0,200));
consolecmd(input_data);
input_data[0] = 0;
input_index = 0;
return;
}
break;
case VK_BACK:
{
input_index--;
if(input_index < 0) { input_index = 0; input_data[0] = 0; return; }
input_data[input_index] = 0;
return;
}
break;
case VK_CAPITAL:
{
if(icaps == true) { icaps = false; } else { icaps = true; }
}
break;
}
if(input_index < 150)
{
input_data[input_index] = fixkeys((int)wParam,(int)icaps,false);
input_index++;
input_data[input_index] = 0;
}
}
// draw input field
void MasterConsole::drawinput()
{
char outstr[300];
strcpy(outstr,"enter cmd =)> ");
strcat(outstr,input_data);
gcount++;
if(gcount > 2)
{
strcat(outstr,"_");
gcount = 0;
}
mxhwnd.text.printtext(outstr,10,600-20);
}
// draw data field
void MasterConsole::drawdata()
{
int dy = 490;
int pre_pos;
pre_pos = print_pos - 6;
if(pre_pos < 0)
{
pre_pos = 0;
}
for(int i = 0; i < 6; i++)
{
if(dispdata[pre_pos + i].on == true)
{
mxhwnd.text.settextcolor(dispdata[pre_pos + i].cur_color);
mxhwnd.text.printtext(dispdata[pre_pos + i].curline,10,dy);
}
dy = dy + 15;
}
}
// print text
void MasterConsole::printtext(char* buff,COLORREF color)
{
// clear it
if(print_pos >= 99)
{
ZeroMemory(&dispdata,sizeof(dispdata));
for(int i = 0; i <= 100; i++)
{
dispdata[i].setnull();
}
print_pos = 0;
}
dispdata[print_pos].cur_color = color;
strcpy(dispdata[print_pos].curline,buff);
dispdata[print_pos].on = true;
print_pos++;
}
// proccess a command from the console
void MasterConsole::consolecmd(char* cmd)
{
if(strcmp(cmd,"about") == 0)
{
mprint("Written by Jared Bruni",RGB(200,200,200));
mprint("www.lostsidedead.com",RGB(200,200,200));
return;
}
}
// important functions
// fix a key, format it correctly
char fixkeys(int key,int caps,bool cmd)
{
char cur;
int shift;
shift = 0;
// shift switch
if(GetAsyncKeyState(16))
{
shift = 1;
if(caps)
{
cur = tolower(key);
}
else
{
cur = toupper(key);
}
// special shift character switch
switch(cur)
{
case '0':
cur = ')';
break;
case '1':
cur = '!';
break;
case '2':
cur = '@';
break;
case '3':
cur = '#';
break;
case '4':
cur = '$';
break;
case '5':
cur = '%';
break;
case '6':
cur = '^';
break;
case '7':
cur = '&';
break;
case '8':
cur = '*';
break;
case '9':
cur = '(';
break;
}
}
else
{
if(caps)
{
cur = toupper(key);
}
else
{
cur = tolower(key);
}
}
// quick key to special char switch
switch(key)
{
case 220:
cur = '\\';
break;
case 191:
if(shift)
{
cur = '?';
}
else
{
cur = '/';
}
break;
case 192:
cur = 'µ';
break;
case 186:
if(shift)
{
cur = ':';
}
else
{
cur = ';';
}
break;
case 219:
if(shift)
{
if(cmd == false)
{
cur = '{';
}
else
{
cur = '/';
}
}
else
{
cur = '[';
}
break;
case 221:
if(shift)
{
if(cmd == false)
{
cur = '}';
}
else
{
cur = '\\';
}
}
else
{
cur = ']';
}
break;
case 187:
if(shift)
{
cur = '+';
}
else
{
cur = '=';
}
break;
case 189:
if(shift)
{
cur = '_';
}
else
{
cur = '-';
}
break;
case 188:
if(shift)
{
cur = '<';
}
else
{
cur = ',';
}
break;
case 190:
if(shift)
{
cur = '>';
}
else
{
cur = '.';
}
break;
case 222:
if(shift)
{
cur = '\"';
break;
}
else
{
cur = '\'';
break;
}
break;
}
return cur;
}