// GraphicLayer.tjs - グラフィック系レイヤ(背景,キャラクタ) // Copyright (C)2001-2003, W.Dee 改変・配布は自由です class ProvinceContext { // 領域アクション用コンテキスト var target; var storage; var onenter; var onleave; var hint; var exp; var cursor; var countpage; var autodisable; function ProvinceContext() {}; function finalize() {}; } class GraphicLayer extends AnimationLayer { // 背景/前景レイヤの基本クラス var comp; // 対のレイヤ var id; // ID var provinceActions = void; // クリッカブルマップの領域ごとのアクション定義 var pointingProvince = 0; // 現在指し示している領域番号 var loadedProvinceImage = ""; // loadImages 後に読み込まれた領域画像 var loadedProvinceActions = ""; // loadImages 後に読み込まれた領域アクション var defaultCursor = crDefault; // デフォルトのカーソル var lastMouseDownX; // 最後にマウスがクリックされた X 座標 var lastMouseDownY; // 最後にマウスがクリックされた Y 座標 function GraphicLayer(win, par, name, id) { // GraphicLayer コンストラクタ // win : ウィンドウオブジェクト // par : 親レイヤ // name : レイヤの名前 super.AnimationLayer(win, par); this.name = name; this.id = id; /* 対のレイヤ は、このオブジェクトを作成後に setCompLayer で設定すること */ } function finalize() { clearProvinceActions(); super.finalize(...); } function setCompLayer(lay) { comp = lay; } function setDefaultCursor(c) { cursor = defaultCursor = c; } function loadImages(elm) { // elm に記述されている内容に従ってこのレイヤに画像を読み込む clearProvinceActions(); loadedProvinceImage = ""; super.loadImages(elm); if(elm !== void) { if(elm.mapimage !== void) super.loadProvinceImage(elm.mapimage); // 領域画像を読む if(elm.mapaction !== void) { internalLoadProvinceActions(elm.mapaction); // 領域アクションを読む } else { var name; var storage = Storages.getPlacedPath( name = (Storages.chopStorageExt(elm.storage) + ".ma")); // 拡張子が .ma のファイル if(storage != '') loadProvinceActions(name); } } } function loadProvinceImage(fn) { // 領域画像 fn を読み込む super.loadProvinceImage(fn); loadedProvinceImage = fn; } function assignComp() { // 対になるレイヤの内容をコピー assign(comp); } function assign(src) { super.assign(...); if(provinceActions !== void) { invalidate provinceActions; window.disableMouseKey(); } if(src.provinceActions !== void) { (provinceActions = []).assign(src.provinceActions); window.enableMouseKey(); } else { provinceActions = void; } loadedProvinceImage = src.loadedProvinceImage; loadedProvinceActions = src.loadedProvinceActions; } function beginTransition(elm) { // elm に従ってトランジションを行う comp.stopTransition(); // comp で行われていたトランジションも停止 super.beginTransition(elm, comp); } function exchangeInfo() { // comp と情報を取り替える // すでに 画像の内容、ツリー構造は取り変わっているので // 名前などを取り替える // また、ウィンドウの管理情報も更新するようにする var src = comp; var tmp = src.name; src.name = name; name = tmp; tmp = src.cursor; src.cursor = cursor; cursor = tmp; } function clearImage(process = true) { // AnimationLayer.clearImage オーバーライド super.clearImage(process); loadedProvinceImage = ""; clearProvinceActions(); } function clearProvinceActions() { if(provinceActions !== void) { invalidate provinceActions; provinceActions = void; pointingProvince = 0; cursor = defaultCursor; hint = ""; showParentHint = true; window.disableMouseKey(); } loadedProvinceActions = ""; } function internalLoadProvinceActions(fn) { // ファイル名 fn を領域アクション定義ファイルとして読み込む clearProvinceActions(); var file = []; file.load(fn); var filelines = file.count; // ファイルに従ってスクリプトを動的に生成 var body = "function { var a = provinceActions; \n"; for(var i = 0; i