11package zero .flxutil .ecs .components ;
22
3+ import flixel .tile .FlxTilemap ;
4+ import flixel .FlxObject ;
35import flixel .FlxObject .* ;
46import zero .flxutil .input .Controller ;
57import 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
5170typedef 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