Некоторые вспомогательные функции

Реализованы в 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);
}