unit DEngBase;

interface

uses
  dstream,
  dtypes;

const
  DENG_GL           = 1;
  DENG_NO_RGBA      = 2; // not used in client code, may be changed in future
  DENG_FULLSCREEN   = 4;
  DENG_NO_DOUBLE    = 8; // not used in client code, may be changed in future
  DENG_NO_DEPTH     = 16; // not used in client code, may be changed in future

  KEY_SPACE = 32;
  KEY_ESC = 27;
  KEY_BACKSPACE = 8;
  KEY_ENTER = 13;
  KEY_TILDE = 192;
  KEY_CAPSLOCK = $14;
  KEY_TAB = 9;
  KEY_SHIFT = $10;

  KEY_F1  = $70;
  KEY_F2  = $71;
  KEY_F3  = $72;
  KEY_F4  = $73;
  KEY_F5  = $74;
  KEY_F6  = $75;
  KEY_F7  = $76;
  KEY_F8  = $77;
  KEY_F9  = $78;
  KEY_F10 = $79;
  KEY_F11 = $80;
  KEY_F12 = $81;

  KEY_LBUTTON = $01;
  KEY_RBUTTON = $02;
  KEY_MBUTTON = $04;
  KEY_XBUTTON1 = $05;
  KEY_XBUTTON2 = $06;

  KEY_LEFT = $25;
  KEY_UP = $26;
  KEY_RIGHT = $27;
  KEY_DOWN = $28;

  KEY_PLUS = $2b;
  KEY_MINUS = $2d;

  DENG_MAX_VOLUME   = 255;
  DENG_WINDOWCLASS  = 'DENG';

const
// Здесь задаются константы реестра известных подсистем.
// Они прибиты к фиксированным статичным нормерам (всем остальным
// выдаются динамические при регистрации подсистемы)
  // Обязательные подсистемы, которые есть в каждом инстансе DEng'а.
  DENG_SUBSYSTEM_WINAPI     = 0;
  DENG_SUBSYSTEM_AUDIO      = 1;
  DENG_SUBSYSTEM_MUSIC      = 2;
  DENG_SUBSYSTEM_DRAW       = 3;
  DENG_SUBSYSTEM_CONTROL    = 4;
  DENG_CORE_SUBSYSTEMS      = 5;
  // Подсистемы, которые регистрируются при подключении соответствующего
  // модуля -- для них также выделены фиксированные номера
  DENG_SUBSYSTEM_METRICS    = DENG_CORE_SUBSYSTEMS + 0;

type
TBlendMode = (
  BM_NO,
  BM_ALPHA,
  BM_MUL,
  BM_ADD,
  BM_DIFFUSE,
  BM_ALPHA_ADD,
  BM_APPLY_ALPHA,
  BM_TO_ALPHA
);

TMusicPlayer = Pointer;
//TMusicPlayer = object
//  function OnLoad(Stream: PStream): Boolean; virtual; abstract; overload;
//  function OnLoad(const FileName: TString): Boolean; virtual; abstract; overload;
//  procedure OnPlay; virtual; abstract;
//  procedure OnStop; virtual; abstract;
//  procedure OnPause; virtual; abstract;
//  // должно вызываться не реже одного раза в секунду
//  procedure OnUpdate; virtual; abstract;
//  // 0 .. DENG_MAX_VOLUME
//  procedure SetVolume(Volume: Integer); virtual; abstract;
//  function GetVolume: Integer; virtual; abstract;
//end;

// Fabric for TMusicPlayer
TMusicLoader = Pointer;
//TMusicLoader = object
  // returns nil if cannot load music
//  function Load(Stream: PStream): TMusicPlayer; virtual; abstract; overload;
//  function Load(const FileName: TString): TMusicPlayer; virtual; abstract; overload;
//end;

implementation

end.
