瀏覽代碼

将灯光变为特殊积木组件

liyanbo 3 月之前
父節點
當前提交
900d174df4
共有 2 個文件被更改,包括 41 次插入34 次删除
  1. 1 1
      src/api/blockly/blockly.js
  2. 40 33
      src/components/blockly/MapGame.vue

+ 1 - 1
src/api/blockly/blockly.js

@@ -424,7 +424,7 @@ const availableBlocks = {
       "tooltip": "在当前位置产生灯光效果",
       "helpUrl": ""
     },
-    isGeneral: true
+    isGeneral: false
   }
 };
 

+ 40 - 33
src/components/blockly/MapGame.vue

@@ -590,7 +590,6 @@ function generateToolboxXml() {
       <block type="pickup_item"></block>
       <block type="use_item"></block>
       <block type="when_passed"></block>
-      <block type="light"></block>
   `;
 
   // 确保blocklySpecialBlocks是数组
@@ -1426,41 +1425,49 @@ window.light = async function(color = 'white') {
     return;
   }
 
-  // 设置灯光颜色和初始状态为开启
-  gameState.player.lightColor = color;
-  gameState.player.isLightOn = true;
-  
-  // 定义闪烁周期(毫秒)
-  const blinkInterval = CONFIG.DELAY.BLINK_INTERVAL;
+  let x = playerPosition.value.x;
+  let y = playerPosition.value.y;
+  let tileMap = walkablePointsMap.get(`${x},${y}`);
 
-  // 定义闪烁次数(每个完整闪烁包括一次亮和一次暗,共需两个周期)
-  const totalBlinks = CONFIG.DELAY.LIGHT_DURATION / blinkInterval;
-  
-  // 循环实现闪烁效果
-  for (let i = 1; i < totalBlinks; i++) {
-    // 检查是否需要停止执行,如果需要则立即退出
-    if (shouldStopExecution) {
-      // 确保灯光关闭
-      gameState.player.isLightOn = false;
-      return;
-    }
-    
-    // 等待指定的闪烁间隔
-    await new Promise(resolve => setTimeout(resolve, blinkInterval));
-    
-    // 再次检查是否需要停止执行
-    if (shouldStopExecution) {
-      // 确保灯光关闭
-      gameState.player.isLightOn = false;
-      return;
+  if (tileMap && tileMap.type === BLOCKLY_MAP_TYPE_DICT.TASK) {
+    // 设置灯光颜色和初始状态为开启
+    gameState.player.lightColor = color;
+    gameState.player.isLightOn = true;
+
+    // 定义闪烁周期(毫秒)
+    const blinkInterval = CONFIG.DELAY.BLINK_INTERVAL;
+
+    // 定义闪烁次数(每个完整闪烁包括一次亮和一次暗,共需两个周期)
+    const totalBlinks = CONFIG.DELAY.LIGHT_DURATION / blinkInterval;
+
+    // 循环实现闪烁效果
+    for (let i = 1; i < totalBlinks; i++) {
+      // 检查是否需要停止执行,如果需要则立即退出
+      if (shouldStopExecution) {
+        // 确保灯光关闭
+        gameState.player.isLightOn = false;
+        return;
+      }
+
+      // 等待指定的闪烁间隔
+      await new Promise(resolve => setTimeout(resolve, blinkInterval));
+
+      // 再次检查是否需要停止执行
+      if (shouldStopExecution) {
+        // 确保灯光关闭
+        gameState.player.isLightOn = false;
+        return;
+      }
+
+      // 切换灯光状态
+      gameState.player.isLightOn = !gameState.player.isLightOn;
     }
-    
-    // 切换灯光状态
-    gameState.player.isLightOn = !gameState.player.isLightOn;
-  }
 
-  // 确保最终关闭灯光效果
-  gameState.player.isLightOn = false;
+    // 确保最终关闭灯光效果
+    gameState.player.isLightOn = false;
+  }else{
+    showGameMessage(CONFIG.TIPS.NO_TASK, 'info');
+  }
 
   await new Promise(resolve => setTimeout(resolve, CONFIG.DELAY.ACTION_DELAY));
 };