package world.items { import flash.display.Sprite; import flash.geom.Point; import creatures.*; import world.*; import world.items.behaviors.*; public class Dweller { public static const STAND_ANIM:int = 0; public static const WALK_ANIM:int = 1; public static const ATTACK_ANIM:int = 2; public static const TREMBLE_ANIM:int = 3; private var _walkSpeed:Number = 2; private var _turnSpeed:Number = .03; protected var animations:Array = new Array(); protected var activeAnimation:SkeletonAnimation; protected var activeBehavior:Behavior; protected var _display:Skeleton; protected var _size:Number = 100; protected var _angle:Number = 0; protected var _location:Point = new Point(1,2); protected var _environment:Environment; public function get walkSpeed():Number { return _walkSpeed; } public function set walkSpeed(n:Number):void { _walkSpeed = n; } public function get turnSpeed():Number { return _turnSpeed; } public function set turnSpeed(n:Number):void { _turnSpeed = n; } public function get display():Skeleton { return _display; } public function set display(s:Skeleton):void { _display = s; } public function get size():Number { return _size; } public function set size(n:Number):void { _size = n; } public function get angle():Number { return _angle; } public function set angle(n:Number):void { _angle = n; if (_display) { _display.angle = _angle; } } public function get location():Point { return _location.clone(); } public function set location(p:Point):void { _location = p.clone(); if (_display && _environment) { _display.location = _environment.transformLocation(_location); } } public function get environment():Environment { return _environment; } public function set environment(e:Environment):void { _environment = e; } public function get depth():Number { return _display.location.y; } public function get behavior():Behavior { return activeBehavior; } public function Dweller() { } public function clone():Dweller { var copy:Dweller = new Dweller(); return copy; } public function toString():String { return "[Dweller]"; } public function step():void { if (_display) { if (activeBehavior) { activeBehavior.step(); } if (activeAnimation) { activeAnimation.step(); } _display.draw(); } } public function addSkeletonAnimation(animation:SkeletonAnimation, animationID:int):SkeletonAnimation { if (!animations.length) { animations[animationID] = animation; setSkeletonAnimation(animationID); }else{ animations[animationID] = animation; } animations[animationID] = animation; return animation; } public function setSkeletonAnimation(animationID:int):void { if (animations[animationID]) { activeAnimation = animations[animationID]; _display.setAnimation(activeAnimation); } } public function setBehavior(behavior:Behavior):void { if (activeBehavior) { activeBehavior.owner = null; } activeBehavior = behavior; activeBehavior.owner = this; } } }