Skip to content
Merged
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
70 changes: 29 additions & 41 deletions assets/songs/stress/scripts/tankmenRun.hx
Original file line number Diff line number Diff line change
@@ -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];
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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);
Expand All @@ -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')
Expand All @@ -124,19 +113,18 @@ 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)
{
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)
Expand All @@ -146,4 +134,4 @@ class TankmenBG {
}
}
}
}
}
19 changes: 19 additions & 0 deletions source/funkin/backend/scripting/HScript.hx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
Expand Down