cheat-engine/Cheat Engine/Tutorial/graphical/target.pas
2019-12-19 17:49:30 +01:00

159 lines
3.6 KiB
ObjectPascal
Executable file

unit target;
{$mode objfpc}{$H+}
//target practive object
interface
uses
Classes, SysUtils, gl,glext,glu, gameobject, renderobject, graphics, healthbar,
globals;
type
TTarget=class(TGameObject) //tutorial step 1. Targets have their own health (so not a TGameObjectWithHealth)
private
instances: integer; static;
ftextures: record
normal: integer;
shielded: integer;
end; static;
fwidth: single; static;
fheight: single; static;
fShielded: boolean;
healthbar: THealthbar;
fhealth: integer;
maxhealth: integer;
procedure setHealth(h: integer);
protected
function getWidth:single; override;
function getHeight:single; override;
function getTexture: integer; override;
public
procedure explode; override;
function isdead: boolean;
property health: integer read fhealth write setHealth;
property shielded: boolean read fShielded write fShielded;
constructor create;
destructor destroy; override;
end;
implementation
procedure TTarget.explode;
begin
fhealth:=0;
removeChild(healthbar);
freeandnil(healthbar);
inherited explode;
end;
function TTarget.isdead:boolean;
var h: integer;
begin
h:=health;
if h<=0 then result:=true else result:=false;
end;
procedure TTarget.setHealth(h: integer);
begin
fhealth:=h;
if healthbar<>nil then
healthbar.percentage:=fhealth/maxhealth*100;
end;
function TTarget.getWidth:single;
begin
result:=0.25; //fwidth;
end;
function TTarget.getHeight:single;
begin
result:=0.25; //*1.6; //fheight;
end;
function TTarget.getTexture: integer;
begin
if fshielded then
result:=ftextures.shielded
else
result:=ftextures.normal;
end;
constructor TTarget.create;
var img: tpicture;
pp: pointer;
begin
inherited create;
if instances=0 then
begin
glGenTextures(2, @ftextures);
img:=tpicture.Create;
img.LoadFromFile(assetsfolder+'target.png');
glBindTexture(GL_TEXTURE_2D, ftextures.normal);
glActiveTexture(GL_TEXTURE0);
pp:=img.BITMAP.RawImage.Data;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img.Width, img.height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pp);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
img.LoadFromFile(assetsfolder+'shieldedtarget.png');
glBindTexture(GL_TEXTURE_2D, ftextures.shielded);
glActiveTexture(GL_TEXTURE0);
pp:=img.BITMAP.RawImage.Data;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img.Width, img.height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pp);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
img.free;
end;
inc(instances);
healthbar:=thealthbar.create;
healthbar.width:=width;
healthbar.height:=0.05;
healthbar.y:=(-(height/2))-(healthbar.height/2);
self.addChild(healthbar);
maxhealth:=100;
health:=100;
end;
destructor TTarget.destroy;
begin
dec(instances);
if instances=0 then //destroy the texture
glDeleteTextures(2,@ftextures);
if healthbar<>nil then
freeandnil(healthbar);
inherited destroy;
end;
end.