Path: blob/main/website/GAUSS/js/room-manager.js
2941 views
var EditorRoom = function(id)1{2this.id = id;3this.items = [];4this.walkBoxes = {};5this.zOrderMap = {};6this.setId = setId;7this.walkablePath = null;8this.walkBehinds = [];9this.onEnterScript = null;10this.onExitScript = null;11};1213var setId = function(newId)14{15for(var i = 0; i < this.items.length; i++)16this.items[i].parentRoomId = newId;1718for(var i = 0; i < editorCharactersList.length; i++)19if(editorCharactersList[i].parentRoomId == this.id)20editorCharactersList[i].parentRoomId = newId;2122this.id = newId;23};2425var EditorItem = function(id, type, pRoomId)26{27this.id = id;28this.type = type;29this.walkspot = { x : null, y : null};30this.hotspot = null;31this.visible = true;32this.layer = 2;33this.description = '';34this.parentRoomId = pRoomId;35this.setLayer = setItemLayer;36this.position = { x : null, y : null };37this.anim_state = null;38this.dir = null;39this.defaultAnims = {};40this.customAnims = {};41this.speechColor = '#ffffff';42this.faceDir = 'Left';43this.getCurrentFrame = getItemCurrentFrame;44this.maxScaleFactor = 100;45this.exitTo = { 'room' : null, xPos : null, yPos : null };4647switch(type)48{49case 'character':50var initAnims = function() { return { 'FL' : null, 'FR' : null, 'FF' : null, 'FB' : null, 'FFL' : null, 'FFR' : null, 'FBL' : null, 'FBR' : null }; };51this.defaultAnims.stand = initAnims();52this.defaultAnims.walk = initAnims();53this.defaultAnims.talk = initAnims();54this.anim_state = 'stand';55this.dir = 'FL';56break;57case 'object':58this.defaultAnims.default = null;59this.anim_state = 'default';60break;61default:62throw 'Error: invalid object type';63break;64}65};6667var getItemPlaceHolder = function(item)68{69var anim;7071switch(item.type)72{73case 'object':74anim = editorMapIdAnim[item.defaultAnims.default];75break;76case 'character':77anim = editorMapIdAnim[item.defaultAnims.stand.FL];78break;79}80if(anim)81return anim.frames[anim.start_idx];82return null;83};8485var setItemLayer = function(l, which)86{87l = parseInt(l);8889var parentRoom;9091if(!which)92parentRoom = editorMapIdRoom[this.parentRoomId];93else94parentRoom = testMapIdRoom[this.parentRoomId];95if(parentRoom.zOrderMap[this.layer])96{97var index = parentRoom.zOrderMap[this.layer].indexOf(this.id);98if(index !== -1)99{100parentRoom.zOrderMap[this.layer].splice(index, 1);101if (parentRoom.zOrderMap[this.layer].length == 0)102delete parentRoom.zOrderMap[this.layer];103}104}105if(parentRoom.zOrderMap[l] == undefined)106parentRoom.zOrderMap[l] = [];107parentRoom.zOrderMap[l].push(this.id);108109this.layer = l;110};111112var getItemCurrentFrame = function()113{114var anim;115116switch(this.type)117{118case 'object':119anim = testMapIdAnim[this.defaultAnims[this.anim_state][this.dir]];120break;121case 'character':122if(this.anim_state in this.defaultAnims)123try {anim = testMapIdAnim[this.defaultAnims[this.anim_state][this.dir]];}124catch(err) { alert(err); return; }125else if(this.anim_state in this.customAnims)126try {anim = testMapIdAnim[this.customAnims[this.anim_state]];}127catch(err) { alert(err); return; }128129break;130}131if(anim)132return anim.frames[anim.start_idx];133return null;134};135136var EditorSprite = function(image)137{138this.img = image;139this.centralPerspectiveWalkBehind = null;140//this.boundingBox = new paper.Rectangle(0, 0, image.width, image.height);141this.boundingBox = new paper.Rectangle();142this.setPosition = function setPosition(left, top)143{144//this.boundingBox = new paper.Rectangle(left, top, this.boundingBox.width, this.boundingBox.height);145this.boundingBox.setTopLeft(left, top);146};147this.setSize = function setSize(width, height)148{149this.boundingBox.setSize(width, height);150};151//this.setPosition(0, 0);152};153154var editorRoomsList = [];155var editorRoomsCount = 0;156var editorItemsCount = 0;157var editorMapIdRoom = {};158var editorMapIdItem = {};159var editorCurrentRoom = null;160var editorCurrentItem = null;161var editorCurrentWalkBox = null;162var editorMapIdWb = {};163var editorWbCount = 0;164165var createNewEditorRoom = function(id)166{167var newEditorRoom = new EditorRoom(id);168editorRoomsList.push(newEditorRoom);169editorMapIdRoom[id] = newEditorRoom;170};171172var setEditorRoomBackground = function(event)173{174if(!event.target.files[0].type.match(/image.*/))175{176alert("Please choose an image file!");177return;178}179$('.previous-file').hide();180var newEditorItem;181var fileReader = new FileReader();182fileReader.onload = function(event){183var img = new Image();184img.onload = function(){185var bg = new EditorSprite(img);186bg.setPosition(0, 0);187bg.setSize(img.width, img.height);188editorCurrentRoom.items[0] = bg;189//editorCurrentRoom.zOrderMap[0] = newEditorItem;190updateCanvas(editorCurrentRoom, 'room');191$('.item').show();192};193img.src = event.target.result;194img.draggable="true";195};196fileReader.readAsDataURL(event.target.files[0]);197};198199var setEditorItemSprite = function(event, dfd)200{201if(!event.target.files[0].type.match(/image.*/))202{203alert("Please choose an image file!");204return;205}206$('.previous-file').hide();207var fileReader = new FileReader();208fileReader.onload = function(event)209{210var img = new Image();211img.onload = function()212{213editorMapIdItem[editorCurrentItem.id].sprite = new EditorSprite(img);214editorMapIdItem[editorCurrentItem.id].sprite.setPosition(-img.width, -img.height);215editorMapIdItem[editorCurrentItem.id].sprite.setSize(img.width, img.height);216if(editorCurrentRoom.zOrderMap[editorCurrentItem.layer] == undefined)217editorCurrentRoom.zOrderMap[editorCurrentItem.layer] = [];218editorCurrentRoom.zOrderMap[editorCurrentItem.layer].push(editorCurrentItem.id);219dfd.resolve();220};221img.src = event.target.result;222img.draggable="true";223};224fileReader.readAsDataURL(event.target.files[0]);225};226227var createNewEditorItem = function(id, parentRoomId)228{229var newEditorItem = new EditorItem(id, 'object', parentRoomId);230editorCurrentRoom.items.push(newEditorItem);231editorMapIdItem[id] = newEditorItem;232if(editorCurrentRoom.zOrderMap[newEditorItem.layer] == undefined)233editorCurrentRoom.zOrderMap[newEditorItem.layer] = [];234editorCurrentRoom.zOrderMap[newEditorItem.layer].push(newEditorItem.id);235};236237var deleteEditorRoom = function(roomId)238{239var room = editorMapIdRoom[roomId];240for(var i = 1; i < room.items.length; i++)241{242delete editorMapIdItem[room.items[i].id];243}244editorRoomsList.splice(editorRoomsList.indexOf(room), 1);245delete editorMapIdRoom[room.id];246};247248var deleteEditorItem = function(itemId)249{250var item = editorMapIdItem[itemId];251var room = editorMapIdRoom[item.parentRoomId];252253delete editorMapIdItem[itemId];254255room.zOrderMap[item.layer].splice(room.zOrderMap[item.layer].indexOf(item.id));256room.items.splice(room.items.indexOf(item), 1);257};258259var checkIdUniqueness = function(id, type)260{261switch(type)262{263case 'room': return !(id in editorMapIdRoom);264case 'item':265for(var i = 0; i < editorRoomsList.length; i++)266for(var j = 1; j < editorRoomsList[i].items.length; j++)267if(editorRoomsList[i].items[j].id == id)268return false;269return true;270case 'action': return !(id in editorMapIdAction);271case 'character': return !(id in editorMapIdCharacter);272case 'anim': return !(id in editorMapIdAnim);273case 'inventory-item': return !(id in editorMapIdInvItem);274case 'dialog' : return !(id in editorMapIdDialog);275}276};277278var createNewEditorWalkBehind = function(id, parentRoomId)279{280editorMapIdRoom[parentRoomId].walkBehinds.push({ id : id, image : null, poly: null, position : null, centralPerspectiveWalkBehind : null });281editorMapIdWb[id] = editorMapIdRoom[parentRoomId].walkBehinds[editorMapIdRoom[parentRoomId].walkBehinds.length - 1];282};283284285286