File indexing completed on 2024-05-12 15:21:09
0001 /* GCompris - editor_worker.js 0002 * 0003 * SPDX-FileCopyrightText: 2015 Holger Kaelberer <holger.k@elberer.de> 0004 * 0005 * Authors: 0006 * Holger Kaelberer <holger.k@elberer.de> 0007 * 0008 * SPDX-License-Identifier: GPL-3.0-or-later 0009 */ 0010 0011 Qt.include("../balancebox_common.js") 0012 0013 WorkerScript.onMessage = function(msg) { 0014 var maxContactValue = 1; 0015 msg.lastBallIndex = -1; 0016 msg.lastGoalIndex = -1; 0017 msg.lastOrderNum = 0; 0018 msg.mapModel.clear(); 0019 msg.targetList = []; 0020 for (var row = 0; row < msg.level.map.length; row++) { 0021 for (var col = 0; col < msg.level.map[row].length; col++) { 0022 var contactValue = ""; 0023 var value = parseInt(msg.level.map[row][col]); // always enforce number 0024 var orderNum = (value & 0xFF00) >> 8; 0025 if (orderNum > 0 && msg.level.targets[orderNum - 1] === undefined) { 0026 console.error("Invalid level: orderNum " + orderNum 0027 + " without target value!"); 0028 } else if (orderNum > 0) { 0029 if (orderNum > msg.lastOrderNum) 0030 msg.lastOrderNum = orderNum; 0031 var target = msg.level.targets[orderNum-1] 0032 msg.targetList.push(parseInt(target)); 0033 contactValue = Number(target).toString(); 0034 if (target >= maxContactValue) 0035 maxContactValue = target + 1; 0036 } 0037 msg.mapModel.append({ 0038 "row": row, 0039 "col": col, 0040 "value": value, 0041 "contactValue": (orderNum > 0) ? contactValue : "" 0042 }); 0043 if (value & GOAL) { 0044 if (msg.lastGoalIndex > -1) { 0045 console.error("Invalid level: multiple goal locations: row/col=" 0046 + row + "/" + col); 0047 return; 0048 } 0049 msg.lastGoalIndex = row * msg.level.map.length + col; 0050 } 0051 if (value & START) { 0052 if (msg.lastBallIndex > -1) { 0053 console.error("Invalid level: multiple start locations: row/col=" 0054 + row + "/" + col); 0055 return; 0056 } 0057 msg.lastBallIndex = row * msg.level.map.length + col; 0058 } 0059 } 0060 msg.mapModel.sync(); // sync per row 0061 } 0062 msg.maxContactValue = maxContactValue; 0063 // send result back to the gui-thread 0064 WorkerScript.sendMessage(msg); 0065 }