Improved Tankman Run Script + HScript Warning (#773)

* Improved Tankman Run Script +  HScript Warning

Updated the tankman run custom class and implemented the hscript warning system

* dont mind me

---------

Co-authored-by: ⍚~Nex <87421482+NexIsDumb@users.noreply.github.com>
This commit is contained in:
Jamextreme140
2025-09-21 17:11:22 +02:00
committed by GitHub
co-authored by ⍚~Nex
parent b2049e6285
commit bacd218e0b
2 changed files with 48 additions and 41 deletions
+29 -41
View File
@@ -1,19 +1,15 @@
import flixel.FlxSprite;
var tankmanRun:Array<TankmenBG> = [];
var grpTankmanRun:FlxTypedGroup<FlxSprite> = [];
var spawnTimes = []; // [[time, direction]]
var tankmanPool = [];
function recycleTankman() {
if(tankmanPool.length == 0) {
return new TankmenBG();
} else {
return tankmanPool.shift(); // can be pop but it causes it to be less random
}
var tankmanGroup:TankmenGroup = {
run: [],
pool: [],
group: new FlxTypedGroup<FlxSprite>()
}
function recycleTankman()
return tankmanGroup.pool.length == 0 ? new TankmenBG(tankmanGroup) : tankmanGroup.pool.shift(); // can be pop but it causes it to be less random
function getTankman(data:Array<Float>) {
var tankman:TankmenBG = recycleTankman();
tankman.strumTime = data[0];
@@ -22,9 +18,8 @@ function getTankman(data:Array<Float>) {
}
function postCreate() {
grpTankmanRun = new FlxTypedGroup();
insert(members.indexOf(gf) - 1, grpTankmanRun);
if(inCutscene) grpTankmanRun.visible = false;
insert(members.indexOf(gf) - 1, tankmanGroup.group);
if (inCutscene) tankmanGroup.group.visible = false;
/*var tempTankman:TankmenBG = recycleTankman();
tempTankman.strumTime = 10;
@@ -42,9 +37,8 @@ function postCreate() {
//spawnTimes.reverse(); // no need to reverse it since the notes are already reversed
}
function onStartCountdown() {
if(PlayState.instance.seenCutscene) grpTankmanRun.visible = true;
}
function onStartCountdown()
if (PlayState.instance.seenCutscene) tankmanGroup.group.visible = true;
function spawnTankmen() {
var time = Conductor.songPosition;
@@ -54,50 +48,46 @@ function spawnTankmen() {
//trace("Spawning Tankman", tankmen.sprite.offset, tankmen.goingRight);
tankmanRun.push(tankmen);
grpTankmanRun.add(tankmen.sprite);
tankmanGroup.run.push(tankmen);
tankmanGroup.group.add(tankmen.sprite);
}
}
function update(elapsed) {
spawnTankmen();
var length = tankmanRun.length;
for(i in 0...length) {
var length = tankmanGroup.run.length;
for (i in 0...length) {
var reverseIndex = length - i - 1;
var tankmen = tankmanRun[reverseIndex];
var tankmen = tankmanGroup.run[reverseIndex];
tankmen.update(elapsed);
}
}
class TankmenBG {
public var sprite:FlxSprite;
var strumTime = 0;
var goingRight = false;
var tankSpeed = 0.7;
var endingOffset = null;
var sprite = null;
var endingOffset:Float;
var killed = false;
var grp:TankmenGroup; // The reference to the current pool
function new() {
this.sprite = new FlxSprite();
var sprite = this.sprite;
function new(grp:TankmenGroup) {
this.grp = grp;
sprite = new FlxSprite();
sprite.frames = Paths.getSparrowAtlas('stages/tank/tankmanKilled1');
sprite.antialiasing = true;
sprite.animation.addByPrefix('run', 'tankman running', 24, true);
sprite.animation.play('run');
sprite.updateHitbox();
sprite.setGraphicSize(Std.int(sprite.width * 0.8));
sprite.updateHitbox();
}
function resetShit(x, y, isGoingRight) {
var sprite = this.sprite;
function resetShit(x:Float, y:Float, isGoingRight:Bool) {
sprite.revive();
sprite.setPosition(x, y);
sprite.offset.set(0, 0);
@@ -114,7 +104,6 @@ class TankmenBG {
}
function update(elapsed) {
var sprite = this.sprite;
sprite.visible = !(sprite.x >= FlxG.width * 1.5 || sprite.x <= FlxG.width * -0.5);
if (sprite.animation.curAnim.name == 'run')
@@ -124,8 +113,7 @@ class TankmenBG {
if (goingRight) {
endDirection = (FlxG.width * 0.02) - endingOffset;
sprite.x = (endDirection + (Conductor.songPosition - strumTime) * tankSpeed);
}
else sprite.x = (endDirection - (Conductor.songPosition - strumTime) * tankSpeed);
} else sprite.x = (endDirection - (Conductor.songPosition - strumTime) * tankSpeed);
}
if (Conductor.songPosition > strumTime)
@@ -133,10 +121,10 @@ class TankmenBG {
sprite.animation.play('shot');
sprite.animation.finishCallback = function(_) {
killed = true;
grpTankmanRun.remove(sprite, true);
grp.group.remove(sprite, true);
sprite.kill();
tankmanPool.push(this);
tankmanRun.remove(this);
grp.pool.push(this);
grp.run.remove(this);
}
if (goingRight)
@@ -146,4 +134,4 @@ class TankmenBG {
}
}
}
}
}
@@ -34,6 +34,7 @@ class HScript extends Script {
__importedPaths = [path];
interp.errorHandler = _errorHandler;
interp.warnHandler = _warnHandler;
interp.importFailedCallback = importFailedCallback;
interp.staticVariables = Script.staticVariables;
interp.allowStaticVariables = interp.allowPublicVariables = true;
@@ -117,6 +118,24 @@ class HScript extends Script {
], ERROR);
}
private function _warnHandler(error:Error) {
var fileName = error.origin;
var oldfn = '$fileName:${error.line}: ';
if(remappedNames.exists(fileName))
fileName = remappedNames.get(fileName);
var fn = '$fileName:${error.line}: ';
var err = error.toString();
while(err.startsWith(oldfn) || err.startsWith(fn)) {
if (err.startsWith(oldfn)) err = err.substr(oldfn.length);
if (err.startsWith(fn)) err = err.substr(fn.length);
}
Logs.traceColored([
Logs.logText(fn, GREEN),
Logs.logText(err, YELLOW)
], WARNING);
}
public override function setParent(parent:Dynamic) {
interp.scriptObject = parent;
}