mirror of
https://github.com/cheat-engine/cheat-engine
synced 2026-08-15 02:26:08 -04:00
122 lines
2.6 KiB
ObjectPascal
Executable file
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.
|
|
|