package src.game { import flash.display.MovieClip; import flash.geom.Point; import flash.display.Stage; import flash.events.Event; import flash.events.MouseEvent; import flash.display.Shape; import flash.ui.Mouse; import src.editor.Anchor; import src.utils.Image; import src.game.References; import src.game.TileMap; import src.game.Group; import src.utils.TileAttributes; public class Map extends MovieClip { public var curGroup:Group=null; public var groups:Array=new Array(); public var tiles:Array=new Array(null,null,null,null,null,null,null,null,null,null,null); public var sx:Number=0; public var sy:Number=0; // create the map layers public var l0:MovieClip=new MovieClip(); // very very very far (scrolls 5%) public var l1:MovieClip=new MovieClip(); // very very far (scrolls 25%) public var l2:MovieClip=new MovieClip(); // very far (scrolls 50%) public var l3:MovieClip=new MovieClip(); // behind behind tiles public var l4:MovieClip=new MovieClip(); // behind tiles // tile bg here public var l5:MovieClip=new MovieClip(); // in front of tiles public var l6:MovieClip=new MovieClip(); // in front front of tiles public var l7:MovieClip=new MovieClip(); // scrolls 150% public var l8:MovieClip=new MovieClip(); // scrolls 200% public var l9:MovieClip=new MovieClip(); // scrolls 400% public var l10:MovieClip=new MovieClip(); // scrolls 800% public var bg:Image=null; public var vW:Number=0; // visible play area width public var vH:Number=0; public var tH:Number=0; // this is all for storage before preload is done public var tW:Number=0; public var bgImage:String=new String(); public var tileData:String=new String(); public var ssData:Array=new Array(); public var mapStr:String=new String(); private var ref:References=null; public var pre:MapPreloader=null; public var preloadedImages:Array=new Array();// preloadedImages[image name] = bitmap data public var tileType:Array=new Array(); public var sheetAttributes:Array=new Array(); // holds extra data for all the sheets // mapStr holds object data (ie the actual location/attri of objects in this map) // tileData holds tiles data (ie the actual location of tiles in this map) // ssData holds the object data (ie the list of available objects) // tileProp holds the tiles data (ie the list of available tiles) public function Map(mapStr:String,tileData:String,ssData:Array,tileProp:String,spriteSheetList:String,vW=800,vH=400,tW:int=20,tH:int=20,bgImage=null,ref=null) { this.mapStr=mapStr; this.tileData=tileData; this.ssData=ssData; this.tW=tW; this.tH=tH; this.vW=vW; this.vH=vH; this.bgImage=bgImage; this.ref=ref; trace("running tileProp through now..."+tileProp); pre=new MapPreloader(ref,this,ssData,tileProp,spriteSheetList,bgImage); } // MapPreloader.as will call to preloadDone public function preloadDone() { // farthest bgImage if(bgImage==null) bgImage="gray.png"; // load in bg bg=new Image(this,bgImage,"backgrounds/"); this.addChild(bg); // break up tile data into layers var tD:Array=tileData.split("[layer]"); if(!tD) tD=new Array("","","","","","","","","","",""); if(tD.length<2) tD[5]=tileData; // create a new map for(var i:int=0;i<=10;i++) { // go through all layers // load in tile data // if(tD[i] && tD[i]!="" || i>=3 && i<=6) { // load in tile data trace("tiles["+i+"]: "+tD[i]); tiles[i]=new TileMap(this,tD[i],vW,vH,tW,tH); this.addChild(tiles[i]); } // load in movieclip for objects to be saved to on this layer this.addChild(this["l"+i]); } // lets go through and add the groups var groupsStr:Array=mapStr.split("[1]"); var ssPose:Array=null; for(var i:int=groupsStr.length-1;i>=0;i--) { if(groupsStr[i]=="") continue; var splitGroup:Array=groupsStr[i].split("[2]"); if(!splitGroup[2]) continue; var groupProperties:Array=splitGroup[1].split("|"); var groupAnchors:Array=splitGroup[2].split("|"); trace("group anchors: "+splitGroup[2]); // figure out the pose if(ssData[groupProperties[1]]) ssPose=ssData[groupProperties[1]].split("[1]"); else ssPose=null; // do one last check to make sure theres no copies var done:Boolean=false; for(var k:int=groups.length-1;done==false && k>=0;k--) { if(groups[k].x==groupAnchors[0] && groups[k].y==groupAnchors[1]) { done=true; trace("found a duplicate."); } } if(done) continue; // create the group var group:Object=null; if(ref){ group=new GameObject(ref,this,groupProperties,groupAnchors[0],groupAnchors[1],ssPose,groupAnchors); } else { group=new Group(this,groupProperties,groupAnchors[0],groupAnchors[1],ssPose,null,groupAnchors); } this["l"+groupProperties[0]].addChild(group); // put it on the stage groups.push(group); // add the new group to our list // refresh it group.refreshGraphic(); } // let main know so it can start its shit up if(ref) ref.main.mapLoaded(); } public function shiftMap() { bg.x=(bg.width-10-800)*(sx/(vW-800))-5; bg.y=-(bg.height-10-500)*(sy/(-vH-500))-5; l0.x=sx*.05; l0.y=sy*.05; l1.x=sx*.25; l1.y=sy*.25; l2.x=sx*.50; l2.y=sy*.50; for(var i:int=3;i<=6;i++) { this["l"+i].x=sx; this["l"+i].y=sy; tiles[i].x=sx; tiles[i].y=sy; } l7.x=sx*1.5; l7.y=sy*1.5; l8.x=sx*2; l8.y=sy*2; l9.x=sx*4; l9.y=sy*4; l10.x=sx*8; l10.y=sy*8; // loop through bouncy windows and do them too for(var i:int=0;i