Created
June 12, 2018 18:28
-
-
Save 01010111/56df97baa07a316b10b06792093e3449 to your computer and use it in GitHub Desktop.
Shadows!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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