5 <title>PCDSL Editor</title>
6 <script type="text/javascript" src="include/jquery.js"></script>
7 <script type="text/javascript" src="include/jquery.textarea-util.js"></script>
8 <script type="text/javascript" src="include/jquery.selection.js"></script>
9 <script type="text/javascript" src="include/texteditor-script.js"></script>
10 <style type="text/css">
15 background-color: #DED7B4;
27 background-color: #BAAB63;
39 <script type="text/javascript">
43 $('#textarea>textarea').css("width", $(window).width() - 30);
44 $('#textarea>textarea').css("height", $(window).height() - 120);
48 var isModified = false;
50 // イベントをキャンセルするハンドラです.
51 var cancelEvent = function(event) {
52 event.preventDefault();
53 event.stopPropagation();
59 var droppable = $("#openWindow");
61 if(!window.FileReader) {
62 alert("File API がサポートされていません。");
67 // dragenter, dragover イベントのデフォルト処理をキャンセルします.
68 droppable.bind("dragenter", cancelEvent);
69 droppable.bind("dragover", cancelEvent);
71 // ドロップ時のイベントハンドラを設定します.
72 var handleDroppedFile = function(event) {
73 // ファイルは複数ドロップされる可能性がありますが, ここでは 1 つ目のファイルを扱います.
74 var file = event.originalEvent.dataTransfer.files[0];
76 // ファイルの内容は FileReader で読み込みます.
77 var fileReader = new FileReader();
78 fileReader.onload = function(event) {
79 // event.target.result に読み込んだファイルの内容が入っています.
80 $("#textarea textarea").val(event.target.result);
83 browserFileName = null;
85 fileReader.readAsText(file);
89 $('#openWindow').hide();
93 // ドロップ時のイベントハンドラを設定します.
94 droppable.bind("drop", handleDroppedFile);
98 window.onload = function(){
100 $(window).bind("dragenter", cancelEvent);
101 $(window).bind("dragover", cancelEvent);
102 $(window).bind("drop", cancelEvent);
106 $('#textarea textarea').change(function(){
116 if(!window.confirm("内容が変更されています。破棄されますがよろしいですか?")) return;
118 $('#openWindow').show();
123 var value = $('#textarea textarea').val();
124 var href = "data:application/octet-stream," + encodeURIComponent(value);
126 location.href = href;
130 var browserFileName = null;
131 function saveToBrowser()
133 if(browserFileName == null || !window.confirm("名前 " + browserFileName + " でよろしいですか?"))
135 var input = window.prompt("名前を入力してください");
140 browserFileName = input;
143 localStorage.setItem(browserFileName, $('#textarea textarea').val());
145 window.alert("名前 " + browserFileName + " で保存しました");
148 function openFromBrowser()
150 $('#selectWindow #select > option').remove();
151 for(var item in localStorage)
153 $('#selectWindow #select').append($('<option>').html(item).val(item));
155 $("#selectWindow").show();
158 function removeSelectedItem()
160 var item = $("#selectWindow #select").val();
162 if(window.confirm(item + " の保存項目を削除しますか?"))
164 $('#selectWindow #select > option:selected').remove();
165 localStorage.removeItem(item);
169 function openSelectedItem()
171 var item = $("#selectWindow #select").val();
175 if(!window.confirm("変更されています。破棄されますがよろしいですか?")) return;
178 $("#textarea textarea").val(localStorage.getItem(item));
180 $("#selectWindow").hide();
182 browserFileName = item;
187 localStorage.setItem("previewStage", $("#textarea textarea").val());
188 window.open("../index_local_debug.html");
192 $(window).bind("resize", resize);
198 <a onclick="openFile();">開く</a>
199 <a onclick="saveFile()">名前を付けて保存</a>
200 <a onclick="openFromBrowser()">ブラウザから開く</a>
201 <a onclick="saveToBrowser();">ブラウザに保存</a>
204 <a onclick="run()">実行</a>
205 <a target="_blank" href="readme.txt">ヘルプ</a>
207 <div id="guiWindow" class="window">
210 <div id="textWindow" class="window" style="display: block;">
211 <div id="wrapper" style="height: 100%;">
212 <div id="textarea" style="width: 100%;">
213 <textarea wrap="off">
214 // StageObjectsはステージに文字シンボルとして配置したいオブジェクト定義の連想配列である。
215 // StageObjectの各項目の指定方法は以下の二通りある。
216 // ・クラス名指定 ... コンストラクタがに引数が不要な時
219 // a : {base : FreeItemClass, //鋳型となるクラス名
220 // args : '1190.png', //コンストラクタに指定する引数(一つだけの場合) stageは自動で指定されるので不要
221 // args : ['1190.png', callback], //二つ以上の場合。やはり第一引数のstageは不要
222 // prop : {times : 1}, //各インスタンスに指定したいプロパティの連想配列。(省略可)
223 //この例ではaFreeItemClass.timesプロパティを1に指定している
224 // adjust : [-50, 50], //位置の微調整。必ずX座標、Y座標の相対位置を示す配列にする。(省略可)
225 // extid : 19 //ネットワークを超えて一つのオブジェクトである必要がある場合にはゼロではない値を取る(ステージ内で固有の値, 省略可; 既定0)
226 // sync : true //ネットワーク同期を有効に(addStageObjectの第二引数)(省略可; 既定false)
230 // BlockClass : 普通のブロック。 引数に画像名を指定
231 a : {base:BlockClass,args:'1190.png'},
233 // SlopeBlockClass : 当たり判定が斜めのブロック。
234 // 引数 : 画像名, 当たり判定領域左側の開始位置のブロック上辺からの高さ, 当たり判定領域右側の...
235 // たとえば、この例のように 0, 32 と指定すれば右下がりの坂になり、32, 0と指定すれば左下がり、 16, 16と指定すれば半分の高さの長方形になる
236 // enableBlockMode : 当たり判定領域をデバッグ表示する。
237 b : {base:SlopeBlockClass,args:['1191.png',0,32],prop:{enableDebugMode:true}},
239 // FreeItemClass : キャラが取得するとコールバックが実行されるアイテム
240 // callback : 誰かに取得されたときに発生するコールバック。アタックした人、そのアタック直後のx, y座標が引数にセットされる。
241 // times : 取得できる回数で、-1で無限。
242 c : {base:FreeItemClass,args:["1234.png",callBack],prop:{times:1}},
244 // 何もブロックを置かない位置のためにかならずこのようなエントリーを記述
248 // FreeItemClassのコールバック
249 function callBack(obj, obj_x, obj_y)
251 if(obj instanceof MainCharacterClass){
259 background: "back2.png" //背景画像。横幅は640pxである必要はない。
277 [_,_,_,b,_,_,_,_,_,c],
278 [a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a],
283 var stage = new PCDSLStageClass(stgInfo, tbl);
285 stage.runStage = function(){
286 PCDSLStageClass.prototype.runStage.apply(this, []);
287 var main = new MainCharacterClass(stage, [["kuma1.png","kuma2.png","kuma3.png", "kuma4.png", "kuma3.png", "kuma2.png"], ["kumaready.png"]]);
292 main.ownerUID = stage.manager.userID;
293 stage.userControlledCharacter = main;
294 stage.addStageObject(main, true);
303 <span class="countChar">0</span>
304 <span class="currentLine">1</span>
305 <span class="countLine">1</span>
309 <div id="openWindow" style="z-index : 100; position: absolute; top: 10%; left: 25%; right: 25%; height: 40%; border: 5px #666 solid; background-color: white; display: none">
310 <div onclick="$('#openWindow').hide()" style="float: right; width: 4em; text-align: center; background-color: red; color: white; cursor: pointer">X</div>
312 このウィンドウにファイルをドロップしてください!<br>
314 <div id="selectWindow" style="z-index : 100; position: absolute; top: 10%; left: 25%; right: 25%; height: 40%; border: 5px #666 solid; background-color: white; display: none">
315 <div onclick="$('#selectWindow').hide()" style="float: right; width: 4em; text-align: center; background-color: red; color: white; cursor: pointer">X</div>
318 <select id="select"></select><br>
319 <input type="button" onclick="removeSelectedItem()" value="選択項目の削除"><input onclick="openSelectedItem()" type="button" value="開く">