Skip to content

Commit 8c346f1

Browse files
committed
added ability to jump through one way platforms
1 parent 24c3945 commit 8c346f1

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

zero/flxutil/ecs/components/PlatformerJumper.hx

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package zero.flxutil.ecs.components;
22

3+
import flixel.tile.FlxTilemap;
4+
import flixel.FlxObject;
35
import flixel.FlxObject.*;
46
import zero.flxutil.input.Controller;
57
import zero.flxutil.ecs.Component;
68

9+
using zero.ext.flx.FlxTilemapExt;
10+
using zero.ext.flx.FlxSpriteExt;
11+
712
/**
813
* A Component to make an entity in a platformer Jump
914
*/
@@ -14,6 +19,8 @@ class PlatformerJumper extends Component
1419
var jump_button:ControllerButton;
1520
var controller:Controller;
1621
var coyote_time:Float;
22+
var jump_down:Bool;
23+
var tiles:FlxTilemap;
1724

1825
var coyote_timer:Float;
1926
var just_jumped_timer:Float;
@@ -29,6 +36,8 @@ class PlatformerJumper extends Component
2936
jump_button = options.jump_button;
3037
controller = options.controller;
3138
coyote_time = options.coyote_time;
39+
jump_down = options.jump_down != null;
40+
if (jump_down) tiles = options.jump_down.tiles;
3241
}
3342

3443
@:dox(hide)
@@ -37,21 +46,37 @@ class PlatformerJumper extends Component
3746
if (coyote_timer > 0) coyote_timer -= dt;
3847
if (just_jumped_timer > 0) just_jumped_timer -= dt;
3948

49+
if (jump_down && can_jump_down()) return;
50+
4051
if (entity.wasTouching & FLOOR > 0) coyote_timer = coyote_time;
4152
if (controller.just_pressed(jump_button)) just_jumped_timer = coyote_time;
4253
if (controller.just_released(jump_button) && velocity.y < 0) velocity.y *= 0.5;
4354

4455
if (just_jumped_timer <= 0 || coyote_timer <= 0) return;
56+
4557
velocity.y = -jump_power;
4658
just_jumped_timer = 0;
4759
}
4860

61+
function can_jump_down():Bool
62+
{
63+
if (!controller.just_pressed(jump_button) || !controller.pressed(DPAD_DOWN)) return false;
64+
if (tiles.get_collisions_from_point(entity.get_anchor().add(0, 1)) & 0x1000 == 0) y += FlxObject.SEPARATE_BIAS + 0.001;
65+
return true;
66+
}
67+
4968
}
5069

5170
typedef JumperOptions =
5271
{
5372
controller:Controller,
5473
jump_power:Float,
5574
jump_button:ControllerButton,
56-
coyote_time:Float
75+
coyote_time:Float,
76+
?jump_down:JumpDownOptions,
77+
}
78+
79+
typedef JumpDownOptions =
80+
{
81+
tiles:FlxTilemap,
5782
}

0 commit comments

Comments
 (0)