Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions edit.bat
Original file line number Diff line number Diff line change
@@ -1,5 +1,2 @@
start src/Stickman.dpr
start src/typestuff.pas
start src/multiplayer.pas
start src/fegyverek.pas
start src/fizika.pas
7 changes: 5 additions & 2 deletions src/BotGroups.pas
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ TBot = class
//
procedure doLogic;
procedure passInfo(_playerHalott: boolean; _playerFegyv: Byte; _playerPos: TD3DXVector3; _playerMatWorld: TD3DXMatrix; _bots: array of TBot);
procedure collideProjectile(loves: TLoves);
function collideProjectile(loves: TLoves): boolean; //returns true when shot by player
end;

TBotArray = array of TBot;
Expand Down Expand Up @@ -624,12 +624,14 @@ procedure TBot.shootPoint(_pos: TD3DXVector3);
state.canShootCd := ownProps.baseLovesCooldown;
end;

procedure TBot.collideProjectile(loves: TLoves);
function TBot.collideProjectile(loves: TLoves): boolean;
var
isGun, amGun, isHit: boolean;
matWorld, matWorld2 :TD3DMatrix;
muks: TMuksoka;
begin
result := FALSE;

if state.isDead > -1 then exit;
if state.isInvul > -1 then exit;

Expand Down Expand Up @@ -664,6 +666,7 @@ procedure TBot.collideProjectile(loves: TLoves);
putRagdoll(state.pos, loves.pos);
if loves.kilotte <> -2 then
begin
result := TRUE;
_addHudMessage(lang[110], $FF0000);
hudMessages[low(hudMessages)].fade:=200;
end;
Expand Down
2 changes: 2 additions & 0 deletions src/Defines.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{.$DEFINE undebug} //Remove dot for release, add dot for dev
{.$DEFINE nochecksumcheck}
247 changes: 247 additions & 0 deletions src/DynamicArray.pas
Original file line number Diff line number Diff line change
@@ -0,0 +1,247 @@
unit DynamicArray;

interface
uses
SysUtils,
Variants,
//
Typestuff;

type TVariantArray = array of Variant;

type TDynamicArray = class (TObject)
private
_items: TVariantArray;
_isFrozen: boolean;
_isPermaFrozen: boolean;
procedure init;
public
constructor Create(); overload;
constructor Create(items: TVariantArray); overload;
//
function push(item: Variant): Integer; //index
function pop: Variant;
function items: TVariantArray;
function at(index: Integer): Variant;
function head: Variant;
function tail: TVariantArray;
function size: Integer;
function isEmpty: boolean;
function isFrozen: boolean;
function isPermaFrozen: boolean;
function find(comparator: TComparatorFunction): Variant;
function findIndex(comparator: TComparatorFunction): Integer;
function difference(other: TDynamicArray): TDynamicArray;
procedure clear;
procedure map(mutator: TMutatorFunction);
procedure merge(other: TDynamicArray);
procedure freeze(isPermanent: boolean = false);
procedure unFreeze;
function toJSON(): string;
end;

implementation

procedure TDynamicArray.init;

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ezt még át akarom pakolni privátba, csak elfelejtettem.

begin
setlength(_items, 0);
_isFrozen := false;
_isPermaFrozen := false;
end;

constructor TDynamicArray.Create;
begin
inherited Create;

init;
end;

constructor TDynamicArray.Create(items: TVariantArray);
begin
inherited Create;

init;

setlength(_items, length(items));
_items := copy(items, low(items), length(items));
end;

function TDynamicArray.push(item: Variant): Integer; //index
begin
result := -1;

if _isFrozen or _isPermaFrozen then exit;

setlength(_items, succ(length(_items)));
_items[high(_items)] := item;

result := high(_items);
end;

function TDynamicArray.pop: Variant;
begin
result := Null;

if _isFrozen or _isPermaFrozen then exit;

if length(_items) <= 0 then exit;

result := _items[high(_items)];
setlength(_items, pred(length(_items)));
end;

function TDynamicArray.items: TVariantArray;
begin
result := _items;
end;

function TDynamicArray.at(index: Integer): Variant;
begin
result := Null;

if length(_items) <= 0 then exit;
if index >= length(_items) then exit;
if index <= 0 then exit;

result := _items[index];
end;

function TDynamicArray.head: Variant;
begin
result := Null;

if length(_items) <= 0 then exit;

result := _items[low(_items)];
end;

function TDynamicArray.tail: TVariantArray;
begin
setlength(result, 0);

if length(_items) <= 1 then exit;

result := copy(_items, 1, length(_items) - 1);
end;

function TDynamicArray.size: Integer;
begin
result := length(_items);
end;

function TDynamicArray.isEmpty: boolean;
begin
result := length(_items) <= 0;
end;

function TDynamicArray.isFrozen: boolean;
begin
result := _isFrozen = true;
end;

function TDynamicArray.isPermaFrozen: boolean;
begin
result := _isPermaFrozen = true;
end;

function TDynamicArray.find(comparator: TComparatorFunction): Variant;
var
i: Integer;
begin
result := Null;

if length(_items) <= 1 then exit;

for i := low(_items) to high(_items) do
begin
if comparator(_items[i], intToStr(i)) then
begin
result := _items[i];
exit;
end;
end;

end;

function TDynamicArray.findIndex(comparator: TComparatorFunction): Integer;
var
i: Integer;
begin
result := -1;

if length(_items) > 1 then
for i := low(_items) to high(_items) do
begin
if comparator(_items[i], intToStr(i)) then
begin
result := i;
exit;
end;
end;

end;

function TDynamicArray.difference(other: TDynamicArray): TDynamicArray;
begin
result := TDynamicArray.Create;

if length(_items) <= 1 then exit;

//TODO: return items in self but not in other
end;

procedure TDynamicArray.clear;
begin
if _isFrozen or _isPermaFrozen then exit;

setlength(_items, 0);
end;

procedure TDynamicArray.map(mutator: TMutatorFunction);
var
i: Integer;
begin
if _isFrozen or _isPermaFrozen then exit;

for i := low(_items) to high(_items) do
_items[i] := mutator(_items[i], intToStr(i));

end;

procedure TDynamicArray.merge(other: TDynamicArray);
begin
if _isFrozen or _isPermaFrozen then exit;

//TODO: append items to end
end;

procedure TDynamicArray.freeze(isPermanent: boolean = false);
begin
_isFrozen := true;
_isPermaFrozen := _isPermaFrozen or isPermanent;
end;

procedure TDynamicArray.unFreeze;
begin
if _isPermaFrozen then exit;

_isFrozen := false;
end;

function TDynamicArray.toJSON(): string;
var
i: Integer;
begin
result := '[';

for i := low(_items) to high(_items) do
begin
if i > low(_items) then result := result + ', ';

result := result + variantToStr(_items[i]);
end;

result := result + ']';
end;

end.
Loading