Некоторые вспомогательные функции
Автор: zmpeter 01.07.2009 14:13
Реализованы в export.lgc. Некоторые из них указаны вместе с кодом для ознакомления.//--------------------------------------------------------
//создает спрайт с текстом text, font_vid - обязательно с B_TEXT
CreateText(int font_vid,int x,int y,int z,string text,int behave=0)
{
int sprite;
sprite = CreateSprite(font_vid,x,y,z);
Action(sprite,ACT_SET_TEXT,&text);
Action(sprite,ACT_SET_BEHAVE,behave);
return sprite;
}
//--------------------------------------------------------
//создает спрайт и загружает в него текст из файла filename,, font_vid - обязательно
//с B_TEXT, в файле ESCnn - означает смену фонта
CreateTextFromFile(int font_vid,int x,int y,int z,string filename, int behave=0)
{
int sprite;
sprite = CreateSprite(font_vid,x,y,z);
Action(sprite,ACT_SET_FILE,&filename);
Action(sprite,ACT_SET_BEHAVE,behave);
return sprite;
}
//--------------------------------------------------------
//возвращает модуль числа a
Abs(int a)
{
if( a < 0 )
return -a;
return a;
}
//--------------------------------------------------------
// кодирует гамму в число, red, green, blue, alpha: от -255 до 255
GammaEncodeToDword(int red, int green, int blue, int alpha = 255)
{
int gamma, diffuse = 0, specular = 0;
if( alpha<-255) alpha =-255;
if( alpha>255 ) alpha = 255;
if( alpha<0 ) diffuse |= (-alpha)<<24;
else specular |= alpha<<24;
if( red<-255 ) red =-255;
if( red>255 ) red = 255;
if( red<0 ) diffuse |= (-red)<<16;
else specular |= red<<16;
if( green<-255 ) green =-255;
if( green>255 ) green = 255;
if( green<0 ) diffuse |= (-green)<<8;
else specular |= green<<8;
if(blue<-255 ) blue = -255;
if(blue>255 ) blue = 255;
if( blue<0 ) diffuse |= -blue;
else specular |= blue;
gamma = (diffuse>>1) & 0x7f7f7f7f;
if( specular&0x000000FF ) gamma|=0x00000080 | ((~specular>>1)&0x0000007f);
if( specular&0x0000FF00 ) gamma|=0x00008000 | ((~specular>>1)&0x00007f00);
if( specular&0x00FF0000 ) gamma|=0x00800000 | ((~specular>>1)&0x007f0000);
if( specular&0xFF000000 ) gamma|=0x80000000 | ((~specular>>1)&0x7f000000);
return gamma;
}
//--------------------------------------------------------
//возвращает наименьший угол в "движковых градусах" (0..255) между двумя направлениями
DifferenceDirection(int dir1, int dir2)
{
int delta1 = (dir1 - dir2)&0xff;
int delta2 = (dir2 - dir1)&0xff;
if ( delta1 < delta2 )
return delta1;
else
return delta1;
}
//--------------------------------------------------------
//возвращает код нажатой клавиши
GetKey(int n_player = -1)
{
return GetInputAction(IA_KEY, n_player);
}
//--------------------------------------------------------
//возвращает случайное число
//вызывает EXT_RandomNetDbg для отладки рассинхронизаций при игре по сети
Random(int max, int id)
{
return SendCommand(EXT_RandomNetDbg, max, id);
}