home *** CD-ROM | disk | FTP | other *** search
- package game
- {
- import elements.*;
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.display.MovieClip;
- import flash.events.Event;
- import flash.geom.Point;
- import flash.utils.getDefinitionByName;
- import flash.utils.setTimeout;
- import groups.*;
-
- public class Room extends MovieClip
- {
-
-
- private var yBorder:Number = 240;
-
- private var sdManager:SoundManager;
-
- private var _type:String;
-
- private var rotateCounter:uint = 60;
-
- private var gridWidth:Number;
-
- private var tY:Number;
-
- private var tkeys:Array;
-
- private var tX:Number;
-
- private var entranceId:int = -1;
-
- private var doors:Array;
-
- public var container:MovieClip;
-
- private var tdoors:Array;
-
- private var hiddedRoom:MovieClip;
-
- private var manPosition:Array;
-
- public var topContainer:MovieClip;
-
- public var itemContainer:MovieClip;
-
- public var books:Array;
-
- private var xBorder:Number = 237;
-
- private var doorToRemove:*;
-
- public var _keys:Array;
-
- public var player:ManGroup;
-
- public var exits:Array;
-
- public var spikes:Array;
-
- private var broadCaster:BroadCaster;
-
- private var rotate:Number;
-
- private var allGroup:Array;
-
- public var winds:Array;
-
- public var allStaticItems:Array;
-
- public var screenShot:Bitmap;
-
- private var cRoomId:uint;
-
- public var _doors:Array;
-
- public var hiddenRoom:Group;
-
- private var roomWidth:Number;
-
- public var _books:Array;
-
- private var rotateOffset:Number = 0;
-
- private var roomHeight:Number;
-
- public var roomContainer:MovieClip;
-
- public var SpecialDoor:SpecialGroup;
-
- public var keys:Array;
-
- public var allActiveItems:Array;
-
- public function Room(param1:uint, param2:int = -1)
- {
- var _loc3_:Object = null;
- var _loc4_:Model = null;
- var _loc5_:Object = null;
- var _loc6_:* = undefined;
- var _loc7_:int = 0;
- var _loc8_:* = undefined;
- var _loc9_:MovieClip = null;
- var _loc10_:Array = null;
- var _loc11_:Array = null;
- var _loc12_:int = 0;
- var _loc13_:* = undefined;
- var _loc14_:Boolean = false;
- var _loc15_:* = undefined;
- var _loc16_:* = undefined;
- var _loc17_:* = undefined;
- var _loc18_:* = undefined;
- var _loc19_:Boolean = false;
- var _loc20_:* = undefined;
- rotateOffset = 0;
- rotateCounter = 60;
- xBorder = 237;
- yBorder = 240;
- entranceId = -1;
- super();
- entranceId = param2;
- param2 = param2 < 0 && param2 >= -1 ? 0 : param2;
- _loc3_ = Model.getInstance().getData(param1);
- broadCaster = BroadCaster.getInstance();
- sdManager = SoundManager.getInstance();
- gridWidth = _loc3_.gridWidth;
- Model.gridWidth = gridWidth;
- _type = _loc3_.type;
- cRoomId = param1;
- roomContainer = new MovieClip();
- addChild(roomContainer);
- itemContainer = new MovieClip();
- addChild(itemContainer);
- container = new MovieClip();
- roomContainer.addChild(container);
- topContainer = new MovieClip();
- addChild(topContainer);
- if(_type == "map")
- {
- _loc9_ = new (_loc8_ = getDefinitionByName("Map"))();
- container.addChild(_loc9_);
- hiddedRoom = _loc9_.getChildByName("hiddenRoom") as MovieClip;
- _loc9_.x = _loc9_.y = gridWidth / 2;
- }
- else if(param2 < 0)
- {
- manPosition = null;
- }
- else
- {
- manPosition = _loc3_.manPositions[param2] == null ? [1,1] : _loc3_.manPositions[param2];
- }
- _loc5_ = (_loc4_ = Model.getInstance()).currentData["room" + param1];
- _books = Model.books;
- _loc6_ = (_loc6_ = _loc4_.currentData.hasP) == null ? false : _loc6_;
- Model.hasP = _loc6_;
- _books = _books == null ? new Array() : _books;
- if(_loc5_ != null)
- {
- _doors = _loc5_.doors;
- _keys = _loc5_.keys;
- }
- tkeys = new Array();
- tdoors = new Array();
- allGroup = new Array();
- keys = new Array();
- doors = new Array();
- winds = new Array();
- spikes = new Array();
- books = new Array();
- exits = new Array();
- allActiveItems = new Array();
- allStaticItems = new Array();
- _loc7_ = 0;
- while(_loc7_ < 18)
- {
- _loc10_ = new Array();
- _loc11_ = new Array();
- _loc12_ = 0;
- while(_loc12_ < 18)
- {
- _loc10_.push(new Array());
- _loc11_.push(new Array());
- _loc12_++;
- }
- allActiveItems.push(_loc10_);
- allStaticItems.push(_loc11_);
- _loc7_++;
- }
- roomWidth = _loc3_.xGrid * gridWidth;
- roomHeight = _loc3_.yGrid * gridWidth;
- this.x = xBorder;
- this.y = yBorder;
- roomContainer.x = -roomWidth / 2;
- container.x = gridWidth / 2;
- itemContainer.x = topContainer.x = -roomWidth / 2 + gridWidth / 2;
- roomContainer.y = -roomHeight / 2;
- container.y = gridWidth / 2;
- itemContainer.y = topContainer.y = -roomHeight / 2 + gridWidth / 2;
- if(_loc5_ == null)
- {
- for each(_loc13_ in _loc3_.data)
- {
- if(!(Model.hasP && _loc13_.type == "wind"))
- {
- if(_loc13_.type == "book")
- {
- _loc14_ = false;
- for each(_loc15_ in _books)
- {
- if(_loc15_ == _loc13_.extra)
- {
- _loc14_ = true;
- break;
- }
- }
- if(_loc14_)
- {
- continue;
- }
- }
- addGroup(_loc13_.points,_loc13_.type,_loc13_.isStatic,_loc13_.extra);
- }
- }
- }
- else
- {
- for each(_loc16_ in _loc3_.data)
- {
- if(!(_loc16_.type == "door" || _loc16_.type == "key"))
- {
- if(!(Model.hasP && _loc16_.type == "wind"))
- {
- if(_loc16_.type == "book")
- {
- _loc19_ = false;
- for each(_loc20_ in _books)
- {
- if(_loc20_ == _loc16_.extra)
- {
- _loc19_ = true;
- break;
- }
- }
- if(_loc19_)
- {
- continue;
- }
- }
- addGroup(_loc16_.points,_loc16_.type,_loc16_.isStatic,_loc16_.extra);
- }
- }
- }
- for each(_loc17_ in _keys)
- {
- addGroup(_loc17_.points,"key",_loc17_.isStatic);
- }
- for each(_loc18_ in _doors)
- {
- addGroup(_loc18_.points,"door",_loc18_.isStatic,_loc18_.rotation);
- }
- }
- _doors = tdoors;
- _keys = tkeys;
- rotateRoom();
- initASpeed(Model.rotation);
- }
-
- public function setRotation(param1:Number) : void
- {
- var _loc2_:BitmapData = null;
- if(_type != "map")
- {
- Model.disableKeyBoard = true;
- rotateOffset = param1;
- rotateCounter = 0;
- Model.rotation = (this.rotation + param1 + 360) % 360;
- _loc2_ = new BitmapData(480,480,true,0);
- _loc2_.draw(roomContainer);
- screenShot = new Bitmap(_loc2_);
- screenShot.x = roomContainer.x;
- screenShot.y = roomContainer.y;
- addChild(screenShot);
- roomContainer.visible = false;
- sdManager.playSound("mapRotate",SoundManager.TYPE_ITEM);
- this.addEventListener(Event.ENTER_FRAME,changeRotation);
- setAspeed(param1);
- }
- }
-
- private function alphaToMax(param1:Event) : void
- {
- this.alpha += 0.02;
- if(this.alpha >= 1)
- {
- removeEventListener(Event.ENTER_FRAME,alphaToMax);
- initASpeed(Model.rotation);
- broadCaster.run("onMapReady","");
- }
- }
-
- public function removeMap() : void
- {
- this.addEventListener(Event.ENTER_FRAME,alphaToMin);
- }
-
- public function removeDoor(param1:*) : void
- {
- var _loc2_:int = 0;
- var _loc3_:* = undefined;
- var _loc4_:int = 0;
- var _loc5_:* = undefined;
- var _loc6_:Number = NaN;
- _loc2_ = 0;
- while(_loc2_ < doors.length)
- {
- if(doors[_loc2_] == param1)
- {
- doors.splice(_loc2_,1);
- tdoors.splice(_loc2_,1);
- break;
- }
- _loc2_++;
- }
- for each(_loc3_ in allStaticItems)
- {
- for each(_loc5_ in _loc3_)
- {
- if((_loc6_ = Number(_loc5_.indexOf(param1.items[0]))) >= 0)
- {
- _loc5_.splice(_loc6_,1);
- }
- }
- }
- _loc4_ = 0;
- while(_loc4_ < allGroup.length)
- {
- if(allGroup[_loc4_] == param1)
- {
- allGroup.splice(_loc4_,1);
- }
- _loc4_++;
- }
- }
-
- public function resetPlayerPosition(param1:Number, param2:Number) : void
- {
- player.resetPosition(param1,param2);
- }
-
- private function scaleBackToTarget(param1:Event) : void
- {
- this.scaleX -= 0.1;
- this.scaleY -= 0.1;
- this.x += tX / 50;
- this.y += tY / 50;
- if(this.scaleX <= 1)
- {
- this.scaleX = 1;
- this.scaleY = 1;
- this.x = xBorder;
- this.y = yBorder;
- removeEventListener(Event.ENTER_FRAME,scaleBackToTarget);
- Model.isSleep = false;
- Model.disableKeyBoard = false;
- }
- }
-
- public function addGroup(param1:Array, param2:String, param3:Boolean, param4:* = null) : void
- {
- var g:* = undefined;
- var itemClass:* = undefined;
- var _container:MovieClip = null;
- var e:* = undefined;
- var head:HeadItem = null;
- var item:* = undefined;
- var sideCounter:uint = 0;
- var besideTable:Object = null;
- var cld:MovieClip = null;
- var k:* = undefined;
- var points:Array = param1;
- var type:String = param2;
- var isStatic:Boolean = param3;
- var txt:* = param4;
- _container = container;
- switch(type)
- {
- case "wall":
- itemClass = RectItem;
- g = new Group(type,isStatic);
- break;
- case "piston":
- itemClass = ActiveItem;
- g = new PistonGroup(type,isStatic);
- break;
- case "key":
- _container = itemContainer;
- itemClass = KeyItem;
- g = new KeyGroup(type,isStatic);
- tkeys.push({
- "points":points,
- "isStatic":isStatic
- });
- keys.push(g);
- break;
- case "book":
- _container = itemContainer;
- itemClass = BookItem;
- g = new BookGroup(type,isStatic);
- g.text = txt;
- books.push(g);
- break;
- case "door":
- itemClass = DoorItem;
- _container = topContainer;
- txt = txt == null ? 0 : txt;
- g = new DoorGroup(type,isStatic,txt);
- tdoors.push({
- "points":points,
- "isStatic":isStatic,
- "rotation":txt
- });
- doors.push(g);
- break;
- case "spike":
- itemClass = SpikeItem;
- txt = txt == null ? 0 : txt;
- g = new SpikeGroup(type,isStatic,txt);
- spikes.push(g);
- break;
- case "halfWall":
- itemClass = HalfWall;
- txt = txt == null ? 0 : txt;
- g = new SpikeGroup(type,isStatic,txt);
- break;
- case "virtual":
- itemClass = VirtualItem;
- g = new Group(type,isStatic);
- if(txt != null)
- {
- hiddenRoom = g;
- }
- break;
- case "exit":
- _container = itemContainer;
- itemClass = ExitItem;
- g = new ExitGroup(type,isStatic,txt);
- exits.push(g);
- break;
- case "specialDoor":
- _container = topContainer;
- itemClass = SpecialItem;
- g = new SpecialGroup(type,isStatic,txt);
- SpecialDoor = g;
- break;
- case "wind":
- _container = topContainer;
- itemClass = WindItem;
- g = new WindGroup(type,isStatic);
- winds.push(g);
- break;
- case "man":
- itemClass = ManItem;
- _container = topContainer;
- g = new ManGroup(type,isStatic);
- head = new HeadItem(points[0][1] * gridWidth,points[0][0] * gridWidth);
- container.addChild(head);
- g.addItem(head);
- player = g;
- break;
- default:
- itemClass = RectItem;
- g = new Group(type,isStatic);
- }
- for each(e in points)
- {
- item = new itemClass(e[1] * gridWidth,e[0] * gridWidth);
- if(type == "piston")
- {
- sideCounter = 0;
- besideTable = new Object();
- cld = item.getChildByName("rock") as MovieClip;
- for each(k in points)
- {
- if(k[0] == e[0] && k[1] == e[1] + 1)
- {
- besideTable["R"] = true;
- sideCounter++;
- }
- else if(k[0] == e[0] + 1 && k[1] == e[1])
- {
- besideTable["B"] = true;
- sideCounter++;
- }
- else if(k[0] == e[0] && k[1] == e[1] - 1)
- {
- besideTable["L"] = true;
- sideCounter++;
- }
- else if(k[0] == e[0] - 1 && k[1] == e[1])
- {
- besideTable["T"] = true;
- sideCounter++;
- }
- }
- switch(sideCounter)
- {
- case 0:
- cld.gotoAndStop(5);
- break;
- case 1:
- cld.gotoAndStop(4);
- if(besideTable["L"] == true)
- {
- cld.rotation = -90;
- }
- else if(besideTable["R"] == true)
- {
- cld.rotation = 90;
- }
- else if(besideTable["B"] == true)
- {
- cld.rotation = 180;
- }
- else if(besideTable["T"] == true)
- {
- cld.rotation = 0;
- }
- break;
- case 2:
- if(besideTable["L"] == true && besideTable["R"] == true)
- {
- cld.gotoAndStop(3);
- cld.rotation = 90;
- }
- else if(besideTable["B"] == true && besideTable["T"] == true)
- {
- cld.gotoAndStop(3);
- }
- else if(besideTable["L"] == true && Boolean(besideTable["B"]))
- {
- cld.gotoAndStop(2);
- cld.rotation = 90;
- }
- else if(besideTable["L"] == true && Boolean(besideTable["T"]))
- {
- cld.gotoAndStop(2);
- cld.rotation = 180;
- }
- else if(besideTable["R"] == true && Boolean(besideTable["B"]))
- {
- cld.gotoAndStop(2);
- }
- else if(besideTable["R"] == true && Boolean(besideTable["T"]))
- {
- cld.gotoAndStop(2);
- cld.rotation = -90;
- }
- break;
- case 3:
- cld.gotoAndStop(1);
- if(besideTable["L"] != true)
- {
- cld.rotation = -90;
- }
- else if(besideTable["R"] != true)
- {
- cld.rotation = 90;
- }
- else if(besideTable["B"] != true)
- {
- cld.rotation = 180;
- }
- else if(besideTable["T"] != true)
- {
- cld.rotation = 0;
- }
- break;
- case 4:
- cld.gotoAndStop(6);
- }
- }
- _container.addChild(item);
- if(isStatic)
- {
- try
- {
- allStaticItems[e[0]][e[1]].push(item);
- }
- catch(E:Error)
- {
- }
- }
- g.allActiveItems = allActiveItems;
- g.allStaticItems = allStaticItems;
- g.addItem(item);
- }
- allGroup.push(g);
- }
-
- public function remove() : void
- {
- if(loaderInfo != null)
- {
- parent.removeChild(this);
- }
- }
-
- private function scaleToMin(param1:Event) : void
- {
- this.scaleX -= 7 / 9 / 50;
- this.scaleY -= 7 / 9 / 50;
- this.x -= tX / 50;
- this.y -= tY / 50;
- if(this.scaleX <= 2 / 9)
- {
- setTimeout(parent.removeChild,1000,this);
- removeEventListener(Event.ENTER_FRAME,scaleToMin);
- broadCaster.run("onRoomRemoved","");
- }
- }
-
- public function removeWind(param1:*) : void
- {
- var _loc2_:int = 0;
- var _loc3_:int = 0;
- _loc2_ = 0;
- while(_loc2_ < winds.length)
- {
- if(winds[_loc2_] == param1)
- {
- broadCaster.run("onFindWind","");
- sdManager.playSound("getItem",SoundManager.TYPE_ITEM);
- winds.splice(_loc2_,1);
- break;
- }
- _loc2_++;
- }
- _loc3_ = 0;
- while(_loc3_ < allGroup.length)
- {
- if(allGroup[_loc3_] == param1)
- {
- allGroup.splice(_loc3_,1);
- }
- _loc3_++;
- }
- Model.hasP = true;
- }
-
- public function update() : void
- {
- var _loc1_:int = 0;
- var _loc2_:* = undefined;
- var _loc3_:int = 0;
- if(Model.isSleep)
- {
- player.updateSpeed();
- player.hitTest();
- return;
- }
- _loc1_ = 0;
- while(_loc1_ < 18)
- {
- _loc3_ = 0;
- while(_loc3_ < 18)
- {
- allActiveItems[_loc1_][_loc3_] = new Array();
- _loc3_++;
- }
- _loc1_++;
- }
- for each(_loc2_ in allGroup)
- {
- _loc2_.updateSpeed();
- }
- hitTest();
- }
-
- private function hitTest() : void
- {
- var e:* = undefined;
- for each(e in allGroup)
- {
- try
- {
- e.hitTest();
- }
- catch(e:Error)
- {
- }
- }
- }
-
- private function rotateRoom() : void
- {
- player.rotation = Model.rotation;
- this.rotation = Model.rotation;
- if(_type == "map")
- {
- hiddedRoom.y = Model.hiddedRoomLocation.point[0] * 50 - 25;
- hiddedRoom.x = Model.hiddedRoomLocation.point[1] * 50 - 24;
- }
- else if((cRoomId == 23 || cRoomId == 25) && Model.hiddedRoomLocation == Model.getInstance().hiddenRoomSets[8])
- {
- SpecialDoor.open();
- }
- else if((cRoomId == 26 || cRoomId == 25) && Model.hiddedRoomLocation == Model.getInstance().hiddenRoomSets[0])
- {
- SpecialDoor.open();
- }
- else if(SpecialDoor != null)
- {
- SpecialDoor.close();
- }
- }
-
- private function alphaToMin(param1:Event) : void
- {
- this.alpha -= 0.02;
- if(this.alpha <= 0)
- {
- parent.removeChild(this);
- removeEventListener(Event.ENTER_FRAME,alphaToMin);
- broadCaster.run("onMapRemoved","");
- }
- }
-
- public function showMap() : void
- {
- this.addEventListener(Event.ENTER_FRAME,alphaToMax);
- }
-
- public function getBorder() : Object
- {
- return {
- "x":xBorder + container.x,
- "y":yBorder + container.y
- };
- }
-
- public function removeKey(param1:*) : void
- {
- var _loc2_:int = 0;
- var _loc3_:* = undefined;
- var _loc4_:int = 0;
- var _loc5_:* = undefined;
- var _loc6_:Number = NaN;
- _loc2_ = 0;
- while(_loc2_ < keys.length)
- {
- if(keys[_loc2_] == param1)
- {
- Model.disableKeyBoard = true;
- keys.splice(_loc2_,1);
- tkeys.splice(_loc2_,1);
- doorToRemove = doors[_loc2_];
- scaleTo();
- break;
- }
- _loc2_++;
- }
- for each(_loc3_ in allStaticItems)
- {
- for each(_loc5_ in _loc3_)
- {
- if((_loc6_ = Number(_loc5_.indexOf(param1.items[0]))) >= 0)
- {
- _loc5_.splice(_loc6_,1);
- }
- }
- }
- _loc4_ = 0;
- while(_loc4_ < allGroup.length)
- {
- if(allGroup[_loc4_] == param1)
- {
- allGroup.splice(_loc4_,1);
- }
- _loc4_++;
- }
- }
-
- private function changeRotation(param1:Event = null) : void
- {
- var e:Event = param1;
- ++rotateCounter;
- this.rotation += rotateOffset / 61;
- if(rotateCounter >= 61)
- {
- roomContainer.visible = true;
- removeChild(screenShot);
- screenShot.bitmapData.dispose();
- screenShot = null;
- rotateRoom();
- Model.disableKeyBoard = false;
- try
- {
- removeEventListener(Event.ENTER_FRAME,changeRotation);
- }
- catch(e:Error)
- {
- }
- }
- }
-
- public function scaleBack() : void
- {
- sdManager.playSound("scaleMin",SoundManager.TYPE_ITEM);
- this.addEventListener(Event.ENTER_FRAME,scaleBackToTarget,false,0,true);
- }
-
- private function scaleToTarget(param1:Event) : void
- {
- this.scaleX += 0.1;
- this.scaleY += 0.1;
- this.x -= tX / 50;
- this.y -= tY / 50;
- if(this.scaleX >= 5)
- {
- sdManager.playSound("doorOpen",SoundManager.TYPE_ITEM);
- removeEventListener(Event.ENTER_FRAME,scaleToTarget);
- doorToRemove.removeAllItems();
- doorToRemove = null;
- }
- }
-
- public function showRoom() : void
- {
- tX = this.x - xBorder;
- tY = this.y - yBorder;
- sdManager.playSound("scaleMax",SoundManager.TYPE_ITEM);
- this.addEventListener(Event.ENTER_FRAME,scaleToMax);
- }
-
- private function scaleTo() : void
- {
- var _loc1_:Point = null;
- _loc1_ = doorToRemove.items[0].localToGlobal(new Point(0,0));
- tX = (_loc1_.x - xBorder) * 5;
- tY = (_loc1_.y - yBorder) * 5;
- sdManager.playSound("scaleMax",SoundManager.TYPE_ITEM);
- this.addEventListener(Event.ENTER_FRAME,scaleToTarget,false,0,true);
- }
-
- public function removeRoom(param1:Number, param2:Number) : void
- {
- tX = xBorder - param1;
- tY = yBorder - param2;
- sdManager.playSound("scaleMin",SoundManager.TYPE_ITEM);
- this.addEventListener(Event.ENTER_FRAME,scaleToMin);
- }
-
- public function setAspeed(param1:Number) : void
- {
- var _loc2_:* = undefined;
- for each(_loc2_ in allGroup)
- {
- _loc2_.resetASpeed(param1);
- }
- }
-
- private function initASpeed(param1:Number) : void
- {
- var _loc2_:* = undefined;
- for each(_loc2_ in allGroup)
- {
- _loc2_.setASpeed(param1);
- }
- }
-
- public function removeBook(param1:*) : void
- {
- var _loc2_:int = 0;
- var _loc3_:int = 0;
- _loc2_ = 0;
- while(_loc2_ < books.length)
- {
- if(books[_loc2_] == param1)
- {
- broadCaster.run("onFindFile",books[_loc2_].text);
- sdManager.playSound("getItem",SoundManager.TYPE_ITEM);
- books.splice(_loc2_,1);
- Model.isSleep = false;
- break;
- }
- _loc2_++;
- }
- _loc3_ = 0;
- while(_loc3_ < allGroup.length)
- {
- if(allGroup[_loc3_] == param1)
- {
- allGroup.splice(_loc3_,1);
- }
- _loc3_++;
- }
- }
-
- private function scaleToMax(param1:Event) : void
- {
- this.scaleX += 7 / 9 / 50;
- this.scaleY += 7 / 9 / 50;
- this.x -= tX / 50;
- this.y -= tY / 50;
- if(this.scaleX >= 1)
- {
- this.scaleX = this.scaleY = 1;
- this.x = xBorder;
- this.y = yBorder;
- removeEventListener(Event.ENTER_FRAME,scaleToMax);
- initASpeed(Model.rotation);
- broadCaster.run("onRoomReady","");
- }
- }
-
- public function setPlayer(param1:String) : void
- {
- if(entranceId >= 0 && cRoomId != 1)
- {
- exits[entranceId].setEnter();
- }
- player.InitPlayer(param1);
- if(_type != "map" && manPosition != null)
- {
- player.resetPosition(manPosition[1] * gridWidth,manPosition[0] * gridWidth);
- }
- }
- }
- }
-