|
- package ent;
- import Data.ObjectKind;
-
- class Object extends Entity {
-
- var speed = 0.2;
- var angle = 0.;
- var wasCarried = false;
- var color : h3d.shader.ColorAdd;
- var pulse : Float = 0.;
- var hintAct : h2d.Anim;
- public var active : Bool;
- public var carried(default, set) : Bool = false;
-
- public function new(k, x, y) {
- super(k, x, y);
- switch( kind ) {
- case Square1, Square2, Square3, Wings:
- var a = new h2d.Anim([for( i in 0...9 ) game.tiles.sub(i * 32, 256 + (kind == Wings ? 64 : kind == Square2 ? 32 : 0), 32, 32, -16, -16)], 20, spr);
- a.loop = false;
- a.onAnimEnd = function() {
- haxe.Timer.delay(function() {
- a.currentFrame = 0;
- }, 200 + Std.random(400));
- };
- if( kind == Square3 )
- a.adjustColor({ hue : Math.PI / 2 });
- hintAct = a;
- case Plate1, Plate2, Plate3, Plate4:
- game.soilLayer.add(Std.int(x) * 32, Std.int(y) * 32, game.tiles.sub(64, 32, 32, 32));
- spr.alpha = 0.8;
- case Hero:
- game.soilLayer.add(Std.int(x) * 32, Std.int(y) * 32, game.tiles.sub(0, 96, 32, 32));
- spr.alpha = 1;
- default:
- }
- }
-
- function set_carried(b) {
- var ix = Std.int(x);
- var iy = Std.int(y);
- if( b )
- active = false;
- wasCarried = carried;
- game.world.add(spr, b ? Game.LAYER_CARRY : Game.LAYER_ENT);
- return carried = b;
- }
-
- override function isCollide( with : ent.Entity ) {
- return with != null && with.kind != Hero;
- }
-
- override function canPick() {
- if( hasFlag(Under) )
- return false;
- if( carried )
- return false;
- return true;
- }
-
- override function getAnim() {
- return switch( kind ) {
- case Exit:
- [for( i in 0...6 ) game.tiles.sub(i * 32, 160, 32, 32, -16, -16)];
- default:
- super.getAnim();
- }
- }
-
- override public function update(dt:Float) {
-
- if( hintAct != null )
- hintAct.visible = !active;
- else if( active ) {
- pulse += dt * 0.1;
- spr.adjustColor({ saturation : Math.abs(Math.sin(pulse)) * 0.5, lightness : Math.abs(Math.sin(pulse)) * 0.2 });
- } else if( pulse != 0 ) {
- pulse %= Math.PI;
- pulse += dt * 0.1;
- if( pulse > Math.PI )
- pulse = 0;
- spr.adjustColor({ saturation : Math.abs(Math.sin(pulse)) * 0.5, lightness : Math.abs(Math.sin(pulse)) * 0.2 });
- }
-
- if( spr.scaleX < 1 ) {
- spr.scale(Math.pow(1.05, dt));
- if( spr.scaleX > 1 ) {
- spr.setScale(1);
- spr.smooth = false;
- }
- }
-
- var ix = Std.int(x), iy = Std.int(y);
- switch( kind ) {
- case Exit:
- if( game.allActive ) {
- spr.speed = 15;
- } else {
- spr.speed = 0;
- spr.currentFrame = 0;
- }
- case Square1:
- active = getObj(ix, iy, [Plate1, Plate2][game.hueValue], [CanPutOver]) != null;
- case Square2:
- active = getObj(ix, iy, [Plate2, Plate1][game.hueValue], [CanPutOver]) != null;
- case Square3:
- if( game.hueValue == 0 )
- active = getObj(ix, iy, Plate3, [CanPutOver]) != null || getObj(ix, iy, Steal, [CanPutOver]) != null;
- else
- active = getObj(ix, iy, Plate4, [CanPutOver]) != null;
- case Wings:
- var obj = getObj(ix, iy, [CanPutOver]);
- active = obj != null && obj.kind != Steal;
- default:
- }
-
- if( wasCarried ) {
- var tx = x * 32, ty = y * 32;
- var d = hxd.Math.distance(tx - spr.x, ty - spr.y);
- if( d > 1 ) {
- spr.x = hxd.Math.lerp(spr.x, tx, 1 - Math.pow(0.7, dt));
- spr.y = hxd.Math.lerp(spr.y, ty, 1 - Math.pow(0.7, dt));
- return;
- }
- wasCarried = false;
- }
-
- super.update(dt);
-
- }
-
- }
|