package{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.utils.Timer;
import flash.geom.Point;
import flash.events.TimerEvent;
import flash.events.MouseEvent;
public class Map extends MovieClip{
var bairitsu: Number;
var mapSprite: Sprite;
var mapImage: Array;
var draggingNow: Boolean;
var mapLoc: Point;
const maxBairitsu: Number = 4;
const minBairitsu: Number = 1;
const unitWidth: Number = 1024;
const unitHeight: Number = 640;
var timer: Timer;
function Map(){
this["kakudaiBt"].buttonMode = true;
this["kakudaiBt"].useHandCursor = true;
this["kakudaiBt"].addEventListener(MouseEvent.CLICK, onKakudai);
this["shukushoBt"].buttonMode = true;
this["shukushoBt"].useHandCursor = true;
this["shukushoBt"].addEventListener(MouseEvent.CLICK, onShukusho);
bairitsu = minBairitsu;
draggingNow = false;
mapLoc = new Point(0, 0);
mapSprite = new Sprite();
this.addChildAt(mapSprite, 0);
mapSprite.mouseChildren = false;
mapSprite.doubleClickEnabled = true;
mapSprite.addEventListener(MouseEvent.DOUBLE_CLICK, onDoubleClicked);
mapSprite.addEventListener(MouseEvent.MOUSE_DOWN, onMDown);
mapSprite.addEventListener(MouseEvent.MOUSE_UP, onMUp);
mapImage = new Array();
for(var i: Number = minBairitsu; i <= maxBairitsu; ++i){
mapImage[i] = new Sprite();
for(var m: Number = 0; m < i; ++m){
for(var n: Number = 0; n < i; ++n){
var imgLoader:Loader = new Loader();
imgLoader.x = m*unitWidth;
imgLoader.y = n*unitHeight;
mapImage[i].addChild(imgLoader);
var urlReq:URLRequest = new URLRequest("maps/map"+i+"00-"+m+"-"+n+".png");
imgLoader.load(urlReq);
}
}
mapImage[i].alpha = 0;
mapImage[i].scaleX = mapImage[i].scaleY = 1/i;
mapSprite.addChild(mapImage[i]);
}
timer = new Timer(33);
timer.addEventListener(TimerEvent.TIMER, loop);
timer.start();
}
function onDoubleClicked(event:MouseEvent):void{
var oldBai: Number = bairitsu;
if(event.shiftKey) bairitsu -= 1;
else bairitsu += 1;
if(bairitsu > maxBairitsu) bairitsu = maxBairitsu;
if(bairitsu < minBairitsu) bairitsu = minBairitsu;
mapLoc.x = mapLoc.x - (event.target.mouseX*bairitsu - event.target.mouseX*oldBai);
mapLoc.y = mapLoc.y - (event.target.mouseY*bairitsu - event.target.mouseY*oldBai);
}
function onKakudai(event:MouseEvent):void{
var oldBai: Number = bairitsu;
bairitsu += 1;
if(bairitsu > maxBairitsu) bairitsu = maxBairitsu;
mapLoc.x = stage.stageWidth/2 - ((stage.stageWidth/2 - mapLoc.x)/oldBai)*bairitsu;
mapLoc.y = stage.stageHeight/2 - ((stage.stageHeight/2 - mapLoc.y)/oldBai)*bairitsu;
}
function onShukusho(event:MouseEvent):void{
var oldBai: Number = bairitsu;
bairitsu -= 1;
if(bairitsu < minBairitsu) bairitsu = minBairitsu;
mapLoc.x = stage.stageWidth/2 - ((stage.stageWidth/2 - mapLoc.x)/oldBai)*bairitsu;
mapLoc.y = stage.stageHeight/2 - ((stage.stageHeight/2 - mapLoc.y)/oldBai)*bairitsu;
}
function onMDown(event:MouseEvent):void{
mapSprite.startDrag();
draggingNow = true;
}
function onMUp(event:MouseEvent):void{
mapSprite.stopDrag();
mapLoc.x = mapSprite.x;
mapLoc.y = mapSprite.y;
draggingNow = false;
}
function loop(event:TimerEvent):void{
if(bairitsu == maxBairitsu){
this["kakudaiBt"].alpha += (0 - this["kakudaiBt"].alpha)/10;
}else{
this["kakudaiBt"].alpha += (1 - this["kakudaiBt"].alpha)/10;
}
if(bairitsu == minBairitsu){
this["shukushoBt"].alpha += (0 - this["shukushoBt"].alpha)/10;
}else{
this["shukushoBt"].alpha += (1 - this["shukushoBt"].alpha)/10;
}
if(!draggingNow){
mapSprite.x += (mapLoc.x - mapSprite.x)/4;
mapSprite.y += (mapLoc.y - mapSprite.y)/4;
}
mapSprite.scaleX += (bairitsu - mapSprite.scaleX)/4;
mapSprite.scaleY += (bairitsu - mapSprite.scaleY)/4;
for(var i: Number = minBairitsu; i <= maxBairitsu; ++i){
if(i == minBairitsu){
mapImage[i].alpha += (1 - mapImage[i].alpha)/4;
}else{
if(bairitsu == i){
mapImage[i].alpha += (1 - mapImage[i].alpha)/4;
}else{
mapImage[i].alpha += (0 - mapImage[i].alpha)/4;
}
}
}
}
}
}