Skip to content

Instantly share code, notes, and snippets.

@01010111
Created June 12, 2018 18:28
Show Gist options
  • Save 01010111/56df97baa07a316b10b06792093e3449 to your computer and use it in GitHub Desktop.
Save 01010111/56df97baa07a316b10b06792093e3449 to your computer and use it in GitHub Desktop.
Shadows!
package;
import flixel.FlxG;
import flixel.FlxObject;
import flixel.FlxSprite;
import flixel.FlxState;
import flixel.system.FlxAssets;
import flixel.tile.FlxTilemap;
import flixel.tile.FlxBaseTilemap.FlxTilemapAutoTiling;
class PlayState extends FlxState
{
var map:FlxTilemap;
var walker:Walker;
var shader:ShadowShader;
var shader_mix:Float = 0;
override public function create():Void
{
FlxG.mouse.visible = false;
super.create();
var data = [
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
];
shader = new ShadowShader();
walker = new Walker(16, 112);
walker.shader = shader;
add(walker);
map = new FlxTilemap();
map.loadMapFrom2DArray(data, 'assets/images/tiles.png', 8, 8, FlxTilemapAutoTiling.AUTO);
add(map);
}
override public function update(elapsed:Float):Void
{
shader_update();
super.update(elapsed);
}
function shader_update()
{
var temp_mix:Float = 0;
for (i in 0...8) if (map.overlapsPoint(walker.getMidpoint().add(0, -i * 8)))
{
temp_mix = (8 - i) / 10;
break;
}
shader_mix += (temp_mix - shader_mix) * 0.1;
shader.uMix.value = [shader_mix];
}
}
class Walker extends FlxSprite
{
public function new(x:Float, y:Float)
{
super(x, y);
loadGraphic('assets/images/walker.png', true, 8, 8);
animation.add('idle', [0]);
animation.add('walk', [0, 1, 2, 3], 12);
setFacingFlip(FlxObject.LEFT, true, false);
setFacingFlip(FlxObject.RIGHT, false, false);
}
override public function update(dt:Float)
{
controls();
animations();
super.update(dt);
}
function controls()
{
velocity.x = 0;
if (FlxG.keys.pressed.LEFT) velocity.x -= 40;
if (FlxG.keys.pressed.RIGHT) velocity.x += 40;
}
function animations()
{
if (velocity.x == 0) animation.play('idle');
else
{
animation.play('walk');
facing = velocity.x < 0 ? FlxObject.LEFT : FlxObject.RIGHT;
}
}
}
class ShadowShader extends FlxShader
{
@:glFragmentSource('
#pragma header
uniform float uMix;
void main()
{
vec4 color = flixel_texture2D(bitmap, openfl_TextureCoordv);
vec4 shadow = vec4(0, 0, 0, color.a);
gl_FragColor = mix(color, shadow, uMix);
}
')
public function new()
{
super();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment