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

122 lines
2.6 KiB
ObjectPascal
Executable file

unit bullet;
{$mode objfpc}{$H+}
interface
uses
windows, Classes, SysUtils, gameobject, graphics, gl, glext, math, globals;
type
TBullet=class(TGameObject)
private
instances2: integer; static;
ftexture2: integer; static;
fowner: TGameObject;
fmegabomb: boolean;
protected
function getWidth:single; override;
function getHeight:single; override;
function getTexture: integer; override;
public
speed: single; //distance / ms
damage: integer;
function checkCollision(other: TGameObject): boolean; override;
property megabomb: boolean read fmegabomb write fmegabomb;
procedure travel(time: single);
constructor create(owner: TGameObject);
destructor destroy; override;
end;
implementation
function TBullet.checkCollision(other: TGameObject): boolean;
begin
if other=fowner then
result:=false
else
result:=inherited checkCollision(other);
end;
procedure TBullet.travel(time:single);
var
distance: single;
d: single;
begin
distance:=speed*time;
x:=x+distance*sin(degtorad(rotation));
y:=y+distance*-cos(degtorad(rotation));
//todo, check for collision here instead
end;
function TBullet.getWidth:single;
begin
result:=0.05; //fwidth;
if megabomb then result:=result*3;
end;
function TBullet.getHeight:single;
begin
result:=0.05*1.6; //height
if megabomb then result:=result*3;
end;
function TBullet.getTexture: integer;
begin
result:=ftexture2;
end;
constructor TBullet.create(owner: TGameObject);
var img: tpicture;
pp: pointer;
begin
inherited create;
fowner:=owner;
speed:=0.001;
if instances2=0 then
begin
glGenTextures(1, @ftexture2);
img:=tpicture.Create;
img.LoadFromFile(assetsfolder+'bullet.png');
glBindTexture(GL_TEXTURE_2D, ftexture2);
glActiveTexture(GL_TEXTURE0);
//glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_FLOAT, @pixels[0]);
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(instances2);
end;
destructor TBullet.destroy;
begin
dec(instances2);
if instances2=0 then //destroy the texture
glDeleteTextures(1,@ftexture2);
inherited destroy;
end;
end.