summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 4665e71)
raw | patch | inline | side by side (parent: 4665e71)
author | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Sun, 20 Jun 2021 10:17:40 +0000 (13:17 +0300) | ||
committer | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Fri, 9 Jun 2023 07:50:21 +0000 (10:50 +0300) |
12 files changed:
diff --git a/src/game/Doom2DF.lpr b/src/game/Doom2DF.lpr
index 37c02e4c5fe17b77fe32e826e5f66a3cfb183a33..c3bce0d32636157a25259729d264c66334b49ad2 100644 (file)
--- a/src/game/Doom2DF.lpr
+++ b/src/game/Doom2DF.lpr
g_touch in 'sdl2/g_touch.pas',
{$ENDIF}
+ r_animations in 'opengl/r_animations.pas',
r_console in 'opengl/r_console.pas',
r_game in 'opengl/r_game.pas',
r_gfx in 'opengl/r_gfx.pas',
r_panel in 'opengl/r_panel.pas',
r_player in 'opengl/r_player.pas',
r_playermodel in 'opengl/r_playermodel.pas',
+ r_render in 'opengl/r_render.pas',
r_texture in 'opengl/r_texture.pas',
r_weapons in 'opengl/r_weapons.pas',
r_window in 'opengl/r_window.pas',
- r_render in 'opengl/r_render.pas',
{$IFDEF USE_FMOD}
fmod in '../lib/FMOD/fmod.pas',
diff --git a/src/game/g_gfx.pas b/src/game/g_gfx.pas
index 2a77c0310d554266aeebb5a50b1c852df7a48254..9c58759a071c0ace4bc29776649bf51d7c5998b3 100644 (file)
--- a/src/game/g_gfx.pas
+++ b/src/game/g_gfx.pas
implementation
uses
- g_map, g_panel, g_basic, Math,
+ g_map, g_panel, g_basic, Math, r_animations,
g_options, g_console, SysUtils, g_triggers, MAPDEF,
g_game, g_language, g_net, utils, xprofiler;
index 773260fb19102e687447ceac187ff7a9f25595e5..e95fc6d73312eea7fac07bfe042d510896fd9ded 100644 (file)
--- a/src/game/g_textures.pas
+++ b/src/game/g_textures.pas
constructor Create (aframesID: LongWord; aloop: Boolean; aspeed: Byte);
destructor Destroy (); override;
- procedure draw (x, y: Integer; mirror: TMirrorType);
- procedure drawEx (x, y: Integer; mirror: TMirrorType; rpoint: TDFPoint; angle: SmallInt);
-
procedure reset ();
procedure update ();
procedure enable ();
property framesId: LongWord read mId;
property width: Word read mWidth;
property height: Word read mHeight;
+
+ property id: LongWord read mId;
end;
procedure DumpTextureNames ();
+ type (* private state *)
+ TFrames = record
+ texturesID: array of LongWord;
+ name: AnsiString;
+ frameWidth, frameHeight: Word;
+ used: Boolean;
+ end;
+
+ var (* private state *)
+ framesArray: array of TFrames = nil;
implementation
used: Boolean;
end;
- TFrames = record
- texturesID: array of LongWord;
- name: AnsiString;
- frameWidth, frameHeight: Word;
- used: Boolean;
- end;
-
var
texturesArray: array of _TTexture = nil;
- framesArray: array of TFrames = nil;
const
end;
-procedure TAnimation.draw (x, y: Integer; mirror: TMirrorType);
-begin
- if (not mEnabled) then exit;
- e_DrawAdv(framesArray[mId].TexturesID[mCurrentFrame], x, y, mAlpha, true, mBlending, 0, nil, mirror);
- //e_DrawQuad(X, Y, X+FramesArray[ID].FrameWidth-1, Y+FramesArray[ID].FrameHeight-1, 0, 255, 0);
-end;
-
-
procedure TAnimation.update ();
begin
if (not mEnabled) then exit;
procedure TAnimation.enable (); begin mEnabled := true; end;
-procedure TAnimation.drawEx (x, y: Integer; mirror: TMirrorType; rpoint: TDFPoint; angle: SmallInt);
-begin
- if (not mEnabled) then exit;
- e_DrawAdv(framesArray[mId].TexturesID[mCurrentFrame], x, y, mAlpha, true, mBlending, angle, @rpoint, mirror);
-end;
-
-
function TAnimation.totalFrames (): Integer; inline; begin result := Length(framesArray[mId].TexturesID); end;
diff --git a/src/game/opengl/r_animations.pas b/src/game/opengl/r_animations.pas
--- /dev/null
@@ -0,0 +1,41 @@
+(* Copyright (C) Doom 2D: Forever Developers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License ONLY.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *)
+{$INCLUDE ../../shared/a_modes.inc}
+unit r_animations;
+
+interface
+
+ uses g_base, g_textures, MAPDEF; // TMirrorType, TAnimation, TDFPoint
+
+ procedure r_Animation_Draw (t: TAnimation; x, y: Integer; mirror: TMirrorType);
+ procedure r_Animation_DrawEx (t: TAnimation; x, y: Integer; mirror: TMirrorType; rpoint: TDFPoint; angle: SmallInt);
+
+implementation
+
+ uses r_graphics;
+
+ procedure r_Animation_Draw (t: TAnimation; x, y: Integer; mirror: TMirrorType);
+ begin
+ if t.enabled then
+ e_DrawAdv(framesArray[t.id].TexturesID[t.currentFrame], x, y, t.alpha, true, t.blending, 0, nil, mirror)
+ end;
+
+ procedure r_Animation_DrawEx (t: TAnimation; x, y: Integer; mirror: TMirrorType; rpoint: TDFPoint; angle: SmallInt);
+ begin
+ if t.enabled then
+ e_DrawAdv(framesArray[t.id].TexturesID[t.currentFrame], x, y, t.alpha, true, t.blending, angle, @rpoint, mirror)
+ end;
+
+end.
index 293e3aa174f0171f26be3f375135519062fa81a4..0bd271a1f7840b3802552a83c058abac072860f4 100644 (file)
{$INCLUDE ../nogl/noGLuses.inc}
SysUtils, Classes, Math,
utils,
- g_base, r_graphics, g_options,
+ g_base, r_graphics, g_options, r_animations,
g_game,
g_gfx
;
begin
fx := nlerp(oldx, x, gLerpFactor);
fy := nlerp(oldy, y, gLerpFactor);
- Animation.Draw(x, y, TMirrorType.None);
+ r_Animation_Draw(Animation, x, y, TMirrorType.None);
end;
end;
end;
index 6e3dfee703f939d272ffa52604a0c3a1bd005d5d..a317d857744e99437707f77f50ce3576db86212e 100644 (file)
uses
SysUtils, Classes, Math,
- r_graphics,
+ r_graphics, r_animations,
MAPDEF,
g_base, g_basic, g_game,
g_items
end
else
begin
- Animation.Draw(fX, fY, TMirrorType.None);
+ r_Animation_Draw(Animation, fX, fY, TMirrorType.None);
end;
if g_debug_Frames then
index 1c26b0299138aa423571210d70c898f5420aabcf..cf7bc3e25e7c45d3d4b22e15a753f51cda862d28 100644 (file)
uses
{$INCLUDE ../nogl/noGLuses.inc}
SysUtils, Classes, Math,
- r_graphics,
+ r_graphics, r_animations,
g_base, g_basic, g_game, g_options,
g_panel, g_map,
r_panel
dx := 1;
end;
- Animation.Draw(tx + dx, ty + 1, Mirror);
+ r_Animation_Draw(Animation, tx + dx, ty + 1, Mirror);
if g_debug_Frames then
begin
index 9a747455ecc9e5ffc71d9e04d4682c509212b3cd..c55e143ed92fba001467dbe7a596109d97028ce9 100644 (file)
uses
SysUtils, Classes, Math,
- r_graphics, g_options,
+ r_graphics, g_options, r_animations,
MAPDEF,
g_base, g_basic, g_game, g_phys,
g_monsters
if MonsterType = MONSTER_VILE then
if MonsterState = MONSTATE_SHOOT then
if GetPos(MonsterTargetUID, @o) then
- VileFireAnim.Draw(o.X + o.Rect.X + (o.Rect.Width div 2) - 32, o.Y + o.Rect.Y + o.Rect.Height - 128, TMirrorType.None);
+ r_Animation_Draw(VileFireAnim, o.X + o.Rect.X + (o.Rect.Width div 2) - 32, o.Y + o.Rect.Y + o.Rect.Height - 128, TMirrorType.None);
// Не в области рисования не ресуем:
//FIXME!
dy := MONSTER_ANIMTABLE[MonsterType].AnimDeltaRight[MonsterAnim].Y;
end;
- // Рисуем:
- DirAnim[MonsterAnim, GameDirection].Draw(fX + dx, fY + dy, m);
+ r_Animation_Draw(DirAnim[MonsterAnim, GameDirection], fX + dx, fY + dy, m);
end;
if g_debug_Frames then
index f96cfb0aaf312af218fb256e80d92f522093255b..6b955e0faf7fcac4616338e78c2a1b0439153701 100644 (file)
uses
{$INCLUDE ../nogl/noGLuses.inc}
SysUtils, Classes, Math, utils,
- r_graphics, g_options,
+ r_graphics, g_options, r_animations,
g_base, g_basic, g_textures, g_game
;
Exit;
for xx := 0 to tw div TextureWidth - 1 do
for yy := 0 to th div TextureHeight - 1 do
- TextureIDs[FCurTexture].AnTex.Draw(tx + xx * TextureWidth, ty + yy * TextureHeight, TMirrorType.None);
+ r_Animation_Draw(TextureIDs[FCurTexture].AnTex, tx + xx * TextureWidth, ty + yy * TextureHeight, TMirrorType.None);
end
else
begin
index b9ff8bb8416099d488c03a3c22cc39cfa4db17f2..a7a01676b190617fff622c5addf09d72998e9613 100644 (file)
{$IFDEF ENABLE_HOLMES}
g_holmes,
{$ENDIF}
- r_playermodel, r_graphics
+ r_playermodel, r_graphics, r_animations
;
procedure r_Player_DrawAll;
if p.PunchAnim <> nil then
begin
- p.PunchAnim.Draw(fX + IfThen(p.Direction = TDirection.D_LEFT, 15 - p.Obj.Rect.X, p.Obj.Rect.X - 15), fY + fSlope + p.Obj.Rect.Y - 11, Mirror);
+ r_Animation_Draw(p.PunchAnim, fX + IfThen(p.Direction = TDirection.D_LEFT, 15 - p.Obj.Rect.X, p.Obj.Rect.X - 15), fY + fSlope + p.Obj.Rect.Y - 11, Mirror);
if p.PunchAnim.played then
begin
p.PunchAnim.Free;
p.Obj.lerp(gLerpFactor, fX, fY);
if p.Animation <> nil then
- p.Animation.Draw(fX, fY, TMirrorType.None);
+ r_Animation_Draw(p.Animation, fX, fY, TMirrorType.None);
if p.AnimationMask <> nil then
begin
e_Colors := p.Color;
- p.AnimationMask.Draw(fX, fY, TMirrorType.None);
+ r_Animation_Draw(p.AnimationMask, fX, fY, TMirrorType.None);
e_Colors.R := 255;
e_Colors.G := 255;
e_Colors.B := 255;
index 2f40e9fea9f8aa6cf7c8769c46105ee2c8b55cb1..fc1576069450c8e54e812952e8cee5140f0a57fa 100644 (file)
uses
SysUtils, Classes, Math,
MAPDEF,
- r_graphics, g_options,
+ r_graphics, g_options, r_animations,
g_base, g_basic, g_map, g_weapons, g_textures
;
p.X := IfThen(pm.Direction = TDirection.D_LEFT, FLAG_BASEPOINT.X, 64 - FLAG_BASEPOINT.X);
p.Y := FLAG_BASEPOINT.Y;
- pm.FlagAnim.DrawEx(X+IfThen(pm.Direction = TDirection.D_LEFT, pm.FlagPoint.X-1, 2*FLAG_BASEPOINT.X-pm.FlagPoint.X+1)-FLAG_BASEPOINT.X,
+ r_Animation_DrawEx(pm.FlagAnim, X+IfThen(pm.Direction = TDirection.D_LEFT, pm.FlagPoint.X-1, 2*FLAG_BASEPOINT.X-pm.FlagPoint.X+1)-FLAG_BASEPOINT.X,
Y+pm.FlagPoint.Y-FLAG_BASEPOINT.Y+1, Mirror, p,
IfThen(pm.Direction = TDirection.D_RIGHT, pm.FlagAngle, -pm.FlagAngle));
end;
if (pm.Direction = TDirection.D_LEFT) and (pm.Anim[TDirection.D_LEFT][pm.CurrentAnimation] <> nil) then
begin
pm.Anim[TDirection.D_LEFT][pm.CurrentAnimation].Alpha := Alpha;
- pm.Anim[TDirection.D_LEFT][pm.CurrentAnimation].Draw(X, Y, TMirrorType.None);
+ r_Animation_Draw(pm.Anim[TDirection.D_LEFT][pm.CurrentAnimation], X, Y, TMirrorType.None);
end
else
begin
pm.Anim[TDirection.D_RIGHT][pm.CurrentAnimation].Alpha := Alpha;
- pm.Anim[TDirection.D_RIGHT][pm.CurrentAnimation].Draw(X, Y, Mirror);
+ r_Animation_Draw(pm.Anim[TDirection.D_RIGHT][pm.CurrentAnimation], X, Y, Mirror);
end;
// Маска модели:
if (pm.Direction = TDirection.D_LEFT) and (pm.MaskAnim[TDirection.D_LEFT][pm.CurrentAnimation] <> nil) then
begin
pm.MaskAnim[TDirection.D_LEFT][pm.CurrentAnimation].Alpha := Alpha;
- pm.MaskAnim[TDirection.D_LEFT][pm.CurrentAnimation].Draw(X, Y, TMirrorType.None);
+ r_Animation_Draw(pm.MaskAnim[TDirection.D_LEFT][pm.CurrentAnimation], X, Y, TMirrorType.None);
end
else
begin
pm.MaskAnim[TDirection.D_RIGHT][pm.CurrentAnimation].Alpha := Alpha;
- pm.MaskAnim[TDirection.D_RIGHT][pm.CurrentAnimation].Draw(X, Y, Mirror);
+ r_Animation_Draw(pm.MaskAnim[TDirection.D_RIGHT][pm.CurrentAnimation], X, Y, Mirror);
end;
e_Colors.R := 255;
index 38882f1689a78935f91b9ba909207e534fa72629..94d1d4ade21ae5e423c512a020269bc8d431763d 100644 (file)
uses
SysUtils, Classes, Math,
MAPDEF,
- r_graphics,
+ r_graphics, r_animations,
g_base, g_basic, g_game,
g_weapons
;
if Animation <> nil then
begin
if Shots[i].ShotType in [WEAPON_BARON_FIRE, WEAPON_MANCUB_FIRE, WEAPON_SKEL_FIRE] then
- Animation.DrawEx(fX, fY, TMirrorType.None, p, a)
+ r_Animation_DrawEx(Animation, fX, fY, TMirrorType.None, p, a)
else
- Animation.Draw(fX, fY, TMirrorType.None);
+ r_Animation_Draw(Animation, fX, fY, TMirrorType.None);
end
else if TextureID <> 0 then
begin