Skip to content

Commit bacd218

Browse files
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>
1 parent b2049e6 commit bacd218

File tree

2 files changed

+48
-41
lines changed

2 files changed

+48
-41
lines changed
Lines changed: 29 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
11
import flixel.FlxSprite;
22

3-
var tankmanRun:Array<TankmenBG> = [];
4-
var grpTankmanRun:FlxTypedGroup<FlxSprite> = [];
5-
63
var spawnTimes = []; // [[time, direction]]
7-
var tankmanPool = [];
8-
9-
function recycleTankman() {
10-
if(tankmanPool.length == 0) {
11-
return new TankmenBG();
12-
} else {
13-
return tankmanPool.shift(); // can be pop but it causes it to be less random
14-
}
4+
var tankmanGroup:TankmenGroup = {
5+
run: [],
6+
pool: [],
7+
group: new FlxTypedGroup<FlxSprite>()
158
}
169

10+
function recycleTankman()
11+
return tankmanGroup.pool.length == 0 ? new TankmenBG(tankmanGroup) : tankmanGroup.pool.shift(); // can be pop but it causes it to be less random
12+
1713
function getTankman(data:Array<Float>) {
1814
var tankman:TankmenBG = recycleTankman();
1915
tankman.strumTime = data[0];
@@ -22,9 +18,8 @@ function getTankman(data:Array<Float>) {
2218
}
2319

2420
function postCreate() {
25-
grpTankmanRun = new FlxTypedGroup();
26-
insert(members.indexOf(gf) - 1, grpTankmanRun);
27-
if(inCutscene) grpTankmanRun.visible = false;
21+
insert(members.indexOf(gf) - 1, tankmanGroup.group);
22+
if (inCutscene) tankmanGroup.group.visible = false;
2823

2924
/*var tempTankman:TankmenBG = recycleTankman();
3025
tempTankman.strumTime = 10;
@@ -42,9 +37,8 @@ function postCreate() {
4237
//spawnTimes.reverse(); // no need to reverse it since the notes are already reversed
4338
}
4439

45-
function onStartCountdown() {
46-
if(PlayState.instance.seenCutscene) grpTankmanRun.visible = true;
47-
}
40+
function onStartCountdown()
41+
if (PlayState.instance.seenCutscene) tankmanGroup.group.visible = true;
4842

4943
function spawnTankmen() {
5044
var time = Conductor.songPosition;
@@ -54,50 +48,46 @@ function spawnTankmen() {
5448

5549
//trace("Spawning Tankman", tankmen.sprite.offset, tankmen.goingRight);
5650

57-
tankmanRun.push(tankmen);
58-
grpTankmanRun.add(tankmen.sprite);
51+
tankmanGroup.run.push(tankmen);
52+
tankmanGroup.group.add(tankmen.sprite);
5953
}
6054
}
6155

6256
function update(elapsed) {
6357
spawnTankmen();
6458

65-
var length = tankmanRun.length;
66-
for(i in 0...length) {
59+
var length = tankmanGroup.run.length;
60+
for (i in 0...length) {
6761
var reverseIndex = length - i - 1;
68-
var tankmen = tankmanRun[reverseIndex];
62+
var tankmen = tankmanGroup.run[reverseIndex];
6963
tankmen.update(elapsed);
7064
}
7165
}
7266

7367
class TankmenBG {
68+
public var sprite:FlxSprite;
69+
7470
var strumTime = 0;
7571
var goingRight = false;
7672
var tankSpeed = 0.7;
77-
78-
var endingOffset = null;
79-
var sprite = null;
80-
73+
var endingOffset:Float;
8174
var killed = false;
75+
var grp:TankmenGroup; // The reference to the current pool
8276

83-
function new() {
84-
this.sprite = new FlxSprite();
85-
var sprite = this.sprite;
77+
function new(grp:TankmenGroup) {
78+
this.grp = grp;
8679

80+
sprite = new FlxSprite();
8781
sprite.frames = Paths.getSparrowAtlas('stages/tank/tankmanKilled1');
8882
sprite.antialiasing = true;
8983
sprite.animation.addByPrefix('run', 'tankman running', 24, true);
90-
9184
sprite.animation.play('run');
92-
9385
sprite.updateHitbox();
94-
9586
sprite.setGraphicSize(Std.int(sprite.width * 0.8));
9687
sprite.updateHitbox();
9788
}
9889

99-
function resetShit(x, y, isGoingRight) {
100-
var sprite = this.sprite;
90+
function resetShit(x:Float, y:Float, isGoingRight:Bool) {
10191
sprite.revive();
10292
sprite.setPosition(x, y);
10393
sprite.offset.set(0, 0);
@@ -114,7 +104,6 @@ class TankmenBG {
114104
}
115105

116106
function update(elapsed) {
117-
var sprite = this.sprite;
118107
sprite.visible = !(sprite.x >= FlxG.width * 1.5 || sprite.x <= FlxG.width * -0.5);
119108

120109
if (sprite.animation.curAnim.name == 'run')
@@ -124,19 +113,18 @@ class TankmenBG {
124113
if (goingRight) {
125114
endDirection = (FlxG.width * 0.02) - endingOffset;
126115
sprite.x = (endDirection + (Conductor.songPosition - strumTime) * tankSpeed);
127-
}
128-
else sprite.x = (endDirection - (Conductor.songPosition - strumTime) * tankSpeed);
116+
} else sprite.x = (endDirection - (Conductor.songPosition - strumTime) * tankSpeed);
129117
}
130118

131119
if (Conductor.songPosition > strumTime)
132120
{
133121
sprite.animation.play('shot');
134122
sprite.animation.finishCallback = function(_) {
135123
killed = true;
136-
grpTankmanRun.remove(sprite, true);
124+
grp.group.remove(sprite, true);
137125
sprite.kill();
138-
tankmanPool.push(this);
139-
tankmanRun.remove(this);
126+
grp.pool.push(this);
127+
grp.run.remove(this);
140128
}
141129

142130
if (goingRight)
@@ -146,4 +134,4 @@ class TankmenBG {
146134
}
147135
}
148136
}
149-
}
137+
}

source/funkin/backend/scripting/HScript.hx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class HScript extends Script {
3434
__importedPaths = [path];
3535

3636
interp.errorHandler = _errorHandler;
37+
interp.warnHandler = _warnHandler;
3738
interp.importFailedCallback = importFailedCallback;
3839
interp.staticVariables = Script.staticVariables;
3940
interp.allowStaticVariables = interp.allowPublicVariables = true;
@@ -117,6 +118,24 @@ class HScript extends Script {
117118
], ERROR);
118119
}
119120

121+
private function _warnHandler(error:Error) {
122+
var fileName = error.origin;
123+
var oldfn = '$fileName:${error.line}: ';
124+
if(remappedNames.exists(fileName))
125+
fileName = remappedNames.get(fileName);
126+
var fn = '$fileName:${error.line}: ';
127+
var err = error.toString();
128+
while(err.startsWith(oldfn) || err.startsWith(fn)) {
129+
if (err.startsWith(oldfn)) err = err.substr(oldfn.length);
130+
if (err.startsWith(fn)) err = err.substr(fn.length);
131+
}
132+
133+
Logs.traceColored([
134+
Logs.logText(fn, GREEN),
135+
Logs.logText(err, YELLOW)
136+
], WARNING);
137+
}
138+
120139
public override function setParent(parent:Dynamic) {
121140
interp.scriptObject = parent;
122141
}

0 commit comments

Comments
 (0)