home *** CD-ROM | disk | FTP | other *** search
- package elements
- {
- import flash.display.MovieClip;
- import game.Model;
-
- public class Item extends MovieClip
- {
-
-
- private var xHitObj:*;
-
- public var itemHeight:Number;
-
- public var minJ:int;
-
- public var minI:int;
-
- private var yHitObj:*;
-
- private var ySpeed:Number;
-
- public var maxJ:int;
-
- public var group:*;
-
- public var maxI:int;
-
- public var itemWidth:Number;
-
- public var ty:Number;
-
- public var tx:Number;
-
- protected var skipTable:Array;
-
- private var xSpeed:Number;
-
- public var xPosition:Number;
-
- public var yPosition:Number;
-
- private var pairs:Array;
-
- public function Item(param1:Number = 0, param2:Number = 0, param3:Number = 25, param4:Number = 25)
- {
- super();
- this.x = param1;
- this.y = param2;
- tx = xPosition = param1;
- ty = yPosition = param2;
- itemHeight = param4;
- itemWidth = param3;
- }
-
- private function getPairs() : void
- {
- var _loc1_:int = 0;
- var _loc2_:int = 0;
- _loc1_ = minI - 1;
- while(_loc1_ <= maxI + 1)
- {
- _loc2_ = minJ - 1;
- while(_loc2_ <= maxJ + 1)
- {
- if(_loc1_ >= 0 && _loc1_ < 18 && _loc2_ >= 0 && _loc2_ < 18)
- {
- if(group.allStaticItems[_loc1_][_loc2_] != null)
- {
- pairs.push(group.allStaticItems[_loc1_][_loc2_]);
- }
- if(group.allActiveItems[_loc1_][_loc2_] != null)
- {
- pairs.push(group.allActiveItems[_loc1_][_loc2_]);
- }
- }
- _loc2_++;
- }
- _loc1_++;
- }
- }
-
- public function moveTo() : void
- {
- this.x = tx = xPosition;
- this.y = ty = yPosition;
- }
-
- public function checkPosition(param1:Number, param2:Number) : void
- {
- var _loc3_:Array = null;
- var _loc4_:* = undefined;
- var _loc5_:* = undefined;
- var _loc6_:* = undefined;
- var _loc7_:String = null;
- var _loc8_:Number = NaN;
- var _loc9_:Number = NaN;
- _loc3_ = new Array();
- for each(_loc4_ in pairs)
- {
- for each(_loc5_ in _loc4_)
- {
- if((_loc6_ = _loc5_.group) != group)
- {
- _loc7_ = String(_loc5_.group._type);
- if(!(_loc3_.indexOf(_loc5_) >= 0 || group._type == "man" && (_loc7_ == "wind" || _loc7_ == "spike" || _loc7_ == "book" || _loc7_ == "key" || _loc7_ == "exit" || _loc7_ == "specialDoor" && _loc6_.opened) || _loc7_ == "man" && (group._type == "wind" || group._type == "spike" || group._type == "book" || group._type == "key" || group._type == "exit" || group._type == "specialDoor" && group.opened)))
- {
- _loc3_.push(_loc5_);
- _loc8_ = 0.5 * (itemWidth + _loc5_.itemWidth);
- _loc9_ = 0.5 * (itemHeight + _loc5_.itemHeight);
- if(Math.abs(param1 - _loc5_.tx) < _loc8_ && Math.abs(param2 - _loc5_.ty) < _loc9_)
- {
- if(!(Boolean(_loc6_.frozen) || Boolean(_loc6_.checked) || Model.isSleep))
- {
- _loc6_.hitTest();
- group.checked = false;
- group.hitTest();
- break;
- }
- if(Math.abs(_loc5_.tx - tx) >= _loc8_ && Math.abs(_loc5_.ty - ty) >= _loc9_)
- {
- skipTable.push(_loc5_);
- }
- else
- {
- if(Math.abs(_loc5_.tx - tx) >= _loc8_)
- {
- xHitObj = _loc5_;
- xPosition = _loc5_.tx - _loc8_ * ((_loc5_.tx - tx) / Math.abs(_loc5_.tx - tx));
- checkPosition(xPosition,yPosition);
- break;
- }
- if(Math.abs(_loc5_.ty - ty) >= _loc9_)
- {
- yHitObj = _loc5_;
- yPosition = _loc5_.ty - _loc9_ * ((_loc5_.ty - ty) / Math.abs(_loc5_.ty - ty));
- checkPosition(xPosition,yPosition);
- break;
- }
- }
- }
- }
- }
- }
- }
- }
-
- public function checkHit() : Object
- {
- var _loc1_:Object = null;
- pairs = new Array();
- getPairs();
- xSpeed = group.xspeedArr[group.counter].s;
- ySpeed = group.yspeedArr[group.counter].s;
- xPosition = tx + xSpeed;
- yPosition = ty + ySpeed;
- skipTable = new Array();
- checkPosition(xPosition,yPosition);
- checkSkiped();
- return {
- "obj":this,
- "x":xPosition - tx,
- "y":yPosition - ty,
- "xHit":xHitObj,
- "yHit":yHitObj
- };
- }
-
- protected function checkSkiped() : void
- {
- var _loc1_:* = undefined;
- var _loc2_:Number = NaN;
- var _loc3_:Number = NaN;
- var _loc4_:* = undefined;
- var _loc5_:* = undefined;
- for each(_loc1_ in skipTable)
- {
- _loc2_ = 0.5 * (itemWidth + _loc1_.itemWidth);
- _loc3_ = 0.5 * (itemHeight + _loc1_.itemHeight);
- if(Math.abs(xPosition - _loc1_.tx) < _loc2_ && Math.abs(yPosition - _loc1_.ty) < _loc3_)
- {
- _loc4_ = Math.atan2(_loc1_.ty - yPosition,_loc1_.tx - xPosition);
- _loc5_ = Math.atan2(ySpeed,xSpeed);
- if(Math.abs(Math.sin(_loc4_)) <= Math.abs(Math.sin(_loc5_)))
- {
- xHitObj = _loc1_;
- xPosition = _loc1_.tx - _loc2_ * ((_loc1_.tx - tx) / Math.abs(_loc1_.tx - tx));
- }
- else
- {
- yHitObj = _loc1_;
- yPosition = _loc1_.ty - _loc3_ * ((_loc1_.ty - ty) / Math.abs(_loc1_.ty - ty));
- }
- }
- }
- }
-
- public function remove() : void
- {
- if(loaderInfo != null)
- {
- parent.removeChild(this);
- }
- }
-
- public function move(param1:Number, param2:Number) : void
- {
- xPosition = tx + param1;
- yPosition = ty + param2;
- moveTo();
- }
- }
- }
-