index d2fa1f3d229988bf185f100a89288ba00ce21e17..eff895d9b528d404a0560b035f1958efe48bf619 100644 (file)
procedure r_Map_DrawPlayerModel (pm: TPlayerModel; x, y: Integer; alpha: Byte);
{$ENDIF}
procedure r_Map_DrawPlayerModel (pm: TPlayerModel; x, y: Integer; alpha: Byte);
{$ENDIF}
+ procedure r_Map_Reset;
procedure r_Map_Update;
procedure r_Map_Draw (x, y, w, h, camx, camy: Integer; player: TPlayer; out acx, acy: Integer);
procedure r_Map_Update;
procedure r_Map_Draw (x, y, w, h, camx, camy: Integer; player: TPlayer; out acx, acy: Integer);
implementation
uses
implementation
uses
+ {$I ../../../nogl/noGLuses.inc}
Math, SysUtils,
Math, SysUtils,
- {$IFDEF USE_GLES1}
- GLES11,
- {$ELSE}
- GL, GLEXT,
- {$ENDIF}
e_log,
binheap, MAPDEF, utils,
g_options, g_animations, g_basic, g_phys,
e_log,
binheap, MAPDEF, utils,
g_options, g_animations, g_basic, g_phys,
r_Common_FreeAndNil(Items[i].tex);
end;
r_Common_FreeAndNil(Items[i].tex);
end;
+ procedure r_Map_FreeTextures;
+ var i: Integer;
+ begin
+ plist.Clear;
+ r_Common_FreeAndNil(SkyTexture);
+ if RenTextures <> nil then
+ for i := 0 to High(RenTextures) do
+ r_Common_FreeAndNil(RenTextures[i].tex);
+ SetLength(RenTextures, 0);
+ end;
+
procedure r_Map_LoadTextures;
const DefaultAnimInfo: TAnimInfo = (loop: true; delay: 1; frames: 1; back: false);
var i, n: Integer; txt: TAnimTextInfo;
begin
procedure r_Map_LoadTextures;
const DefaultAnimInfo: TAnimInfo = (loop: true; delay: 1; frames: 1; back: false);
var i, n: Integer; txt: TAnimTextInfo;
begin
+ r_Map_FreeTextures;
if Textures <> nil then
begin
n := Length(Textures);
if Textures <> nil then
begin
n := Length(Textures);
r_Common_SetLoading(_lc[I_LOAD_TEXTURES], n);
for i := 0 to n - 1 do
begin
r_Common_SetLoading(_lc[I_LOAD_TEXTURES], n);
for i := 0 to n - 1 do
begin
- txt.anim := DefaultAnimInfo;
RenTextures[i].tex := nil;
RenTextures[i].tex := nil;
+ RenTextures[i].anim := DefaultAnimInfo;
case Textures[i].TextureName of
TEXTURE_NAME_WATER: RenTextures[i].spec := TEXTURE_SPECIAL_WATER;
TEXTURE_NAME_ACID1: RenTextures[i].spec := TEXTURE_SPECIAL_ACID1;
case Textures[i].TextureName of
TEXTURE_NAME_WATER: RenTextures[i].spec := TEXTURE_SPECIAL_WATER;
TEXTURE_NAME_ACID1: RenTextures[i].spec := TEXTURE_SPECIAL_ACID1;
else
RenTextures[i].spec := 0;
RenTextures[i].tex := r_Textures_LoadMultiTextFromFile(Textures[i].FullName, txt, []);
else
RenTextures[i].spec := 0;
RenTextures[i].tex := r_Textures_LoadMultiTextFromFile(Textures[i].FullName, txt, []);
- if RenTextures[i].tex = nil then
- e_LogWritefln('r_Map_LoadTextures: failed to load texture: %s', [Textures[i].FullName])
- else
+ if RenTextures[i].tex <> nil then
+ begin
+ RenTextures[i].anim := txt.anim;
r_Common_StepLoading(1);
r_Common_StepLoading(1);
+ end
+ else
+ begin
+ e_LogWritefln('r_Map_LoadTextures: failed to load texture: %s', [Textures[i].FullName]);
+ end;
end;
end;
- RenTextures[i].anim := txt.anim;
+ ASSERT(RenTextures[i].anim.frames > 0);
+ ASSERT(RenTextures[i].anim.delay > 0);
end;
end;
if gMapInfo.SkyFullName <> '' then
end;
end;
if gMapInfo.SkyFullName <> '' then
plist.Clear;
end;
plist.Clear;
end;
- procedure r_Map_FreeTextures;
- var i: Integer;
- begin
- plist.Clear;
- r_Common_FreeAndNil(SkyTexture);
- if RenTextures <> nil then
- for i := 0 to High(RenTextures) do
- r_Common_FreeAndNil(RenTextures[i].tex);
- SetLength(RenTextures, 0);
- end;
-
procedure r_Map_DrawPanel (p: TPanel);
var Texture: Integer; t: TGLMultiTexture; tex: TGLTexture; count, frame: LongInt; a: TAnimInfo;
begin
ASSERT(p <> nil);
if p.FCurTexture >= 0 then
begin
procedure r_Map_DrawPanel (p: TPanel);
var Texture: Integer; t: TGLMultiTexture; tex: TGLTexture; count, frame: LongInt; a: TAnimInfo;
begin
ASSERT(p <> nil);
if p.FCurTexture >= 0 then
begin
+ ASSERT(p.FCurTexture <= High(p.TextureIDs));
Texture := p.TextureIDs[p.FCurTexture].Texture;
Texture := p.TextureIDs[p.FCurTexture].Texture;
- t := RenTextures[Texture].tex;
- if (RenTextures[Texture].spec = 0) or (t <> nil) then
+ t := nil;
+ ASSERT(Texture >= -1);
+ ASSERT(Texture <= High(RenTextures));
+ if Texture >= 0 then
begin
begin
- count := 0; frame := 0;
- if p.AnimTime <= gTime then
+ t := RenTextures[Texture].tex;
+ if (RenTextures[Texture].spec = 0) or (t <> nil) then
begin
begin
- a := RenTextures[Texture].anim;
- a.loop := p.AnimLoop;
- g_Anim_GetFrameByTime(a, (gTime - p.AnimTime) DIV GAME_TICK, count, frame);
+ count := 0; frame := 0;
+ if p.AnimTime <= gTime then
+ begin
+ a := RenTextures[Texture].anim;
+ a.loop := p.AnimLoop;
+ g_Anim_GetFrameByTime(a, (gTime - p.AnimTime) DIV GAME_TICK, count, frame);
+ end;
+ if t <> nil then
+ begin
+ tex := t.GetTexture(frame);
+ r_Draw_TextureRepeat(tex, p.x, p.y, p.width, p.height, false, 255, 255, 255, 255 - p.alpha, p.blending);
+ end
+ else
+ r_Draw_TextureRepeat(nil, p.x, p.y, p.width, p.height, false, 255, 255, 255, 255, false);
end;
end;
- if t <> nil then
- begin
- tex := t.GetTexture(frame);
- r_Draw_TextureRepeat(tex, p.x, p.y, p.width, p.height, false, 255, 255, 255, 255 - p.alpha, p.blending);
- end
- else
- r_Draw_TextureRepeat(nil, p.x, p.y, p.width, p.height, false, 255, 255, 255, 255, false);
end;
if t = nil then
end;
if t = nil then
end;
procedure r_Map_DrawBubble (x, y: Integer; cb, cf: TRGB);
end;
procedure r_Map_DrawBubble (x, y: Integer; cb, cf: TRGB);
- var dot: Integer;
+ const w = 20; h = 14;
+ const dx = 6; dy = 8; dot = 6; size = 2;
+ const tx = 6; ty = h - 1;
begin
begin
- // Outer borders
- r_Draw_Rect(x + 1, y, x + 18, y + 13, cb.R, cb.G, cb.B, 255);
- r_Draw_Rect(x, y + 1, x + 19, y + 12, cb.R, cb.G, cb.B, 255);
+ // Outer box (top/down)
+ r_Draw_FillRect(x + 1, y, x + w - 1, y + 1, cb.R, cb.G, cb.B, 255);
+ r_Draw_FillRect(x + 1, y + h - 1, x + w - 1, y + h, cb.R, cb.G, cb.B, 255);
+ // Outer box (left/right)
+ r_Draw_FillRect(x, y + 1, x + 1, y + h - 1, cb.R, cb.G, cb.B, 255);
+ r_Draw_FillRect(x + w - 1, y + 1, x + w, y + h - 1, cb.R, cb.G, cb.B, 255);
+ // Outer tail
+ r_Draw_FillRect(x + tx - 1, y + ty + 0, x + tx + 3 + 1, y + ty + 1, cb.R, cb.G, cb.B, 255);
+ r_Draw_FillRect(x + tx - 1, y + ty + 1, x + tx + 2 + 1, y + ty + 2, cb.R, cb.G, cb.B, 255);
+ r_Draw_FillRect(x + tx - 1, y + ty + 2, x + tx + 1 + 1, y + ty + 3, cb.R, cb.G, cb.B, 255);
+ r_Draw_FillRect(x + tx - 1, y + ty + 3, x + tx + 0 + 1, y + ty + 4, cb.R, cb.G, cb.B, 255);
+ // Inner tail
+ r_Draw_FillRect(x + tx, y + ty + 0, x + tx + 3, y + ty + 1, cf.R, cf.G, cf.B, 255);
+ r_Draw_FillRect(x + tx, y + ty + 1, x + tx + 2, y + ty + 2, cf.R, cf.G, cf.B, 255);
+ r_Draw_FillRect(x + tx, y + ty + 2, x + tx + 1, y + ty + 3, cf.R, cf.G, cf.B, 255);
// Inner box
// Inner box
- r_Draw_FillRect(x + 1, y + 1, x + 18, y + 12, cf.R, cf.G, cf.B, 255);
- // TODO Tail
+ r_Draw_FillRect(x + 1, y + 1, x + w - 1, y + h - 1, cf.R, cf.G, cf.B, 255);
// Dots
// Dots
- dot := 6;
- r_Draw_FillRect(x + dot + 0, y + 8, x + dot + 0 + 1 + 1, y + 9 + 1, cb.R, cb.G, cb.B, 255);
- r_Draw_FillRect(x + dot + 3, y + 8, x + dot + 3 + 1 + 1, y + 9 + 1, cb.R, cb.G, cb.B, 255);
- r_Draw_FillRect(x + dot + 6, y + 8, x + dot + 6 + 1 + 1, y + 9 + 1, cb.R, cb.G, cb.B, 255);
+ r_Draw_FillRect(x + dx + 0*3, y + dy, x + dx + 0*3 + size, y + dy + size, cb.R, cb.G, cb.B, 255);
+ r_Draw_FillRect(x + dx + 1*3, y + dy, x + dx + 1*3 + size, y + dy + size, cb.R, cb.G, cb.B, 255);
+ r_Draw_FillRect(x + dx + 2*3, y + dy, x + dx + 2*3 + size, y + dy + size, cb.R, cb.G, cb.B, 255);
end;
procedure r_Map_DrawTalkBubble (p: TPlayer);
end;
procedure r_Map_DrawTalkBubble (p: TPlayer);
end;
end;
end;
end;
+ procedure r_Map_ResetGFX;
+ begin
+ SetLength(gfxlist, 0);
+ end;
+
procedure r_Map_UpdateGFX (tick: LongWord);
var i: Integer; count: LongInt;
begin
procedure r_Map_UpdateGFX (tick: LongWord);
var i: Integer; count: LongInt;
begin
r_Map_DrawGame(xx, yy, ww, hh, player);
if FillOutsizeArea and (DebugCameraScale = 1.0) then
begin
r_Map_DrawGame(xx, yy, ww, hh, player);
if FillOutsizeArea and (DebugCameraScale = 1.0) then
begin
- r_Draw_FillRect(0 - limit, 0 - limit, gMapInfo.Width + limit, 0 - 1, 0, 0, 0, 255);
- r_Draw_FillRect(0 - limit, 0, 0 - 1, gMapInfo.Height + limit, 0, 0, 0, 255);
- r_Draw_FillRect(gMapInfo.Width, 0, gMapInfo.Width + limit, gMapInfo.Height + limit, 0, 0, 0, 255);
- r_Draw_FillRect(0 - limit, gMapInfo.Height, gMapInfo.Width + limit, gMapInfo.Height + limit, 0, 0, 0, 255);
+ (* top *) r_Draw_FillRect(0 - limit, 0 - limit, gMapInfo.Width + limit, 0, 0, 0, 0, 255);
+ (* left *) r_Draw_FillRect(0 - limit, 0, 0, gMapInfo.Height + limit, 0, 0, 0, 255);
+ (* right *) r_Draw_FillRect(gMapInfo.Width, 0, gMapInfo.Width + limit, gMapInfo.Height + limit, 0, 0, 0, 255);
+ (* bottom *) r_Draw_FillRect(0 - limit, gMapInfo.Height, gMapInfo.Width + limit, gMapInfo.Height + limit, 0, 0, 0, 255);
end;
glTranslatef(cx, cy, 0);
end;
end;
glTranslatef(cx, cy, 0);
end;
end;
if gGameSettings.GameMode <> GM_SINGLE then
end;
if gGameSettings.GameMode <> GM_SINGLE then
+ begin
+ glTranslatef(-cx, -cy, 0);
r_Map_DrawPlayerIndicators(player, cx, cy, cw, ch);
r_Map_DrawPlayerIndicators(player, cx, cy, cw, ch);
+ end;
// TODO draw g_debug_player
// TODO draw g_debug_player
r_Map_DrawScreenEffects(x, y, w, h, player);
end;
r_Map_DrawScreenEffects(x, y, w, h, player);
end;
+ procedure r_Map_Reset;
+ begin
+ {$IFDEF ENABLE_GFX}
+ r_Map_ResetGFX;
+ {$ENDIF}
+ end;
+
procedure r_Map_Update;
var i, count, tick: LongInt;
begin
procedure r_Map_Update;
var i, count, tick: LongInt;
begin