diff --git a/assets/Scene/GameScene.fire b/assets/Scene/GameScene.fire index 91f2c64a..7bbccbf6 100644 --- a/assets/Scene/GameScene.fire +++ b/assets/Scene/GameScene.fire @@ -5165,6 +5165,9 @@ }, { "__uuid__": "076766a8-f2d3-4a3e-a24d-d83c7136172f" + }, + { + "__uuid__": "0f2a92d8-c6f6-4fc1-9803-8358549350dd" } ], "MapBlockPrefab": { diff --git a/assets/Script/LaserRules.ts b/assets/Script/LaserRules.ts new file mode 100644 index 00000000..c031b9cd --- /dev/null +++ b/assets/Script/LaserRules.ts @@ -0,0 +1,125 @@ +export type LaserPoint = { x: number; y: number }; + +export type LaserCollider = + | { type: 'rect'; minX: number; minY: number; maxX: number; maxY: number } + | { type: 'circle'; center: LaserPoint; radius: number } + | { type: 'polygon'; points: LaserPoint[] }; + +export type LaserHit = { + ratio: number; + distance: number; + point: LaserPoint; + colliderIndex: number; +}; + +const EPSILON = 1e-7; + +function cross(ax: number, ay: number, bx: number, by: number): number { + return ax * by - ay * bx; +} + +function pointOnEdge(point: LaserPoint, a: LaserPoint, b: LaserPoint): boolean { + const dx = b.x - a.x, dy = b.y - a.y; + const px = point.x - a.x, py = point.y - a.y; + const length = Math.sqrt(dx * dx + dy * dy); + if (length < EPSILON) return px * px + py * py <= EPSILON * EPSILON; + if (Math.abs(cross(dx, dy, px, py)) > EPSILON * length) return false; + const projection = (px * dx + py * dy) / length; + return projection >= -EPSILON && projection <= length + EPSILON; +} + +function pointInPolygon(point: LaserPoint, points: LaserPoint[]): boolean { + let inside = false; + for (let i = 0, j = points.length - 1; i < points.length; j = i++) { + const a = points[j], b = points[i]; + if (pointOnEdge(point, a, b)) return true; + if ((a.y > point.y) !== (b.y > point.y) + && point.x < (b.x - a.x) * (point.y - a.y) / (b.y - a.y) + a.x) inside = !inside; + } + return inside; +} + +function polygonHit(start: LaserPoint, end: LaserPoint, points: LaserPoint[]): number | null { + if (points.length < 3) return null; + if (pointInPolygon(start, points)) return 0; + const dx = end.x - start.x, dy = end.y - start.y; + const lengthSquared = dx * dx + dy * dy; + if (lengthSquared < EPSILON * EPSILON) return null; + let nearest = Infinity; + for (let i = 0, j = points.length - 1; i < points.length; j = i++) { + const a = points[j], b = points[i]; + const ex = b.x - a.x, ey = b.y - a.y; + const px = a.x - start.x, py = a.y - start.y; + const determinant = cross(dx, dy, ex, ey); + if (Math.abs(determinant) <= EPSILON) { + // A beam running along a polygon edge still touches the solid. + if (Math.abs(cross(px, py, dx, dy)) > EPSILON) continue; + const t1 = (px * dx + py * dy) / lengthSquared; + const t2 = ((b.x - start.x) * dx + (b.y - start.y) * dy) / lengthSquared; + const entry = Math.max(0, Math.min(t1, t2)); + if (entry <= Math.min(1, Math.max(t1, t2))) nearest = Math.min(nearest, entry); + } else { + const ratio = cross(px, py, ex, ey) / determinant; + const edgeRatio = cross(px, py, dx, dy) / determinant; + if (ratio >= -EPSILON && ratio <= 1 + EPSILON + && edgeRatio >= -EPSILON && edgeRatio <= 1 + EPSILON) { + nearest = Math.min(nearest, Math.max(0, Math.min(1, ratio))); + } + } + } + return nearest === Infinity ? null : nearest; +} + +function colliderHit(start: LaserPoint, end: LaserPoint, collider: LaserCollider): number | null { + const dx = end.x - start.x, dy = end.y - start.y; + if (collider.type === 'circle') { + const x = start.x - collider.center.x, y = start.y - collider.center.y; + const c = x * x + y * y - collider.radius * collider.radius; + if (c <= 0) return 0; + const a = dx * dx + dy * dy; + if (a < EPSILON * EPSILON) return null; + const b = x * dx + y * dy; + const discriminant = b * b - a * c; + if (discriminant < -EPSILON) return null; + const ratio = (-b - Math.sqrt(Math.max(0, discriminant))) / a; + return ratio >= -EPSILON && ratio <= 1 + EPSILON ? Math.max(0, Math.min(1, ratio)) : null; + } + if (collider.type === 'polygon') return polygonHit(start, end, collider.points); + + let entry = 0, exit = 1; + for (const axis of ['x', 'y']) { + const origin = axis === 'x' ? start.x : start.y; + const delta = axis === 'x' ? dx : dy; + const min = axis === 'x' ? collider.minX : collider.minY; + const max = axis === 'x' ? collider.maxX : collider.maxY; + if (Math.abs(delta) < EPSILON) { + if (origin < min - EPSILON || origin > max + EPSILON) return null; + continue; + } + const t1 = (min - origin) / delta, t2 = (max - origin) / delta; + entry = Math.max(entry, Math.min(t1, t2)); + exit = Math.min(exit, Math.max(t1, t2)); + if (entry > exit) return null; + } + return entry; +} + +/** World-space beam centerline only: visual beam thickness never affects blocking. */ +export function nearestLaserHit(start: LaserPoint, end: LaserPoint, colliders: LaserCollider[]): LaserHit | null { + let ratio = Infinity, colliderIndex = -1; + for (let i = 0; i < colliders.length; i++) { + const hit = colliderHit(start, end, colliders[i]); + if (hit !== null && hit < ratio) { + ratio = hit; + colliderIndex = i; + } + } + if (colliderIndex < 0) return null; + const dx = end.x - start.x, dy = end.y - start.y; + return { + ratio, + distance: Math.sqrt(dx * dx + dy * dy) * ratio, + point: { x: start.x + dx * ratio, y: start.y + dy * ratio }, + colliderIndex, + }; +} diff --git a/assets/Script/LaserRules.ts.meta b/assets/Script/LaserRules.ts.meta new file mode 100644 index 00000000..b5c64c22 --- /dev/null +++ b/assets/Script/LaserRules.ts.meta @@ -0,0 +1,10 @@ +{ + "ver": "1.1.0", + "uuid": "d970238b-6679-4f0d-8339-1de0c7b1f266", + "importer": "typescript", + "isPlugin": false, + "loadPluginInWeb": true, + "loadPluginInNative": true, + "loadPluginInEditor": false, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/Script/LaserSystem.ts b/assets/Script/LaserSystem.ts new file mode 100644 index 00000000..85840335 --- /dev/null +++ b/assets/Script/LaserSystem.ts @@ -0,0 +1,225 @@ +import type MapController from "./Map"; +import type Wall from "./Wall"; +import { LQCollide } from "./lq_collide_system/lq_collide"; +import { LQCollideSystem } from "./lq_collide_system/lq_collide_system"; +import { LQCollideShape } from "./lq_base/data/lq_const"; +import { LaserCollider, nearestLaserHit } from "./LaserRules"; +import LaserView from "./prop/LaserView"; + +export interface LaserConfig { + id: string; + /** Artwork index (1..10), independent of the exit's normal color. */ + color: number; + emitter: { num: number }; + receiver: { num: number }; +} + +interface LaserGroup { + config: LaserConfig; + emitter: Wall; + receiver: Wall; + gates: Wall[]; + source?: LaserView; + target?: LaserView; + beam?: LaserView; + gate?: LaserView; + connected?: boolean; +} + +const DIRECTIONS = { + // Retraction excludes the wall texture's transparent edge/shadow and the beam's 1px clearance. + right: { x: 1, y: 0, opposite: "left", headRetraction: 8 }, + left: { x: -1, y: 0, opposite: "right", headRetraction: 6 }, + up: { x: 0, y: 1, opposite: "down", headRetraction: 1 }, + down: { x: 0, y: -1, opposite: "up", headRetraction: 14 }, +}; + +/** Keeps laser reception independent of door/beam animation. */ +export default class LaserSystem { + private groups: LaserGroup[] = []; + private nodes: cc.Node[] = []; + private layer: cc.Node; + + constructor(private map: MapController, slots: Wall[], configs: LaserConfig[], prefab: cc.Prefab) { + this.groups = this.validate(slots, configs); + if (!prefab) throw new Error("Map.Block_Prop[26] 缺少激光预制体"); + try { + this.layer = new cc.Node("LaserLayer"); + this.layer.parent = map.node; + this.layer.zIndex = 10; + for (const group of this.groups) { + group.source = this.attach(prefab, group.emitter.node.parent.getChildByName("laser")); + group.source.initHead("emitter", group.config.color, group.emitter.direction, + this.headInset(group.emitter), DIRECTIONS[group.emitter.direction].headRetraction); + group.target = this.attach(prefab, group.receiver.node.parent.getChildByName("laser")); + group.target.initHead("receiver", group.config.color, group.receiver.direction, + this.headInset(group.receiver), DIRECTIONS[group.receiver.direction].headRetraction); + const first = group.gates.find(wall => wall.wall_Info.length > 0); + group.gate = this.attach(prefab, first.node.parent.getChildByName("laser")); + const gateFace = first.node.getBoundingBox(); + const socket = group.gate.node.parent; + // The base door's bottom 13px are shadow, not part of its solid colored face. + const gateCenterY = (gateFace.yMin + gateFace.yMax) / 2 + 6.5 - socket.y; + // Align the native face/shadow boundary; color 8's boundary is one pixel earlier. + const colorOffset = first.wall_Info.color === 8 ? 1 : 0; + const shadowEdge = first.direction === "left" || first.direction === "right" + ? gateFace.xMin + 43 - colorOffset - socket.x + : gateFace.yMax - 38 + colorOffset - socket.y; + group.gate.initGate(first.wall_Info.length, first.direction, group.config.color, gateCenterY, shadowEdge); + group.beam = this.attach(prefab, this.layer); + // Start the body at the colored tip, but keep its flare clear of the wall shadow. + group.beam.initBeam(group.config.color, group.emitter.direction, DIRECTIONS[group.emitter.direction].headRetraction); + } + this.update(true); + } catch (error) { + this.dispose(); + throw error; + } + } + + private validate(slots: Wall[], configs: LaserConfig[]): LaserGroup[] { + const ids = new Set(); + const heads = new Set(); + const straight = (wall: Wall) => wall && DIRECTIONS[wall.direction] + && this.map.mapBlocksWall[wall.posX][wall.posY].opacity === 250 + && wall.node.parent.getChildByName("laser"); + const groups = configs.map(config => { + const fail = (message: string) => { throw new Error("激光组 " + config.id + ": " + message); }; + if (typeof config.id !== "string" || !config.id || ids.has(config.id)) fail("编号缺失或重复"); + ids.add(config.id); + if (!Number.isInteger(config.color) || config.color < 1 || config.color > 10) fail("激光色必须为 1~10"); + const emitter = slots[config.emitter && config.emitter.num]; + const receiver = slots[config.receiver && config.receiver.num]; + if (!straight(emitter) || !straight(receiver)) fail("发射和接收必须放在完整直墙段"); + for (const endpoint of [config.emitter, config.receiver]) { + if (!Number.isInteger(endpoint.num) || heads.has(endpoint.num) || slots[endpoint.num].wall_Info) { + fail("发射或接收墙位已被占用"); + } + heads.add(endpoint.num); + } + const direction = DIRECTIONS[emitter.direction]; + const dx = receiver.posX - emitter.posX, dy = receiver.posY - emitter.posY; + if (receiver.direction !== direction.opposite || dx * direction.y !== dy * direction.x + || dx * direction.x + dy * direction.y <= 0) fail("发射和接收必须同一直线且相向"); + const gates = slots.filter(wall => wall && wall.wall_Info && wall.wall_Info.laserId === config.id); + const starts = gates.filter(wall => wall.wall_Info.length > 0); + if (starts.length !== 1 || starts[0].wall_Info.length !== gates.length || gates.length > 3) { + fail("必须对应一扇完整的 1~3 格控制门"); + } + const first = starts[0]; + const vertical = first.direction === "left" || first.direction === "right"; + const sorted = gates.slice().sort((a, b) => vertical ? a.posY - b.posY : a.posX - b.posX); + sorted.forEach((wall, index) => { + const info = wall.wall_Info; + if (!straight(wall) || wall.direction !== first.direction || info.color !== first.wall_Info.color + || wall.posX !== first.posX + (vertical ? 0 : index) + || wall.posY !== first.posY + (vertical ? index : 0) + || info.special !== 0 || info.toggle != null || info.longAndShort || info.stickLength + || info.colorArray || info.jump != null || info.lockTime != null) { + fail("控制门必须是连续同色直门,不能叠加其他门机制"); + } + wall.open = false; + }); + return { config, emitter, receiver, gates }; + }); + if (slots.some(wall => wall && wall.wall_Info && wall.wall_Info.laserId != null + && !ids.has(wall.wall_Info.laserId))) throw new Error("激光控制门缺少对应组配置"); + return groups; + } + + private attach(prefab: cc.Prefab, parent: cc.Node): LaserView { + parent.active = true; + const node = cc.instantiate(prefab); + this.nodes.push(node); + node.parent = parent; + node.setPosition(0, 0); + const view = node.getComponent(LaserView); + if (!view) throw new Error("激光预制体缺少 LaserView 组件"); + return view; + } + + private headInset(wall: Wall): number { + const face = wall.node.getBoundingBox(); + const socket = wall.node.parent.getChildByName("laser"); + switch (wall.direction) { + case "right": return Math.max(0, face.xMax - socket.x) + 1; + case "left": return Math.max(0, socket.x - face.xMin) + 1; + case "up": return Math.max(0, face.yMax - socket.y) + 1; + case "down": return Math.max(0, socket.y - face.yMin) + 1; + } + return 0; + } + + update(immediate = false): void { + const colliders = this.collectColliders(); + for (const group of this.groups) { + const start = group.source.getBeamOrigin(), end = group.target.getBeamOrigin(); + const obstacles = colliders.filter(item => item.wall !== group.emitter.node.parent + && item.wall !== group.receiver.node.parent).map(item => item.shape); + const hit = nearestLaserHit(start, end, obstacles); + const connected = !hit; + // All segments change state before starting the visual tween. + group.gates.forEach(wall => wall.open = connected); + if (group.connected !== connected || immediate) { + group.connected = connected; + group.gate.setGateOpen(connected, immediate); + } + const localStart = this.layer.convertToNodeSpaceAR(group.source.getVisibleBeamOrigin()); + const localEnd = this.layer.convertToNodeSpaceAR(hit ? cc.v2(hit.point.x, hit.point.y) : group.target.getVisibleBeamOrigin()); + const direction = DIRECTIONS[group.emitter.direction]; + const visibleLength = (localEnd.x - localStart.x) * direction.x + (localEnd.y - localStart.y) * direction.y; + group.beam.node.setPosition(localStart); + group.beam.setBeam(Math.max(0, visibleLength), connected); + } + } + + private collectColliders(): { shape: LaserCollider; wall: cc.Node }[] { + const result: { shape: LaserCollider; wall: cc.Node }[] = []; + for (const collider of LQCollideSystem.collide_arr) { + const node = collider.node; + if (!cc.isValid(node, true) || !node.activeInHierarchy || !collider.is_enable + || !collider.enabled || collider.data_string === "-1" || collider.data_string === "-2") continue; + if (node.name === "rise" && this.map.riseFallBlock.indexOf(node.parent) >= 0) continue; + let ancestor = node, wall: cc.Node = null, transparent = false; + while (ancestor && ancestor !== this.map.node) { + const block = ancestor.getComponent("Block"); + if (block && (block.type === 22 || block.over)) transparent = true; + if (ancestor.getChildByName("wall") && ancestor.getChildByName("wall").getComponent("Wall")) wall = ancestor; + ancestor = ancestor.parent; + } + if (ancestor !== this.map.node || transparent) continue; + const shape = this.colliderShape(collider); + if (shape) result.push({ shape, wall }); + } + return result; + } + + private colliderShape(collider: LQCollide): LaserCollider { + // LQ scales dimensions/points at initialization. Transform only the center; + // applying the node's world scale again would enlarge the collision shape. + const center = collider.node.convertToWorldSpaceAR(collider.offset); + if (collider.collide_shape === LQCollideShape.Rect) { + return { type: "rect", minX: center.x - collider.size.width / 2, + maxX: center.x + collider.size.width / 2, minY: center.y - collider.size.height / 2, + maxY: center.y + collider.size.height / 2 }; + } + if (collider.collide_shape === LQCollideShape.Circle) { + return { type: "circle", center, radius: collider.radius }; + } + if (collider.collide_shape === LQCollideShape.Polygon) { + const angle = collider.node.angle * Math.PI / 180, cos = Math.cos(angle), sin = Math.sin(angle); + return { type: "polygon", points: collider.polygon_points.map(point => ({ + x: center.x + point.x * cos - point.y * sin, + y: center.y + point.x * sin + point.y * cos, + })) }; + } + return null; + } + + dispose(): void { + this.nodes.forEach(node => { if (cc.isValid(node)) node.destroy(); }); + this.nodes.length = 0; + if (this.layer && cc.isValid(this.layer)) this.layer.destroy(); + this.groups.length = 0; + } +} diff --git a/assets/Script/LaserSystem.ts.meta b/assets/Script/LaserSystem.ts.meta new file mode 100644 index 00000000..e747b646 --- /dev/null +++ b/assets/Script/LaserSystem.ts.meta @@ -0,0 +1,10 @@ +{ + "ver": "1.1.0", + "uuid": "fcf81a53-2639-4ab4-b00e-caf68a587f45", + "importer": "typescript", + "isPlugin": false, + "loadPluginInWeb": true, + "loadPluginInNative": true, + "loadPluginInEditor": false, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/Script/Map.ts b/assets/Script/Map.ts index 0ea9cc0d..735db603 100644 --- a/assets/Script/Map.ts +++ b/assets/Script/Map.ts @@ -1,4 +1,6 @@ import RainbowStreak from "./RainbowStreak"; +import LaserSystem from "./LaserSystem"; +import type Wall from "./Wall"; import type Block from "./Block"; import RainbowOldVisual from "./RainbowOldVisual"; import RainbowOldOpening from "./RainbowOldOpening"; @@ -50,6 +52,9 @@ export default class MapConroler extends cc.Component { @property({ type: [cc.Prefab], tooltip: "方块道具数组" }) Block_Prop: Array = []; + private laserSystem: LaserSystem = null; + private laserWallSlots: Wall[] = []; + @property(cc.Prefab) MapBlockPrefab: cc.Prefab = null; @@ -628,6 +633,8 @@ export default class MapConroler extends cc.Component { } onDestroy() { + if (this.laserSystem) this.laserSystem.dispose(); + this.laserSystem = null; if (this.oldRainbowOpening) this.oldRainbowOpening.dispose(); this.oldRainbowOpening = null; this.oldRainbowEntryReady = null; @@ -1319,6 +1326,9 @@ export default class MapConroler extends cc.Component { this.ismagic = false; this.guideHammerPending = false; this.wallNum = 0; + if (this.laserSystem) this.laserSystem.dispose(); + this.laserSystem = null; + this.laserWallSlots = []; this.setMapInfo(); this.blocks = []; this.blocks2 = []; @@ -1412,6 +1422,17 @@ export default class MapConroler extends cc.Component { if (this.oldRainbowPreparing) return; this.oldRainbowEntryReady = null; if (!this.spawnGatesInitialized) this.initSpawnGates(); + if (!this.laserSystem) { + const lasers = cc.fx.GameConfig.LEVEL_INFO[0].lasers || []; + if (lasers.length || this.laserWallSlots.some(wall => wall.wall_Info && wall.wall_Info.laserId != null)) { + try { + this.laserSystem = new LaserSystem(this, this.laserWallSlots, lasers, this.Block_Prop[26]); + } catch (error) { + cc.fx.GameConfig.showBlockLoadError(error, schedulePopupWarmup, "激光配置或资源加载失败\n点击重试"); + return; + } + } + } popupWarmupScheduled = true; // console.log(`[进关耗时][地图资源确认及生成] 完成,独立耗时=${Date.now() - this.mapPreparationStartedAt}ms,从开始累计=${Date.now() - this.entryStartedAt}ms`); this.resumeEntryBackgroundDownloads(); @@ -2582,6 +2603,7 @@ export default class MapConroler extends cc.Component { // 4. 开关门和冻结门的特殊属性 // ============================================ setDoorInfo(wall) { + this.laserWallSlots[this.wallNum] = wall.getComponent("Wall"); let doorInfo = cc.fx.GameConfig.WALL_INFO[0]; if (doorInfo) { for (let j = 0; j < doorInfo.length; j++) { @@ -3996,10 +4018,14 @@ export default class MapConroler extends cc.Component { // 3. 门的长度设置允许通过 // ============================================ passWall(jg, wallArray, node) { + // Touch release may run before lateUpdate; reception must be current here too. + if (this.laserSystem) this.laserSystem.update(); const block = node.getComponent("Block"); const anyColor = block.oldRainbow || block.color === 100; let colorArray = []; for (let i = 0; i < wallArray.length; i++) { + const laserWall = wallArray[i].getComponent("Wall"); + if (laserWall.wall_Info && laserWall.wall_Info.laserId != null && laserWall.open !== true) return false; if (anyColor) { const wall = wallArray[i].getComponent("Wall"); // 边界数组也包含普通墙;彩虹只能忽略真实门的颜色,不能穿墙或伸缩障碍杆。 @@ -5921,6 +5947,7 @@ export default class MapConroler extends cc.Component { downDoor(color, type, anyColor = false) { for (let i = 0; i < this.wallArray.length; i++) { const wall = this.wallArray[i].getChildByName("wall").getComponent("Wall"); + if (wall.wall_Info && wall.wall_Info.laserId != null && wall.open !== true) continue; if (anyColor || color == 100) { // 彩虹提示只忽略颜色,保持与实际通行相同的门状态限制。 if (!wall.wall_Info || wall.wall_Info.stickLength @@ -8432,6 +8459,10 @@ export default class MapConroler extends cc.Component { // 主要功能: // 1. 检测连击音效超时(3秒无碰撞消除则重置连击计数) // ============================================ + lateUpdate() { + if (this.laserSystem) this.laserSystem.update(); + } + update(dt) { if (!this.blockAssetsReady) return; this.updateOldRainbowOpening(dt); diff --git a/assets/Script/module/Tool/GameTool.ts b/assets/Script/module/Tool/GameTool.ts index 9209505a..ae3e811b 100644 --- a/assets/Script/module/Tool/GameTool.ts +++ b/assets/Script/module/Tool/GameTool.ts @@ -19,7 +19,7 @@ import DailyTaskSync from "../Task/DailyTaskSync"; //@ts-ignore //最大工具类 各种公共方法,以及处理上传,获取后端接口数据 var GameTool = { - MAX_NORMAL_LEVEL: 2020, + MAX_NORMAL_LEVEL: 9001, starterPackReactivationUid: "", starterPackQueuedReason: "", MEMORY_WARNING_EVENT: "game-memory-warning", @@ -2175,7 +2175,7 @@ var GameTool = { if (!scope) return; this.pendingActivityCoins[scope] = (this.pendingActivityCoins[scope] || 0) + amount; this.flushActivityCoins(); - if (this.pendingActivityCoins[scope]) DailyTaskSync.read(() => {}); + if (this.pendingActivityCoins[scope]) DailyTaskSync.read(() => { }); } catch (error) { cc.warn("活动金币任务统计失败", error); } }, flushActivityCoins() { diff --git a/assets/Script/prop/LaserView.ts b/assets/Script/prop/LaserView.ts new file mode 100644 index 00000000..a986041d --- /dev/null +++ b/assets/Script/prop/LaserView.ts @@ -0,0 +1,186 @@ +const { ccclass, property } = cc._decorator; + +export type LaserDirection = "right" | "up" | "left" | "down"; + +/** Laser artwork only. Reception and gate collision state belong to the map. */ +@ccclass +export default class LaserView extends cc.Component { + @property(cc.SpriteAtlas) + atlas: cc.SpriteAtlas = null; + + private colorIndex = 1; + private verticalGate = false; + private gateHalfLengths: number[] = []; + private gateOpen: boolean = null; + private slicedFrames: cc.SpriteFrame[] = []; + private beamFrames: { [name: string]: cc.SpriteFrame } = {}; + private beamStartOffset = 0; + + initBeam(color: number, direction: LaserDirection, startOffset = 0): void { + this.show("beam"); + this.colorIndex = color; + this.beamStartOffset = startOffset; + this.node.getChildByName("beam").angle = this.angle(direction); + this.setFrame("beam/start", "laser_start" + color); + this.setFrame("beam/end", "laser_over" + color); + this.setBeam(0, false); + } + + setBeam(length: number, connected: boolean): void { + length = Math.max(0, length); + const beam = this.node.getChildByName("beam"); + const body = this.setFrame("beam/body", (connected ? "laser_win" : "laser_") + this.colorIndex); + const start = beam.getChildByName("start"); + const end = beam.getChildByName("end"); + start.x = Math.min(this.beamStartOffset, length); + start.width = Math.min(56, length - start.x); + end.width = Math.min(64, length); + // The tail already contains the thin beam; join it instead of drawing both on top. + const bodyLength = connected ? length : Math.max(0, length - end.width); + body.node.setContentSize(bodyLength, connected ? 94 : 42); + body.node.x = bodyLength / 2; + end.x = length; + end.active = !connected && length > 0; + body.node.active = bodyLength > 0; + start.active = length > start.x; + } + + /** Place the hardware inside the wall's solid face, with its colored tip on the beam. */ + initHead(role: "emitter" | "receiver", color: number, direction: LaserDirection, inset = 0, retraction = 0): void { + this.show("head"); + const head = this.setFrame("head", (role === "emitter" ? "laser_send" : "laser_accept") + color); + head.node.setAnchorPoint(role === "emitter" ? 1 : 0, 0.5); + head.node.angle = this.angle(direction) + (role === "receiver" ? 180 : 0); + const x = direction === "right" ? 1 : direction === "left" ? -1 : 0; + const y = direction === "up" ? 1 : direction === "down" ? -1 : 0; + head.node.setPosition(x * (inset - retraction), y * (inset - retraction)); + } + + getBeamOrigin(): cc.Vec2 { + return this.node.convertToWorldSpaceAR(cc.v2(0, 0)); + } + + getVisibleBeamOrigin(): cc.Vec2 { + return this.node.getChildByName("head").convertToWorldSpaceAR(cc.v2(0, 0)); + } + + /** Attach at the first wall segment's laser socket. The door grows right/up. */ + initGate(length: number, direction: LaserDirection, laserColor: number, centerY?: number, shadowEdge?: number): void { + this.show("gate"); + this.verticalGate = direction === "left" || direction === "right"; + const gate = this.node.getChildByName("gate"); + gate.setPosition(this.verticalGate ? 0 : (length - 1) * 60, + centerY == null ? (this.verticalGate ? (length - 1) * 60 : 0) : centerY); + // The 2/3-cell vertical assets name the halves opposite to the 1-cell pair. + const names = this.verticalGate ? (length === 1 ? ["up", "down"] : ["down", "up"]) : ["left", "right"]; + this.clearSlicedFrames(); + names.forEach((name, index) => { + const sprite = this.setFrame("gate/" + (index === 0 ? "first" : "second"), "laser_" + name + "_" + length); + const originalSize = sprite.spriteFrame.getOriginalSize(); + const halfLength = this.verticalGate ? originalSize.height : originalSize.width; + this.gateHalfLengths[index] = halfLength; + const frame = sprite.spriteFrame.clone(); + // Both ends retain their original pixels, including the silver strip. + frame.insetLeft = frame.insetRight = this.verticalGate ? 2 : 8; + frame.insetTop = frame.insetBottom = this.verticalGate ? 8 : 2; + this.slicedFrames.push(frame); + sprite.spriteFrame = frame; + sprite.type = cc.Sprite.Type.SLICED; + // Cover the three transparent pixels at the inner edges without resizing the art. + const outerEdge = halfLength - 1.5; + if (this.verticalGate) { + sprite.node.setAnchorPoint(0.5, index === 0 ? 1 : 0); + sprite.node.setPosition(0, index === 0 ? outerEdge : -outerEdge); + } else { + sprite.node.setAnchorPoint(index === 0 ? 0 : 1, 0.5); + sprite.node.setPosition(index === 0 ? -outerEdge : outerEdge, 0); + } + }); + // Center the unequal vertical halves, then lift the whole gate slightly to expose more base below. + if (this.verticalGate) gate.y += 3 - (this.gateHalfLengths[0] - this.gateHalfLengths[1]) / 2; + if (shadowEdge != null) { + const first = gate.getChildByName("first"); + // Native artwork: the face/shadow boundary is at column 39 or row 42. + if (this.verticalGate) gate.x = shadowEdge - (39 - first.width / 2); + else gate.y = shadowEdge - (first.height / 2 - 42); + } + ["firstDot", "secondDot"].forEach(name => { + const dot = this.setFrame("gate/" + name, "laser_yuan" + laserColor); + dot.node.setContentSize(14, 14); + }); + this.gateOpen = null; + this.setGateOpen(false, true); + } + + setGateOpen(open: boolean, immediate = false): void { + if (this.gateOpen === open && !immediate) return; + this.gateOpen = open; + const gate = this.node.getChildByName("gate"); + ["first", "second"].forEach((name, index) => { + const halfLength = this.gateHalfLengths[index]; + const size = open ? 16 : halfLength; + const half = gate.getChildByName(name); + const dot = gate.getChildByName(name + "Dot"); + const offset = (open ? halfLength - size - 1.5 : 0) * (index === 0 ? 1 : -1); + const dotPosition = this.verticalGate ? { x: 0, y: offset } : { x: -offset, y: 0 }; + cc.Tween.stopAllByTarget(half); + cc.Tween.stopAllByTarget(dot); + if (immediate) { + if (this.verticalGate) half.height = size; + else half.width = size; + dot.setPosition(dotPosition.x, dotPosition.y); + } else { + cc.tween(half).to(0.2, this.verticalGate ? { height: size } : { width: size }).start(); + cc.tween(dot).to(0.2, dotPosition).start(); + } + }); + } + + private show(name: string): void { + this.node.children.forEach(child => child.active = child.name === name); + } + + private setFrame(path: string, name: string): cc.Sprite { + const node = path.split("/").reduce((parent, part) => parent.getChildByName(part), this.node); + const sprite = node.getComponent(cc.Sprite); + let frame = this.atlas.getSpriteFrame(name + ".png") || this.atlas.getSpriteFrame(name); + if (!frame) throw new Error("Missing laser artwork: " + name); + if (path === "beam/end" || (path === "beam/body" && name === "laser_" + this.colorIndex)) { + if (!this.beamFrames[name]) { + const joinedFrame = frame.clone(); + const rect = joinedFrame.getRect(); + // Sample inside the adjoining edges, avoiding the atlas's transparent padding. + if (path === "beam/end") { + if (joinedFrame.isRotated()) rect.y += 0.5; + else rect.x += 0.5; + } + rect.width -= 0.5; + joinedFrame.setRect(rect); + this.beamFrames[name] = joinedFrame; + } + frame = this.beamFrames[name]; + } + if (sprite.spriteFrame !== frame) { + sprite.spriteFrame = frame; + sprite.sizeMode = cc.Sprite.SizeMode.CUSTOM; + node.setContentSize(frame.getOriginalSize()); + } + return sprite; + } + + private angle(direction: LaserDirection): number { + return { right: 0, up: 90, left: 180, down: -90 }[direction]; + } + + private clearSlicedFrames(): void { + this.slicedFrames.forEach(frame => frame.destroy()); + this.slicedFrames.length = 0; + } + + onDestroy(): void { + const gate = this.node.getChildByName("gate"); + if (gate) gate.children.forEach(child => cc.Tween.stopAllByTarget(child)); + this.clearSlicedFrames(); + Object.keys(this.beamFrames).forEach(name => this.beamFrames[name].destroy()); + } +} diff --git a/assets/Script/prop/LaserView.ts.meta b/assets/Script/prop/LaserView.ts.meta new file mode 100644 index 00000000..bc9a2ef2 --- /dev/null +++ b/assets/Script/prop/LaserView.ts.meta @@ -0,0 +1,10 @@ +{ + "ver": "1.1.0", + "uuid": "d7662c1b-d635-43d4-80f9-2e1408efcfca", + "importer": "typescript", + "isPlugin": false, + "loadPluginInWeb": true, + "loadPluginInNative": true, + "loadPluginInEditor": false, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/UI/prop/laser.meta b/assets/UI/prop/laser.meta new file mode 100644 index 00000000..e7095208 --- /dev/null +++ b/assets/UI/prop/laser.meta @@ -0,0 +1,13 @@ +{ + "ver": "1.1.3", + "uuid": "8b004c21-225f-459d-88f2-6ce358b1774d", + "importer": "folder", + "isBundle": false, + "bundleName": "", + "priority": 1, + "compressionType": {}, + "optimizeHotUpdate": {}, + "inlineSpriteFrames": {}, + "isRemoteBundle": {}, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/UI/prop/laser/laser.plist b/assets/UI/prop/laser/laser.plist new file mode 100644 index 00000000..af5e7575 --- /dev/null +++ b/assets/UI/prop/laser/laser.plist @@ -0,0 +1,1114 @@ + + + + + frames + + laser_1.png + + frame + {{300,581},{60,42}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{60,42}} + sourceSize + {60,42} + + laser_10.png + + frame + {{204,603},{60,42}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{60,42}} + sourceSize + {60,42} + + laser_2.png + + frame + {{142,603},{60,42}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{60,42}} + sourceSize + {60,42} + + laser_3.png + + frame + {{212,559},{60,42}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{60,42}} + sourceSize + {60,42} + + laser_4.png + + frame + {{150,559},{60,42}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{60,42}} + sourceSize + {60,42} + + laser_5.png + + frame + {{495,534},{60,42}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{60,42}} + sourceSize + {60,42} + + laser_6.png + + frame + {{472,490},{60,42}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{60,42}} + sourceSize + {60,42} + + laser_7.png + + frame + {{451,534},{60,42}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{60,42}} + sourceSize + {60,42} + + laser_8.png + + frame + {{410,490},{60,42}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{60,42}} + sourceSize + {60,42} + + laser_9.png + + frame + {{248,515},{60,42}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{60,42}} + sourceSize + {60,42} + + laser_accept1.png + + frame + {{539,520},{30,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{30,24}} + sourceSize + {30,24} + + laser_accept10.png + + frame + {{534,488},{30,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{30,24}} + sourceSize + {30,24} + + laser_accept2.png + + frame + {{542,454},{30,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{30,24}} + sourceSize + {30,24} + + laser_accept3.png + + frame + {{542,422},{30,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{30,24}} + sourceSize + {30,24} + + laser_accept4.png + + frame + {{542,390},{30,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{30,24}} + sourceSize + {30,24} + + laser_accept5.png + + frame + {{542,358},{30,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{30,24}} + sourceSize + {30,24} + + laser_accept6.png + + frame + {{542,326},{30,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{30,24}} + sourceSize + {30,24} + + laser_accept7.png + + frame + {{274,600},{30,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{30,24}} + sourceSize + {30,24} + + laser_accept8.png + + frame + {{532,294},{30,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{30,24}} + sourceSize + {30,24} + + laser_accept9.png + + frame + {{532,262},{30,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{30,24}} + sourceSize + {30,24} + + laser_down_1.png + + frame + {{358,462},{50,51}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{50,51}} + sourceSize + {50,51} + + laser_down_2.png + + frame + {{358,362},{50,98}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{50,98}} + sourceSize + {50,98} + + laser_down_3.png + + frame + {{161,2},{50,161}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{50,161}} + sourceSize + {50,161} + + laser_heng.png + + frame + {{2,124},{138,69}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{138,69}} + sourceSize + {138,69} + + laser_left_1.png + + frame + {{101,537},{47,59}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{47,59}} + sourceSize + {47,59} + + laser_left_2.png + + frame + {{480,68},{97,59}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{97,59}} + sourceSize + {97,59} + + laser_left_3.png + + frame + {{2,63},{157,59}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{157,59}} + sourceSize + {157,59} + + laser_over1.png + + frame + {{476,408},{64,78}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{64,78}} + sourceSize + {64,78} + + laser_over10.png + + frame + {{476,328},{64,78}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{64,78}} + sourceSize + {64,78} + + laser_over2.png + + frame + {{466,248},{64,78}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{64,78}} + sourceSize + {64,78} + + laser_over3.png + + frame + {{466,168},{64,78}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{64,78}} + sourceSize + {64,78} + + laser_over4.png + + frame + {{410,410},{64,78}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{64,78}} + sourceSize + {64,78} + + laser_over5.png + + frame + {{410,330},{64,78}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{64,78}} + sourceSize + {64,78} + + laser_over6.png + + frame + {{400,250},{64,78}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{64,78}} + sourceSize + {64,78} + + laser_over7.png + + frame + {{400,170},{64,78}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{64,78}} + sourceSize + {64,78} + + laser_over8.png + + frame + {{310,515},{64,78}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{64,78}} + sourceSize + {64,78} + + laser_over9.png + + frame + {{480,2},{64,78}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{64,78}} + sourceSize + {64,78} + + laser_right_1.png + + frame + {{390,534},{47,59}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{47,59}} + sourceSize + {47,59} + + laser_right_2.png + + frame + {{2,579},{97,59}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{97,59}} + sourceSize + {97,59} + + laser_right_3.png + + frame + {{2,2},{157,59}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{157,59}} + sourceSize + {157,59} + + laser_send1.png + + frame + {{532,221},{39,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{39,24}} + sourceSize + {39,24} + + laser_send10.png + + frame + {{532,180},{39,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{39,24}} + sourceSize + {39,24} + + laser_send2.png + + frame + {{414,609},{39,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{39,24}} + sourceSize + {39,24} + + laser_send3.png + + frame + {{388,609},{39,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{39,24}} + sourceSize + {39,24} + + laser_send4.png + + frame + {{388,583},{39,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{39,24}} + sourceSize + {39,24} + + laser_send5.png + + frame + {{362,581},{39,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{39,24}} + sourceSize + {39,24} + + laser_send6.png + + frame + {{274,559},{39,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{39,24}} + sourceSize + {39,24} + + laser_send7.png + + frame + {{101,624},{39,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{39,24}} + sourceSize + {39,24} + + laser_send8.png + + frame + {{101,598},{39,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{39,24}} + sourceSize + {39,24} + + laser_send9.png + + frame + {{275,117},{39,24}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{39,24}} + sourceSize + {39,24} + + laser_shu.png + + frame + {{161,54},{61,145}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{61,145}} + sourceSize + {61,145} + + laser_start1.png + + frame + {{248,289},{56,112}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{56,112}} + sourceSize + {56,112} + + laser_start10.png + + frame + {{248,175},{56,112}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{56,112}} + sourceSize + {56,112} + + laser_start2.png + + frame + {{161,117},{56,112}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{56,112}} + sourceSize + {56,112} + + laser_start3.png + + frame + {{308,112},{56,112}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{56,112}} + sourceSize + {56,112} + + laser_start4.png + + frame + {{422,54},{56,112}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{56,112}} + sourceSize + {56,112} + + laser_start5.png + + frame + {{96,423},{56,112}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{56,112}} + sourceSize + {56,112} + + laser_start6.png + + frame + {{248,403},{56,110}} + offset + {0,0} + rotated + + sourceColorRect + {{0,1},{56,110}} + sourceSize + {56,112} + + laser_start7.png + + frame + {{96,309},{56,112}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{56,112}} + sourceSize + {56,112} + + laser_start8.png + + frame + {{96,195},{56,112}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{56,112}} + sourceSize + {56,112} + + laser_start9.png + + frame + {{308,54},{56,112}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{56,112}} + sourceSize + {56,112} + + laser_up_1.png + + frame + {{306,465},{50,48}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{50,48}} + sourceSize + {50,48} + + laser_up_2.png + + frame + {{306,362},{50,101}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{50,101}} + sourceSize + {50,101} + + laser_up_3.png + + frame + {{324,2},{50,154}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{50,154}} + sourceSize + {50,154} + + laser_win1.png + + frame + {{306,266},{92,94}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{92,94}} + sourceSize + {92,94} + + laser_win10.png + + frame + {{306,170},{92,94}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{92,94}} + sourceSize + {92,94} + + laser_win2.png + + frame + {{154,463},{92,94}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{92,94}} + sourceSize + {92,94} + + laser_win3.png + + frame + {{154,367},{92,94}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{92,94}} + sourceSize + {92,94} + + laser_win4.png + + frame + {{154,271},{92,94}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{92,94}} + sourceSize + {92,94} + + laser_win5.png + + frame + {{154,175},{92,94}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{92,94}} + sourceSize + {92,94} + + laser_win6.png + + frame + {{2,483},{92,94}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{92,94}} + sourceSize + {92,94} + + laser_win7.png + + frame + {{2,387},{92,94}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{92,94}} + sourceSize + {92,94} + + laser_win8.png + + frame + {{2,291},{92,94}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{92,94}} + sourceSize + {92,94} + + laser_win9.png + + frame + {{2,195},{92,94}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{92,94}} + sourceSize + {92,94} + + laser_yuan1.png + + frame + {{524,608},{26,26}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{26,26}} + sourceSize + {26,26} + + laser_yuan10.png + + frame + {{496,596},{26,26}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{26,26}} + sourceSize + {26,26} + + laser_yuan2.png + + frame + {{468,596},{26,26}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{26,26}} + sourceSize + {26,26} + + laser_yuan3.png + + frame + {{440,596},{26,26}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{26,26}} + sourceSize + {26,26} + + laser_yuan4.png + + frame + {{539,580},{26,26}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{26,26}} + sourceSize + {26,26} + + laser_yuan5.png + + frame + {{539,552},{26,26}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{26,26}} + sourceSize + {26,26} + + laser_yuan6.png + + frame + {{541,152},{26,26}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{26,26}} + sourceSize + {26,26} + + laser_yuan7.png + + frame + {{541,124},{26,26}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{26,26}} + sourceSize + {26,26} + + laser_yuan8.png + + frame + {{541,96},{26,26}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{26,26}} + sourceSize + {26,26} + + laser_yuan9.png + + frame + {{541,68},{26,26}} + offset + {0,0} + rotated + + sourceColorRect + {{0,0},{26,26}} + sourceSize + {26,26} + + + metadata + + format + 2 + realTextureFileName + laser.png + size + {569,650} + smartupdate + $TexturePacker:SmartUpdate:0645979bb6e1f06e46c46220fdeccbbe$ + textureFileName + laser.png + + + diff --git a/assets/UI/prop/laser/laser.plist.meta b/assets/UI/prop/laser/laser.plist.meta new file mode 100644 index 00000000..227afb2e --- /dev/null +++ b/assets/UI/prop/laser/laser.plist.meta @@ -0,0 +1,1945 @@ +{ + "ver": "1.2.6", + "uuid": "4edccf38-53b4-4a32-a942-c725bf848023", + "importer": "asset", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "size": { + "width": 569, + "height": 650 + }, + "type": "Texture Packer", + "subMetas": { + "laser_1.png": { + "ver": "1.0.6", + "uuid": "94a4823c-ac6a-4bed-8bea-d9119c385559", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 300, + "trimY": 581, + "width": 60, + "height": 42, + "rawWidth": 60, + "rawHeight": 42, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_10.png": { + "ver": "1.0.6", + "uuid": "d1385da2-184d-4f2a-8377-82d49e4c0856", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 204, + "trimY": 603, + "width": 60, + "height": 42, + "rawWidth": 60, + "rawHeight": 42, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_2.png": { + "ver": "1.0.6", + "uuid": "eec87c04-b5dd-44b5-b574-70503015ab95", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 142, + "trimY": 603, + "width": 60, + "height": 42, + "rawWidth": 60, + "rawHeight": 42, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_3.png": { + "ver": "1.0.6", + "uuid": "9d0a3ce0-2654-402e-a3d6-a7b117d67348", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 212, + "trimY": 559, + "width": 60, + "height": 42, + "rawWidth": 60, + "rawHeight": 42, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_4.png": { + "ver": "1.0.6", + "uuid": "e804fa37-cb20-4a98-8bf9-8c074fa0fd15", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 150, + "trimY": 559, + "width": 60, + "height": 42, + "rawWidth": 60, + "rawHeight": 42, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_5.png": { + "ver": "1.0.6", + "uuid": "5d22029e-1637-469d-a924-770804e4e342", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 495, + "trimY": 534, + "width": 60, + "height": 42, + "rawWidth": 60, + "rawHeight": 42, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_6.png": { + "ver": "1.0.6", + "uuid": "e18af31a-3c7a-436c-a298-3cd4362f6ebe", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 472, + "trimY": 490, + "width": 60, + "height": 42, + "rawWidth": 60, + "rawHeight": 42, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_7.png": { + "ver": "1.0.6", + "uuid": "457235f4-b602-4d59-a255-c0469540b187", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 451, + "trimY": 534, + "width": 60, + "height": 42, + "rawWidth": 60, + "rawHeight": 42, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_8.png": { + "ver": "1.0.6", + "uuid": "b3fd3435-09b5-4972-ac41-b37dee07ed45", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 410, + "trimY": 490, + "width": 60, + "height": 42, + "rawWidth": 60, + "rawHeight": 42, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_9.png": { + "ver": "1.0.6", + "uuid": "8fb75e4c-39c7-4466-a0ae-6cbf99099901", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 248, + "trimY": 515, + "width": 60, + "height": 42, + "rawWidth": 60, + "rawHeight": 42, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_accept1.png": { + "ver": "1.0.6", + "uuid": "8f4808b3-bbf0-413d-a1f9-3d2ae2376af2", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 539, + "trimY": 520, + "width": 30, + "height": 24, + "rawWidth": 30, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_accept10.png": { + "ver": "1.0.6", + "uuid": "dd162525-3302-415d-928b-3d21f8c07389", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 534, + "trimY": 488, + "width": 30, + "height": 24, + "rawWidth": 30, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_accept2.png": { + "ver": "1.0.6", + "uuid": "e151ddc2-66ee-4de0-866c-32fef7f4550a", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 542, + "trimY": 454, + "width": 30, + "height": 24, + "rawWidth": 30, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_accept3.png": { + "ver": "1.0.6", + "uuid": "f60275d0-20ce-422f-b6d9-dc5faf65efea", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 542, + "trimY": 422, + "width": 30, + "height": 24, + "rawWidth": 30, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_accept4.png": { + "ver": "1.0.6", + "uuid": "c42734f5-5df5-4563-ae33-259c1c8beeba", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 542, + "trimY": 390, + "width": 30, + "height": 24, + "rawWidth": 30, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_accept5.png": { + "ver": "1.0.6", + "uuid": "00b50e21-598a-483d-8cdb-e25badf4dffb", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 542, + "trimY": 358, + "width": 30, + "height": 24, + "rawWidth": 30, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_accept6.png": { + "ver": "1.0.6", + "uuid": "052b74ab-9be0-4748-9b4f-86b25ccc3973", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 542, + "trimY": 326, + "width": 30, + "height": 24, + "rawWidth": 30, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_accept7.png": { + "ver": "1.0.6", + "uuid": "1677a2d6-57a5-4e4e-83b8-2acbf2c4af82", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 274, + "trimY": 600, + "width": 30, + "height": 24, + "rawWidth": 30, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_accept8.png": { + "ver": "1.0.6", + "uuid": "d4735f2a-c238-497b-8b0d-2e88ce8ff4bd", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 532, + "trimY": 294, + "width": 30, + "height": 24, + "rawWidth": 30, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_accept9.png": { + "ver": "1.0.6", + "uuid": "819581f7-ce5e-4c5e-af0a-48fc7e068b83", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 532, + "trimY": 262, + "width": 30, + "height": 24, + "rawWidth": 30, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_down_1.png": { + "ver": "1.0.6", + "uuid": "8248f378-ba28-4650-879f-3b36dbf411ff", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 358, + "trimY": 462, + "width": 50, + "height": 51, + "rawWidth": 50, + "rawHeight": 51, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_down_2.png": { + "ver": "1.0.6", + "uuid": "78ea8d76-d64a-49ea-a0ea-8c62f0e886cc", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 358, + "trimY": 362, + "width": 50, + "height": 98, + "rawWidth": 50, + "rawHeight": 98, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_down_3.png": { + "ver": "1.0.6", + "uuid": "f9c3bb33-ba0a-47ac-89e8-04e847919376", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 161, + "trimY": 2, + "width": 50, + "height": 161, + "rawWidth": 50, + "rawHeight": 161, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_heng.png": { + "ver": "1.0.6", + "uuid": "7976c91c-2b4e-4f46-8594-efa1a0b4721a", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 2, + "trimY": 124, + "width": 138, + "height": 69, + "rawWidth": 138, + "rawHeight": 69, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_left_1.png": { + "ver": "1.0.6", + "uuid": "761c9a8d-095d-4bcc-9251-d2d43ff376c2", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 101, + "trimY": 537, + "width": 47, + "height": 59, + "rawWidth": 47, + "rawHeight": 59, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_left_2.png": { + "ver": "1.0.6", + "uuid": "160c562c-35b1-4459-ab83-d235a6330542", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 480, + "trimY": 68, + "width": 97, + "height": 59, + "rawWidth": 97, + "rawHeight": 59, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_left_3.png": { + "ver": "1.0.6", + "uuid": "84135fac-2798-46ce-865a-85dba42c1f63", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 2, + "trimY": 63, + "width": 157, + "height": 59, + "rawWidth": 157, + "rawHeight": 59, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_over1.png": { + "ver": "1.0.6", + "uuid": "b682716c-bb0f-40c2-b177-c3d5956da181", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 476, + "trimY": 408, + "width": 64, + "height": 78, + "rawWidth": 64, + "rawHeight": 78, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_over10.png": { + "ver": "1.0.6", + "uuid": "afeb46d8-8446-42fd-9249-e056805720c7", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 476, + "trimY": 328, + "width": 64, + "height": 78, + "rawWidth": 64, + "rawHeight": 78, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_over2.png": { + "ver": "1.0.6", + "uuid": "03e86263-31c3-4076-b509-a46544e61100", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 466, + "trimY": 248, + "width": 64, + "height": 78, + "rawWidth": 64, + "rawHeight": 78, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_over3.png": { + "ver": "1.0.6", + "uuid": "f6270441-1706-492e-9796-308517d68cee", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 466, + "trimY": 168, + "width": 64, + "height": 78, + "rawWidth": 64, + "rawHeight": 78, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_over4.png": { + "ver": "1.0.6", + "uuid": "14183279-10f6-489f-b623-dfe3886635d1", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 410, + "trimY": 410, + "width": 64, + "height": 78, + "rawWidth": 64, + "rawHeight": 78, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_over5.png": { + "ver": "1.0.6", + "uuid": "f844c445-1b61-4efe-9eee-c346bdeda451", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 410, + "trimY": 330, + "width": 64, + "height": 78, + "rawWidth": 64, + "rawHeight": 78, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_over6.png": { + "ver": "1.0.6", + "uuid": "da77d6c1-2337-4c03-9888-e6fbb9ed95b9", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 400, + "trimY": 250, + "width": 64, + "height": 78, + "rawWidth": 64, + "rawHeight": 78, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_over7.png": { + "ver": "1.0.6", + "uuid": "ef31a03d-98b3-46fd-9cd2-fb03816a1ba1", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 400, + "trimY": 170, + "width": 64, + "height": 78, + "rawWidth": 64, + "rawHeight": 78, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_over8.png": { + "ver": "1.0.6", + "uuid": "d1d6b16c-5a3e-4cff-8b5c-6bb85146d24f", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 310, + "trimY": 515, + "width": 64, + "height": 78, + "rawWidth": 64, + "rawHeight": 78, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_over9.png": { + "ver": "1.0.6", + "uuid": "b673d160-1502-4f3b-8faf-94768d733b27", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 480, + "trimY": 2, + "width": 64, + "height": 78, + "rawWidth": 64, + "rawHeight": 78, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_right_1.png": { + "ver": "1.0.6", + "uuid": "e4e330d0-48d4-4652-834b-89a1263227bf", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 390, + "trimY": 534, + "width": 47, + "height": 59, + "rawWidth": 47, + "rawHeight": 59, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_right_2.png": { + "ver": "1.0.6", + "uuid": "ba9ce69a-3ecc-4228-b1fc-1e035afe14e6", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 2, + "trimY": 579, + "width": 97, + "height": 59, + "rawWidth": 97, + "rawHeight": 59, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_right_3.png": { + "ver": "1.0.6", + "uuid": "2cd18e14-7883-4477-8e1b-5ada4fbc2e9b", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 2, + "trimY": 2, + "width": 157, + "height": 59, + "rawWidth": 157, + "rawHeight": 59, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_send1.png": { + "ver": "1.0.6", + "uuid": "6f4aa1ba-e2c2-43fe-a155-764ea6370c51", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 532, + "trimY": 221, + "width": 39, + "height": 24, + "rawWidth": 39, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_send10.png": { + "ver": "1.0.6", + "uuid": "7c80553b-46d1-4ffc-940d-0f49ab9bfe73", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 532, + "trimY": 180, + "width": 39, + "height": 24, + "rawWidth": 39, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_send2.png": { + "ver": "1.0.6", + "uuid": "395e316d-b1d8-49b3-8669-2d7737ecc84d", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 414, + "trimY": 609, + "width": 39, + "height": 24, + "rawWidth": 39, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_send3.png": { + "ver": "1.0.6", + "uuid": "a3314cbe-2cce-4de2-9911-cf92cde20631", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 388, + "trimY": 609, + "width": 39, + "height": 24, + "rawWidth": 39, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_send4.png": { + "ver": "1.0.6", + "uuid": "7ac5c482-345f-451f-af25-f8b50fba335c", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 388, + "trimY": 583, + "width": 39, + "height": 24, + "rawWidth": 39, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_send5.png": { + "ver": "1.0.6", + "uuid": "6f2116ae-2595-4ccf-b432-fce120efc9df", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 362, + "trimY": 581, + "width": 39, + "height": 24, + "rawWidth": 39, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_send6.png": { + "ver": "1.0.6", + "uuid": "9cb546b9-149b-4b4c-a632-9f0a9f0fe730", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 274, + "trimY": 559, + "width": 39, + "height": 24, + "rawWidth": 39, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_send7.png": { + "ver": "1.0.6", + "uuid": "e5e1365e-c0fe-4f4f-9abf-e4c533cf670b", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 101, + "trimY": 624, + "width": 39, + "height": 24, + "rawWidth": 39, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_send8.png": { + "ver": "1.0.6", + "uuid": "a5694cd8-7d02-4718-84cd-fecaa5f561cd", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 101, + "trimY": 598, + "width": 39, + "height": 24, + "rawWidth": 39, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_send9.png": { + "ver": "1.0.6", + "uuid": "61c54931-13a7-455a-912c-2d4e60d37618", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 275, + "trimY": 117, + "width": 39, + "height": 24, + "rawWidth": 39, + "rawHeight": 24, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_shu.png": { + "ver": "1.0.6", + "uuid": "1a445260-d81c-4af1-b4ef-2865cefed2ab", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 161, + "trimY": 54, + "width": 61, + "height": 145, + "rawWidth": 61, + "rawHeight": 145, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_start1.png": { + "ver": "1.0.6", + "uuid": "511cc0d5-3332-423b-a925-96e4fd743483", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 248, + "trimY": 289, + "width": 56, + "height": 112, + "rawWidth": 56, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_start10.png": { + "ver": "1.0.6", + "uuid": "bbad8535-7ab1-4771-9a3c-33c9528d36ca", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 248, + "trimY": 175, + "width": 56, + "height": 112, + "rawWidth": 56, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_start2.png": { + "ver": "1.0.6", + "uuid": "cafdc8a6-4a2e-4a24-b74a-e0fbaba05171", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 161, + "trimY": 117, + "width": 56, + "height": 112, + "rawWidth": 56, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_start3.png": { + "ver": "1.0.6", + "uuid": "f4fa1854-c81f-41a3-ba95-5d93ae6c8925", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 308, + "trimY": 112, + "width": 56, + "height": 112, + "rawWidth": 56, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_start4.png": { + "ver": "1.0.6", + "uuid": "6c654521-c753-484a-8c48-d5b6d1e6dfd6", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 422, + "trimY": 54, + "width": 56, + "height": 112, + "rawWidth": 56, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_start5.png": { + "ver": "1.0.6", + "uuid": "8dbb56ad-dbab-4dba-923f-241a0d26ca5f", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 96, + "trimY": 423, + "width": 56, + "height": 112, + "rawWidth": 56, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_start6.png": { + "ver": "1.0.6", + "uuid": "7f355346-17ae-425b-9b6b-3e66d1d9b783", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 248, + "trimY": 403, + "width": 56, + "height": 110, + "rawWidth": 56, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_start7.png": { + "ver": "1.0.6", + "uuid": "aa07d88b-f733-4cb2-aee8-3f776c295987", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 96, + "trimY": 309, + "width": 56, + "height": 112, + "rawWidth": 56, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_start8.png": { + "ver": "1.0.6", + "uuid": "3c9ebbf5-58dd-42da-998f-c1a7b982e2be", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 96, + "trimY": 195, + "width": 56, + "height": 112, + "rawWidth": 56, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_start9.png": { + "ver": "1.0.6", + "uuid": "bad14256-4caa-4948-8877-f8cf13fe0976", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 308, + "trimY": 54, + "width": 56, + "height": 112, + "rawWidth": 56, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_up_1.png": { + "ver": "1.0.6", + "uuid": "4b36fc6c-4ddf-4b30-b922-6d8a6cb83fdf", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 306, + "trimY": 465, + "width": 50, + "height": 48, + "rawWidth": 50, + "rawHeight": 48, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_up_2.png": { + "ver": "1.0.6", + "uuid": "43354fc6-55d8-4ca5-acd1-0e2474f6857f", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 306, + "trimY": 362, + "width": 50, + "height": 101, + "rawWidth": 50, + "rawHeight": 101, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_up_3.png": { + "ver": "1.0.6", + "uuid": "648c6950-4390-46ba-84f4-5725862f7c36", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 324, + "trimY": 2, + "width": 50, + "height": 154, + "rawWidth": 50, + "rawHeight": 154, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_win1.png": { + "ver": "1.0.6", + "uuid": "3712fd9b-7aef-412e-92b7-c9cb17a11bb9", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 306, + "trimY": 266, + "width": 92, + "height": 94, + "rawWidth": 92, + "rawHeight": 94, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_win10.png": { + "ver": "1.0.6", + "uuid": "9db92e85-41ea-4226-90fe-42d303a1e2e8", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 306, + "trimY": 170, + "width": 92, + "height": 94, + "rawWidth": 92, + "rawHeight": 94, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_win2.png": { + "ver": "1.0.6", + "uuid": "32a5b819-dc5f-4bf1-ad6d-48d514963f95", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 154, + "trimY": 463, + "width": 92, + "height": 94, + "rawWidth": 92, + "rawHeight": 94, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_win3.png": { + "ver": "1.0.6", + "uuid": "8bdf25cc-4b4f-4f0d-a46d-2d0bf2b5dd56", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 154, + "trimY": 367, + "width": 92, + "height": 94, + "rawWidth": 92, + "rawHeight": 94, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_win4.png": { + "ver": "1.0.6", + "uuid": "97bf3a7a-2c6c-4242-aa62-b34aa0756349", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 154, + "trimY": 271, + "width": 92, + "height": 94, + "rawWidth": 92, + "rawHeight": 94, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_win5.png": { + "ver": "1.0.6", + "uuid": "b22a4ff5-2a88-479d-a455-58fc508a2ef8", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 154, + "trimY": 175, + "width": 92, + "height": 94, + "rawWidth": 92, + "rawHeight": 94, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_win6.png": { + "ver": "1.0.6", + "uuid": "5de017fd-a1f5-4775-97a7-05cfa1a0705f", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 2, + "trimY": 483, + "width": 92, + "height": 94, + "rawWidth": 92, + "rawHeight": 94, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_win7.png": { + "ver": "1.0.6", + "uuid": "d3b5acf7-d39e-44c6-a874-65ea29546818", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 2, + "trimY": 387, + "width": 92, + "height": 94, + "rawWidth": 92, + "rawHeight": 94, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_win8.png": { + "ver": "1.0.6", + "uuid": "ce47d5c5-cd5a-403d-a51d-7f8bcb52fd95", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 2, + "trimY": 291, + "width": 92, + "height": 94, + "rawWidth": 92, + "rawHeight": 94, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_win9.png": { + "ver": "1.0.6", + "uuid": "21354a64-579e-48f8-ad3e-964719fd3132", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 2, + "trimY": 195, + "width": 92, + "height": 94, + "rawWidth": 92, + "rawHeight": 94, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_yuan1.png": { + "ver": "1.0.6", + "uuid": "b7918c85-548e-459e-adc3-6b053d92a27a", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 524, + "trimY": 608, + "width": 26, + "height": 26, + "rawWidth": 26, + "rawHeight": 26, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_yuan10.png": { + "ver": "1.0.6", + "uuid": "32df0289-b8d4-45c4-aff6-d1bf3d0e4cfc", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 496, + "trimY": 596, + "width": 26, + "height": 26, + "rawWidth": 26, + "rawHeight": 26, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_yuan2.png": { + "ver": "1.0.6", + "uuid": "415161fa-7347-4d1c-88cf-e232490789aa", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 468, + "trimY": 596, + "width": 26, + "height": 26, + "rawWidth": 26, + "rawHeight": 26, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_yuan3.png": { + "ver": "1.0.6", + "uuid": "2b664c89-f69e-4eb3-b2b2-eac411f37c0a", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 440, + "trimY": 596, + "width": 26, + "height": 26, + "rawWidth": 26, + "rawHeight": 26, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_yuan4.png": { + "ver": "1.0.6", + "uuid": "3b6090c1-87f0-49dd-8f19-abc3f2867484", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 539, + "trimY": 580, + "width": 26, + "height": 26, + "rawWidth": 26, + "rawHeight": 26, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_yuan5.png": { + "ver": "1.0.6", + "uuid": "2ca00101-eb25-4d41-9685-c3d084cae199", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 539, + "trimY": 552, + "width": 26, + "height": 26, + "rawWidth": 26, + "rawHeight": 26, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_yuan6.png": { + "ver": "1.0.6", + "uuid": "d992c89a-e496-49b2-97ea-645f61bf8719", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 541, + "trimY": 152, + "width": 26, + "height": 26, + "rawWidth": 26, + "rawHeight": 26, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_yuan7.png": { + "ver": "1.0.6", + "uuid": "29f51d40-eb78-41e4-9f1c-3c011b93a8ac", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 541, + "trimY": 124, + "width": 26, + "height": 26, + "rawWidth": 26, + "rawHeight": 26, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_yuan8.png": { + "ver": "1.0.6", + "uuid": "52a94f1a-cc33-48cf-9de9-3dfb289178d4", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 541, + "trimY": 96, + "width": 26, + "height": 26, + "rawWidth": 26, + "rawHeight": 26, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "laser_yuan9.png": { + "ver": "1.0.6", + "uuid": "88911ef1-85bf-4d20-b0fe-2cb2d1b03a48", + "importer": "sprite-frame", + "rawTextureUuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 541, + "trimY": 68, + "width": 26, + "height": 26, + "rawWidth": 26, + "rawHeight": 26, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/UI/prop/laser/laser.png b/assets/UI/prop/laser/laser.png new file mode 100644 index 00000000..011b0c3a Binary files /dev/null and b/assets/UI/prop/laser/laser.png differ diff --git a/assets/UI/prop/laser/laser.png.meta b/assets/UI/prop/laser/laser.png.meta new file mode 100644 index 00000000..2f4067e1 --- /dev/null +++ b/assets/UI/prop/laser/laser.png.meta @@ -0,0 +1,15 @@ +{ + "ver": "2.3.7", + "uuid": "6b986358-f48c-48ed-be8c-13286edd9847", + "importer": "texture", + "type": "raw", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": true, + "width": 569, + "height": 650, + "platformSettings": {}, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2021.json b/assets/custom/Json/level2021.json new file mode 100644 index 00000000..e49bd37c --- /dev/null +++ b/assets/custom/Json/level2021.json @@ -0,0 +1,477 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2021", + "map": [ + 8, + 11 + ], + "time": 65, + "gap": [ + { + "x": 1, + "y": 9, + "z": 0 + }, + { + "x": 1, + "y": 8, + "z": 0 + }, + { + "x": 2, + "y": 9, + "z": 0 + }, + { + "x": 2, + "y": 8, + "z": 0 + }, + { + "x": 5, + "y": 9, + "z": 0 + }, + { + "x": 5, + "y": 8, + "z": 0 + }, + { + "x": 6, + "y": 9, + "z": 0 + }, + { + "x": 6, + "y": 8, + "z": 0 + }, + { + "x": 1, + "y": 5, + "z": 0 + }, + { + "x": 1, + "y": 4, + "z": 0 + }, + { + "x": 2, + "y": 5, + "z": 0 + }, + { + "x": 2, + "y": 4, + "z": 0 + }, + { + "x": 5, + "y": 5, + "z": 0 + }, + { + "x": 5, + "y": 4, + "z": 0 + }, + { + "x": 6, + "y": 5, + "z": 0 + }, + { + "x": 6, + "y": 4, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 0, + "color": 4, + "type": 0, + "position": { + "x": 0, + "y": 420, + "z": 0 + }, + "id": 1000 + }, + { + "block": 0, + "color": 4, + "type": 0, + "position": { + "x": 120, + "y": 300, + "z": 0 + }, + "id": 1010 + }, + { + "block": 2, + "color": 4, + "type": 0, + "position": { + "x": -120, + "y": 60, + "z": 0 + }, + "id": 1020 + }, + { + "block": 2, + "color": 1, + "type": 0, + "position": { + "x": -240, + "y": 60, + "z": 0 + }, + "id": 1030 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": 120, + "y": 420, + "z": 0 + }, + "id": 1040 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": 0, + "y": 300, + "z": 0 + }, + "id": 1050 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": 240, + "y": 60, + "z": 0 + }, + "id": 1060 + }, + { + "block": 2, + "color": 8, + "type": 0, + "position": { + "x": 360, + "y": 60, + "z": 0 + }, + "id": 1070 + }, + { + "block": 1, + "color": 7, + "type": 0, + "position": { + "x": 120, + "y": 180, + "z": 0 + }, + "id": 1080 + }, + { + "block": 1, + "color": 6, + "type": 0, + "position": { + "x": 120, + "y": 60, + "z": 0 + }, + "id": 1090 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": 120, + "y": -180, + "z": 0 + }, + "id": 1100 + }, + { + "block": 2, + "color": 8, + "type": 1, + "position": { + "x": 0, + "y": -180, + "z": 0 + }, + "stacking": 10, + "id": 1110 + }, + { + "block": 22, + "color": 10, + "type": 0, + "position": { + "x": 360, + "y": -420, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1120 + }, + { + "block": 20, + "color": 8, + "type": 0, + "position": { + "x": -120, + "y": -540, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1130 + }, + { + "block": 1, + "color": 6, + "type": 1, + "position": { + "x": -120, + "y": -300, + "z": 0 + }, + "stacking": 10, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1140 + }, + { + "block": 1, + "color": 7, + "type": 1, + "position": { + "x": 120, + "y": -300, + "z": 0 + }, + "stacking": 10, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1150 + }, + { + "block": 0, + "color": 7, + "type": 1, + "position": { + "x": 120, + "y": -540, + "z": 0 + }, + "stacking": 10, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1160 + }, + { + "block": 0, + "color": 6, + "type": 1, + "position": { + "x": 240, + "y": -540, + "z": 0 + }, + "stacking": 10, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1170 + }, + { + "block": 0, + "color": 6, + "type": 1, + "position": { + "x": 0, + "y": -420, + "z": 0 + }, + "stacking": 10, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1180 + }, + { + "block": 0, + "color": 1, + "type": 1, + "position": { + "x": 360, + "y": -540, + "z": 0 + }, + "stacking": 10, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1190 + }, + { + "block": 0, + "color": 1, + "type": 1, + "position": { + "x": 120, + "y": -420, + "z": 0 + }, + "stacking": 10, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1200 + }, + { + "block": 0, + "color": 1, + "type": 1, + "position": { + "x": -120, + "y": -420, + "z": 0 + }, + "stacking": 10, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1210 + }, + { + "block": 0, + "color": 4, + "type": 1, + "position": { + "x": 0, + "y": -540, + "z": 0 + }, + "stacking": 10, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1220 + }, + { + "block": 0, + "color": 4, + "type": 1, + "position": { + "x": 240, + "y": -420, + "z": 0 + }, + "stacking": 10, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1230 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2022, + "num": 3, + "color": 8, + "special": 3, + "length": 2, + "freeze": 8 + }, + { + "id": 2023, + "num": 4, + "color": 8, + "special": 3, + "length": 0, + "freeze": 8 + }, + { + "id": 2024, + "num": 16, + "color": 6, + "special": 3, + "length": 1, + "freeze": 4 + }, + { + "id": 2025, + "num": 18, + "color": 4, + "special": 0, + "length": 1 + }, + { + "id": 2026, + "num": 20, + "color": 1, + "special": 3, + "length": 1, + "freeze": 2 + }, + { + "id": 2027, + "num": 28, + "color": 7, + "special": 3, + "length": 1, + "freeze": 4 + }, + { + "id": 2028, + "num": 36, + "color": 10, + "special": 3, + "length": 2, + "freeze": 21 + }, + { + "id": 2029, + "num": 37, + "color": 10, + "special": 3, + "length": 0, + "freeze": 21 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2021.json.meta b/assets/custom/Json/level2021.json.meta new file mode 100644 index 00000000..8c81a5b9 --- /dev/null +++ b/assets/custom/Json/level2021.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "380c348d-a427-416c-97fe-72172e7c8b23", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2022.json b/assets/custom/Json/level2022.json new file mode 100644 index 00000000..b2e22a47 --- /dev/null +++ b/assets/custom/Json/level2022.json @@ -0,0 +1,696 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2022", + "map": [ + 12, + 10 + ], + "time": 115, + "gap": [ + { + "x": 1, + "y": 7, + "z": 0 + }, + { + "x": 1, + "y": 8, + "z": 0 + }, + { + "x": 2, + "y": 7, + "z": 0 + }, + { + "x": 2, + "y": 8, + "z": 0 + }, + { + "x": 3, + "y": 7, + "z": 0 + }, + { + "x": 3, + "y": 8, + "z": 0 + }, + { + "x": 8, + "y": 8, + "z": 0 + }, + { + "x": 8, + "y": 7, + "z": 0 + }, + { + "x": 9, + "y": 8, + "z": 0 + }, + { + "x": 9, + "y": 7, + "z": 0 + }, + { + "x": 10, + "y": 8, + "z": 0 + }, + { + "x": 10, + "y": 7, + "z": 0 + }, + { + "x": 1, + "y": 2, + "z": 0 + }, + { + "x": 1, + "y": 1, + "z": 0 + }, + { + "x": 2, + "y": 1, + "z": 0 + }, + { + "x": 10, + "y": 2, + "z": 0 + }, + { + "x": 10, + "y": 1, + "z": 0 + }, + { + "x": 9, + "y": 1, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 600, + "y": -240, + "z": 0 + }, + "id": 1000 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": -480, + "y": -240, + "z": 0 + }, + "id": 1010 + }, + { + "block": 0, + "color": 3, + "type": 0, + "position": { + "x": 0, + "y": 360, + "z": 0 + }, + "id": 1020 + }, + { + "block": 0, + "color": 3, + "type": 0, + "position": { + "x": 120, + "y": -480, + "z": 0 + }, + "id": 1030 + }, + { + "block": 2, + "color": 1, + "type": 0, + "position": { + "x": -240, + "y": -480, + "z": 0 + }, + "id": 1040 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": -120, + "y": -240, + "z": 0 + }, + "id": 1050 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": -360, + "y": -360, + "z": 0 + }, + "id": 1060 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": 0, + "y": 240, + "z": 0 + }, + "id": 1070 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": -120, + "y": 360, + "z": 0 + }, + "id": 1080 + }, + { + "block": 1, + "color": 6, + "type": 0, + "position": { + "x": -240, + "y": -240, + "z": 0 + }, + "id": 1090 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": 120, + "y": -360, + "z": 0 + }, + "id": 1100 + }, + { + "block": 1, + "color": 2, + "type": 0, + "position": { + "x": 0, + "y": -480, + "z": 0 + }, + "id": 1110 + }, + { + "block": 1, + "color": 6, + "type": 1, + "position": { + "x": 0, + "y": -360, + "z": 0 + }, + "stacking": 2, + "id": 1120 + }, + { + "block": 5, + "color": 3, + "type": 1, + "position": { + "x": 120, + "y": -240, + "z": 0 + }, + "stacking": 2, + "id": 1130 + }, + { + "block": 2, + "color": 1, + "type": 1, + "position": { + "x": 120, + "y": 240, + "z": 0 + }, + "stacking": 2, + "id": 1140 + }, + { + "block": 2, + "color": 1, + "type": 1, + "position": { + "x": -240, + "y": 0, + "z": 0 + }, + "stacking": 2, + "id": 1150 + }, + { + "block": 2, + "color": 6, + "type": 1, + "position": { + "x": -360, + "y": 0, + "z": 0 + }, + "stacking": 5, + "id": 1160 + }, + { + "block": 2, + "color": 1, + "type": 1, + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "stacking": 5, + "id": 1170 + }, + { + "block": 2, + "color": 2, + "type": 1, + "position": { + "x": 120, + "y": 0, + "z": 0 + }, + "stacking": 4, + "id": 1180 + }, + { + "block": 2, + "color": 3, + "type": 1, + "position": { + "x": -120, + "y": 120, + "z": 0 + }, + "stacking": 4, + "id": 1190 + }, + { + "block": 1, + "color": 2, + "type": 1, + "position": { + "x": -240, + "y": -120, + "z": 0 + }, + "stacking": 4, + "id": 1200 + }, + { + "block": 2, + "color": 6, + "type": 1, + "position": { + "x": -120, + "y": -120, + "z": 0 + }, + "stacking": 5, + "id": 1210 + }, + { + "block": 2, + "color": 1, + "type": 0, + "position": { + "x": -480, + "y": 0, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1220 + }, + { + "block": 0, + "color": 3, + "type": 0, + "position": { + "x": -480, + "y": -120, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1230 + }, + { + "block": 2, + "color": 2, + "type": 0, + "position": { + "x": 240, + "y": 240, + "z": 0 + }, + "floor": 2, + "floorTime": 18, + "floorMove": false, + "id": 1240 + }, + { + "block": 1, + "color": 2, + "type": 0, + "position": { + "x": 600, + "y": 120, + "z": 0 + }, + "floor": 2, + "floorTime": 18, + "floorMove": false, + "id": 1250 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": 360, + "y": -360, + "z": 0 + }, + "floor": 2, + "floorTime": 18, + "floorMove": false, + "id": 1260 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": 600, + "y": -120, + "z": 0 + }, + "floor": 2, + "floorTime": 18, + "floorMove": false, + "id": 1270 + }, + { + "block": 1, + "color": 6, + "type": 0, + "position": { + "x": 360, + "y": -480, + "z": 0 + }, + "floor": 2, + "floorTime": 18, + "floorMove": false, + "id": 1280 + }, + { + "block": 22, + "color": 6, + "type": 0, + "position": { + "x": 360, + "y": -240, + "z": 0 + }, + "floor": 2, + "floorTime": 18, + "floorMove": false, + "id": 1290 + }, + { + "block": 0, + "color": 6, + "type": 0, + "position": { + "x": 480, + "y": 0, + "z": 0 + }, + "floor": 2, + "floorTime": 18, + "floorMove": false, + "id": 1300 + }, + { + "block": 0, + "color": 6, + "type": 0, + "position": { + "x": 360, + "y": 120, + "z": 0 + }, + "floor": 2, + "floorTime": 18, + "floorMove": false, + "id": 1310 + }, + { + "block": 1, + "color": 3, + "type": 0, + "position": { + "x": 360, + "y": 0, + "z": 0 + }, + "floor": 2, + "floorTime": 18, + "floorMove": false, + "id": 1320 + }, + { + "block": 2, + "color": 3, + "type": 0, + "position": { + "x": 480, + "y": -360, + "z": 0 + }, + "floor": 2, + "floorTime": 18, + "floorMove": false, + "id": 1330 + }, + { + "block": 0, + "color": 3, + "type": 0, + "position": { + "x": 600, + "y": 0, + "z": 0 + }, + "floor": 2, + "floorTime": 18, + "floorMove": false, + "id": 1340 + }, + { + "block": 2, + "color": 1, + "type": 0, + "position": { + "x": 240, + "y": -360, + "z": 0 + }, + "floor": 2, + "floorTime": 18, + "floorMove": false, + "id": 1350 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": 480, + "y": -120, + "z": 0 + }, + "id": 1360 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": 240, + "y": 120, + "z": 0 + }, + "floor": 3, + "floorTime": 18, + "floorMove": false, + "id": 1370 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2023, + "num": 10, + "color": 1, + "special": 0, + "length": 2 + }, + { + "id": 2024, + "num": 14, + "color": 1, + "special": 0, + "length": 0 + }, + { + "id": 2025, + "num": 1, + "color": 4, + "special": 3, + "length": 2, + "freeze": 37 + }, + { + "id": 2026, + "num": 2, + "color": 4, + "special": 3, + "length": 0, + "freeze": 37 + }, + { + "id": 2027, + "num": 15, + "color": 2, + "special": 3, + "length": 2, + "freeze": 2 + }, + { + "id": 2028, + "num": 17, + "color": 2, + "special": 3, + "length": 0, + "freeze": 2 + }, + { + "id": 2029, + "num": 19, + "color": 6, + "special": 3, + "length": 2, + "freeze": 21 + }, + { + "id": 2030, + "num": 21, + "color": 6, + "special": 3, + "length": 0, + "freeze": 21 + }, + { + "id": 2031, + "num": 33, + "color": 5, + "special": 3, + "length": 2, + "freeze": 21 + }, + { + "id": 2032, + "num": 34, + "color": 5, + "special": 3, + "length": 0, + "freeze": 21 + }, + { + "id": 2033, + "num": 20, + "color": 9, + "special": 3, + "length": 2, + "freeze": 29 + }, + { + "id": 2034, + "num": 22, + "color": 9, + "special": 3, + "length": 0, + "freeze": 29 + }, + { + "id": 2035, + "num": 16, + "color": 3, + "special": 3, + "length": 2, + "freeze": 12 + }, + { + "id": 2036, + "num": 18, + "color": 3, + "special": 3, + "length": 0, + "freeze": 12 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2022.json.meta b/assets/custom/Json/level2022.json.meta new file mode 100644 index 00000000..9a7af61e --- /dev/null +++ b/assets/custom/Json/level2022.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "22374b0c-4556-49b0-8d72-29432558bd59", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2023.json b/assets/custom/Json/level2023.json new file mode 100644 index 00000000..059ddef7 --- /dev/null +++ b/assets/custom/Json/level2023.json @@ -0,0 +1,637 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2023", + "map": [ + 10, + 12 + ], + "time": 75, + "gap": [ + { + "x": 2, + "y": 10, + "z": 0 + }, + { + "x": 1, + "y": 10, + "z": 0 + }, + { + "x": 7, + "y": 10, + "z": 0 + }, + { + "x": 8, + "y": 10, + "z": 0 + }, + { + "x": 1, + "y": 3, + "z": 0 + }, + { + "x": 1, + "y": 4, + "z": 0 + }, + { + "x": 2, + "y": 4, + "z": 0 + }, + { + "x": 2, + "y": 3, + "z": 0 + }, + { + "x": 7, + "y": 5, + "z": 0 + }, + { + "x": 7, + "y": 6, + "z": 0 + }, + { + "x": 8, + "y": 6, + "z": 0 + }, + { + "x": 8, + "y": 5, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 1, + "color": 4, + "type": 0, + "position": { + "x": -240, + "y": 240, + "z": 0 + }, + "id": 1000 + }, + { + "block": 1, + "color": 4, + "type": 0, + "position": { + "x": 0, + "y": 360, + "z": 0 + }, + "id": 1010 + }, + { + "block": 0, + "color": 4, + "type": 0, + "position": { + "x": 360, + "y": 240, + "z": 0 + }, + "id": 1020 + }, + { + "block": 0, + "color": 4, + "type": 0, + "position": { + "x": 240, + "y": 360, + "z": 0 + }, + "id": 1030 + }, + { + "block": 0, + "color": 4, + "type": 0, + "position": { + "x": 120, + "y": 240, + "z": 0 + }, + "id": 1040 + }, + { + "block": 0, + "color": 4, + "type": 0, + "position": { + "x": 480, + "y": 360, + "z": 0 + }, + "id": 1050 + }, + { + "block": 1, + "color": 8, + "type": 0, + "position": { + "x": -240, + "y": 360, + "z": 0 + }, + "id": 1060 + }, + { + "block": 1, + "color": 8, + "type": 0, + "position": { + "x": 0, + "y": 240, + "z": 0 + }, + "id": 1070 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 360, + "y": 360, + "z": 0 + }, + "id": 1080 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 120, + "y": 360, + "z": 0 + }, + "id": 1090 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 480, + "y": 240, + "z": 0 + }, + "id": 1100 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 240, + "y": 240, + "z": 0 + }, + "id": 1110 + }, + { + "block": 1, + "color": 8, + "type": 0, + "position": { + "x": -240, + "y": -120, + "z": 0 + }, + "id": 1120 + }, + { + "block": 1, + "color": 6, + "type": 0, + "position": { + "x": 240, + "y": -120, + "z": 0 + }, + "id": 1130 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": 120, + "y": 0, + "z": 0 + }, + "id": 1140 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": -360, + "y": 0, + "z": 0 + }, + "id": 1150 + }, + { + "block": 1, + "color": 7, + "type": 0, + "position": { + "x": 240, + "y": 480, + "z": 0 + }, + "id": 1160 + }, + { + "block": 11, + "color": 2, + "type": 1, + "position": { + "x": 240, + "y": 0, + "z": 0 + }, + "stacking": 1, + "id": 1170 + }, + { + "block": 1, + "color": 9, + "type": 1, + "position": { + "x": 0, + "y": 480, + "z": 0 + }, + "stacking": 1, + "id": 1180 + }, + { + "block": 22, + "color": 9, + "type": 1, + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "stacking": 1, + "id": 1190 + }, + { + "block": 20, + "color": 6, + "type": 1, + "position": { + "x": -120, + "y": 0, + "z": 0 + }, + "stacking": 1, + "id": 1200 + }, + { + "block": 1, + "color": 4, + "type": 1, + "position": { + "x": 0, + "y": -120, + "z": 0 + }, + "stacking": 1, + "id": 1210 + }, + { + "block": 21, + "color": 2, + "type": 1, + "position": { + "x": -120, + "y": -360, + "z": 0 + }, + "stacking": 1, + "floor": 1, + "floorTime": 18, + "floorMove": false, + "id": 1220 + }, + { + "block": 22, + "color": 10, + "type": 1, + "position": { + "x": 480, + "y": -360, + "z": 0 + }, + "stacking": 1, + "floor": 1, + "floorTime": 18, + "floorMove": false, + "id": 1230 + }, + { + "block": 21, + "color": 10, + "type": 1, + "position": { + "x": -360, + "y": -600, + "z": 0 + }, + "stacking": 1, + "floor": 1, + "floorTime": 18, + "floorMove": false, + "id": 1240 + }, + { + "block": 1, + "color": 4, + "type": 1, + "position": { + "x": 360, + "y": -600, + "z": 0 + }, + "stacking": 1, + "floor": 1, + "floorTime": 18, + "floorMove": false, + "id": 1250 + }, + { + "block": 1, + "color": 4, + "type": 1, + "position": { + "x": -120, + "y": -600, + "z": 0 + }, + "stacking": 1, + "floor": 1, + "floorTime": 18, + "floorMove": false, + "id": 1260 + }, + { + "block": 1, + "color": 4, + "type": 1, + "position": { + "x": 120, + "y": -480, + "z": 0 + }, + "stacking": 1, + "floor": 1, + "floorTime": 18, + "floorMove": false, + "id": 1270 + }, + { + "block": 1, + "color": 8, + "type": 0, + "position": { + "x": 120, + "y": -360, + "z": 0 + }, + "floor": 1, + "floorTime": 18, + "floorMove": false, + "id": 1280 + }, + { + "block": 1, + "color": 8, + "type": 0, + "position": { + "x": 120, + "y": -600, + "z": 0 + }, + "floor": 1, + "floorTime": 18, + "floorMove": false, + "id": 1290 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 240, + "y": -480, + "z": 0 + }, + "floor": 1, + "floorTime": 18, + "floorMove": false, + "id": 1300 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": -120, + "y": -480, + "z": 0 + }, + "floor": 1, + "floorTime": 18, + "floorMove": false, + "id": 1310 + }, + { + "block": 1, + "color": 4, + "type": 0, + "position": { + "x": 240, + "y": -240, + "z": 0 + }, + "floor": 1, + "floorTime": 18, + "floorMove": false, + "id": 1320 + }, + { + "block": 1, + "color": 7, + "type": 0, + "position": { + "x": 360, + "y": -360, + "z": 0 + }, + "floor": 1, + "floorTime": 18, + "floorMove": false, + "id": 1330 + }, + { + "block": 22, + "color": 6, + "type": 0, + "position": { + "x": 480, + "y": -600, + "z": 0 + }, + "floor": 1, + "floorTime": 18, + "floorMove": false, + "id": 1340 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2024, + "num": 0, + "color": 7, + "special": 3, + "length": 2, + "freeze": 33 + }, + { + "id": 2025, + "num": 1, + "color": 7, + "special": 3, + "length": 0, + "freeze": 33 + }, + { + "id": 2026, + "num": 19, + "color": 10, + "special": 3, + "length": 2, + "freeze": 12 + }, + { + "id": 2027, + "num": 21, + "color": 10, + "special": 3, + "length": 0, + "freeze": 12 + }, + { + "id": 2028, + "num": 23, + "color": 6, + "special": 3, + "length": 2, + "freeze": 14 + }, + { + "id": 2029, + "num": 25, + "color": 6, + "special": 3, + "length": 0, + "freeze": 14 + }, + { + "id": 2030, + "num": 43, + "color": 4, + "special": 0, + "length": 1 + }, + { + "id": 2031, + "num": 42, + "color": 8, + "special": 3, + "length": 1, + "freeze": 6 + }, + { + "id": 2032, + "num": 39, + "color": 9, + "special": 3, + "length": 2, + "freeze": 29 + }, + { + "id": 2033, + "num": 40, + "color": 9, + "special": 3, + "length": 0, + "freeze": 29 + }, + { + "id": 2034, + "num": 37, + "color": 1, + "special": 3, + "length": 2, + "freeze": 35 + }, + { + "id": 2035, + "num": 38, + "color": 1, + "special": 3, + "length": 0, + "freeze": 35 + }, + { + "id": 2036, + "num": 11, + "color": 2, + "special": 3, + "length": 3, + "freeze": 31 + }, + { + "id": 2037, + "num": 18, + "color": 2, + "special": 3, + "length": 0, + "freeze": 31 + }, + { + "id": 2038, + "num": 20, + "color": 2, + "special": 3, + "length": 0, + "freeze": 31 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2023.json.meta b/assets/custom/Json/level2023.json.meta new file mode 100644 index 00000000..ae916755 --- /dev/null +++ b/assets/custom/Json/level2023.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "3b95c52b-4c3c-4c03-a075-1b90b7908365", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2024.json b/assets/custom/Json/level2024.json new file mode 100644 index 00000000..462b9925 --- /dev/null +++ b/assets/custom/Json/level2024.json @@ -0,0 +1,482 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2024", + "map": [ + 9, + 12 + ], + "time": 50, + "gap": [ + { + "x": 2, + "y": 1, + "z": 0 + }, + { + "x": 3, + "y": 1, + "z": 0 + }, + { + "x": 4, + "y": 1, + "z": 0 + }, + { + "x": 5, + "y": 1, + "z": 0 + }, + { + "x": 6, + "y": 1, + "z": 0 + }, + { + "x": 7, + "y": 1, + "z": 0 + }, + { + "x": 3, + "y": 2, + "z": 0 + }, + { + "x": 4, + "y": 2, + "z": 0 + }, + { + "x": 5, + "y": 2, + "z": 0 + }, + { + "x": 6, + "y": 2, + "z": 0 + }, + { + "x": 7, + "y": 2, + "z": 0 + }, + { + "x": 4, + "y": 3, + "z": 0 + }, + { + "x": 5, + "y": 3, + "z": 0 + }, + { + "x": 6, + "y": 3, + "z": 0 + }, + { + "x": 7, + "y": 3, + "z": 0 + }, + { + "x": 7, + "y": 4, + "z": 0 + }, + { + "x": 6, + "y": 4, + "z": 0 + }, + { + "x": 5, + "y": 4, + "z": 0 + }, + { + "x": 6, + "y": 5, + "z": 0 + }, + { + "x": 7, + "y": 5, + "z": 0 + }, + { + "x": 5, + "y": 10, + "z": 0 + }, + { + "x": 6, + "y": 10, + "z": 0 + }, + { + "x": 7, + "y": 10, + "z": 0 + }, + { + "x": 6, + "y": 9, + "z": 0 + }, + { + "x": 7, + "y": 9, + "z": 0 + }, + { + "x": 7, + "y": 8, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 5, + "color": 3, + "type": 0, + "position": { + "x": -180, + "y": 360, + "z": 0 + }, + "id": 1000 + }, + { + "block": 5, + "color": 3, + "type": 0, + "position": { + "x": -60, + "y": -360, + "z": 0 + }, + "id": 1010 + }, + { + "block": 21, + "color": 3, + "type": 0, + "position": { + "x": -300, + "y": 120, + "z": 0 + }, + "id": 1020 + }, + { + "block": 2, + "color": 3, + "type": 0, + "position": { + "x": -60, + "y": 120, + "z": 0 + }, + "id": 1030 + }, + { + "block": 16, + "color": 8, + "type": 0, + "position": { + "x": -300, + "y": -600, + "z": 0 + }, + "id": 1040 + }, + { + "block": 19, + "color": 8, + "type": 0, + "position": { + "x": -180, + "y": 0, + "z": 0 + }, + "id": 1050 + }, + { + "block": 2, + "color": 8, + "type": 0, + "position": { + "x": 60, + "y": 360, + "z": 0 + }, + "id": 1060 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 300, + "y": 120, + "z": 0 + }, + "id": 1070 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 60, + "y": 120, + "z": 0 + }, + "id": 1080 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 180, + "y": 240, + "z": 0 + }, + "id": 1090 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 60, + "y": -120, + "z": 0 + }, + "id": 1100 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 180, + "y": 0, + "z": 0 + }, + "id": 1110 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 420, + "y": 0, + "z": 0 + }, + "id": 1120 + }, + { + "block": 21, + "color": 10, + "type": 0, + "position": { + "x": -300, + "y": -240, + "z": 0 + }, + "id": 1130 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 180, + "y": 360, + "z": 0 + }, + "id": 1140 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 300, + "y": 0, + "z": 0 + }, + "id": 1150 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 180, + "y": 120, + "z": 0 + }, + "id": 1160 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 60, + "y": 240, + "z": 0 + }, + "id": 1170 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 180, + "y": -120, + "z": 0 + }, + "id": 1180 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 420, + "y": 120, + "z": 0 + }, + "id": 1190 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 300, + "y": 240, + "z": 0 + }, + "id": 1200 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 60, + "y": -240, + "z": 0 + }, + "id": 1210 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 60, + "y": 0, + "z": 0 + }, + "id": 1220 + }, + { + "block": 2, + "color": 1, + "type": 0, + "position": { + "x": -60, + "y": -120, + "z": 0 + }, + "id": 1230 + }, + { + "block": 2, + "color": 1, + "type": 0, + "position": { + "x": -60, + "y": 360, + "z": 0 + }, + "id": 1240 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2025, + "num": 11, + "color": 10, + "special": 3, + "length": 2, + "freeze": 15 + }, + { + "id": 2026, + "num": 14, + "color": 10, + "special": 3, + "length": 0, + "freeze": 15 + }, + { + "id": 2027, + "num": 17, + "color": 8, + "special": 0, + "length": 2 + }, + { + "id": 2028, + "num": 20, + "color": 8, + "special": 0, + "length": 0 + }, + { + "id": 2029, + "num": 32, + "color": 3, + "special": 3, + "length": 2, + "freeze": 9 + }, + { + "id": 2030, + "num": 33, + "color": 3, + "special": 3, + "length": 0, + "freeze": 9 + }, + { + "id": 2031, + "num": 10, + "color": 1, + "special": 3, + "length": 1, + "freeze": 13 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2024.json.meta b/assets/custom/Json/level2024.json.meta new file mode 100644 index 00000000..befeec66 --- /dev/null +++ b/assets/custom/Json/level2024.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "548b35df-882c-41e2-b4ec-56b186b8f1fc", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2025.json b/assets/custom/Json/level2025.json new file mode 100644 index 00000000..4b1ee058 --- /dev/null +++ b/assets/custom/Json/level2025.json @@ -0,0 +1,637 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2025", + "map": [ + 10, + 11 + ], + "time": 75, + "gap": [ + { + "x": 1, + "y": 9, + "z": 0 + }, + { + "x": 8, + "y": 1, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 23, + "color": 8, + "type": 0, + "position": { + "x": -240, + "y": -420, + "z": 0 + }, + "id": 1000 + }, + { + "block": 23, + "color": 8, + "type": 0, + "position": { + "x": -240, + "y": -540, + "z": 0 + }, + "id": 1010 + }, + { + "block": 23, + "color": 8, + "type": 0, + "position": { + "x": 360, + "y": 180, + "z": 0 + }, + "id": 1020 + }, + { + "block": 23, + "color": 8, + "type": 0, + "position": { + "x": 360, + "y": 300, + "z": 0 + }, + "id": 1030 + }, + { + "block": 23, + "color": 8, + "type": 0, + "position": { + "x": 240, + "y": 300, + "z": 0 + }, + "id": 1040 + }, + { + "block": 23, + "color": 8, + "type": 0, + "position": { + "x": 240, + "y": 420, + "z": 0 + }, + "id": 1050 + }, + { + "block": 23, + "color": 8, + "type": 0, + "position": { + "x": -120, + "y": -300, + "z": 0 + }, + "id": 1060 + }, + { + "block": 23, + "color": 8, + "type": 0, + "position": { + "x": -120, + "y": -420, + "z": 0 + }, + "id": 1070 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": -360, + "y": -540, + "z": 0 + }, + "id": 1080 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": -360, + "y": -300, + "z": 0 + }, + "id": 1090 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": -240, + "y": -180, + "z": 0 + }, + "id": 1100 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": -240, + "y": -300, + "z": 0 + }, + "id": 1110 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": -360, + "y": -180, + "z": 0 + }, + "id": 1120 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": -120, + "y": -180, + "z": 0 + }, + "id": 1130 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": -360, + "y": -420, + "z": 0 + }, + "id": 1140 + }, + { + "block": 19, + "color": 6, + "type": 0, + "position": { + "x": 0, + "y": -540, + "z": 0 + }, + "id": 1150 + }, + { + "block": 21, + "color": 2, + "type": 0, + "position": { + "x": 360, + "y": -540, + "z": 0 + }, + "id": 1160 + }, + { + "block": 2, + "color": 9, + "type": 0, + "position": { + "x": 480, + "y": -300, + "z": 0 + }, + "id": 1170 + }, + { + "block": 2, + "color": 9, + "type": 0, + "position": { + "x": 240, + "y": -300, + "z": 0 + }, + "id": 1180 + }, + { + "block": 2, + "color": 9, + "type": 0, + "position": { + "x": 120, + "y": -540, + "z": 0 + }, + "id": 1190 + }, + { + "block": 8, + "color": 9, + "type": 0, + "position": { + "x": 240, + "y": 180, + "z": 0 + }, + "id": 1200 + }, + { + "block": 20, + "color": 7, + "type": 0, + "position": { + "x": -120, + "y": 300, + "z": 0 + }, + "id": 1210 + }, + { + "block": 22, + "color": 10, + "type": 0, + "position": { + "x": 0, + "y": 300, + "z": 0 + }, + "id": 1220 + }, + { + "block": 1, + "color": 7, + "type": 0, + "position": { + "x": 0, + "y": -60, + "z": 0 + }, + "id": 1230 + }, + { + "block": 1, + "color": 7, + "type": 0, + "position": { + "x": -240, + "y": 60, + "z": 0 + }, + "id": 1240 + }, + { + "block": 1, + "color": 7, + "type": 0, + "position": { + "x": 240, + "y": 60, + "z": 0 + }, + "id": 1250 + }, + { + "block": 1, + "color": 7, + "type": 0, + "position": { + "x": 480, + "y": -60, + "z": 0 + }, + "id": 1260 + }, + { + "block": 2, + "color": 3, + "type": 0, + "position": { + "x": -360, + "y": 180, + "z": 0 + }, + "id": 1270 + }, + { + "block": 0, + "color": 5, + "type": 0, + "position": { + "x": 360, + "y": 420, + "z": 0 + }, + "id": 1280 + }, + { + "block": 0, + "color": 5, + "type": 0, + "position": { + "x": 480, + "y": 180, + "z": 0 + }, + "id": 1290 + }, + { + "block": 1, + "color": 10, + "type": 1, + "position": { + "x": 0, + "y": 60, + "z": 0 + }, + "stacking": 7, + "id": 1300 + }, + { + "block": 1, + "color": 10, + "type": 1, + "position": { + "x": -240, + "y": -60, + "z": 0 + }, + "stacking": 7, + "id": 1310 + }, + { + "block": 1, + "color": 10, + "type": 1, + "position": { + "x": 240, + "y": -60, + "z": 0 + }, + "stacking": 7, + "id": 1320 + }, + { + "block": 1, + "color": 10, + "type": 1, + "position": { + "x": 480, + "y": 60, + "z": 0 + }, + "stacking": 7, + "id": 1330 + }, + { + "block": 0, + "color": 1, + "type": 1, + "position": { + "x": 0, + "y": 180, + "z": 0 + }, + "stacking": 3, + "id": 1340 + }, + { + "block": 0, + "color": 5, + "type": 1, + "position": { + "x": -240, + "y": 180, + "z": 0 + }, + "stacking": 3, + "id": 1350 + }, + { + "block": 2, + "color": 6, + "type": 1, + "position": { + "x": 360, + "y": -300, + "z": 0 + }, + "stacking": 3, + "id": 1360 + }, + { + "block": 2, + "color": 6, + "type": 1, + "position": { + "x": 120, + "y": -300, + "z": 0 + }, + "stacking": 3, + "id": 1370 + }, + { + "block": 2, + "color": 6, + "type": 1, + "position": { + "x": 240, + "y": -540, + "z": 0 + }, + "stacking": 3, + "id": 1380 + }, + { + "block": 2, + "color": 5, + "type": 8, + "position": { + "x": 0, + "y": -300, + "z": 0 + }, + "id": 1390 + }, + { + "block": 0, + "color": 9, + "type": 1, + "position": { + "x": -120, + "y": 180, + "z": 0 + }, + "stacking": 5, + "id": 1400 + }, + { + "block": 0, + "color": 2, + "type": 9, + "position": { + "x": 480, + "y": 420, + "z": 0 + }, + "adhesiveTime": 2, + "id": 1410 + }, + { + "block": 0, + "color": 1, + "type": 9, + "position": { + "x": 480, + "y": 300, + "z": 0 + }, + "adhesiveTime": 1, + "id": 1420 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2026, + "num": 0, + "color": 8, + "special": 3, + "length": 1, + "freeze": 1 + }, + { + "id": 2027, + "num": 2, + "color": 10, + "special": 3, + "length": 2, + "freeze": 7 + }, + { + "id": 2028, + "num": 3, + "color": 10, + "special": 3, + "length": 0, + "freeze": 7 + }, + { + "id": 2029, + "num": 12, + "color": 6, + "special": 3, + "length": 2, + "freeze": 30 + }, + { + "id": 2030, + "num": 14, + "color": 6, + "special": 3, + "length": 0, + "freeze": 30 + }, + { + "id": 2031, + "num": 16, + "color": 2, + "special": 3, + "length": 2, + "freeze": 32 + }, + { + "id": 2032, + "num": 18, + "color": 2, + "special": 3, + "length": 0, + "freeze": 32 + }, + { + "id": 2033, + "num": 25, + "color": 3, + "special": 3, + "length": 1, + "freeze": 39 + }, + { + "id": 2034, + "num": 27, + "color": 7, + "special": 3, + "length": 2, + "freeze": 11 + }, + { + "id": 2035, + "num": 28, + "color": 7, + "special": 3, + "length": 0, + "freeze": 11 + }, + { + "id": 2036, + "num": 19, + "color": 9, + "special": 3, + "length": 2, + "freeze": 19 + }, + { + "id": 2037, + "num": 21, + "color": 9, + "special": 3, + "length": 0, + "freeze": 19 + }, + { + "id": 2038, + "num": 13, + "color": 5, + "special": 3, + "length": 2, + "freeze": 24 + }, + { + "id": 2039, + "num": 15, + "color": 5, + "special": 3, + "length": 0, + "freeze": 24 + }, + { + "id": 2040, + "num": 8, + "color": 1, + "special": 0, + "length": 1 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2025.json.meta b/assets/custom/Json/level2025.json.meta new file mode 100644 index 00000000..e217396c --- /dev/null +++ b/assets/custom/Json/level2025.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "2efb834a-85bc-4e60-b599-56b9f319893f", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2026.json b/assets/custom/Json/level2026.json new file mode 100644 index 00000000..60701024 --- /dev/null +++ b/assets/custom/Json/level2026.json @@ -0,0 +1,452 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2026", + "map": [ + 11, + 10 + ], + "time": 75, + "gap": [ + { + "x": 1, + "y": 8, + "z": 0 + }, + { + "x": 2, + "y": 8, + "z": 0 + }, + { + "x": 2, + "y": 7, + "z": 0 + }, + { + "x": 1, + "y": 7, + "z": 0 + }, + { + "x": 1, + "y": 6, + "z": 0 + }, + { + "x": 2, + "y": 6, + "z": 0 + }, + { + "x": 9, + "y": 1, + "z": 0 + }, + { + "x": 8, + "y": 1, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": -180, + "y": -240, + "z": 0 + }, + "id": 1000 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": -300, + "y": -240, + "z": 0 + }, + "id": 1010 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": -420, + "y": -240, + "z": 0 + }, + "id": 1020 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": -240, + "z": 0 + }, + "id": 1030 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": -120, + "z": 0 + }, + "id": 1040 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": 0, + "z": 0 + }, + "id": 1050 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": 120, + "z": 0 + }, + "id": 1060 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": -60, + "y": -240, + "z": 0 + }, + "id": 1070 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 540, + "y": 0, + "z": 0 + }, + "id": 1080 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 420, + "y": 0, + "z": 0 + }, + "id": 1090 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 540, + "y": 240, + "z": 0 + }, + "id": 1100 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 420, + "y": 240, + "z": 0 + }, + "id": 1110 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 540, + "y": -240, + "z": 0 + }, + "id": 1120 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 420, + "y": -240, + "z": 0 + }, + "id": 1130 + }, + { + "block": 2, + "color": 3, + "type": 0, + "position": { + "x": -420, + "y": -120, + "z": 0 + }, + "id": 1140 + }, + { + "block": 2, + "color": 9, + "type": 0, + "position": { + "x": -300, + "y": -120, + "z": 0 + }, + "id": 1150 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": -180, + "y": -120, + "z": 0 + }, + "id": 1160 + }, + { + "block": 2, + "color": 5, + "type": 0, + "position": { + "x": -60, + "y": -120, + "z": 0 + }, + "id": 1170 + }, + { + "block": 2, + "color": 1, + "type": 0, + "position": { + "x": -180, + "y": 120, + "z": 0 + }, + "id": 1180 + }, + { + "block": 2, + "color": 8, + "type": 0, + "position": { + "x": -60, + "y": 120, + "z": 0 + }, + "id": 1190 + }, + { + "block": 2, + "color": 7, + "type": 0, + "position": { + "x": -420, + "y": -480, + "z": 0 + }, + "id": 1200 + }, + { + "block": 2, + "color": 8, + "type": 0, + "position": { + "x": 300, + "y": -480, + "z": 0 + }, + "id": 1210 + }, + { + "block": 2, + "color": 2, + "type": 0, + "position": { + "x": 300, + "y": 240, + "z": 0 + }, + "id": 1220 + }, + { + "block": 2, + "color": 5, + "type": 1, + "position": { + "x": -300, + "y": -480, + "z": 0 + }, + "stacking": 7, + "id": 1230 + }, + { + "block": 2, + "color": 10, + "type": 1, + "position": { + "x": -180, + "y": -480, + "z": 0 + }, + "stacking": 1, + "id": 1240 + }, + { + "block": 2, + "color": 3, + "type": 1, + "position": { + "x": 60, + "y": -480, + "z": 0 + }, + "stacking": 1, + "id": 1250 + }, + { + "block": 2, + "color": 6, + "type": 1, + "position": { + "x": -60, + "y": -480, + "z": 0 + }, + "stacking": 8, + "id": 1260 + }, + { + "block": 2, + "color": 6, + "type": 1, + "position": { + "x": 300, + "y": -240, + "z": 0 + }, + "stacking": 1, + "id": 1270 + }, + { + "block": 2, + "color": 5, + "type": 1, + "position": { + "x": 300, + "y": 0, + "z": 0 + }, + "stacking": 2, + "id": 1280 + }, + { + "block": 1, + "color": 8, + "type": 4, + "position": { + "x": 540, + "y": 360, + "z": 0 + }, + "freezeTime": 12, + "id": 1290 + }, + { + "block": 1, + "color": 2, + "type": 4, + "position": { + "x": 540, + "y": 120, + "z": 0 + }, + "freezeTime": 12, + "id": 1300 + }, + { + "block": 1, + "color": 3, + "type": 4, + "position": { + "x": 540, + "y": -120, + "z": 0 + }, + "freezeTime": 12, + "id": 1310 + }, + { + "block": 1, + "color": 3, + "type": 4, + "position": { + "x": 540, + "y": -360, + "z": 0 + }, + "freezeTime": 12, + "id": 1320 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2027, + "num": 3, + "color": 3, + "special": 0, + "length": 2, + "colorArray": "2894072944552276671010107" + }, + { + "id": 2028, + "num": 4, + "color": 3, + "special": 0, + "length": 0, + "colorArray": "2894072944552276671010107" + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2026.json.meta b/assets/custom/Json/level2026.json.meta new file mode 100644 index 00000000..599191d0 --- /dev/null +++ b/assets/custom/Json/level2026.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "8177504b-6707-47e7-8e69-a8e08ff834cf", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2027.json b/assets/custom/Json/level2027.json new file mode 100644 index 00000000..bc4893fa --- /dev/null +++ b/assets/custom/Json/level2027.json @@ -0,0 +1,638 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2027", + "map": [ + 10, + 12 + ], + "time": 55, + "gap": [ + { + "x": 1, + "y": 1, + "z": 0 + }, + { + "x": 1, + "y": 2, + "z": 0 + }, + { + "x": 1, + "y": 3, + "z": 0 + }, + { + "x": 1, + "y": 10, + "z": 0 + }, + { + "x": 1, + "y": 9, + "z": 0 + }, + { + "x": 1, + "y": 8, + "z": 0 + }, + { + "x": 8, + "y": 10, + "z": 0 + }, + { + "x": 8, + "y": 9, + "z": 0 + }, + { + "x": 8, + "y": 8, + "z": 0 + }, + { + "x": 8, + "y": 3, + "z": 0 + }, + { + "x": 8, + "y": 2, + "z": 0 + }, + { + "x": 8, + "y": 1, + "z": 0 + }, + { + "x": 2, + "y": 1, + "z": 0 + }, + { + "x": 3, + "y": 1, + "z": 0 + }, + { + "x": 6, + "y": 1, + "z": 0 + }, + { + "x": 7, + "y": 1, + "z": 0 + }, + { + "x": 2, + "y": 2, + "z": 0 + }, + { + "x": 7, + "y": 2, + "z": 0 + }, + { + "x": 2, + "y": 10, + "z": 0 + }, + { + "x": 3, + "y": 10, + "z": 0 + }, + { + "x": 6, + "y": 10, + "z": 0 + }, + { + "x": 7, + "y": 10, + "z": 0 + }, + { + "x": 7, + "y": 9, + "z": 0 + }, + { + "x": 2, + "y": 9, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": -240, + "y": 240, + "z": 0 + }, + "id": 1000 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": -360, + "y": -120, + "z": 0 + }, + "id": 1010 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": -360, + "y": 120, + "z": 0 + }, + "id": 1020 + }, + { + "block": 2, + "color": 2, + "type": 0, + "position": { + "x": 0, + "y": -360, + "z": 0 + }, + "id": 1030 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": -360, + "y": -240, + "z": 0 + }, + "id": 1040 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": -240, + "y": 120, + "z": 0 + }, + "id": 1050 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": -360, + "y": 0, + "z": 0 + }, + "id": 1060 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": 0, + "y": 120, + "z": 0 + }, + "id": 1070 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": -120, + "y": -240, + "z": 0 + }, + "id": 1080 + }, + { + "block": 2, + "color": 6, + "type": 0, + "position": { + "x": -120, + "y": -480, + "z": 0 + }, + "id": 1090 + }, + { + "block": 2, + "color": 6, + "type": 0, + "position": { + "x": -120, + "y": 0, + "z": 0 + }, + "id": 1100 + }, + { + "block": 2, + "color": 6, + "type": 0, + "position": { + "x": 0, + "y": 360, + "z": 0 + }, + "id": 1110 + }, + { + "block": 2, + "color": 10, + "type": 1, + "position": { + "x": 0, + "y": -600, + "z": 0 + }, + "stacking": 8, + "id": 1120 + }, + { + "block": 2, + "color": 10, + "type": 1, + "position": { + "x": 0, + "y": -120, + "z": 0 + }, + "stacking": 8, + "id": 1130 + }, + { + "block": 2, + "color": 2, + "type": 1, + "position": { + "x": -120, + "y": 240, + "z": 0 + }, + "stacking": 8, + "id": 1140 + }, + { + "block": 2, + "color": 6, + "type": 1, + "position": { + "x": -240, + "y": -120, + "z": 0 + }, + "stacking": 7, + "id": 1150 + }, + { + "block": 2, + "color": 2, + "type": 1, + "position": { + "x": -240, + "y": -360, + "z": 0 + }, + "stacking": 7, + "id": 1160 + }, + { + "block": 4, + "color": 6, + "type": 0, + "position": { + "x": 120, + "y": 240, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1170 + }, + { + "block": 4, + "color": 6, + "type": 0, + "position": { + "x": 120, + "y": -480, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1180 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": 120, + "y": -600, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1190 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 120, + "y": 120, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1200 + }, + { + "block": 2, + "color": 6, + "type": 1, + "position": { + "x": 120, + "y": -120, + "z": 0 + }, + "stacking": 7, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1210 + }, + { + "block": 4, + "color": 6, + "type": 0, + "position": { + "x": 240, + "y": 120, + "z": 0 + }, + "floor": 2, + "floorTime": 22, + "floorMove": false, + "id": 1220 + }, + { + "block": 0, + "color": 6, + "type": 0, + "position": { + "x": 480, + "y": -120, + "z": 0 + }, + "floor": 2, + "floorTime": 22, + "floorMove": false, + "id": 1230 + }, + { + "block": 1, + "color": 6, + "type": 0, + "position": { + "x": 360, + "y": -360, + "z": 0 + }, + "floor": 2, + "floorTime": 22, + "floorMove": false, + "id": 1240 + }, + { + "block": 22, + "color": 2, + "type": 0, + "position": { + "x": 360, + "y": -240, + "z": 0 + }, + "floor": 2, + "floorTime": 22, + "floorMove": false, + "id": 1250 + }, + { + "block": 2, + "color": 2, + "type": 0, + "position": { + "x": 360, + "y": 120, + "z": 0 + }, + "floor": 2, + "floorTime": 22, + "floorMove": false, + "id": 1260 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": 480, + "y": 0, + "z": 0 + }, + "floor": 2, + "floorTime": 22, + "floorMove": false, + "id": 1270 + }, + { + "block": 1, + "color": 10, + "type": 0, + "position": { + "x": 360, + "y": 0, + "z": 0 + }, + "floor": 2, + "floorTime": 22, + "floorMove": false, + "id": 1280 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 480, + "y": 120, + "z": 0 + }, + "floor": 2, + "floorTime": 22, + "floorMove": false, + "id": 1290 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 240, + "y": -240, + "z": 0 + }, + "floor": 2, + "floorTime": 22, + "floorMove": false, + "id": 1300 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 480, + "y": -240, + "z": 0 + }, + "floor": 2, + "floorTime": 22, + "floorMove": false, + "id": 1310 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": 240, + "y": -480, + "z": 0 + }, + "floor": 2, + "floorTime": 22, + "floorMove": false, + "id": 1320 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2028, + "num": 0, + "color": 10, + "special": 3, + "length": 2, + "freeze": 3 + }, + { + "id": 2029, + "num": 1, + "color": 10, + "special": 3, + "length": 0, + "freeze": 3 + }, + { + "id": 2030, + "num": 2, + "color": 2, + "special": 0, + "length": 2 + }, + { + "id": 2031, + "num": 3, + "color": 2, + "special": 0, + "length": 0 + }, + { + "id": 2032, + "num": 17, + "color": 6, + "special": 3, + "length": 2, + "freeze": 13 + }, + { + "id": 2033, + "num": 19, + "color": 6, + "special": 3, + "length": 0, + "freeze": 13 + }, + { + "id": 2034, + "num": 33, + "color": 8, + "special": 3, + "length": 2, + "freeze": 22 + }, + { + "id": 2035, + "num": 34, + "color": 8, + "special": 3, + "length": 0, + "freeze": 22 + }, + { + "id": 2036, + "num": 16, + "color": 7, + "special": 3, + "length": 2, + "freeze": 36 + }, + { + "id": 2037, + "num": 18, + "color": 7, + "special": 3, + "length": 0, + "freeze": 36 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2027.json.meta b/assets/custom/Json/level2027.json.meta new file mode 100644 index 00000000..3af9702b --- /dev/null +++ b/assets/custom/Json/level2027.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "4c17938e-67a5-4ad0-bc60-2e31c89d561b", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2028.json b/assets/custom/Json/level2028.json new file mode 100644 index 00000000..0cd25f40 --- /dev/null +++ b/assets/custom/Json/level2028.json @@ -0,0 +1,379 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2028", + "map": [ + 8, + 8 + ], + "time": 55, + "gap": [ + { + "x": 6, + "y": 6, + "z": 0 + }, + { + "x": 1, + "y": 3, + "z": 0 + }, + { + "x": 2, + "y": 3, + "z": 0 + }, + { + "x": 2, + "y": 2, + "z": 0 + }, + { + "x": 1, + "y": 2, + "z": 0 + }, + { + "x": 1, + "y": 1, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": 0, + "y": -360, + "z": 0 + }, + "id": 1000 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": 120, + "y": -240, + "z": 0 + }, + "id": 1010 + }, + { + "block": 0, + "color": 6, + "type": 0, + "position": { + "x": -120, + "y": -360, + "z": 0 + }, + "id": 1020 + }, + { + "block": 0, + "color": 6, + "type": 0, + "position": { + "x": 120, + "y": -360, + "z": 0 + }, + "id": 1030 + }, + { + "block": 0, + "color": 6, + "type": 0, + "position": { + "x": 0, + "y": -240, + "z": 0 + }, + "id": 1040 + }, + { + "block": 15, + "color": 1, + "type": 0, + "position": { + "x": 0, + "y": 120, + "z": 0 + }, + "id": 1050 + }, + { + "block": 1, + "color": 9, + "type": 0, + "position": { + "x": 360, + "y": 0, + "z": 0 + }, + "id": 1060 + }, + { + "block": 1, + "color": 4, + "type": 1, + "position": { + "x": -120, + "y": 0, + "z": 0 + }, + "stacking": 1, + "id": 1070 + }, + { + "block": 2, + "color": 4, + "type": 1, + "position": { + "x": 240, + "y": 120, + "z": 0 + }, + "stacking": 1, + "id": 1080 + }, + { + "block": 0, + "color": 10, + "type": 1, + "position": { + "x": 120, + "y": 0, + "z": 0 + }, + "stacking": 1, + "id": 1090 + }, + { + "block": 0, + "color": 10, + "type": 1, + "position": { + "x": 360, + "y": -120, + "z": 0 + }, + "stacking": 1, + "id": 1100 + }, + { + "block": 0, + "color": 10, + "type": 1, + "position": { + "x": 240, + "y": -360, + "z": 0 + }, + "stacking": 1, + "id": 1110 + }, + { + "block": 0, + "color": 10, + "type": 1, + "position": { + "x": 360, + "y": 120, + "z": 0 + }, + "stacking": 1, + "id": 1120 + }, + { + "block": 0, + "color": 10, + "type": 1, + "position": { + "x": 0, + "y": 240, + "z": 0 + }, + "stacking": 1, + "id": 1130 + }, + { + "block": 0, + "color": 10, + "type": 1, + "position": { + "x": -240, + "y": 240, + "z": 0 + }, + "stacking": 1, + "id": 1140 + }, + { + "block": 20, + "color": 8, + "type": 1, + "position": { + "x": 120, + "y": -120, + "z": 0 + }, + "stacking": 1, + "id": 1150 + }, + { + "block": 2, + "color": 6, + "type": 8, + "position": { + "x": 120, + "y": 120, + "z": 0 + }, + "id": 1160 + }, + { + "block": 2, + "color": 1, + "type": 0, + "position": { + "x": 240, + "y": -240, + "z": 0 + }, + "id": 1170 + }, + { + "block": 0, + "color": 8, + "type": 9, + "position": { + "x": 360, + "y": -240, + "z": 0 + }, + "adhesiveTime": 2, + "id": 1180 + }, + { + "block": 0, + "color": 2, + "type": 9, + "position": { + "x": 360, + "y": -360, + "z": 0 + }, + "adhesiveTime": 1, + "id": 1190 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2029, + "num": 0, + "color": 10, + "special": 3, + "length": 2, + "freeze": 6 + }, + { + "id": 2030, + "num": 1, + "color": 10, + "special": 3, + "length": 0, + "freeze": 6 + }, + { + "id": 2031, + "num": 11, + "color": 9, + "special": 3, + "length": 2, + "freeze": 17 + }, + { + "id": 2032, + "num": 13, + "color": 9, + "special": 3, + "length": 0, + "freeze": 17 + }, + { + "id": 2033, + "num": 15, + "color": 8, + "special": 3, + "length": 2, + "freeze": 15 + }, + { + "id": 2034, + "num": 17, + "color": 8, + "special": 3, + "length": 0, + "freeze": 15 + }, + { + "id": 2035, + "num": 24, + "color": 1, + "special": 3, + "length": 2, + "freeze": 18 + }, + { + "id": 2036, + "num": 25, + "color": 1, + "special": 3, + "length": 0, + "freeze": 18 + }, + { + "id": 2037, + "num": 21, + "color": 4, + "special": 3, + "length": 2, + "freeze": 13 + }, + { + "id": 2038, + "num": 22, + "color": 4, + "special": 3, + "length": 0, + "freeze": 13 + }, + { + "id": 2039, + "num": 14, + "color": 6, + "special": 3, + "length": 1, + "freeze": 2 + }, + { + "id": 2040, + "num": 12, + "color": 2, + "special": 0, + "length": 1 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2028.json.meta b/assets/custom/Json/level2028.json.meta new file mode 100644 index 00000000..060c7ab2 --- /dev/null +++ b/assets/custom/Json/level2028.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "dd431f72-b0f6-48a6-8518-247293ee4005", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2029.json b/assets/custom/Json/level2029.json new file mode 100644 index 00000000..02d6c33a --- /dev/null +++ b/assets/custom/Json/level2029.json @@ -0,0 +1,509 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [ + { + "x": 1, + "y": 5, + "color": 10 + }, + { + "x": 2, + "y": 5, + "color": 1 + }, + { + "x": 3, + "y": 5, + "color": 3 + }, + { + "x": 4, + "y": 5, + "color": 9 + }, + { + "x": 5, + "y": 5, + "color": 2 + }, + { + "x": 6, + "y": 5, + "color": 8 + }, + { + "x": 7, + "y": 5, + "color": 7 + }, + { + "x": 8, + "y": 5, + "color": 6 + } + ], + "id": "2029", + "map": [ + 10, + 11 + ], + "time": 60, + "gap": [ + { + "x": 5, + "y": 9, + "z": 0 + }, + { + "x": 5, + "y": 8, + "z": 0 + }, + { + "x": 6, + "y": 9, + "z": 0 + }, + { + "x": 6, + "y": 8, + "z": 0 + }, + { + "x": 7, + "y": 9, + "z": 0 + }, + { + "x": 7, + "y": 8, + "z": 0 + }, + { + "x": 8, + "y": 9, + "z": 0 + }, + { + "x": 8, + "y": 8, + "z": 0 + }, + { + "x": 1, + "y": 2, + "z": 0 + }, + { + "x": 1, + "y": 1, + "z": 0 + }, + { + "x": 2, + "y": 2, + "z": 0 + }, + { + "x": 2, + "y": 1, + "z": 0 + }, + { + "x": 3, + "y": 2, + "z": 0 + }, + { + "x": 3, + "y": 1, + "z": 0 + }, + { + "x": 4, + "y": 2, + "z": 0 + }, + { + "x": 4, + "y": 1, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 1, + "color": 5, + "type": 0, + "position": { + "x": -240, + "y": 180, + "z": 0 + }, + "id": 1000 + }, + { + "block": 1, + "color": 5, + "type": 0, + "position": { + "x": 480, + "y": 60, + "z": 0 + }, + "id": 1010 + }, + { + "block": 1, + "color": 5, + "type": 0, + "position": { + "x": 240, + "y": 180, + "z": 0 + }, + "id": 1020 + }, + { + "block": 1, + "color": 5, + "type": 0, + "position": { + "x": 0, + "y": 60, + "z": 0 + }, + "id": 1030 + }, + { + "block": 1, + "color": 5, + "type": 0, + "position": { + "x": 480, + "y": -180, + "z": 0 + }, + "id": 1040 + }, + { + "block": 1, + "color": 5, + "type": 0, + "position": { + "x": 240, + "y": -300, + "z": 0 + }, + "id": 1050 + }, + { + "block": 1, + "color": 5, + "type": 0, + "position": { + "x": -240, + "y": -300, + "z": 0 + }, + "id": 1060 + }, + { + "block": 1, + "color": 5, + "type": 0, + "position": { + "x": 0, + "y": -180, + "z": 0 + }, + "id": 1070 + }, + { + "block": 1, + "color": 4, + "type": 0, + "position": { + "x": 240, + "y": 60, + "z": 0 + }, + "id": 1080 + }, + { + "block": 1, + "color": 4, + "type": 0, + "position": { + "x": 480, + "y": 180, + "z": 0 + }, + "id": 1090 + }, + { + "block": 1, + "color": 4, + "type": 0, + "position": { + "x": -240, + "y": 60, + "z": 0 + }, + "id": 1100 + }, + { + "block": 1, + "color": 4, + "type": 0, + "position": { + "x": -240, + "y": -180, + "z": 0 + }, + "id": 1110 + }, + { + "block": 1, + "color": 4, + "type": 0, + "position": { + "x": 0, + "y": 180, + "z": 0 + }, + "id": 1120 + }, + { + "block": 1, + "color": 4, + "type": 0, + "position": { + "x": 480, + "y": -300, + "z": 0 + }, + "id": 1130 + }, + { + "block": 1, + "color": 4, + "type": 0, + "position": { + "x": 0, + "y": -300, + "z": 0 + }, + "id": 1140 + }, + { + "block": 1, + "color": 4, + "type": 0, + "position": { + "x": 240, + "y": -180, + "z": 0 + }, + "id": 1150 + }, + { + "block": 2, + "color": 10, + "type": 1, + "position": { + "x": -360, + "y": 300, + "z": 0 + }, + "stacking": 6, + "id": 1160 + }, + { + "block": 2, + "color": 1, + "type": 1, + "position": { + "x": -240, + "y": 300, + "z": 0 + }, + "stacking": 7, + "id": 1170 + }, + { + "block": 2, + "color": 3, + "type": 1, + "position": { + "x": -120, + "y": 300, + "z": 0 + }, + "stacking": 8, + "id": 1180 + }, + { + "block": 2, + "color": 9, + "type": 1, + "position": { + "x": 0, + "y": 300, + "z": 0 + }, + "stacking": 2, + "id": 1190 + }, + { + "block": 2, + "color": 2, + "type": 1, + "position": { + "x": 120, + "y": -540, + "z": 0 + }, + "stacking": 9, + "id": 1200 + }, + { + "block": 2, + "color": 8, + "type": 1, + "position": { + "x": 240, + "y": -540, + "z": 0 + }, + "stacking": 3, + "id": 1210 + }, + { + "block": 2, + "color": 7, + "type": 1, + "position": { + "x": 360, + "y": -540, + "z": 0 + }, + "stacking": 1, + "id": 1220 + }, + { + "block": 2, + "color": 6, + "type": 1, + "position": { + "x": 480, + "y": -540, + "z": 0 + }, + "stacking": 10, + "id": 1230 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2030, + "num": 3, + "color": 4, + "special": 0, + "length": 1 + }, + { + "id": 2031, + "num": 4, + "color": 5, + "special": 0, + "length": 1 + }, + { + "id": 2032, + "num": 8, + "color": 6, + "special": 3, + "length": 1, + "freeze": 17 + }, + { + "id": 2033, + "num": 10, + "color": 7, + "special": 3, + "length": 1, + "freeze": 20 + }, + { + "id": 2034, + "num": 12, + "color": 8, + "special": 3, + "length": 1, + "freeze": 24 + }, + { + "id": 2035, + "num": 16, + "color": 2, + "special": 3, + "length": 1, + "freeze": 28 + }, + { + "id": 2036, + "num": 30, + "color": 5, + "special": 3, + "length": 1, + "freeze": 8 + }, + { + "id": 2037, + "num": 29, + "color": 4, + "special": 3, + "length": 1, + "freeze": 8 + }, + { + "id": 2038, + "num": 25, + "color": 10, + "special": 0, + "length": 1 + }, + { + "id": 2039, + "num": 23, + "color": 1, + "special": 3, + "length": 1, + "freeze": 21 + }, + { + "id": 2040, + "num": 21, + "color": 3, + "special": 3, + "length": 1, + "freeze": 25 + }, + { + "id": 2041, + "num": 17, + "color": 9, + "special": 3, + "length": 1, + "freeze": 29 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2029.json.meta b/assets/custom/Json/level2029.json.meta new file mode 100644 index 00000000..ab84158e --- /dev/null +++ b/assets/custom/Json/level2029.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "55151efd-7f90-4906-a5a0-96778bc98755", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2030.json b/assets/custom/Json/level2030.json new file mode 100644 index 00000000..bd796091 --- /dev/null +++ b/assets/custom/Json/level2030.json @@ -0,0 +1,525 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2030", + "map": [ + 9, + 10 + ], + "time": 65, + "gap": [ + { + "x": 2, + "y": 8, + "z": 0 + }, + { + "x": 1, + "y": 8, + "z": 0 + }, + { + "x": 6, + "y": 8, + "z": 0 + }, + { + "x": 7, + "y": 8, + "z": 0 + }, + { + "x": 2, + "y": 7, + "z": 0 + }, + { + "x": 1, + "y": 7, + "z": 0 + }, + { + "x": 1, + "y": 6, + "z": 0 + }, + { + "x": 6, + "y": 7, + "z": 0 + }, + { + "x": 7, + "y": 7, + "z": 0 + }, + { + "x": 7, + "y": 6, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 3, + "color": 8, + "type": 0, + "position": { + "x": 300, + "y": 120, + "z": 0 + }, + "id": 1000 + }, + { + "block": 1, + "color": 8, + "type": 0, + "position": { + "x": 420, + "y": 0, + "z": 0 + }, + "id": 1010 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 300, + "y": -360, + "z": 0 + }, + "id": 1020 + }, + { + "block": 5, + "color": 6, + "type": 0, + "position": { + "x": 180, + "y": -480, + "z": 0 + }, + "id": 1030 + }, + { + "block": 2, + "color": 2, + "type": 0, + "position": { + "x": 300, + "y": -240, + "z": 0 + }, + "id": 1040 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": 420, + "y": -360, + "z": 0 + }, + "id": 1050 + }, + { + "block": 2, + "color": 9, + "type": 0, + "position": { + "x": 180, + "y": -240, + "z": 0 + }, + "id": 1060 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": 180, + "y": 240, + "z": 0 + }, + "id": 1070 + }, + { + "block": 0, + "color": 6, + "type": 0, + "position": { + "x": 180, + "y": 0, + "z": 0 + }, + "id": 1080 + }, + { + "block": 0, + "color": 3, + "type": 0, + "position": { + "x": 60, + "y": 0, + "z": 0 + }, + "id": 1090 + }, + { + "block": 1, + "color": 1, + "type": 1, + "position": { + "x": 420, + "y": -480, + "z": 0 + }, + "stacking": 10, + "id": 1100 + }, + { + "block": 2, + "color": 3, + "type": 1, + "position": { + "x": 420, + "y": -240, + "z": 0 + }, + "stacking": 1, + "id": 1110 + }, + { + "block": 2, + "color": 6, + "type": 1, + "position": { + "x": 60, + "y": -240, + "z": 0 + }, + "stacking": 2, + "id": 1120 + }, + { + "block": 2, + "color": 2, + "type": 1, + "position": { + "x": 60, + "y": 240, + "z": 0 + }, + "stacking": 9, + "id": 1130 + }, + { + "block": 0, + "color": 6, + "type": 0, + "position": { + "x": -60, + "y": 360, + "z": 0 + }, + "floor": 1, + "floorTime": 11, + "floorMove": false, + "id": 1140 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": -180, + "y": 120, + "z": 0 + }, + "floor": 1, + "floorTime": 11, + "floorMove": false, + "id": 1150 + }, + { + "block": 0, + "color": 6, + "type": 0, + "position": { + "x": -300, + "y": 0, + "z": 0 + }, + "floor": 1, + "floorTime": 11, + "floorMove": false, + "id": 1160 + }, + { + "block": 0, + "color": 6, + "type": 0, + "position": { + "x": -60, + "y": -360, + "z": 0 + }, + "floor": 1, + "floorTime": 11, + "floorMove": false, + "id": 1170 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": -60, + "y": -240, + "z": 0 + }, + "floor": 1, + "floorTime": 11, + "floorMove": false, + "id": 1180 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": -180, + "y": -360, + "z": 0 + }, + "floor": 1, + "floorTime": 11, + "floorMove": false, + "id": 1190 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": -300, + "y": -120, + "z": 0 + }, + "floor": 1, + "floorTime": 11, + "floorMove": false, + "id": 1200 + }, + { + "block": 3, + "color": 10, + "type": 2, + "position": { + "x": -60, + "y": -480, + "z": 0 + }, + "floor": 1, + "floorTime": 11, + "floorMove": false, + "id": 1210 + }, + { + "block": 1, + "color": 10, + "type": 2, + "position": { + "x": -180, + "y": -240, + "z": 0 + }, + "floor": 1, + "floorTime": 11, + "floorMove": false, + "id": 1220 + }, + { + "block": 1, + "color": 2, + "type": 2, + "position": { + "x": -60, + "y": 0, + "z": 0 + }, + "floor": 1, + "floorTime": 11, + "floorMove": false, + "id": 1230 + }, + { + "block": 0, + "color": 3, + "type": 2, + "position": { + "x": -300, + "y": -360, + "z": 0 + }, + "floor": 1, + "floorTime": 11, + "floorMove": false, + "id": 1240 + }, + { + "block": 1, + "color": 3, + "type": 3, + "position": { + "x": -60, + "y": -120, + "z": 0 + }, + "lockTime": 4, + "floor": 1, + "floorTime": 11, + "floorMove": false, + "id": 1250 + }, + { + "block": 2, + "color": 3, + "type": 1, + "position": { + "x": -60, + "y": 120, + "z": 0 + }, + "stacking": 1, + "floor": 1, + "floorTime": 11, + "floorMove": false, + "id": 1260 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2031, + "num": 3, + "color": 10, + "special": 3, + "length": 2, + "freeze": 26 + }, + { + "id": 2032, + "num": 4, + "color": 10, + "special": 3, + "length": 0, + "freeze": 26 + }, + { + "id": 2033, + "num": 15, + "color": 3, + "special": 3, + "length": 2, + "freeze": 3 + }, + { + "id": 2034, + "num": 17, + "color": 3, + "special": 3, + "length": 0, + "freeze": 3 + }, + { + "id": 2035, + "num": 28, + "color": 8, + "special": 0, + "length": 2 + }, + { + "id": 2036, + "num": 29, + "color": 8, + "special": 0, + "length": 0 + }, + { + "id": 2037, + "num": 26, + "color": 9, + "special": 3, + "length": 2, + "freeze": 21 + }, + { + "id": 2038, + "num": 27, + "color": 9, + "special": 3, + "length": 0, + "freeze": 21 + }, + { + "id": 2039, + "num": 18, + "color": 6, + "special": 3, + "length": 2, + "freeze": 1 + }, + { + "id": 2040, + "num": 22, + "color": 6, + "special": 3, + "length": 0, + "freeze": 1 + }, + { + "id": 2041, + "num": 14, + "color": 2, + "special": 3, + "length": 2, + "freeze": 5 + }, + { + "id": 2042, + "num": 16, + "color": 2, + "special": 3, + "length": 0, + "freeze": 5 + }, + { + "id": 2043, + "num": 5, + "color": 1, + "special": 3, + "length": 2, + "freeze": 24 + }, + { + "id": 2044, + "num": 8, + "color": 1, + "special": 3, + "length": 0, + "freeze": 24 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2030.json.meta b/assets/custom/Json/level2030.json.meta new file mode 100644 index 00000000..19582c2d --- /dev/null +++ b/assets/custom/Json/level2030.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "b0320cd7-d9eb-4542-8057-620c013ef940", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2031.json b/assets/custom/Json/level2031.json new file mode 100644 index 00000000..d7d4ff87 --- /dev/null +++ b/assets/custom/Json/level2031.json @@ -0,0 +1,626 @@ +{ + "LEVEL_INFO": [ + { + "id": "2031", + "map": [ + 9, + 13 + ], + "time": 155, + "gap": [ + { + "x": 1, + "y": 11 + }, + { + "x": 1, + "y": 10 + }, + { + "x": 7, + "y": 5 + }, + { + "x": 7, + "y": 6 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "type": 0, + "block": 0, + "color": 2, + "position": { + "x": 60, + "y": 540, + "z": 0 + }, + "id": 210 + }, + { + "type": 0, + "block": 1, + "color": 2, + "position": { + "x": 180, + "y": -300, + "z": 0 + }, + "id": 220 + }, + { + "type": 0, + "block": 22, + "color": 2, + "position": { + "x": 420, + "y": -540, + "z": 0 + }, + "id": 230 + }, + { + "type": 0, + "block": 20, + "color": 4, + "position": { + "x": 420, + "y": -660, + "z": 0 + }, + "id": 250 + }, + { + "type": 0, + "block": 1, + "color": 1, + "position": { + "x": 180, + "y": -420, + "z": 0 + }, + "id": 260 + }, + { + "type": 0, + "block": 0, + "color": 1, + "position": { + "x": -300, + "y": -60, + "z": 0 + }, + "id": 270 + }, + { + "type": 0, + "block": 0, + "color": 1, + "position": { + "x": 60, + "y": 420, + "z": 0 + }, + "id": 280 + }, + { + "type": 0, + "block": 0, + "color": 3, + "position": { + "x": 300, + "y": -60, + "z": 0 + }, + "id": 290 + }, + { + "type": 0, + "block": 0, + "color": 3, + "position": { + "x": 300, + "y": -180, + "z": 0 + }, + "id": 300 + }, + { + "type": 0, + "block": 1, + "color": 3, + "position": { + "x": 420, + "y": -300, + "z": 0 + }, + "id": 310 + }, + { + "type": 0, + "block": 0, + "color": 3, + "position": { + "x": -180, + "y": -60, + "z": 0 + }, + "id": 320 + }, + { + "type": 0, + "block": 0, + "color": 3, + "position": { + "x": 60, + "y": 180, + "z": 0 + }, + "id": 330 + }, + { + "type": 0, + "block": 1, + "color": 5, + "position": { + "x": 180, + "y": -60, + "z": 0 + }, + "id": 340 + }, + { + "type": 0, + "block": 0, + "color": 6, + "position": { + "x": -60, + "y": -60, + "z": 0 + }, + "id": 350 + }, + { + "type": 0, + "block": 0, + "color": 6, + "position": { + "x": 60, + "y": 300, + "z": 0 + }, + "id": 360 + }, + { + "type": 0, + "block": 0, + "color": 8, + "position": { + "x": 60, + "y": 60, + "z": 0 + }, + "id": 370 + }, + { + "type": 0, + "block": 1, + "color": 8, + "position": { + "x": 180, + "y": -180, + "z": 0 + }, + "id": 380 + }, + { + "type": 1, + "stacking": 4, + "block": 5, + "color": 7, + "position": { + "x": 180, + "y": -660, + "z": 0 + }, + "id": 390 + }, + { + "type": 0, + "floor": 1, + "floorTime": 5, + "floorMove": false, + "floorColor": 3, + "block": 5, + "color": 10, + "position": { + "x": -180, + "y": -300, + "z": 0 + }, + "id": 450 + }, + { + "type": 0, + "floor": 2, + "floorTime": 5, + "floorMove": false, + "floorColor": 3, + "block": 0, + "color": 1, + "position": { + "x": -300, + "y": -420, + "z": 0 + }, + "id": 460 + }, + { + "type": 0, + "floor": 3, + "floorTime": 5, + "floorMove": false, + "floorColor": 3, + "block": 20, + "color": 8, + "position": { + "x": -180, + "y": -660, + "z": 0 + }, + "id": 470 + }, + { + "type": 1, + "stacking": 7, + "floor": 4, + "floorTime": 5, + "floorMove": false, + "floorColor": 3, + "block": 12, + "color": 4, + "position": { + "x": -60, + "y": -420, + "z": 0 + }, + "id": 480 + }, + { + "type": 1, + "stacking": 1, + "floor": 5, + "floorTime": 5, + "floorMove": false, + "floorColor": 3, + "block": 22, + "color": 2, + "position": { + "x": -60, + "y": -660, + "z": 0 + }, + "id": 490 + }, + { + "type": 1, + "stacking": 5, + "floor": 6, + "floorTime": 4, + "floorMove": false, + "floorColor": 1, + "block": 21, + "color": 4, + "position": { + "x": -180, + "y": 420, + "z": 0 + }, + "id": 500 + }, + { + "type": 1, + "stacking": 7, + "floor": 7, + "floorTime": 4, + "floorMove": false, + "floorColor": 1, + "block": 1, + "color": 2, + "position": { + "x": -60, + "y": 180, + "z": 0 + }, + "id": 510 + }, + { + "type": 0, + "floor": 8, + "floorTime": 4, + "floorMove": false, + "floorColor": 1, + "block": 1, + "color": 5, + "position": { + "x": -180, + "y": 60, + "z": 0 + }, + "id": 520 + }, + { + "type": 0, + "floor": 9, + "floorTime": 4, + "floorMove": false, + "floorColor": 1, + "block": 0, + "color": 5, + "position": { + "x": -60, + "y": 60, + "z": 0 + }, + "id": 530 + }, + { + "type": 0, + "floor": 10, + "floorTime": 4, + "floorMove": false, + "floorColor": 1, + "block": 2, + "color": 7, + "position": { + "x": -60, + "y": 300, + "z": 0 + }, + "id": 540 + }, + { + "type": 0, + "floor": 11, + "floorTime": 4, + "floorMove": false, + "floorColor": 1, + "block": 1, + "color": 6, + "position": { + "x": -180, + "y": 300, + "z": 0 + }, + "id": 560 + }, + { + "type": 0, + "floor": 12, + "floorTime": 4, + "floorMove": false, + "floorColor": 1, + "block": 0, + "color": 4, + "position": { + "x": -300, + "y": 180, + "z": 0 + }, + "id": 570 + }, + { + "type": 0, + "floor": 13, + "floorTime": 5, + "floorMove": false, + "floorColor": 2, + "block": 21, + "color": 8, + "position": { + "x": 180, + "y": 420, + "z": 0 + }, + "id": 580 + }, + { + "type": 0, + "floor": 14, + "floorTime": 5, + "floorMove": false, + "floorColor": 2, + "block": 22, + "color": 8, + "position": { + "x": 420, + "y": 60, + "z": 0 + }, + "id": 590 + }, + { + "type": 0, + "floor": 15, + "floorTime": 5, + "floorMove": false, + "floorColor": 2, + "block": 1, + "color": 5, + "position": { + "x": 300, + "y": 300, + "z": 0 + }, + "id": 600 + }, + { + "type": 1, + "stacking": 5, + "floor": 16, + "floorTime": 5, + "floorMove": false, + "floorColor": 2, + "block": 17, + "color": 6, + "position": { + "x": 420, + "y": 300, + "z": 0 + }, + "id": 610 + }, + { + "type": 1, + "stacking": 6, + "floor": 17, + "floorTime": 5, + "floorMove": false, + "floorColor": 2, + "block": 20, + "color": 7, + "position": { + "x": 300, + "y": 60, + "z": 0 + }, + "id": 620 + } + ] + ], + "WALL_INFO": [ + [ + { + "freeze": 30, + "id": 400, + "num": 6, + "color": 7, + "special": 3, + "length": 3 + }, + { + "freeze": 30, + "id": 400, + "num": 7, + "color": 7, + "special": 3, + "length": 0 + }, + { + "freeze": 30, + "id": 400, + "num": 8, + "color": 7, + "special": 3, + "length": 0 + }, + { + "freeze": 35, + "id": 410, + "num": 33, + "color": 4, + "special": 3, + "length": 3 + }, + { + "freeze": 35, + "id": 410, + "num": 34, + "color": 4, + "special": 3, + "length": 0 + }, + { + "freeze": 35, + "id": 410, + "num": 35, + "color": 4, + "special": 3, + "length": 0 + }, + { + "freeze": 20, + "id": 420, + "num": 29, + "color": 10, + "special": 3, + "length": 2 + }, + { + "freeze": 20, + "id": 420, + "num": 30, + "color": 10, + "special": 3, + "length": 0 + }, + { + "freeze": 21, + "id": 430, + "num": 21, + "color": 6, + "special": 3, + "length": 2 + }, + { + "freeze": 21, + "id": 430, + "num": 23, + "color": 6, + "special": 3, + "length": 0 + }, + { + "freeze": 25, + "id": 440, + "num": 9, + "color": 5, + "special": 3, + "length": 2 + }, + { + "freeze": 25, + "id": 440, + "num": 13, + "color": 5, + "special": 3, + "length": 0 + }, + { + "id": 640, + "num": 14, + "color": 2, + "special": 0, + "length": 2, + "colorArray": "1111177777" + }, + { + "id": 640, + "num": 16, + "color": 2, + "special": 0, + "length": 0, + "colorArray": "1111177777" + }, + { + "id": 650, + "num": 31, + "color": 3, + "special": 0, + "length": 2, + "colorArray": "2222200000" + }, + { + "id": 650, + "num": 32, + "color": 3, + "special": 0, + "length": 0, + "colorArray": "2222200000" + } + ] + ] +} diff --git a/assets/custom/Json/level2031.json.meta b/assets/custom/Json/level2031.json.meta new file mode 100644 index 00000000..8b74ad80 --- /dev/null +++ b/assets/custom/Json/level2031.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "39f57893-fef8-4f30-9df4-6954d613a8ab", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2032.json b/assets/custom/Json/level2032.json new file mode 100644 index 00000000..cc5d926b --- /dev/null +++ b/assets/custom/Json/level2032.json @@ -0,0 +1,809 @@ +{ + "LEVEL_INFO": [ + { + "id": "2032", + "map": [ + 13, + 13 + ], + "time": 85, + "gap": [ + { + "x": 4, + "y": 11 + }, + { + "x": 3, + "y": 11 + }, + { + "x": 2, + "y": 11 + }, + { + "x": 1, + "y": 11 + }, + { + "x": 9, + "y": 11 + }, + { + "x": 10, + "y": 11 + }, + { + "x": 11, + "y": 11 + }, + { + "x": 8, + "y": 11 + }, + { + "x": 3, + "y": 10 + }, + { + "x": 2, + "y": 10 + }, + { + "x": 1, + "y": 10 + }, + { + "x": 1, + "y": 9 + }, + { + "x": 2, + "y": 9 + }, + { + "x": 9, + "y": 10 + }, + { + "x": 10, + "y": 10 + }, + { + "x": 11, + "y": 10 + }, + { + "x": 11, + "y": 9 + }, + { + "x": 10, + "y": 9 + }, + { + "x": 1, + "y": 8 + }, + { + "x": 11, + "y": 8 + }, + { + "x": 11, + "y": 3 + }, + { + "x": 11, + "y": 4 + }, + { + "x": 11, + "y": 2 + }, + { + "x": 11, + "y": 1 + }, + { + "x": 1, + "y": 1 + }, + { + "x": 1, + "y": 2 + }, + { + "x": 1, + "y": 3 + }, + { + "x": 1, + "y": 4 + }, + { + "x": 4, + "y": 1 + }, + { + "x": 8, + "y": 1 + }, + { + "x": 9, + "y": 1 + }, + { + "x": 10, + "y": 1 + }, + { + "x": 3, + "y": 1 + }, + { + "x": 2, + "y": 1 + }, + { + "x": 2, + "y": 2 + }, + { + "x": 3, + "y": 2 + }, + { + "x": 2, + "y": 3 + }, + { + "x": 9, + "y": 2 + }, + { + "x": 10, + "y": 2 + }, + { + "x": 10, + "y": 3 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "type": 0, + "block": 0, + "color": 9, + "position": { + "x": -540, + "y": -180, + "z": 0 + }, + "id": 290 + }, + { + "type": 0, + "block": 0, + "color": 9, + "position": { + "x": -420, + "y": -60, + "z": 0 + }, + "id": 300 + }, + { + "type": 0, + "block": 0, + "color": 9, + "position": { + "x": -300, + "y": -180, + "z": 0 + }, + "id": 310 + }, + { + "type": 0, + "block": 0, + "color": 9, + "position": { + "x": -420, + "y": -300, + "z": 0 + }, + "id": 320 + }, + { + "type": 0, + "block": 2, + "color": 9, + "position": { + "x": 60, + "y": -180, + "z": 0 + }, + "id": 330 + }, + { + "type": 0, + "block": 0, + "color": 5, + "position": { + "x": -540, + "y": 60, + "z": 0 + }, + "id": 340 + }, + { + "type": 0, + "block": 2, + "color": 5, + "position": { + "x": -180, + "y": -540, + "z": 0 + }, + "id": 350 + }, + { + "type": 0, + "block": 21, + "color": 5, + "position": { + "x": -180, + "y": -180, + "z": 0 + }, + "id": 360 + }, + { + "type": 0, + "block": 1, + "color": 5, + "position": { + "x": 60, + "y": 420, + "z": 0 + }, + "id": 370 + }, + { + "type": 0, + "block": 19, + "color": 5, + "position": { + "x": 60, + "y": -420, + "z": 0 + }, + "id": 380 + }, + { + "type": 0, + "block": 0, + "color": 10, + "position": { + "x": -180, + "y": 420, + "z": 0 + }, + "id": 390 + }, + { + "type": 0, + "block": 0, + "color": 10, + "position": { + "x": -300, + "y": 300, + "z": 0 + }, + "id": 400 + }, + { + "type": 0, + "block": 0, + "color": 10, + "position": { + "x": -420, + "y": -180, + "z": 0 + }, + "id": 410 + }, + { + "type": 0, + "block": 0, + "color": 10, + "position": { + "x": -300, + "y": -60, + "z": 0 + }, + "id": 420 + }, + { + "type": 0, + "block": 0, + "color": 10, + "position": { + "x": -180, + "y": -300, + "z": 0 + }, + "id": 430 + }, + { + "type": 0, + "block": 0, + "color": 10, + "position": { + "x": -300, + "y": -420, + "z": 0 + }, + "id": 440 + }, + { + "type": 0, + "block": 1, + "color": 10, + "position": { + "x": -60, + "y": 60, + "z": 0 + }, + "id": 450 + }, + { + "type": 0, + "block": 1, + "color": 10, + "position": { + "x": 60, + "y": 540, + "z": 0 + }, + "id": 460 + }, + { + "type": 0, + "block": 0, + "color": 4, + "position": { + "x": -540, + "y": -60, + "z": 0 + }, + "id": 470 + }, + { + "type": 0, + "block": 0, + "color": 4, + "position": { + "x": -300, + "y": -300, + "z": 0 + }, + "id": 480 + }, + { + "type": 0, + "block": 2, + "color": 4, + "position": { + "x": -60, + "y": -300, + "z": 0 + }, + "id": 490 + }, + { + "type": 1, + "stacking": 8, + "block": 5, + "color": 4, + "position": { + "x": -300, + "y": 60, + "z": 0 + }, + "id": 500 + }, + { + "type": 1, + "stacking": 8, + "block": 5, + "color": 4, + "position": { + "x": 60, + "y": -660, + "z": 0 + }, + "id": 510 + }, + { + "type": 1, + "stacking": 8, + "block": 5, + "color": 9, + "position": { + "x": -60, + "y": 180, + "z": 0 + }, + "id": 520 + }, + { + "type": 1, + "stacking": 2, + "block": 4, + "color": 4, + "position": { + "x": 60, + "y": 60, + "z": 0 + }, + "id": 540 + }, + { + "type": 0, + "floor": 1, + "floorTime": 25, + "floorMove": false, + "block": 0, + "color": 10, + "position": { + "x": 540, + "y": -300, + "z": 0 + }, + "id": 550 + }, + { + "type": 0, + "floor": 1, + "floorTime": 25, + "floorMove": false, + "block": 2, + "color": 9, + "position": { + "x": 420, + "y": -420, + "z": 0 + }, + "id": 560 + }, + { + "type": 0, + "floor": 1, + "floorTime": 25, + "floorMove": false, + "block": 1, + "color": 4, + "position": { + "x": 300, + "y": -540, + "z": 0 + }, + "id": 580 + }, + { + "type": 0, + "floor": 1, + "floorTime": 25, + "floorMove": false, + "block": 0, + "color": 7, + "position": { + "x": 180, + "y": -660, + "z": 0 + }, + "id": 590 + }, + { + "type": 1, + "stacking": 8, + "floor": 1, + "floorTime": 25, + "floorMove": false, + "block": 5, + "color": 5, + "position": { + "x": 300, + "y": -420, + "z": 0 + }, + "id": 600 + }, + { + "type": 1, + "stacking": 8, + "floor": 2, + "floorTime": 30, + "floorMove": false, + "block": 5, + "color": 9, + "position": { + "x": 300, + "y": -60, + "z": 0 + }, + "id": 610 + }, + { + "type": 0, + "floor": 2, + "floorTime": 30, + "floorMove": false, + "block": 2, + "color": 5, + "position": { + "x": 180, + "y": 180, + "z": 0 + }, + "id": 620 + }, + { + "type": 0, + "floor": 2, + "floorTime": 30, + "floorMove": false, + "block": 1, + "color": 5, + "position": { + "x": 300, + "y": -180, + "z": 0 + }, + "id": 630 + }, + { + "type": 0, + "floor": 2, + "floorTime": 30, + "floorMove": false, + "block": 2, + "color": 8, + "position": { + "x": 180, + "y": 420, + "z": 0 + }, + "id": 640 + }, + { + "type": 0, + "floor": 2, + "floorTime": 30, + "floorMove": false, + "block": 2, + "color": 7, + "position": { + "x": 300, + "y": 300, + "z": 0 + }, + "id": 650 + }, + { + "type": 0, + "floor": 2, + "floorTime": 30, + "floorMove": false, + "block": 0, + "color": 2, + "position": { + "x": 300, + "y": 180, + "z": 0 + }, + "id": 660 + }, + { + "type": 0, + "floor": 3, + "floorTime": 35, + "floorMove": false, + "block": 2, + "color": 8, + "position": { + "x": 420, + "y": 180, + "z": 0 + }, + "id": 670 + }, + { + "type": 0, + "floor": 3, + "floorTime": 35, + "floorMove": false, + "block": 0, + "color": 8, + "position": { + "x": 660, + "y": -180, + "z": 0 + }, + "id": 680 + }, + { + "type": 0, + "floor": 3, + "floorTime": 35, + "floorMove": false, + "block": 0, + "color": 1, + "position": { + "x": 660, + "y": 60, + "z": 0 + }, + "id": 690 + }, + { + "type": 0, + "floor": 3, + "floorTime": 35, + "floorMove": false, + "block": 1, + "color": 10, + "position": { + "x": 660, + "y": -60, + "z": 0 + }, + "id": 700 + }, + { + "type": 0, + "floor": 3, + "floorTime": 35, + "floorMove": false, + "block": 2, + "color": 7, + "position": { + "x": 420, + "y": -60, + "z": 0 + }, + "id": 710 + }, + { + "type": 0, + "floor": 3, + "floorTime": 35, + "floorMove": false, + "block": 1, + "color": 4, + "position": { + "x": 540, + "y": -180, + "z": 0 + }, + "id": 720 + }, + { + "type": 0, + "floor": 3, + "floorTime": 35, + "floorMove": false, + "block": 2, + "color": 2, + "position": { + "x": 540, + "y": 60, + "z": 0 + }, + "id": 730 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 210, + "num": 0, + "color": 9, + "special": 0, + "length": 2 + }, + { + "id": 210, + "num": 1, + "color": 9, + "special": 0, + "length": 0 + }, + { + "freeze": 4, + "id": 220, + "num": 2, + "color": 10, + "special": 3, + "length": 1 + }, + { + "freeze": 14, + "id": 230, + "num": 20, + "color": 4, + "special": 3, + "length": 2 + }, + { + "freeze": 14, + "id": 230, + "num": 22, + "color": 4, + "special": 3, + "length": 0 + }, + { + "freeze": 23, + "id": 240, + "num": 24, + "color": 2, + "special": 3, + "length": 1 + }, + { + "freeze": 36, + "id": 250, + "num": 43, + "color": 1, + "special": 3, + "length": 1 + }, + { + "freeze": 40, + "id": 260, + "num": 41, + "color": 8, + "special": 3, + "length": 2 + }, + { + "freeze": 40, + "id": 260, + "num": 42, + "color": 8, + "special": 3, + "length": 0 + }, + { + "freeze": 25, + "id": 270, + "num": 23, + "color": 7, + "special": 3, + "length": 1 + }, + { + "freeze": 20, + "id": 280, + "num": 19, + "color": 5, + "special": 3, + "length": 2 + }, + { + "freeze": 20, + "id": 280, + "num": 21, + "color": 5, + "special": 3, + "length": 0 + } + ] + ] +} diff --git a/assets/custom/Json/level2032.json.meta b/assets/custom/Json/level2032.json.meta new file mode 100644 index 00000000..72b245b1 --- /dev/null +++ b/assets/custom/Json/level2032.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "4c382879-9d6c-4ea1-8e25-d1ee3e47a7f1", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2033.json b/assets/custom/Json/level2033.json new file mode 100644 index 00000000..b77ce38d --- /dev/null +++ b/assets/custom/Json/level2033.json @@ -0,0 +1,520 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2033", + "map": [ + 8, + 10 + ], + "time": 65, + "gap": [ + { + "x": 2, + "y": 8, + "z": 0 + }, + { + "x": 1, + "y": 8, + "z": 0 + }, + { + "x": 5, + "y": 8, + "z": 0 + }, + { + "x": 6, + "y": 8, + "z": 0 + }, + { + "x": 1, + "y": 7, + "z": 0 + }, + { + "x": 6, + "y": 7, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 0, + "color": 5, + "type": 0, + "position": { + "x": -120, + "y": -480, + "z": 0 + }, + "id": 1000 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 0, + "y": -480, + "z": 0 + }, + "id": 1010 + }, + { + "block": 0, + "color": 9, + "type": 0, + "position": { + "x": 360, + "y": -360, + "z": 0 + }, + "id": 1020 + }, + { + "block": 2, + "color": 5, + "type": 21, + "position": { + "x": -240, + "y": -360, + "z": 0 + }, + "addTime": 5, + "id": 1030 + }, + { + "block": 2, + "color": 3, + "type": 1, + "position": { + "x": 120, + "y": -480, + "z": 0 + }, + "stacking": 4, + "id": 1040 + }, + { + "block": 1, + "color": 9, + "type": 1, + "position": { + "x": 0, + "y": -240, + "z": 0 + }, + "stacking": 1, + "id": 1050 + }, + { + "block": 1, + "color": 7, + "type": 1, + "position": { + "x": 0, + "y": -360, + "z": 0 + }, + "stacking": 1, + "id": 1060 + }, + { + "block": 0, + "color": 3, + "type": 1, + "position": { + "x": 360, + "y": -480, + "z": 0 + }, + "stacking": 1, + "id": 1070 + }, + { + "block": 0, + "color": 7, + "type": 1, + "position": { + "x": 120, + "y": -240, + "z": 0 + }, + "stacking": 8, + "id": 1080 + }, + { + "block": 0, + "color": 10, + "type": 1, + "position": { + "x": -240, + "y": -480, + "z": 0 + }, + "stacking": 8, + "id": 1090 + }, + { + "block": 0, + "color": 5, + "type": 1, + "position": { + "x": 240, + "y": -480, + "z": 0 + }, + "stacking": 8, + "id": 1100 + }, + { + "block": 0, + "color": 7, + "type": 1, + "position": { + "x": 360, + "y": -240, + "z": 0 + }, + "stacking": 4, + "id": 1110 + }, + { + "block": 2, + "color": 10, + "type": 21, + "position": { + "x": 240, + "y": -360, + "z": 0 + }, + "addTime": 5, + "id": 1120 + }, + { + "block": 1, + "color": 5, + "type": 0, + "position": { + "x": 360, + "y": -120, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1130 + }, + { + "block": 2, + "color": 5, + "type": 0, + "position": { + "x": -240, + "y": 0, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1140 + }, + { + "block": 0, + "color": 5, + "type": 0, + "position": { + "x": 240, + "y": 240, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1150 + }, + { + "block": 2, + "color": 3, + "type": 0, + "position": { + "x": -120, + "y": -120, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1160 + }, + { + "block": 2, + "color": 3, + "type": 0, + "position": { + "x": 240, + "y": 0, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1170 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1180 + }, + { + "block": 0, + "color": 7, + "type": 0, + "position": { + "x": 0, + "y": -120, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1190 + }, + { + "block": 2, + "color": 7, + "type": 21, + "position": { + "x": -120, + "y": 120, + "z": 0 + }, + "addTime": 5, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1200 + }, + { + "block": 2, + "color": 7, + "type": 21, + "position": { + "x": 120, + "y": 0, + "z": 0 + }, + "addTime": 5, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1210 + }, + { + "block": 2, + "color": 10, + "type": 21, + "position": { + "x": 360, + "y": 0, + "z": 0 + }, + "addTime": 5, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1220 + }, + { + "block": 0, + "color": 10, + "type": 21, + "position": { + "x": -240, + "y": -120, + "z": 0 + }, + "addTime": 5, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1230 + }, + { + "block": 5, + "color": 9, + "type": 21, + "position": { + "x": 120, + "y": 240, + "z": 0 + }, + "addTime": 5, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1240 + }, + { + "block": 0, + "color": 9, + "type": 21, + "position": { + "x": 120, + "y": -120, + "z": 0 + }, + "addTime": 5, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1250 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2034, + "num": 1, + "color": 9, + "special": 3, + "length": 2, + "freeze": 5 + }, + { + "id": 2035, + "num": 2, + "color": 9, + "special": 3, + "length": 0, + "freeze": 5 + }, + { + "id": 2036, + "num": 4, + "color": 4, + "special": 3, + "length": 2, + "freeze": 15 + }, + { + "id": 2037, + "num": 5, + "color": 4, + "special": 3, + "length": 0, + "freeze": 15 + }, + { + "id": 2038, + "num": 13, + "color": 8, + "special": 3, + "length": 2, + "freeze": 21 + }, + { + "id": 2039, + "num": 15, + "color": 8, + "special": 3, + "length": 0, + "freeze": 21 + }, + { + "id": 2040, + "num": 26, + "color": 1, + "special": 3, + "length": 2, + "freeze": 27 + }, + { + "id": 2041, + "num": 27, + "color": 1, + "special": 3, + "length": 0, + "freeze": 27 + }, + { + "id": 2042, + "num": 24, + "color": 3, + "special": 3, + "length": 2, + "freeze": 15 + }, + { + "id": 2043, + "num": 25, + "color": 3, + "special": 3, + "length": 0, + "freeze": 15 + }, + { + "id": 2044, + "num": 22, + "color": 7, + "special": 3, + "length": 2, + "freeze": 3 + }, + { + "id": 2045, + "num": 23, + "color": 7, + "special": 3, + "length": 0, + "freeze": 3 + }, + { + "id": 2046, + "num": 14, + "color": 10, + "special": 3, + "length": 2, + "freeze": 1 + }, + { + "id": 2047, + "num": 16, + "color": 10, + "special": 3, + "length": 0, + "freeze": 1 + }, + { + "id": 2048, + "num": 9, + "color": 5, + "special": 0, + "length": 2 + }, + { + "id": 2049, + "num": 12, + "color": 5, + "special": 0, + "length": 0 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2033.json.meta b/assets/custom/Json/level2033.json.meta new file mode 100644 index 00000000..98d84cf7 --- /dev/null +++ b/assets/custom/Json/level2033.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "80bb6a62-cb84-4fd9-a5a7-da2d835fc82e", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2034.json b/assets/custom/Json/level2034.json new file mode 100644 index 00000000..c3e519f7 --- /dev/null +++ b/assets/custom/Json/level2034.json @@ -0,0 +1,867 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2034", + "map": [ + 13, + 11 + ], + "time": 100, + "gap": [ + { + "x": 1, + "y": 9, + "z": 0 + }, + { + "x": 2, + "y": 9, + "z": 0 + }, + { + "x": 3, + "y": 9, + "z": 0 + }, + { + "x": 4, + "y": 9, + "z": 0 + }, + { + "x": 8, + "y": 9, + "z": 0 + }, + { + "x": 9, + "y": 9, + "z": 0 + }, + { + "x": 10, + "y": 9, + "z": 0 + }, + { + "x": 11, + "y": 9, + "z": 0 + }, + { + "x": 9, + "y": 8, + "z": 0 + }, + { + "x": 10, + "y": 8, + "z": 0 + }, + { + "x": 11, + "y": 8, + "z": 0 + }, + { + "x": 3, + "y": 8, + "z": 0 + }, + { + "x": 2, + "y": 8, + "z": 0 + }, + { + "x": 1, + "y": 8, + "z": 0 + }, + { + "x": 2, + "y": 7, + "z": 0 + }, + { + "x": 1, + "y": 7, + "z": 0 + }, + { + "x": 10, + "y": 7, + "z": 0 + }, + { + "x": 11, + "y": 7, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 1, + "color": 9, + "type": 0, + "position": { + "x": 540, + "y": -540, + "z": 0 + }, + "id": 1000 + }, + { + "block": 0, + "color": 9, + "type": 0, + "position": { + "x": 180, + "y": -300, + "z": 0 + }, + "id": 1010 + }, + { + "block": 0, + "color": 9, + "type": 0, + "position": { + "x": 180, + "y": -540, + "z": 0 + }, + "id": 1020 + }, + { + "block": 0, + "color": 9, + "type": 0, + "position": { + "x": 420, + "y": -60, + "z": 0 + }, + "id": 1030 + }, + { + "block": 0, + "color": 5, + "type": 0, + "position": { + "x": 660, + "y": -540, + "z": 0 + }, + "id": 1040 + }, + { + "block": 0, + "color": 5, + "type": 0, + "position": { + "x": 300, + "y": -60, + "z": 0 + }, + "id": 1050 + }, + { + "block": 0, + "color": 5, + "type": 0, + "position": { + "x": 420, + "y": 180, + "z": 0 + }, + "id": 1060 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": 300, + "y": -540, + "z": 0 + }, + "id": 1070 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": 180, + "y": -420, + "z": 0 + }, + "id": 1080 + }, + { + "block": 1, + "color": 1, + "type": 0, + "position": { + "x": 540, + "y": -180, + "z": 0 + }, + "id": 1090 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 540, + "y": -300, + "z": 0 + }, + "id": 1100 + }, + { + "block": 0, + "color": 3, + "type": 0, + "position": { + "x": 540, + "y": -420, + "z": 0 + }, + "id": 1110 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": 660, + "y": 60, + "z": 0 + }, + "id": 1120 + }, + { + "block": 0, + "color": 3, + "type": 0, + "position": { + "x": 660, + "y": -60, + "z": 0 + }, + "id": 1130 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 660, + "y": -180, + "z": 0 + }, + "id": 1140 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 180, + "y": 420, + "z": 0 + }, + "id": 1150 + }, + { + "block": 1, + "color": 8, + "type": 1, + "position": { + "x": 300, + "y": -180, + "z": 0 + }, + "stacking": 7, + "id": 1160 + }, + { + "block": 2, + "color": 9, + "type": 1, + "position": { + "x": 180, + "y": -60, + "z": 0 + }, + "stacking": 7, + "id": 1170 + }, + { + "block": 5, + "color": 5, + "type": 1, + "position": { + "x": 420, + "y": -420, + "z": 0 + }, + "stacking": 7, + "id": 1180 + }, + { + "block": 2, + "color": 9, + "type": 1, + "position": { + "x": 660, + "y": -420, + "z": 0 + }, + "stacking": 7, + "id": 1190 + }, + { + "block": 2, + "color": 1, + "type": 1, + "position": { + "x": 180, + "y": 180, + "z": 0 + }, + "stacking": 10, + "id": 1200 + }, + { + "block": 8, + "color": 3, + "type": 1, + "position": { + "x": 420, + "y": 60, + "z": 0 + }, + "stacking": 10, + "id": 1210 + }, + { + "block": 2, + "color": 8, + "type": 1, + "position": { + "x": 540, + "y": -60, + "z": 0 + }, + "stacking": 10, + "id": 1220 + }, + { + "block": 0, + "color": 5, + "type": 0, + "position": { + "x": -60, + "y": -540, + "z": 0 + }, + "floor": 1, + "floorTime": 20, + "floorMove": false, + "id": 1230 + }, + { + "block": 1, + "color": 5, + "type": 0, + "position": { + "x": 60, + "y": 60, + "z": 0 + }, + "floor": 1, + "floorTime": 20, + "floorMove": false, + "id": 1240 + }, + { + "block": 1, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": -60, + "z": 0 + }, + "floor": 1, + "floorTime": 20, + "floorMove": false, + "id": 1250 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": -60, + "y": -420, + "z": 0 + }, + "floor": 1, + "floorTime": 20, + "floorMove": false, + "id": 1260 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": -540, + "z": 0 + }, + "floor": 1, + "floorTime": 20, + "floorMove": false, + "id": 1270 + }, + { + "block": 0, + "color": 3, + "type": 0, + "position": { + "x": 60, + "y": 300, + "z": 0 + }, + "floor": 1, + "floorTime": 20, + "floorMove": false, + "id": 1280 + }, + { + "block": 4, + "color": 3, + "type": 1, + "position": { + "x": 60, + "y": -420, + "z": 0 + }, + "stacking": 10, + "floor": 1, + "floorTime": 20, + "floorMove": false, + "id": 1290 + }, + { + "block": 2, + "color": 9, + "type": 1, + "position": { + "x": -60, + "y": -300, + "z": 0 + }, + "stacking": 2, + "floor": 1, + "floorTime": 20, + "floorMove": false, + "id": 1300 + }, + { + "block": 20, + "color": 8, + "type": 1, + "position": { + "x": 60, + "y": 180, + "z": 0 + }, + "stacking": 10, + "floor": 1, + "floorTime": 20, + "floorMove": false, + "id": 1310 + }, + { + "block": 1, + "color": 9, + "type": 1, + "position": { + "x": 60, + "y": 420, + "z": 0 + }, + "stacking": 2, + "floor": 1, + "floorTime": 20, + "floorMove": false, + "id": 1320 + }, + { + "block": 0, + "color": 9, + "type": 0, + "position": { + "x": -180, + "y": 300, + "z": 0 + }, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1330 + }, + { + "block": 0, + "color": 9, + "type": 0, + "position": { + "x": -180, + "y": -420, + "z": 0 + }, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1340 + }, + { + "block": 0, + "color": 9, + "type": 0, + "position": { + "x": -180, + "y": -60, + "z": 0 + }, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1350 + }, + { + "block": 2, + "color": 3, + "type": 0, + "position": { + "x": -180, + "y": -300, + "z": 0 + }, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1360 + }, + { + "block": 2, + "color": 3, + "type": 0, + "position": { + "x": -180, + "y": 60, + "z": 0 + }, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1370 + }, + { + "block": 0, + "color": 3, + "type": 0, + "position": { + "x": -540, + "y": 60, + "z": 0 + }, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1380 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": -300, + "y": 180, + "z": 0 + }, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1390 + }, + { + "block": 1, + "color": 5, + "type": 0, + "position": { + "x": -300, + "y": 60, + "z": 0 + }, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1400 + }, + { + "block": 2, + "color": 5, + "type": 0, + "position": { + "x": -300, + "y": -300, + "z": 0 + }, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1410 + }, + { + "block": 1, + "color": 1, + "type": 0, + "position": { + "x": -180, + "y": -540, + "z": 0 + }, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1420 + }, + { + "block": 0, + "color": 3, + "type": 0, + "position": { + "x": -300, + "y": -420, + "z": 0 + }, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1430 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": -420, + "y": -540, + "z": 0 + }, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1440 + }, + { + "block": 0, + "color": 5, + "type": 0, + "position": { + "x": -540, + "y": -540, + "z": 0 + }, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1450 + }, + { + "block": 20, + "color": 9, + "type": 1, + "position": { + "x": -420, + "y": -420, + "z": 0 + }, + "stacking": 7, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1460 + }, + { + "block": 22, + "color": 1, + "type": 1, + "position": { + "x": -420, + "y": -300, + "z": 0 + }, + "stacking": 7, + "floor": 2, + "floorTime": 29, + "floorMove": false, + "id": 1470 + }, + { + "block": 3, + "color": 8, + "type": 1, + "position": { + "x": -300, + "y": -60, + "z": 0 + }, + "stacking": 7, + "id": 1480 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2035, + "num": 3, + "color": 7, + "special": 3, + "length": 2, + "freeze": 54 + }, + { + "id": 2036, + "num": 4, + "color": 7, + "special": 3, + "length": 0, + "freeze": 54 + }, + { + "id": 2037, + "num": 20, + "color": 2, + "special": 3, + "length": 2, + "freeze": 37 + }, + { + "id": 2038, + "num": 22, + "color": 2, + "special": 3, + "length": 0, + "freeze": 37 + }, + { + "id": 2039, + "num": 36, + "color": 8, + "special": 3, + "length": 2, + "freeze": 15 + }, + { + "id": 2040, + "num": 37, + "color": 8, + "special": 3, + "length": 0, + "freeze": 15 + }, + { + "id": 2041, + "num": 34, + "color": 5, + "special": 3, + "length": 2, + "freeze": 8 + }, + { + "id": 2042, + "num": 35, + "color": 5, + "special": 3, + "length": 0, + "freeze": 8 + }, + { + "id": 2043, + "num": 26, + "color": 9, + "special": 0, + "length": 2 + }, + { + "id": 2044, + "num": 29, + "color": 9, + "special": 0, + "length": 0 + }, + { + "id": 2045, + "num": 21, + "color": 1, + "special": 3, + "length": 2, + "freeze": 3 + }, + { + "id": 2046, + "num": 23, + "color": 1, + "special": 3, + "length": 0, + "freeze": 3 + }, + { + "id": 2047, + "num": 14, + "color": 3, + "special": 3, + "length": 2, + "freeze": 27 + }, + { + "id": 2048, + "num": 17, + "color": 3, + "special": 3, + "length": 0, + "freeze": 27 + }, + { + "id": 2049, + "num": 6, + "color": 10, + "special": 3, + "length": 2, + "freeze": 46 + }, + { + "id": 2050, + "num": 8, + "color": 10, + "special": 3, + "length": 0, + "freeze": 46 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2034.json.meta b/assets/custom/Json/level2034.json.meta new file mode 100644 index 00000000..adbd2371 --- /dev/null +++ b/assets/custom/Json/level2034.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "70c71409-dd66-4540-8090-a6b2d07a12ee", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2035.json b/assets/custom/Json/level2035.json new file mode 100644 index 00000000..9d790779 --- /dev/null +++ b/assets/custom/Json/level2035.json @@ -0,0 +1,451 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2035", + "map": [ + 9, + 10 + ], + "time": 50, + "gap": [] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": 0, + "z": 0 + }, + "id": 1000 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": 120, + "z": 0 + }, + "id": 1010 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": 240, + "z": 0 + }, + "id": 1020 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": 360, + "z": 0 + }, + "id": 1030 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": -240, + "z": 0 + }, + "id": 1040 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": -120, + "z": 0 + }, + "id": 1050 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": -360, + "z": 0 + }, + "id": 1060 + }, + { + "block": 23, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": -480, + "z": 0 + }, + "id": 1070 + }, + { + "block": 21, + "color": 10, + "type": 0, + "position": { + "x": -300, + "y": 240, + "z": 0 + }, + "id": 1080 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": -300, + "y": -120, + "z": 0 + }, + "id": 1090 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": -60, + "y": -480, + "z": 0 + }, + "id": 1100 + }, + { + "block": 0, + "color": 3, + "type": 16, + "position": { + "x": 420, + "y": 360, + "z": 0 + }, + "questionTime": 3, + "id": 1110 + }, + { + "block": 0, + "color": 3, + "type": 16, + "position": { + "x": 180, + "y": 240, + "z": 0 + }, + "questionTime": 3, + "id": 1120 + }, + { + "block": 2, + "color": 3, + "type": 16, + "position": { + "x": 420, + "y": 120, + "z": 0 + }, + "questionTime": 3, + "id": 1130 + }, + { + "block": 0, + "color": 8, + "type": 16, + "position": { + "x": -300, + "y": 120, + "z": 0 + }, + "questionTime": 6, + "id": 1140 + }, + { + "block": 2, + "color": 8, + "type": 16, + "position": { + "x": -180, + "y": -120, + "z": 0 + }, + "questionTime": 6, + "id": 1150 + }, + { + "block": 21, + "color": 8, + "type": 16, + "position": { + "x": -300, + "y": -360, + "z": 0 + }, + "questionTime": 6, + "id": 1160 + }, + { + "block": 0, + "color": 9, + "type": 16, + "position": { + "x": 420, + "y": -360, + "z": 0 + }, + "questionTime": 9, + "id": 1170 + }, + { + "block": 0, + "color": 9, + "type": 16, + "position": { + "x": 420, + "y": -480, + "z": 0 + }, + "questionTime": 9, + "id": 1180 + }, + { + "block": 4, + "color": 2, + "type": 16, + "position": { + "x": 180, + "y": -360, + "z": 0 + }, + "questionTime": 9, + "id": 1190 + }, + { + "block": 19, + "color": 5, + "type": 16, + "position": { + "x": -60, + "y": -360, + "z": 0 + }, + "questionTime": 12, + "id": 1200 + }, + { + "block": 2, + "color": 5, + "type": 16, + "position": { + "x": -60, + "y": -120, + "z": 0 + }, + "questionTime": 12, + "id": 1210 + }, + { + "block": 0, + "color": 5, + "type": 16, + "position": { + "x": -180, + "y": -480, + "z": 0 + }, + "questionTime": 12, + "id": 1220 + }, + { + "block": 22, + "color": 1, + "type": 16, + "position": { + "x": 300, + "y": 240, + "z": 0 + }, + "questionTime": 15, + "id": 1230 + }, + { + "block": 2, + "color": 1, + "type": 16, + "position": { + "x": 300, + "y": 0, + "z": 0 + }, + "questionTime": 15, + "id": 1240 + }, + { + "block": 2, + "color": 1, + "type": 16, + "position": { + "x": 180, + "y": 0, + "z": 0 + }, + "questionTime": 15, + "id": 1250 + }, + { + "block": 4, + "color": 1, + "type": 16, + "position": { + "x": 300, + "y": -360, + "z": 0 + }, + "questionTime": 15, + "id": 1260 + }, + { + "block": 0, + "color": 6, + "type": 16, + "position": { + "x": 420, + "y": 0, + "z": 0 + }, + "questionTime": 19, + "id": 1270 + }, + { + "block": 2, + "color": 6, + "type": 16, + "position": { + "x": 420, + "y": -240, + "z": 0 + }, + "questionTime": 19, + "id": 1280 + }, + { + "block": 1, + "color": 6, + "type": 16, + "position": { + "x": 300, + "y": -480, + "z": 0 + }, + "questionTime": 19, + "id": 1290 + }, + { + "block": 0, + "color": 7, + "type": 16, + "position": { + "x": -60, + "y": 360, + "z": 0 + }, + "questionTime": 22, + "id": 1300 + }, + { + "block": 2, + "color": 7, + "type": 16, + "position": { + "x": -180, + "y": 120, + "z": 0 + }, + "questionTime": 22, + "id": 1310 + }, + { + "block": 2, + "color": 7, + "type": 16, + "position": { + "x": -60, + "y": 120, + "z": 0 + }, + "questionTime": 22, + "id": 1320 + }, + { + "block": 0, + "color": 7, + "type": 16, + "position": { + "x": -300, + "y": -480, + "z": 0 + }, + "questionTime": 22, + "id": 1330 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2036, + "num": 9, + "color": 10, + "special": 0, + "length": 2, + "colorArray": "9997774446666" + }, + { + "id": 2037, + "num": 11, + "color": 10, + "special": 0, + "length": 0, + "colorArray": "9997774446666" + }, + { + "id": 2038, + "num": 19, + "color": 3, + "special": 0, + "length": 2, + "colorArray": "2228810000555" + }, + { + "id": 2039, + "num": 21, + "color": 3, + "special": 0, + "length": 0, + "colorArray": "2228810000555" + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2035.json.meta b/assets/custom/Json/level2035.json.meta new file mode 100644 index 00000000..b5494b15 --- /dev/null +++ b/assets/custom/Json/level2035.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "de0f0b42-581d-43c6-bada-6dda1d5c93ac", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2036.json b/assets/custom/Json/level2036.json new file mode 100644 index 00000000..bfbdfa1c --- /dev/null +++ b/assets/custom/Json/level2036.json @@ -0,0 +1,517 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2036", + "map": [ + 8, + 10 + ], + "time": 70, + "gap": [ + { + "x": 1, + "y": 8, + "z": 0 + }, + { + "x": 1, + "y": 7, + "z": 0 + }, + { + "x": 1, + "y": 6, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 23, + "color": 9, + "type": 0, + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "id": 1000 + }, + { + "block": 23, + "color": 9, + "type": 0, + "position": { + "x": 0, + "y": 120, + "z": 0 + }, + "id": 1010 + }, + { + "block": 23, + "color": 9, + "type": 0, + "position": { + "x": -120, + "y": 120, + "z": 0 + }, + "id": 1020 + }, + { + "block": 23, + "color": 9, + "type": 0, + "position": { + "x": -120, + "y": 0, + "z": 0 + }, + "id": 1030 + }, + { + "block": 23, + "color": 9, + "type": 0, + "position": { + "x": -120, + "y": -120, + "z": 0 + }, + "id": 1040 + }, + { + "block": 5, + "color": 1, + "type": 0, + "position": { + "x": 360, + "y": 240, + "z": 0 + }, + "id": 1050 + }, + { + "block": 2, + "color": 7, + "type": 0, + "position": { + "x": 360, + "y": -120, + "z": 0 + }, + "id": 1060 + }, + { + "block": 2, + "color": 3, + "type": 0, + "position": { + "x": 240, + "y": 0, + "z": 0 + }, + "id": 1070 + }, + { + "block": 0, + "color": 7, + "type": 0, + "position": { + "x": 240, + "y": -240, + "z": 0 + }, + "id": 1080 + }, + { + "block": 0, + "color": 3, + "type": 0, + "position": { + "x": 360, + "y": -360, + "z": 0 + }, + "id": 1090 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 360, + "y": -240, + "z": 0 + }, + "id": 1100 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 360, + "y": 120, + "z": 0 + }, + "id": 1110 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 240, + "y": -120, + "z": 0 + }, + "id": 1120 + }, + { + "block": 0, + "color": 10, + "type": 1, + "position": { + "x": 360, + "y": -480, + "z": 0 + }, + "stacking": 2, + "id": 1130 + }, + { + "block": 2, + "color": 1, + "type": 1, + "position": { + "x": 240, + "y": -480, + "z": 0 + }, + "stacking": 2, + "id": 1140 + }, + { + "block": 0, + "color": 9, + "type": 0, + "position": { + "x": 120, + "y": 360, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1150 + }, + { + "block": 0, + "color": 9, + "type": 0, + "position": { + "x": 0, + "y": -240, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1160 + }, + { + "block": 0, + "color": 3, + "type": 0, + "position": { + "x": -120, + "y": -240, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1170 + }, + { + "block": 0, + "color": 7, + "type": 0, + "position": { + "x": 0, + "y": -120, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1180 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 120, + "y": -360, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1190 + }, + { + "block": 3, + "color": 1, + "type": 0, + "position": { + "x": 0, + "y": -360, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1200 + }, + { + "block": 0, + "color": 6, + "type": 0, + "position": { + "x": 120, + "y": 120, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1210 + }, + { + "block": 0, + "color": 3, + "type": 0, + "position": { + "x": 120, + "y": 0, + "z": 0 + }, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1220 + }, + { + "block": 4, + "color": 7, + "type": 1, + "position": { + "x": -240, + "y": -240, + "z": 0 + }, + "stacking": 2, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1230 + }, + { + "block": 1, + "color": 7, + "type": 1, + "position": { + "x": 120, + "y": 240, + "z": 0 + }, + "stacking": 2, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1240 + }, + { + "block": 21, + "color": 1, + "type": 1, + "position": { + "x": -120, + "y": 240, + "z": 0 + }, + "stacking": 2, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1250 + }, + { + "block": 2, + "color": 6, + "type": 1, + "position": { + "x": 120, + "y": -240, + "z": 0 + }, + "stacking": 2, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1260 + }, + { + "block": 1, + "color": 6, + "type": 1, + "position": { + "x": 120, + "y": -480, + "z": 0 + }, + "stacking": 2, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1270 + }, + { + "block": 1, + "color": 10, + "type": 1, + "position": { + "x": -120, + "y": -480, + "z": 0 + }, + "stacking": 2, + "floor": 1, + "floorTime": 10, + "floorMove": false, + "id": 1280 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2037, + "num": 3, + "color": 9, + "special": 3, + "length": 2, + "freeze": 19 + }, + { + "id": 2038, + "num": 4, + "color": 9, + "special": 3, + "length": 0, + "freeze": 19 + }, + { + "id": 2039, + "num": 11, + "color": 6, + "special": 3, + "length": 2, + "freeze": 13 + }, + { + "id": 2040, + "num": 13, + "color": 6, + "special": 3, + "length": 0, + "freeze": 13 + }, + { + "id": 2041, + "num": 17, + "color": 3, + "special": 3, + "length": 2, + "freeze": 8 + }, + { + "id": 2042, + "num": 19, + "color": 3, + "special": 3, + "length": 0, + "freeze": 8 + }, + { + "id": 2043, + "num": 24, + "color": 1, + "special": 3, + "length": 2, + "freeze": 4 + }, + { + "id": 2044, + "num": 25, + "color": 1, + "special": 3, + "length": 0, + "freeze": 4 + }, + { + "id": 2045, + "num": 22, + "color": 10, + "special": 0, + "length": 2 + }, + { + "id": 2046, + "num": 23, + "color": 10, + "special": 0, + "length": 0 + }, + { + "id": 2047, + "num": 16, + "color": 7, + "special": 3, + "length": 2, + "freeze": 5 + }, + { + "id": 2048, + "num": 18, + "color": 7, + "special": 3, + "length": 0, + "freeze": 5 + }, + { + "id": 2049, + "num": 5, + "color": 2, + "special": 3, + "length": 2, + "freeze": 24 + }, + { + "id": 2050, + "num": 10, + "color": 2, + "special": 3, + "length": 0, + "freeze": 24 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2036.json.meta b/assets/custom/Json/level2036.json.meta new file mode 100644 index 00000000..f58ec7f2 --- /dev/null +++ b/assets/custom/Json/level2036.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "f9893469-8cc2-4524-b380-eafed3cd64e0", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2037.json b/assets/custom/Json/level2037.json new file mode 100644 index 00000000..9ef12265 --- /dev/null +++ b/assets/custom/Json/level2037.json @@ -0,0 +1,676 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2037", + "map": [ + 12, + 10 + ], + "time": 85, + "gap": [ + { + "x": 3, + "y": 8, + "z": 0 + }, + { + "x": 2, + "y": 8, + "z": 0 + }, + { + "x": 1, + "y": 8, + "z": 0 + }, + { + "x": 8, + "y": 8, + "z": 0 + }, + { + "x": 9, + "y": 8, + "z": 0 + }, + { + "x": 10, + "y": 8, + "z": 0 + }, + { + "x": 10, + "y": 7, + "z": 0 + }, + { + "x": 9, + "y": 7, + "z": 0 + }, + { + "x": 10, + "y": 6, + "z": 0 + }, + { + "x": 2, + "y": 7, + "z": 0 + }, + { + "x": 1, + "y": 7, + "z": 0 + }, + { + "x": 1, + "y": 6, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 0, + "color": 9, + "type": 0, + "position": { + "x": 0, + "y": -480, + "z": 0 + }, + "id": 1000 + }, + { + "block": 0, + "color": 9, + "type": 0, + "position": { + "x": -240, + "y": -480, + "z": 0 + }, + "id": 1010 + }, + { + "block": 0, + "color": 9, + "type": 0, + "position": { + "x": -120, + "y": -360, + "z": 0 + }, + "id": 1020 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": -120, + "y": -480, + "z": 0 + }, + "id": 1030 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": -120, + "y": -240, + "z": 0 + }, + "id": 1040 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": 0, + "y": -360, + "z": 0 + }, + "id": 1050 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": -240, + "y": -360, + "z": 0 + }, + "id": 1060 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": 0, + "y": 120, + "z": 0 + }, + "id": 1070 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": -480, + "y": -120, + "z": 0 + }, + "id": 1080 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": -120, + "y": 0, + "z": 0 + }, + "id": 1090 + }, + { + "block": 2, + "color": 5, + "type": 0, + "position": { + "x": -360, + "y": -480, + "z": 0 + }, + "id": 1100 + }, + { + "block": 0, + "color": 5, + "type": 0, + "position": { + "x": -480, + "y": 0, + "z": 0 + }, + "id": 1110 + }, + { + "block": 4, + "color": 9, + "type": 1, + "position": { + "x": -480, + "y": -480, + "z": 0 + }, + "stacking": 8, + "id": 1120 + }, + { + "block": 4, + "color": 10, + "type": 1, + "position": { + "x": 0, + "y": -240, + "z": 0 + }, + "stacking": 8, + "id": 1130 + }, + { + "block": 2, + "color": 5, + "type": 1, + "position": { + "x": 0, + "y": 240, + "z": 0 + }, + "stacking": 8, + "id": 1140 + }, + { + "block": 20, + "color": 5, + "type": 1, + "position": { + "x": -240, + "y": -240, + "z": 0 + }, + "stacking": 3, + "id": 1150 + }, + { + "block": 2, + "color": 10, + "type": 1, + "position": { + "x": -360, + "y": 0, + "z": 0 + }, + "stacking": 3, + "id": 1160 + }, + { + "block": 4, + "color": 2, + "type": 1, + "position": { + "x": -240, + "y": 0, + "z": 0 + }, + "stacking": 1, + "id": 1170 + }, + { + "block": 1, + "color": 9, + "type": 1, + "position": { + "x": -120, + "y": -120, + "z": 0 + }, + "stacking": 1, + "id": 1180 + }, + { + "block": 2, + "color": 5, + "type": 1, + "position": { + "x": -120, + "y": 240, + "z": 0 + }, + "stacking": 1, + "id": 1190 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 120, + "y": 120, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1200 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": 360, + "y": 120, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1210 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": 240, + "y": -120, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1220 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": 120, + "y": -480, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1230 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 600, + "y": 0, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1240 + }, + { + "block": 0, + "color": 10, + "type": 0, + "position": { + "x": 240, + "y": -360, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1250 + }, + { + "block": 0, + "color": 9, + "type": 0, + "position": { + "x": 120, + "y": 240, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1260 + }, + { + "block": 2, + "color": 9, + "type": 0, + "position": { + "x": 480, + "y": 0, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1270 + }, + { + "block": 0, + "color": 9, + "type": 0, + "position": { + "x": 120, + "y": -240, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1280 + }, + { + "block": 2, + "color": 5, + "type": 0, + "position": { + "x": 360, + "y": -120, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1290 + }, + { + "block": 2, + "color": 5, + "type": 0, + "position": { + "x": 120, + "y": -120, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1300 + }, + { + "block": 1, + "color": 5, + "type": 0, + "position": { + "x": 360, + "y": -480, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1310 + }, + { + "block": 1, + "color": 2, + "type": 0, + "position": { + "x": 360, + "y": -240, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1320 + }, + { + "block": 2, + "color": 2, + "type": 0, + "position": { + "x": 600, + "y": -480, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1330 + }, + { + "block": 6, + "color": 2, + "type": 1, + "position": { + "x": 240, + "y": 120, + "z": 0 + }, + "stacking": 8, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1340 + }, + { + "block": 22, + "color": 9, + "type": 1, + "position": { + "x": 480, + "y": -480, + "z": 0 + }, + "stacking": 8, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1350 + }, + { + "block": 19, + "color": 5, + "type": 1, + "position": { + "x": 600, + "y": -240, + "z": 0 + }, + "stacking": 8, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1360 + }, + { + "block": 0, + "color": 2, + "type": 0, + "position": { + "x": 480, + "y": -120, + "z": 0 + }, + "floor": 1, + "floorTime": 17, + "floorMove": false, + "id": 1370 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2038, + "num": 3, + "color": 5, + "special": 3, + "length": 2, + "freeze": 11 + }, + { + "id": 2039, + "num": 4, + "color": 5, + "special": 3, + "length": 0, + "freeze": 11 + }, + { + "id": 2040, + "num": 15, + "color": 10, + "special": 3, + "length": 2, + "freeze": 6 + }, + { + "id": 2041, + "num": 17, + "color": 10, + "special": 3, + "length": 0, + "freeze": 6 + }, + { + "id": 2042, + "num": 33, + "color": 3, + "special": 3, + "length": 2, + "freeze": 31 + }, + { + "id": 2043, + "num": 34, + "color": 3, + "special": 3, + "length": 0, + "freeze": 31 + }, + { + "id": 2044, + "num": 20, + "color": 1, + "special": 3, + "length": 2, + "freeze": 23 + }, + { + "id": 2045, + "num": 22, + "color": 1, + "special": 3, + "length": 0, + "freeze": 23 + }, + { + "id": 2046, + "num": 16, + "color": 8, + "special": 3, + "length": 2, + "freeze": 40 + }, + { + "id": 2047, + "num": 18, + "color": 8, + "special": 3, + "length": 0, + "freeze": 40 + }, + { + "id": 2048, + "num": 11, + "color": 9, + "special": 0, + "length": 2 + }, + { + "id": 2049, + "num": 14, + "color": 9, + "special": 0, + "length": 0 + }, + { + "id": 2050, + "num": 5, + "color": 2, + "special": 3, + "length": 2, + "freeze": 3 + }, + { + "id": 2051, + "num": 8, + "color": 2, + "special": 3, + "length": 0, + "freeze": 3 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2037.json.meta b/assets/custom/Json/level2037.json.meta new file mode 100644 index 00000000..de2fc2cb --- /dev/null +++ b/assets/custom/Json/level2037.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "4229ab01-47e4-4a27-86b1-7bf6acf94b0e", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2038.json b/assets/custom/Json/level2038.json new file mode 100644 index 00000000..750dde18 --- /dev/null +++ b/assets/custom/Json/level2038.json @@ -0,0 +1,756 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2038", + "map": [ + 11, + 13 + ], + "time": 95, + "gap": [ + { + "x": 5, + "y": 1, + "z": 0 + }, + { + "x": 4, + "y": 1, + "z": 0 + }, + { + "x": 3, + "y": 1, + "z": 0 + }, + { + "x": 2, + "y": 1, + "z": 0 + }, + { + "x": 1, + "y": 1, + "z": 0 + }, + { + "x": 1, + "y": 11, + "z": 0 + }, + { + "x": 2, + "y": 11, + "z": 0 + }, + { + "x": 3, + "y": 11, + "z": 0 + }, + { + "x": 4, + "y": 11, + "z": 0 + }, + { + "x": 5, + "y": 11, + "z": 0 + }, + { + "x": 3, + "y": 10, + "z": 0 + }, + { + "x": 2, + "y": 10, + "z": 0 + }, + { + "x": 1, + "y": 10, + "z": 0 + }, + { + "x": 2, + "y": 9, + "z": 0 + }, + { + "x": 1, + "y": 9, + "z": 0 + }, + { + "x": 1, + "y": 8, + "z": 0 + }, + { + "x": 2, + "y": 8, + "z": 0 + }, + { + "x": 2, + "y": 2, + "z": 0 + }, + { + "x": 1, + "y": 2, + "z": 0 + }, + { + "x": 2, + "y": 3, + "z": 0 + }, + { + "x": 1, + "y": 3, + "z": 0 + }, + { + "x": 3, + "y": 2, + "z": 0 + }, + { + "x": 2, + "y": 4, + "z": 0 + }, + { + "x": 1, + "y": 4, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 2, + "color": 7, + "type": 0, + "position": { + "x": 540, + "y": -420, + "z": 0 + }, + "id": 1000 + }, + { + "block": 2, + "color": 3, + "type": 0, + "position": { + "x": 300, + "y": -60, + "z": 0 + }, + "id": 1010 + }, + { + "block": 0, + "color": 3, + "type": 0, + "position": { + "x": 540, + "y": 540, + "z": 0 + }, + "id": 1020 + }, + { + "block": 2, + "color": 2, + "type": 0, + "position": { + "x": 300, + "y": 180, + "z": 0 + }, + "id": 1030 + }, + { + "block": 2, + "color": 8, + "type": 0, + "position": { + "x": 420, + "y": -660, + "z": 0 + }, + "id": 1040 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 540, + "y": 180, + "z": 0 + }, + "id": 1050 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 420, + "y": 60, + "z": 0 + }, + "id": 1060 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 420, + "y": 300, + "z": 0 + }, + "id": 1070 + }, + { + "block": 2, + "color": 6, + "type": 0, + "position": { + "x": 540, + "y": -180, + "z": 0 + }, + "id": 1080 + }, + { + "block": 2, + "color": 3, + "type": 1, + "position": { + "x": 300, + "y": -660, + "z": 0 + }, + "stacking": 2, + "id": 1090 + }, + { + "block": 2, + "color": 3, + "type": 1, + "position": { + "x": 540, + "y": -660, + "z": 0 + }, + "stacking": 2, + "id": 1100 + }, + { + "block": 5, + "color": 1, + "type": 1, + "position": { + "x": 420, + "y": -420, + "z": 0 + }, + "stacking": 5, + "id": 1110 + }, + { + "block": 1, + "color": 8, + "type": 1, + "position": { + "x": 540, + "y": 420, + "z": 0 + }, + "stacking": 5, + "id": 1120 + }, + { + "block": 21, + "color": 7, + "type": 1, + "position": { + "x": 300, + "y": 420, + "z": 0 + }, + "stacking": 4, + "id": 1130 + }, + { + "block": 19, + "color": 6, + "type": 1, + "position": { + "x": 420, + "y": -180, + "z": 0 + }, + "stacking": 4, + "id": 1140 + }, + { + "block": 0, + "color": 7, + "type": 0, + "position": { + "x": 540, + "y": 60, + "z": 0 + }, + "id": 1150 + }, + { + "block": 0, + "color": 7, + "type": 0, + "position": { + "x": 540, + "y": 300, + "z": 0 + }, + "id": 1160 + }, + { + "block": 0, + "color": 7, + "type": 0, + "position": { + "x": 420, + "y": 180, + "z": 0 + }, + "id": 1170 + }, + { + "block": 1, + "color": 7, + "type": 0, + "position": { + "x": -300, + "y": 60, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1180 + }, + { + "block": 3, + "color": 7, + "type": 0, + "position": { + "x": -180, + "y": -180, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1190 + }, + { + "block": 0, + "color": 7, + "type": 0, + "position": { + "x": 180, + "y": -660, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1200 + }, + { + "block": 2, + "color": 3, + "type": 0, + "position": { + "x": -180, + "y": -60, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1210 + }, + { + "block": 5, + "color": 3, + "type": 0, + "position": { + "x": 60, + "y": 180, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1220 + }, + { + "block": 1, + "color": 3, + "type": 0, + "position": { + "x": 60, + "y": -180, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1230 + }, + { + "block": 1, + "color": 8, + "type": 0, + "position": { + "x": -60, + "y": -300, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1240 + }, + { + "block": 3, + "color": 8, + "type": 0, + "position": { + "x": 180, + "y": -540, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1250 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": -300, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1260 + }, + { + "block": 2, + "color": 1, + "type": 0, + "position": { + "x": 180, + "y": -180, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1270 + }, + { + "block": 2, + "color": 1, + "type": 0, + "position": { + "x": 180, + "y": 180, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1280 + }, + { + "block": 2, + "color": 6, + "type": 0, + "position": { + "x": 180, + "y": 420, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1290 + }, + { + "block": 2, + "color": 6, + "type": 0, + "position": { + "x": 180, + "y": -420, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1300 + }, + { + "block": 0, + "color": 6, + "type": 0, + "position": { + "x": 180, + "y": 60, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1310 + }, + { + "block": 1, + "color": 1, + "type": 0, + "position": { + "x": 60, + "y": 420, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1320 + }, + { + "block": 2, + "color": 1, + "type": 0, + "position": { + "x": -60, + "y": -60, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1330 + }, + { + "block": 2, + "color": 8, + "type": 0, + "position": { + "x": 60, + "y": -60, + "z": 0 + }, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1340 + }, + { + "block": 3, + "color": 7, + "type": 1, + "position": { + "x": 60, + "y": -420, + "z": 0 + }, + "stacking": 8, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1350 + }, + { + "block": 1, + "color": 6, + "type": 1, + "position": { + "x": -300, + "y": -60, + "z": 0 + }, + "stacking": 4, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1360 + }, + { + "block": 2, + "color": 7, + "type": 1, + "position": { + "x": -180, + "y": 180, + "z": 0 + }, + "stacking": 5, + "floor": 1, + "floorTime": 14, + "floorMove": false, + "id": 1370 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2039, + "num": 0, + "color": 5, + "special": 3, + "length": 2, + "freeze": 34 + }, + { + "id": 2040, + "num": 1, + "color": 5, + "special": 3, + "length": 0, + "freeze": 34 + }, + { + "id": 2041, + "num": 26, + "color": 3, + "special": 3, + "length": 2, + "freeze": 9 + }, + { + "id": 2042, + "num": 28, + "color": 3, + "special": 3, + "length": 0, + "freeze": 9 + }, + { + "id": 2043, + "num": 37, + "color": 1, + "special": 3, + "length": 2, + "freeze": 29 + }, + { + "id": 2044, + "num": 38, + "color": 1, + "special": 3, + "length": 0, + "freeze": 29 + }, + { + "id": 2045, + "num": 35, + "color": 7, + "special": 0, + "length": 2 + }, + { + "id": 2046, + "num": 36, + "color": 7, + "special": 0, + "length": 0 + }, + { + "id": 2047, + "num": 33, + "color": 8, + "special": 3, + "length": 2, + "freeze": 3 + }, + { + "id": 2048, + "num": 34, + "color": 8, + "special": 3, + "length": 0, + "freeze": 3 + }, + { + "id": 2049, + "num": 31, + "color": 2, + "special": 3, + "length": 2, + "freeze": 25 + }, + { + "id": 2050, + "num": 32, + "color": 2, + "special": 3, + "length": 0, + "freeze": 25 + }, + { + "id": 2051, + "num": 25, + "color": 6, + "special": 3, + "length": 2, + "freeze": 7 + }, + { + "id": 2052, + "num": 27, + "color": 6, + "special": 3, + "length": 0, + "freeze": 7 + }, + { + "id": 2053, + "num": 21, + "color": 4, + "special": 3, + "length": 2, + "freeze": 44 + }, + { + "id": 2054, + "num": 23, + "color": 4, + "special": 3, + "length": 0, + "freeze": 44 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2038.json.meta b/assets/custom/Json/level2038.json.meta new file mode 100644 index 00000000..ef73a372 --- /dev/null +++ b/assets/custom/Json/level2038.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "cdc9767b-513b-4c41-a6ab-575a27c70f38", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2039.json b/assets/custom/Json/level2039.json new file mode 100644 index 00000000..646c3744 --- /dev/null +++ b/assets/custom/Json/level2039.json @@ -0,0 +1,625 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2039", + "map": [ + 10, + 12 + ], + "time": 95, + "gap": [ + { + "x": 1, + "y": 6, + "z": 0 + }, + { + "x": 1, + "y": 5, + "z": 0 + }, + { + "x": 2, + "y": 6, + "z": 0 + }, + { + "x": 2, + "y": 5, + "z": 0 + }, + { + "x": 3, + "y": 6, + "z": 0 + }, + { + "x": 3, + "y": 5, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 22, + "color": 10, + "type": 0, + "position": { + "x": 360, + "y": -240, + "z": 0 + }, + "id": 1000 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": 240, + "y": -480, + "z": 0 + }, + "id": 1010 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": -120, + "y": -480, + "z": 0 + }, + "id": 1020 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": -240, + "y": -600, + "z": 0 + }, + "id": 1030 + }, + { + "block": 0, + "color": 8, + "type": 0, + "position": { + "x": -360, + "y": -480, + "z": 0 + }, + "id": 1040 + }, + { + "block": 21, + "color": 7, + "type": 0, + "position": { + "x": -360, + "y": -360, + "z": 0 + }, + "id": 1050 + }, + { + "block": 2, + "color": 7, + "type": 0, + "position": { + "x": 480, + "y": -240, + "z": 0 + }, + "id": 1060 + }, + { + "block": 20, + "color": 3, + "type": 0, + "position": { + "x": 240, + "y": -240, + "z": 0 + }, + "id": 1070 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": 240, + "y": -600, + "z": 0 + }, + "id": 1080 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": -120, + "y": -600, + "z": 0 + }, + "id": 1090 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": -360, + "y": -600, + "z": 0 + }, + "id": 1100 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": -240, + "y": -480, + "z": 0 + }, + "id": 1110 + }, + { + "block": 1, + "color": 1, + "type": 0, + "position": { + "x": 120, + "y": -480, + "z": 0 + }, + "id": 1120 + }, + { + "block": 1, + "color": 8, + "type": 0, + "position": { + "x": 120, + "y": -600, + "z": 0 + }, + "id": 1130 + }, + { + "block": 2, + "color": 6, + "type": 0, + "position": { + "x": 360, + "y": -600, + "z": 0 + }, + "id": 1140 + }, + { + "block": 2, + "color": 2, + "type": 0, + "position": { + "x": 480, + "y": -600, + "z": 0 + }, + "id": 1150 + }, + { + "block": 1, + "color": 1, + "type": 0, + "position": { + "x": 480, + "y": -360, + "z": 0 + }, + "id": 1160 + }, + { + "block": 19, + "color": 9, + "type": 0, + "position": { + "x": -120, + "y": -360, + "z": 0 + }, + "id": 1170 + }, + { + "block": 2, + "color": 6, + "type": 0, + "position": { + "x": 0, + "y": -240, + "z": 0 + }, + "id": 1180 + }, + { + "block": 3, + "color": 1, + "type": 0, + "position": { + "x": -120, + "y": 480, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1190 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": -120, + "y": 360, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1200 + }, + { + "block": 1, + "color": 2, + "type": 0, + "position": { + "x": -240, + "y": 360, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1210 + }, + { + "block": 20, + "color": 1, + "type": 0, + "position": { + "x": -120, + "y": 120, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1220 + }, + { + "block": 0, + "color": 1, + "type": 0, + "position": { + "x": 120, + "y": 240, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1230 + }, + { + "block": 2, + "color": 10, + "type": 0, + "position": { + "x": -360, + "y": 120, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1240 + }, + { + "block": 21, + "color": 10, + "type": 0, + "position": { + "x": 240, + "y": 240, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1250 + }, + { + "block": 3, + "color": 4, + "type": 0, + "position": { + "x": 240, + "y": 120, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1260 + }, + { + "block": 1, + "color": 8, + "type": 0, + "position": { + "x": 115, + "y": 0, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1270 + }, + { + "block": 1, + "color": 8, + "type": 0, + "position": { + "x": 480, + "y": 480, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1280 + }, + { + "block": 1, + "color": 8, + "type": 0, + "position": { + "x": 0, + "y": 240, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1290 + }, + { + "block": 21, + "color": 9, + "type": 0, + "position": { + "x": 120, + "y": 360, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1300 + }, + { + "block": 2, + "color": 6, + "type": 0, + "position": { + "x": 0, + "y": 360, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1310 + }, + { + "block": 19, + "color": 3, + "type": 0, + "position": { + "x": 480, + "y": 240, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1320 + }, + { + "block": 22, + "color": 9, + "type": 0, + "position": { + "x": 480, + "y": 0, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1330 + }, + { + "block": 1, + "color": 7, + "type": 0, + "position": { + "x": 360, + "y": 0, + "z": 0 + }, + "floor": 1, + "floorTime": 12, + "floorMove": false, + "id": 1340 + }, + { + "block": 3, + "color": 4, + "type": 4, + "position": { + "x": 240, + "y": -360, + "z": 0 + }, + "freezeTime": 11, + "id": 1350 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2040, + "num": 0, + "color": 1, + "special": 3, + "length": 1, + "freeze": 5 + }, + { + "id": 2041, + "num": 1, + "color": 8, + "special": 0, + "length": 1 + }, + { + "id": 2042, + "num": 4, + "color": 9, + "special": 3, + "length": 2, + "freeze": 20 + }, + { + "id": 2043, + "num": 5, + "color": 9, + "special": 3, + "length": 0, + "freeze": 20 + }, + { + "id": 2044, + "num": 7, + "color": 4, + "special": 3, + "length": 1, + "freeze": 25 + }, + { + "id": 2045, + "num": 11, + "color": 6, + "special": 3, + "length": 1, + "freeze": 27 + }, + { + "id": 2046, + "num": 21, + "color": 3, + "special": 3, + "length": 2, + "freeze": 29 + }, + { + "id": 2047, + "num": 23, + "color": 3, + "special": 3, + "length": 0, + "freeze": 29 + }, + { + "id": 2048, + "num": 25, + "color": 7, + "special": 3, + "length": 2, + "freeze": 23 + }, + { + "id": 2049, + "num": 27, + "color": 7, + "special": 3, + "length": 0, + "freeze": 23 + }, + { + "id": 2050, + "num": 29, + "color": 2, + "special": 3, + "length": 2, + "freeze": 21 + }, + { + "id": 2051, + "num": 31, + "color": 2, + "special": 3, + "length": 0, + "freeze": 21 + }, + { + "id": 2052, + "num": 38, + "color": 1, + "special": 3, + "length": 2, + "freeze": 18 + }, + { + "id": 2053, + "num": 39, + "color": 1, + "special": 3, + "length": 0, + "freeze": 18 + }, + { + "id": 2054, + "num": 28, + "color": 10, + "special": 3, + "length": 2, + "freeze": 10 + }, + { + "id": 2055, + "num": 30, + "color": 10, + "special": 3, + "length": 0, + "freeze": 10 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2039.json.meta b/assets/custom/Json/level2039.json.meta new file mode 100644 index 00000000..8379daa0 --- /dev/null +++ b/assets/custom/Json/level2039.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "93498e6d-704b-4672-bb00-9165fa9da889", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level2040.json b/assets/custom/Json/level2040.json new file mode 100644 index 00000000..9a77dee1 --- /dev/null +++ b/assets/custom/Json/level2040.json @@ -0,0 +1,349 @@ +{ + "LEVEL_INFO": [ + { + "risefall": [], + "id": "2040", + "map": [ + 8, + 9 + ], + "time": 60, + "gap": [ + { + "x": 1, + "y": 6, + "z": 0 + }, + { + "x": 1, + "y": 5, + "z": 0 + }, + { + "x": 1, + "y": 4, + "z": 0 + }, + { + "x": 1, + "y": 3, + "z": 0 + } + ] + } + ], + "BLOCK_INFO": [ + [ + { + "block": 3, + "color": 9, + "type": 0, + "position": { + "x": 0, + "y": -420, + "z": 0 + }, + "id": 1000 + }, + { + "block": 1, + "color": 5, + "type": 0, + "position": { + "x": 120, + "y": -300, + "z": 0 + }, + "id": 1010 + }, + { + "block": 1, + "color": 1, + "type": 0, + "position": { + "x": 120, + "y": -180, + "z": 0 + }, + "id": 1020 + }, + { + "block": 22, + "color": 6, + "type": 0, + "position": { + "x": -120, + "y": 180, + "z": 0 + }, + "id": 1030 + }, + { + "block": 1, + "color": 10, + "type": 0, + "position": { + "x": 120, + "y": 60, + "z": 0 + }, + "id": 1040 + }, + { + "block": 21, + "color": 1, + "type": 9, + "position": { + "x": 240, + "y": 60, + "z": 0 + }, + "adhesiveTime": 2, + "id": 1050 + }, + { + "block": 0, + "color": 11, + "type": 9, + "position": { + "x": 360, + "y": 300, + "z": 0 + }, + "adhesiveTime": 1, + "id": 1060 + }, + { + "block": 2, + "color": 3, + "type": 8, + "position": { + "x": 240, + "y": -300, + "z": 0 + }, + "id": 1070 + }, + { + "block": 1, + "color": 2, + "type": 14, + "position": { + "x": -120, + "y": -300, + "z": 0 + }, + "id": 1080 + }, + { + "block": 1, + "color": 8, + "type": 14, + "position": { + "x": 120, + "y": 300, + "z": 0 + }, + "id": 1090 + }, + { + "block": 0, + "color": 6, + "type": 14, + "position": { + "x": 120, + "y": -60, + "z": 0 + }, + "id": 1100 + }, + { + "block": 2, + "color": 7, + "type": 21, + "position": { + "x": 360, + "y": -60, + "z": 0 + }, + "addTime": 10, + "floor": 1, + "floorTime": 4, + "floorMove": true, + "id": 1110 + }, + { + "block": 2, + "color": 7, + "type": 21, + "position": { + "x": -120, + "y": -60, + "z": 0 + }, + "addTime": 5, + "floor": 2, + "floorTime": 5, + "floorMove": false, + "id": 1120 + }, + { + "block": 2, + "color": 9, + "type": 14, + "position": { + "x": 360, + "y": -300, + "z": 0 + }, + "floor": 3, + "floorTime": 8, + "floorMove": false, + "id": 1130 + }, + { + "block": 1, + "color": 2, + "type": 14, + "position": { + "x": 360, + "y": -420, + "z": 0 + }, + "floor": 3, + "floorTime": 8, + "floorMove": false, + "id": 1140 + }, + { + "block": 0, + "color": 8, + "type": 16, + "position": { + "x": 120, + "y": 180, + "z": 0 + }, + "questionTime": 12, + "id": 1150 + } + ] + ], + "WALL_INFO": [ + [ + { + "id": 2041, + "num": 0, + "color": 7, + "special": 0, + "length": 2 + }, + { + "id": 2042, + "num": 1, + "color": 7, + "special": 0, + "length": 0 + }, + { + "id": 2043, + "num": 2, + "color": 8, + "special": 0, + "length": 1, + "colorArray": "747" + }, + { + "id": 2044, + "num": 10, + "color": 9, + "special": 0, + "length": 3 + }, + { + "id": 2045, + "num": 12, + "color": 9, + "special": 0, + "length": 0 + }, + { + "id": 2046, + "num": 14, + "color": 9, + "special": 0, + "length": 0 + }, + { + "id": 2047, + "num": 18, + "color": 2, + "special": 0, + "length": 2, + "colorArray": "12" + }, + { + "id": 2048, + "num": 20, + "color": 2, + "special": 0, + "length": 0, + "colorArray": "12" + }, + { + "id": 2049, + "num": 23, + "color": 1, + "special": 6, + "length": 3, + "lockTime": 5 + }, + { + "id": 2050, + "num": 24, + "color": 1, + "special": 6, + "length": 0, + "lockTime": 5 + }, + { + "id": 2051, + "num": 25, + "color": 1, + "special": 6, + "length": 0, + "lockTime": 5 + }, + { + "id": 2052, + "num": 15, + "color": 6, + "special": 3, + "length": 2, + "freeze": 10 + }, + { + "id": 2053, + "num": 17, + "color": 6, + "special": 3, + "length": 0, + "freeze": 10 + }, + { + "id": 2054, + "num": 3, + "color": 10, + "special": 0, + "length": 2 + }, + { + "id": 2055, + "num": 11, + "color": 10, + "special": 0, + "length": 0 + } + ] + ] +} \ No newline at end of file diff --git a/assets/custom/Json/level2040.json.meta b/assets/custom/Json/level2040.json.meta new file mode 100644 index 00000000..963577b9 --- /dev/null +++ b/assets/custom/Json/level2040.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "7a32b902-4998-4761-aef7-fcf65b70fb44", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/custom/Json/level9001.json b/assets/custom/Json/level9001.json new file mode 100644 index 00000000..a1d4b5a8 --- /dev/null +++ b/assets/custom/Json/level9001.json @@ -0,0 +1,80 @@ +{ + "LEVEL_INFO": [ + { + "id": "9001", + "map": [10, 10], + "time": 300, + "gap": [], + "risefall": [ + { "x": 4, "y": 5, "color": 5 }, + { "x": 6, "y": 5, "vine": 2 }, + { "x": 6, "y": 6, "vine": 1 } + ], + "lasers": [ + { + "id": "green_a", + "color": 7, + "emitter": { "num": 2 }, + "receiver": { "num": 26 } + }, + { + "id": "green_b", + "color": 7, + "emitter": { "num": 5 }, + "receiver": { "num": 29 } + }, + { + "id": "cyan_cross", + "color": 6, + "emitter": { "num": 14 }, + "receiver": { "num": 15 } + } + ] + } + ], + "BLOCK_INFO": [[ + { + "id": 90010, + "block": 0, + "color": 10, + "type": 0, + "position": { "x": -240, "y": -240, "z": 0 } + }, + { + "id": 90020, + "block": 1, + "color": 8, + "type": 0, + "position": { "x": -240, "y": -360, "z": 0 } + }, + { + "id": 90030, + "block": 3, + "color": 5, + "type": 0, + "position": { "x": 360, "y": 240, "z": 0 } + }, + { + "id": 90040, + "block": 0, + "color": 5, + "type": 22, + "position": { "x": 0, "y": -120, "z": 0 } + }, + { + "id": 90050, + "block": 23, + "color": 11, + "type": 0, + "position": { "x": 360, "y": -360, "z": 0 } + } + ]], + "WALL_INFO": [[ + { "id": 90011, "num": 6, "color": 10, "special": 0, "length": 1, "laserId": "green_a" }, + { "id": 90021, "num": 8, "color": 8, "special": 0, "length": 2, "laserId": "green_b" }, + { "id": 90021, "num": 10, "color": 8, "special": 0, "length": 0, "laserId": "green_b" }, + { "id": 90031, "num": 17, "color": 5, "special": 0, "length": 3, "laserId": "cyan_cross" }, + { "id": 90031, "num": 19, "color": 5, "special": 0, "length": 0, "laserId": "cyan_cross" }, + { "id": 90031, "num": 21, "color": 5, "special": 0, "length": 0, "laserId": "cyan_cross" } + ]] +} diff --git a/assets/custom/Json/level9001.json.meta b/assets/custom/Json/level9001.json.meta new file mode 100644 index 00000000..d6edf3db --- /dev/null +++ b/assets/custom/Json/level9001.json.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.2", + "uuid": "1bc95191-ed4d-46bc-8910-f67e05e517d6", + "importer": "json", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/prefab/prop/laser.prefab b/assets/prefab/prop/laser.prefab new file mode 100644 index 00000000..7912b9fe --- /dev/null +++ b/assets/prefab/prop/laser.prefab @@ -0,0 +1,1147 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "asyncLoadAssets": false, + "readonly": false + }, + { + "__type__": "cc.Node", + "_name": "laser", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 3 + }, + { + "__id__": 14 + }, + { + "__id__": 17 + } + ], + "_active": true, + "_components": [ + { + "__id__": 28 + } + ], + "_prefab": { + "__id__": 2 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "cbf68dSNgRN862BBR63JxPm", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "beam", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 5 + }, + { + "__id__": 8 + }, + { + "__id__": 11 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 4 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "d2647TzBflKyrC1Ddop4s9T", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "body", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 6 + } + ], + "_prefab": { + "__id__": 7 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 120, + "height": 42 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 60, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "b3fd3435-09b5-4972-ac41-b37dee07ed45" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "4edccf38-53b4-4a32-a942-c725bf848023" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "ded5aVyR6lPo6ekHpb0qBjV", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "start", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 9 + } + ], + "_prefab": { + "__id__": 10 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 56, + "height": 112 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 8 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "3c9ebbf5-58dd-42da-998f-c1a7b982e2be" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "4edccf38-53b4-4a32-a942-c725bf848023" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "29e63/etONCgqljMuHf7EmE", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "end", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 12 + } + ], + "_prefab": { + "__id__": 13 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 64, + "height": 78 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 1, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 120, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 11 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "d1d6b16c-5a3e-4cff-8b5c-6bb85146d24f" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "4edccf38-53b4-4a32-a942-c725bf848023" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "64a6e3CnI5LyJcseYopFxz3", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "head", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 15 + } + ], + "_prefab": { + "__id__": 16 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 39, + "height": 24 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 1, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 14 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "a5694cd8-7d02-4718-84cd-fecaa5f561cd" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "4edccf38-53b4-4a32-a942-c725bf848023" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "89e98hZaqRBB4wRNjecWad/", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "gate", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 19 + }, + { + "__id__": 22 + }, + { + "__id__": 25 + }, + { + "__id__": 29 + } + ], + "_active": false, + "_components": [], + "_prefab": { + "__id__": 18 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "79fcbcQRz9Iu6i3+v55QamK", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "first", + "_objFlags": 0, + "_parent": { + "__id__": 17 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 20 + } + ], + "_prefab": { + "__id__": 21 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 47, + "height": 59 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -60, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 19 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "761c9a8d-095d-4bcc-9251-d2d43ff376c2" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "4edccf38-53b4-4a32-a942-c725bf848023" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "bceb6sr/5FLTaXJKNiBFgLU", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "second", + "_objFlags": 0, + "_parent": { + "__id__": 17 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 23 + } + ], + "_prefab": { + "__id__": 24 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 47, + "height": 59 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 1, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 60, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 22 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "e4e330d0-48d4-4652-834b-89a1263227bf" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "4edccf38-53b4-4a32-a942-c725bf848023" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "69aa47ldXxG96lr4FVE2zf7", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "firstDot", + "_objFlags": 0, + "_parent": { + "__id__": 17 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 26 + } + ], + "_prefab": { + "__id__": 27 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 14, + "height": 14 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 25 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "52a94f1a-cc33-48cf-9de9-3dfb289178d4" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "4edccf38-53b4-4a32-a942-c725bf848023" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "42c8bTEi8BGHLwLF4Gl0eFq", + "sync": false + }, + { + "__type__": "d7662wb1jVD1ID5LhQI78/K", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "atlas": { + "__uuid__": "4edccf38-53b4-4a32-a942-c725bf848023" + }, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "secondDot", + "_objFlags": 0, + "_parent": { + "__id__": 17 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 30 + } + ], + "_prefab": { + "__id__": 31 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 14, + "height": 14 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 29 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "52a94f1a-cc33-48cf-9de9-3dfb289178d4" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "4edccf38-53b4-4a32-a942-c725bf848023" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "aafe25bc-60c0-4197-b5d3-7545d37bfc69", + "sync": false + } +] diff --git a/assets/prefab/prop/laser.prefab.meta b/assets/prefab/prop/laser.prefab.meta new file mode 100644 index 00000000..1d3900e4 --- /dev/null +++ b/assets/prefab/prop/laser.prefab.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.3.2", + "uuid": "0f2a92d8-c6f6-4fc1-9803-8358549350dd", + "importer": "prefab", + "optimizationPolicy": "AUTO", + "asyncLoadAssets": false, + "readonly": false, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/resources/prefab/wall/down.prefab b/assets/resources/prefab/wall/down.prefab index 46018dca..ce31c704 100644 --- a/assets/resources/prefab/wall/down.prefab +++ b/assets/resources/prefab/wall/down.prefab @@ -55,6 +55,9 @@ }, { "__id__": 169 + }, + { + "__id__": 180 } ], "_active": true, @@ -6614,5 +6617,76 @@ }, "fileId": "", "sync": false + }, + { + "__type__": "cc.Node", + "_name": "laser", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": false, + "_components": [], + "_prefab": { + "__id__": 181 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -39, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "e099fZCK01DAbrxhRVPHI2Y", + "sync": false } ] \ No newline at end of file diff --git a/assets/resources/prefab/wall/left.prefab b/assets/resources/prefab/wall/left.prefab index bf9f13b7..ef39f200 100644 --- a/assets/resources/prefab/wall/left.prefab +++ b/assets/resources/prefab/wall/left.prefab @@ -55,6 +55,9 @@ }, { "__id__": 157 + }, + { + "__id__": 168 } ], "_active": true, @@ -6175,5 +6178,76 @@ "door/color1" ], "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "laser", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": false, + "_components": [], + "_prefab": { + "__id__": 169 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -39.575, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "f7748zwmltAvq2hImW884PH", + "sync": false } ] \ No newline at end of file diff --git a/assets/resources/prefab/wall/right.prefab b/assets/resources/prefab/wall/right.prefab index 5cf551fb..fc2153ba 100644 --- a/assets/resources/prefab/wall/right.prefab +++ b/assets/resources/prefab/wall/right.prefab @@ -55,6 +55,9 @@ }, { "__id__": 157 + }, + { + "__id__": 168 } ], "_active": true, @@ -6175,5 +6178,76 @@ "door/color1" ], "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "laser", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": false, + "_components": [], + "_prefab": { + "__id__": 169 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 36.695, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "65385q51IVJ66VDqgF2g901", + "sync": false } ] \ No newline at end of file diff --git a/assets/resources/prefab/wall/up.prefab b/assets/resources/prefab/wall/up.prefab index 3bb3ac3d..9db7bb73 100644 --- a/assets/resources/prefab/wall/up.prefab +++ b/assets/resources/prefab/wall/up.prefab @@ -55,6 +55,9 @@ }, { "__id__": 157 + }, + { + "__id__": 168 } ], "_active": true, @@ -6175,5 +6178,76 @@ "door/color1" ], "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "laser", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": false, + "_components": [], + "_prefab": { + "__id__": 169 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 34, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "c196fWrKstNUYoxjHQUZwkx", + "sync": false } ] \ No newline at end of file diff --git a/tools/preview-laser.cjs b/tools/preview-laser.cjs new file mode 100644 index 00000000..189868d8 --- /dev/null +++ b/tools/preview-laser.cjs @@ -0,0 +1,174 @@ +// Local Cocos fixture using the production LaserView, prefab, artwork and hit rules. +const http = require('http'), fs = require('fs'), path = require('path'), ts = require('typescript'); +const root = path.resolve(__dirname, '..'); +const creator = 'C:/ProgramData/cocos/editors/Creator/2.4.15/resources'; +const port = Number(process.env.LASER_PREVIEW_PORT || 8794); +const files = { + '/atlas.json': 'assets/UI/prop/laser/laser.plist.meta', + '/atlas.png': 'assets/UI/prop/laser/laser.png', + '/door-atlas.json': 'assets/Block/door.plist.meta', + '/door-atlas.png': 'assets/Block/door.png', + '/prefab.json': 'assets/prefab/prop/laser.prefab', +}; +function modules() { + return [['LaserView', 'assets/Script/prop/LaserView.ts'], ['LaserRules', 'assets/Script/LaserRules.ts']] + .map(([name, file]) => `window.${name}=(function(){var exports={};${ts.transpileModule(fs.readFileSync(path.join(root, file), 'utf8'), { + compilerOptions: { target: ts.ScriptTarget.ES2017, module: ts.ModuleKind.CommonJS, experimentalDecorators: true }, + }).outputText};return exports;})();`).join('\n'); +} + +async function boot() { + window.errors = []; + const status = document.getElementById('status'); + const fail = error => { const message = String(error.stack || error); errors.push(message); status.textContent = message; }; + window.addEventListener('error', event => fail(event.error || event.message)); + window.addEventListener('unhandledrejection', event => fail(event.reason)); + const json = url => fetch(url).then(response => response.json()); + cc.assetManager.init({ importBase: '/imports', nativeBase: '/native' }); + cc.assetManager.loadBundle('/internal', error => { + if (error) return fail(error); + cc.game.run({ id: 'GameCanvas', debugMode: 1, frameRate: 60, renderMode: 0, groupList: ['default'], collisionMatrix: [[true]] }, async () => { + try { + const scene = new cc.Scene(), canvas = new cc.Node('Canvas'); + scene.addChild(canvas); canvas.setContentSize(1180, 960); + const canvasComponent = canvas.addComponent(cc.Canvas); + canvasComponent.designResolution = cc.size(1180, 960); + canvasComponent.fitWidth = canvasComponent.fitHeight = true; + cc.view.resizeWithBrowserSize(false); + const fit = () => { + const stage = document.getElementById('stage'); + stage.style.top = document.getElementById('controls').offsetHeight + 'px'; + cc.view.setFrameSize(stage.clientWidth, stage.clientHeight); + cc.view.setDesignResolutionSize(1180, 960, cc.ResolutionPolicy.SHOW_ALL); + }; + window.addEventListener('resize', fit); fit(); cc.director.runScene(scene); + const meta = await json('/atlas.json'); + const texture = await new Promise((resolve, reject) => cc.assetManager.loadRemote('/atlas.png', (e, value) => e ? reject(e) : resolve(value))); + const atlas = new cc.SpriteAtlas(), frames = {}; + atlas._spriteFrames = {}; + for (const [name, m] of Object.entries(meta.subMetas)) { + const frame = new cc.SpriteFrame(texture, cc.rect(m.trimX, m.trimY, m.width, m.height), !!m.rotated, + cc.v2(m.offsetX, m.offsetY), cc.size(m.rawWidth, m.rawHeight)); + atlas._spriteFrames[name] = frames[m.uuid] = frame; + } + // Wall.initColor uses door/color, adding 3 for vertical doors. + const doorMeta = await json('/door-atlas.json'); + const doorTexture = await new Promise((resolve, reject) => cc.assetManager.loadRemote('/door-atlas.png', (e, value) => e ? reject(e) : resolve(value))); + function gateBase(x, y, length, vertical) { + const name = '5color' + (length + (vertical ? 3 : 0)) + '.png'; + const m = doorMeta.subMetas[name]; + const frame = new cc.SpriteFrame(doorTexture, cc.rect(m.trimX, m.trimY, m.width, m.height), !!m.rotated, + cc.v2(m.offsetX, m.offsetY), cc.size(m.rawWidth, m.rawHeight)); + const node = new cc.Node('base-' + name); canvas.addChild(node); + node.setPosition(x + (vertical ? 0 : (length - 1) * 60), y + (vertical ? (length - 1) * 60 : 0)); + const sprite = node.addComponent(cc.Sprite); sprite.sizeMode = cc.Sprite.SizeMode.RAW; sprite.spriteFrame = frame; + const bounds = node.getBoundingBox(); + // The bottom 13 px belong to the shadow, not the solid door body. + return { + centerY: bounds.y + bounds.height / 2 - y + 6.5, + shadowEdge: vertical ? bounds.xMin + 43 - x : bounds.yMax - 38 - y, + }; + } + const data = await json('/prefab.json'), component = data.find(row => row.atlas); + cc.js._setClassId(component.__type__, LaserView.default); + const details = new cc.deserialize.Details(), prefab = cc.deserialize(data, details); + details.uuidList.forEach((uuid, index) => { + if (uuid === meta.uuid || frames[uuid]) details.uuidObjList[index][details.uuidPropList[index]] = uuid === meta.uuid ? atlas : frames[uuid]; + }); + function view(x, y) { + const node = cc.instantiate(prefab); canvas.addChild(node); node.setPosition(x, y); + return node.getComponent(LaserView.default); + } + function label(text, x, y) { + const node = new cc.Node(text); canvas.addChild(node); node.setPosition(x, y); + const item = node.addComponent(cc.Label); item.string = text; item.fontSize = 20; item.lineHeight = 24; + node.color = cc.color(220, 228, 242); return item; + } + const groups = [ + { direction: 'right', opposite: 'left', start: [-490, 300], end: [-100, 300], color: 7 }, + { direction: 'left', opposite: 'right', start: [-100, 140], end: [-490, 140], color: 10 }, + { direction: 'up', opposite: 'down', start: [130, 100], end: [130, 350], color: 8 }, + { direction: 'down', opposite: 'up', start: [430, 350], end: [430, 100], color: 6 }, + ]; + const blocks = [], gates = []; + for (const group of groups) { + view(...group.start).initHead('emitter', group.color, group.direction); + view(...group.end).initHead('receiver', group.color, group.opposite); + group.beam = view(...group.start); group.beam.initBeam(group.color, group.direction); + const block = new cc.Node('drag-block-' + group.direction); canvas.addChild(block); + block.setContentSize(56, 56); const graphic = block.addComponent(cc.Graphics); + graphic.fillColor = cc.color(74, 85, 109); graphic.strokeColor = cc.color(204, 217, 237); graphic.lineWidth = 3; + graphic.roundRect(-28, -28, 56, 56, 8); graphic.fill(); graphic.stroke(); + block.on(cc.Node.EventType.TOUCH_START, () => {}); + block.on(cc.Node.EventType.TOUCH_MOVE, event => { + const delta = event.getDelta(); // Cocos has already converted touch deltas to design units. + block.setPosition(block.x + delta.x, block.y + delta.y); + }); + blocks.push(block); + const titleX = (group.start[0] + group.end[0]) / 2; + group.label = label(group.direction, titleX, group.direction === 'left' || group.direction === 'right' ? group.start[1] - 65 : 35); + } + for (let length = 1; length <= 3; length++) { + const horizontalY = -90 - (length - 1) * 145; + const horizontalBase = gateBase(-490, horizontalY, length, false); + const horizontal = view(-490, horizontalY); horizontal.initGate(length, 'up', 7, horizontalBase.centerY, horizontalBase.shadowEdge); + label('Horizontal ' + length, -155, -90 - (length - 1) * 145); gates.push(horizontal); + const verticalX = 80 + (length - 1) * 165; + const verticalBase = gateBase(verticalX, -390, length, true); + const vertical = view(verticalX, -390); vertical.initGate(length, 'right', 8, verticalBase.centerY, verticalBase.shadowEdge); + label('Vertical ' + length, 80 + (length - 1) * 165, -450); gates.push(vertical); + } + let preset = false; + window.setConnected = connected => { + preset = connected; + groups.forEach((group, index) => blocks[index].setPosition( + (group.start[0] + group.end[0]) / 2 + (connected && index > 1 ? 90 : 0), + (group.start[1] + group.end[1]) / 2 + (connected && index < 2 ? 90 : 0))); + }; + document.getElementById('connected').onclick = () => setConnected(true); + document.getElementById('blocked').onclick = () => setConnected(false); + document.getElementById('toggle').onclick = () => setConnected(!preset); + const update = () => { + const colliders = blocks.map(block => ({ type: 'rect', minX: block.x - 28, maxX: block.x + 28, minY: block.y - 28, maxY: block.y + 28 })); + const states = groups.map(group => { + const start = { x: group.start[0], y: group.start[1] }, end = { x: group.end[0], y: group.end[1] }; + const hit = LaserRules.nearestLaserHit(start, end, colliders), connected = !hit; + group.beam.setBeam(hit ? hit.distance : Math.hypot(end.x - start.x, end.y - start.y), connected); + group.label.string = group.direction + ': ' + (connected ? 'connected' : 'blocked'); return connected; + }); + gates.forEach((gate, index) => gate.setGateOpen(states[index % 2 === 0 ? 0 : 2])); + status.textContent = groups.map((group, index) => group.direction + '=' + (states[index] ? 'connected' : 'blocked')).join(' | '); + }; + setConnected(true); update(); cc.director.on(cc.Director.EVENT_AFTER_UPDATE, update); + window.ready = true; + } catch (error) { fail(error); } + }); + }); +} + +const html = `Laser Cocos Preview + +
Loading Cocos…Drag the four gray squares across the beams. Production LaserView + LaserRules; isolated artwork fixture.
+
`; +http.createServer((request, response) => { + const url = decodeURIComponent(new URL(request.url, 'http://localhost').pathname); + const send = (type, body) => { response.setHeader('Content-Type', type); response.end(body); }; + if (url === '/') return send('text/html; charset=utf-8', html); + if (url === '/modules.js') return send('text/javascript', modules()); + if (url === '/boot.js') return send('text/javascript', '(' + boot.toString() + ')();'); + let target; + if (files[url]) target = path.join(root, files[url]); + else if (url === '/engine.js') target = path.join(creator, 'engine/bin/cocos2d-js-for-preview.js'); + else if (/^\/imports\/[a-f0-9]{2}\/[a-f0-9-]+\.json$/.test(url)) target = path.join(root, 'library', url.slice(1)); + else if (/^\/native\/[a-f0-9]{2}\/[a-f0-9-]+\.png$/.test(url)) target = path.join(root, 'library/imports', url.slice('/native/'.length)); + else if (url.startsWith('/internal/') || url.startsWith('/assets/internal/')) { + const internalRoot = path.join(creator, 'cocos2d-x/simulator/win32/assets'); + const candidate = path.resolve(internalRoot, url.replace(/^\/(assets\/)?/, '')); + if (candidate.startsWith(internalRoot + path.sep)) target = candidate; + } + if (target && fs.existsSync(target)) { + response.setHeader('Content-Type', target.endsWith('.js') ? 'text/javascript' : target.endsWith('.png') ? 'image/png' : 'application/json'); + return fs.createReadStream(target).pipe(response); + } + response.statusCode = 404; response.end('not found'); +}).listen(port, '127.0.0.1', () => console.log('http://127.0.0.1:' + port)); diff --git a/tools/test-laser-level.cjs b/tools/test-laser-level.cjs new file mode 100644 index 00000000..9e41355a --- /dev/null +++ b/tools/test-laser-level.cjs @@ -0,0 +1,229 @@ +const test = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); +const { loadMembers, loadModule } = require('./new-player-ab-test-support.cjs'); + +const level = JSON.parse(fs.readFileSync(path.join(__dirname, '../assets/custom/Json/level9001.json'), 'utf8')); +const info = level.LEVEL_INFO[0]; +const { nearestLaserHit } = loadModule('assets/Script/LaserRules.ts'); +const directions = { right: [1, 0], left: [-1, 0], up: [0, 1], down: [0, -1] }; +const cc = { v2: (x, y) => ({ x, y }), instantiate: () => { + const component = { special: 0, longAndShort: [], init(_data, x, y, direction) { + Object.assign(this, { x, y, direction }); + } }; + const wall = { getComponent: () => component }; + return { children: [null, wall], getChildByName: () => wall, setPosition() {} }; +} }; +const MapController = loadMembers('assets/Script/Map.ts', ['getWllDiraction', 'createWall', 'shrinkVine'], { cc }); +const Block = loadMembers('assets/Script/Block.ts', ['initBlocks'], { cc }); + +// Execute the game's wall direction and prefab creation methods, in createMap's x/y order. +function gameSlots() { + const slots = []; + const map = Object.assign(new MapController(), { + mapWidth: info.map[0], mapHeight: info.map[1], wallNum: 0, + Wall_Prefab: Array.from({ length: 12 }), node: {}, + leftDoors: [], rightDoors: [], topDoors: [], bottomDoors: [], + openWall: [], freezeWall: [], lockWall: [], longAndShortWall: [], + setDoorInfo(wall) { slots.push({ num: this.wallNum, ...wall.getComponent('Wall') }); }, + }); + map.mapBlocksWall = Array.from({ length: map.mapWidth }, (_, x) => + Array.from({ length: map.mapHeight }, (_, y) => { + const boundary = x === 0 || y === 0 || x === map.mapWidth - 1 || y === map.mapHeight - 1 + || info.gap.some(point => point.x === x && point.y === y); + const component = { posX: x, posY: y, setDiraction(direction) { this.direction = direction; } }; + return { x, y, opacity: boundary ? 254 : 255, getComponent: () => component }; + })); + for (const column of map.mapBlocksWall) for (const cell of column) { + if (cell.opacity !== 254) continue; + const direction = map.getWllDiraction('wall', { x: cell.x, y: cell.y }); + if (direction != null) map.createWall(direction, cell); + } + return slots; +} +const slots = gameSlots(); +function cells(piece) { + const block = Object.assign(new Block(), { block_Info: piece }); + block.initBlocks(); + const offsets = piece.block === 23 ? [{ x: 0, y: 0 }] : block.allBlocks; + const x = piece.position.x / 120 + (info.map[0] - 2) / 2; + const y = piece.position.y / 120 + info.map[1] / 2; + return offsets.map(offset => ({ x: x + offset.x, y: y + offset.y })); +} +function rect(point) { + return { type: 'rect', minX: point.x - 0.5, maxX: point.x + 0.5, + minY: point.y - 0.5, maxY: point.y + 0.5 }; +} +function ray(laser) { + return ['emitter', 'receiver'].map(role => { + const slot = slots[laser[role].num], direction = directions[slot.direction]; + return { x: slot.x + direction[0] / 2, y: slot.y + direction[1] / 2 }; + }); +} +// Grid fixture for the authored layout; runtime collider collection has separate tests. +function blockers(pieces = level.BLOCK_INFO[0], terrain = info.risefall) { + return [ + ...pieces.filter(piece => piece.type !== 22).flatMap(piece => + cells(piece).map(cell => ({ owner: piece.id, ...rect(cell) }))), + ...terrain.filter(cell => cell.vine > 0).map(cell => ({ owner: `vine:${cell.x},${cell.y}`, ...rect(cell) })), + ]; +} +function firstHit(laser, objects = blockers()) { + const hit = nearestLaserHit(...ray(laser), objects); + return hit ? objects[hit.colliderIndex].owner : null; +} + +test('level9001 uses actual complete straight-wall slots and independent 1/2/3-cell gates', () => { + assert.equal(info.id, '9001'); + assert.equal(slots.length, 32); + assert.equal(new Set(info.lasers.map(laser => laser.id)).size, 3); + assert.deepEqual(info.lasers.map(laser => laser.color), [7, 7, 6]); + const used = new Set(); + const expectedHeads = [[0, 3, 9, 3], [0, 6, 9, 6], [4, 0, 4, 9]]; + info.lasers.forEach((laser, index) => { + const emitter = slots[laser.emitter.num], receiver = slots[laser.receiver.num]; + assert.deepEqual([emitter.x, emitter.y, receiver.x, receiver.y], expectedHeads[index]); + const forward = directions[emitter.direction], back = directions[receiver.direction]; + assert.ok(forward && back, 'heads must use complete straight walls'); + assert.deepEqual(forward.map((value, axis) => value + back[axis]), [0, 0]); + const [start, end] = ray(laser); + assert.equal((end.x - start.x) * forward[1] - (end.y - start.y) * forward[0], 0); + assert.ok((end.x - start.x) * forward[0] + (end.y - start.y) * forward[1] > 0); + const gate = level.WALL_INFO[0].filter(wall => wall.laserId === laser.id); + assert.equal(gate.length, index + 1); + assert.equal(gate[0].length, gate.length); + gate.forEach((wall, offset) => { + assert.equal(wall.length, offset ? 0 : gate.length); + assert.equal(wall.special, 0); + assert.equal(wall.color, gate[0].color); + assert.equal(wall.id, gate[0].id); + const first = slots[gate[0].num], slot = slots[wall.num]; + assert.equal(slot.direction, first.direction); + assert.ok(directions[slot.direction], 'gate segments must use complete straight walls'); + assert.equal(slot.x, first.x + (['up', 'down'].includes(slot.direction) ? offset : 0)); + assert.equal(slot.y, first.y + (['left', 'right'].includes(slot.direction) ? offset : 0)); + }); + for (const num of [laser.emitter.num, laser.receiver.num, ...gate.map(wall => wall.num)]) { + assert.ok(!used.has(num), `wall slot ${num} overlaps`); + used.add(num); + } + }); + assert.deepEqual(level.WALL_INFO[0].filter(wall => wall.length).map(wall => wall.color), [10, 8, 5]); +}); + +test('all blocks and terrain are inside the board without overlapping, and target widths fit their gates', () => { + const occupied = new Set(), ids = new Set(); + for (const piece of level.BLOCK_INFO[0]) { + assert.ok(!ids.has(piece.id)); ids.add(piece.id); + for (const point of cells(piece)) { + assert.ok(Number.isInteger(point.x) && Number.isInteger(point.y)); + assert.ok(point.x >= 1 && point.x <= 8 && point.y >= 1 && point.y <= 8); + const key = `${point.x},${point.y}`; + assert.ok(!occupied.has(key), `overlapping block at ${key}`); occupied.add(key); + } + if (piece.type === 22 || piece.block === 23) continue; + const gate = level.WALL_INFO[0].find(wall => wall.length && wall.color === piece.color); + assert.ok(gate, `target ${piece.id} has no color-matched gate`); + const axis = ['up', 'down'].includes(slots[gate.num].direction) ? 'x' : 'y'; + const values = cells(piece).map(point => point[axis]); + assert.ok(Math.max(...values) - Math.min(...values) + 1 <= gate.length); + } + for (const point of info.risefall) { + const key = `${point.x},${point.y}`; + assert.ok(!occupied.has(key), `terrain overlaps at ${key}`); occupied.add(key); + } + assert.deepEqual(info.risefall.filter(point => point.vine).map(point => point.vine), [2, 1]); +}); + +test('initial green beams hit the draggable block and vine; the crossing cyan beam passes both single-color tiles', () => { + assert.deepEqual(info.lasers.map(laser => firstHit(laser)), [90010, 'vine:6,6', null]); + const cyan = info.lasers[2]; + const mobile = cells(level.BLOCK_INFO[0].find(piece => piece.type === 22))[0]; + const fixed = info.risefall.find(point => !point.vine); + // Both transparent objects really lie on the beam, rather than accidentally missing it. + for (const point of [mobile, fixed]) assert.ok(nearestLaserHit(...ray(cyan), [rect(point)])); + const [greenStart, greenEnd] = ray(info.lasers[0]), [cyanStart, cyanEnd] = ray(cyan); + assert.ok(cyanStart.x > greenStart.x && cyanStart.x < greenEnd.x); + assert.ok(greenStart.y > cyanStart.y && greenStart.y < cyanEnd.y); +}); + +test('moving the red blocker clears only its own green group; a fixed obstacle still blocks a ray', () => { + const pieces = structuredClone(level.BLOCK_INFO[0]); + pieces.find(piece => piece.id === 90010).position.y += 120; + assert.deepEqual(info.lasers.map(laser => firstHit(laser, blockers(pieces))), [null, 'vine:6,6', null]); + const fixed = blockers().find(object => object.owner === 90050); + assert.ok(nearestLaserHit({ x: 0.5, y: 2 }, { x: 8.5, y: 2 }, [fixed])); +}); + +test('a simple red exit route stays clear and the actual vine shrink releases the second green beam', () => { + const pieces = structuredClone(level.BLOCK_INFO[0]); + const red = pieces.find(piece => piece.id === 90010); + const obstacles = pieces.filter(piece => piece.id !== red.id).flatMap(cells).concat(info.risefall); + for (const point of [{ x: 2, y: 4 }, { x: 2, y: 5 }, { x: 2, y: 6 }, { x: 2, y: 7 }, { x: 1, y: 7 }]) { + assert.ok(!obstacles.some(other => other.x === point.x && other.y === point.y)); + red.position.x = (point.x - 4) * 120; red.position.y = (point.y - 5) * 120; + assert.equal(firstHit(info.lasers[0], blockers(pieces)), null); + } + const remaining = pieces.filter(piece => piece.id !== red.id); + const terrain = structuredClone(info.risefall); + const removed = []; + const map = Object.assign(new MapController(), { + vineBlock: [{ segments: terrain.filter(point => point.vine) }], + releaseVineSegment(segment) { removed.push(segment); }, queueVineShrinkAnimation() {}, + }); + map.shrinkVine(); + assert.equal(removed.length, 2); + assert.deepEqual(info.lasers.map(laser => firstHit(laser, blockers(remaining, terrain.filter(point => !removed.includes(point))))), + [null, null, null]); + // The remaining yellow block can move down one cell; the cyan block can move up one cell. + for (const [id, dy] of [[90020, -120], [90030, 120]]) { + const piece = remaining.find(item => item.id === id); + piece.position.y += dy; + const others = remaining.filter(item => item.id !== id).flatMap(cells); + assert.ok(cells(piece).every(point => !others.some(other => other.x === point.x && other.y === point.y))); + } +}); + +test('the authored JSON passes runtime validation and runtime collection preserves initial reception', () => { + const system = { collide_arr: [] }; + const Runtime = loadMembers('assets/Script/LaserSystem.ts', ['validate', 'collectColliders', 'colliderShape'], { + cc: { ...cc, isValid: node => !!node }, LQCollideSystem: system, + LQCollideShape: { Rect: 1, Circle: 2, Polygon: 3 }, + DIRECTIONS: { + right: { x: 1, y: 0, opposite: 'left' }, left: { x: -1, y: 0, opposite: 'right' }, + up: { x: 0, y: 1, opposite: 'down' }, down: { x: 0, y: -1, opposite: 'up' }, + }, + }); + const map = { node: {}, riseFallBlock: [], mapBlocksWall: Array.from({ length: 10 }, () => + Array.from({ length: 10 }, () => ({ opacity: 250 }))) }; + const runtime = Object.assign(new Runtime(), { map }); + const runtimeSlots = slots.map(slot => ({ ...slot, posX: slot.x, posY: slot.y, + wall_Info: level.WALL_INFO[0].find(wall => wall.num === slot.num), + node: { parent: { getChildByName: name => name === 'laser' ? {} : null } }, + })); + assert.equal(runtime.validate(runtimeSlots, info.lasers).length, 3); + const parent = block => ({ parent: map.node, + getComponent: name => name === 'Block' ? block : null, getChildByName: () => null }); + const collider = (point, owner, name = 'icon') => { + system.collide_arr.push({ enabled: true, is_enable: true, data_string: '', collide_shape: 1, + offset: { x: 0, y: 0 }, size: { width: 1, height: 1 }, + node: { parent: owner, name, activeInHierarchy: true, + getComponent: () => null, getChildByName: () => null, + convertToWorldSpaceAR: offset => ({ x: point.x + offset.x, y: point.y + offset.y }), + }, + }); + }; + for (const piece of level.BLOCK_INFO[0]) { + const owner = parent({ type: piece.type, over: false }); + for (const point of cells(piece)) collider(point, owner); + } + for (const point of info.risefall) { + const owner = parent(null); + if (!point.vine) map.riseFallBlock.push(owner); + collider(point, owner, 'rise'); + } + const shapes = runtime.collectColliders().map(item => item.shape); + assert.equal(shapes.length, 9, 'single-color mobile and fixed tiles must be excluded; vine and fixed obstacle remain'); + assert.deepEqual(info.lasers.map(laser => !!nearestLaserHit(...ray(laser), shapes)), [true, true, false]); +}); diff --git a/tools/test-laser-rules.cjs b/tools/test-laser-rules.cjs new file mode 100644 index 00000000..111fb648 --- /dev/null +++ b/tools/test-laser-rules.cjs @@ -0,0 +1,123 @@ +const test = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); +const vm = require('node:vm'); +const ts = require('typescript'); + +const exported = {}; +const source = fs.readFileSync(path.join(__dirname, '../assets/Script/LaserRules.ts'), 'utf8'); +vm.runInNewContext(ts.transpileModule(source, { + compilerOptions: { target: ts.ScriptTarget.ES2017, module: ts.ModuleKind.CommonJS }, +}).outputText, { exports: exported }); +const { nearestLaserHit } = exported; +const point = (x, y) => ({ x, y }); +const rect = (minX, minY, maxX, maxY) => ({ type: 'rect', minX, minY, maxX, maxY }); +const polygon = coordinates => ({ type: 'polygon', points: coordinates.map(([x, y]) => point(x, y)) }); +const close = (actual, expected) => assert.ok(Math.abs(actual - expected) < 1e-6, `${actual} != ${expected}`); + +for (const [direction, start, end, expected] of [ + ['right', point(0, 5), point(10, 5), point(4, 5)], + ['left', point(10, 5), point(0, 5), point(6, 5)], + ['up', point(5, 0), point(5, 10), point(5, 4)], + ['down', point(5, 10), point(5, 0), point(5, 6)], +]) { + test(`${direction} beam ends at the nearest rectangle surface`, () => { + const hit = nearestLaserHit(start, end, [rect(4, 4, 6, 6)]); + close(hit.ratio, 0.4); + close(hit.distance, 4); + close(hit.point.x, expected.x); + close(hit.point.y, expected.y); + }); +} + +test('nearest blocker wins regardless of collider ordering', () => { + const hit = nearestLaserHit(point(0, 0), point(10, 0), [ + rect(8, -1, 9, 1), + { type: 'circle', center: point(5, 0), radius: 1 }, + polygon([[2, -1], [3, -1], [3, 1], [2, 1]]), + ]); + assert.equal(hit.colliderIndex, 2); + close(hit.distance, 2); +}); + +test('fractional dragging positions unblock immediately, without grid snapping', () => { + const start = point(0, 0), end = point(10, 0); + const moving = rect(4.125, -0.5, 5.125, 0.5); + close(nearestLaserHit(start, end, [moving]).distance, 4.125); + moving.minY += 0.501; + moving.maxY += 0.501; + assert.equal(nearestLaserHit(start, end, [moving]), null); + moving.minY -= 0.002; + moving.maxY -= 0.002; + close(nearestLaserHit(start, end, [moving]).distance, 4.125); +}); + +test('a beam in the empty part of a concave shape is not blocked by its bounds', () => { + const lShape = polygon([[2, 0], [6, 0], [6, 1], [3, 1], [3, 4], [2, 4]]); + assert.equal(nearestLaserHit(point(4, 3), point(7, 3), [lShape]), null); + const hit = nearestLaserHit(point(7, 3), point(0, 3), [lShape]); + close(hit.point.x, 3); + close(hit.distance, 4); + lShape.points.reverse(); + close(nearestLaserHit(point(7, 3), point(0, 3), [lShape]).distance, 4); +}); + +test('circle surface, tangent, and a clear line are distinguished', () => { + const circle = { type: 'circle', center: point(5, 0), radius: 2 }; + close(nearestLaserHit(point(0, 0), point(10, 0), [circle]).distance, 3); + close(nearestLaserHit(point(0, 2), point(10, 2), [circle]).distance, 5); + assert.equal(nearestLaserHit(point(0, 2.001), point(10, 2.001), [circle]), null); +}); + +test('an emitter inside any solid has a zero-distance hit', () => { + const solids = [ + rect(-1, -1, 1, 1), + { type: 'circle', center: point(0, 0), radius: 1 }, + polygon([[-1, -1], [1, -1], [1, 1], [-1, 1]]), + ]; + for (const solid of solids) { + const hit = nearestLaserHit(point(0, 0), point(10, 0), [solid]); + assert.equal(hit.ratio, 0); + assert.equal(hit.distance, 0); + } +}); + +test('touching a solid boundary blocks, including a collinear polygon edge', () => { + for (const solid of [rect(3, 0, 5, 2), polygon([[3, 0], [5, 0], [5, 2], [3, 2]])]) { + close(nearestLaserHit(point(0, 0), point(10, 0), [solid]).distance, 3); + close(nearestLaserHit(point(10, 0), point(0, 0), [solid]).distance, 5); + assert.equal(nearestLaserHit(point(3, 1), point(0, 1), [solid]).ratio, 0); + } +}); + +test('objects behind the emitter or beyond the receiver do not block', () => { + const solids = [ + rect(-3, -1, -2, 1), rect(11, -1, 12, 1), + { type: 'circle', center: point(13, 0), radius: 2 }, + polygon([[11, -1], [12, -1], [12, 1], [11, 1]]), + ]; + assert.equal(nearestLaserHit(point(0, 0), point(10, 0), solids), null); + close(nearestLaserHit(point(0, 0), point(10, 0), [rect(10, -1, 11, 1)]).ratio, 1); +}); + +test('rotated polygon surfaces use their edges, not their axis-aligned bounds', () => { + const diamond = polygon([[5, 0], [7, 2], [5, 4], [3, 2]]); + close(nearestLaserHit(point(0, 1), point(10, 1), [diamond]).distance, 4); + const diagonal = nearestLaserHit(point(0, 0), point(10, 10), [rect(3, 3, 4, 4)]); + close(diagonal.ratio, 0.3); + close(diagonal.distance, Math.sqrt(18)); +}); + +test('crossing beams are queried independently against the same solids', () => { + const blockers = [rect(7, 4, 8, 6)]; + close(nearestLaserHit(point(0, 5), point(10, 5), blockers).distance, 7); + assert.equal(nearestLaserHit(point(5, 0), point(5, 10), blockers), null); + close(nearestLaserHit(point(0, 5), point(10, 5), blockers).distance, 7); +}); + +test('empty colliders and zero-length lines have defined results', () => { + assert.equal(nearestLaserHit(point(0, 0), point(10, 0), []), null); + assert.equal(nearestLaserHit(point(0, 0), point(0, 0), [rect(1, 1, 2, 2)]), null); + assert.equal(nearestLaserHit(point(0, 0), point(0, 0), [rect(-1, -1, 1, 1)]).distance, 0); +}); diff --git a/tools/test-laser-system.cjs b/tools/test-laser-system.cjs new file mode 100644 index 00000000..532977d6 --- /dev/null +++ b/tools/test-laser-system.cjs @@ -0,0 +1,460 @@ +const test = require('node:test'); +const assert = require('node:assert/strict'); +const { loadMembers, loadModule } = require('./new-player-ab-test-support.cjs'); + +const v2 = (x = 0, y = 0) => ({ x, y, + sub(other) { return v2(this.x - other.x, this.y - other.y); }, + mag() { return Math.hypot(this.x, this.y); }, +}); +class Node { + constructor(name = '') { + this.name = name; + this.children = []; + this.components = {}; + this.active = true; + this.valid = true; + this.x = this.y = this.angle = 0; + this.scale = 1; + this.width = this.height = 0; + this.anchorX = this.anchorY = 0.5; + } + set parent(value) { + if (this._parent) this._parent.children.splice(this._parent.children.indexOf(this), 1); + this._parent = value; + if (value) value.children.push(this); + } + get parent() { return this._parent; } + get activeInHierarchy() { return this.active && (!this.parent || this.parent.activeInHierarchy); } + getChildByName(name) { return this.children.find(child => child.name === name) || null; } + getComponent(type) { return typeof type === 'string' ? this.components[type] || null : this.view; } + setPosition(x, y) { + this.x = typeof x === 'object' ? x.x : x; + this.y = typeof x === 'object' ? x.y : y; + } + getBoundingBox() { + return { xMin: this.x - this.anchorX * this.width, xMax: this.x + (1 - this.anchorX) * this.width, + yMin: this.y - this.anchorY * this.height, yMax: this.y + (1 - this.anchorY) * this.height }; + } + convertToWorldSpaceAR(point) { + const radians = this.angle * Math.PI / 180; + const local = v2(this.x + this.scale * (point.x * Math.cos(radians) - point.y * Math.sin(radians)), + this.y + this.scale * (point.x * Math.sin(radians) + point.y * Math.cos(radians))); + return this.parent ? this.parent.convertToWorldSpaceAR(local) : local; + } + convertToNodeSpaceAR(point) { + const local = this.parent ? this.parent.convertToNodeSpaceAR(point) : point; + const dx = (local.x - this.x) / this.scale, dy = (local.y - this.y) / this.scale; + const radians = -this.angle * Math.PI / 180; + return v2(dx * Math.cos(radians) - dy * Math.sin(radians), dx * Math.sin(radians) + dy * Math.cos(radians)); + } + destroy() { this.valid = false; } +} +class View { + constructor(node) { this.node = node; this.gateCalls = []; } + initHead(role, color, direction, inset = 0, retraction = 0) { Object.assign(this, { role, color, direction, inset, retraction }); } + initGate(length, direction, color) { Object.assign(this, { length, direction, color }); } + initBeam(color, direction, startOffset = 0) { Object.assign(this, { color, direction, startOffset }); } + getBeamOrigin() { return this.node.convertToWorldSpaceAR(v2()); } + getVisibleBeamOrigin() { + const [dx, dy] = { right: [1, 0], left: [-1, 0], up: [0, 1], down: [0, -1] }[this.direction]; + return this.node.convertToWorldSpaceAR(v2(dx * (this.inset - this.retraction), dy * (this.inset - this.retraction))); + } + setGateOpen(open, immediate) { + if (this.beforeAnimation) this.beforeAnimation(open); + this.gateCalls.push({ open, immediate }); + } + setBeam(length, connected) { this.beam = { length, connected }; } +} +const cc = { + Node, v2, isValid: node => !!node && node.valid !== false, + fx: { AudioManager: { _instance: { playEffect() {} } } }, + instantiate(prefab) { + if (typeof prefab === 'function') return prefab(); + const node = new Node('laser'); + node.view = new View(node); + return node; + }, +}; +const LQCollideShape = { Rect: 1, Circle: 2, Polygon: 3 }; +const LQCollideSystem = { collide_arr: [] }; +const rules = loadModule('assets/Script/LaserRules.ts'); +const LaserSystem = loadModule('assets/Script/LaserSystem.ts', { + './lq_collide_system/lq_collide': { LQCollide: class {} }, + './lq_collide_system/lq_collide_system': { LQCollideSystem }, + './lq_base/data/lq_const': { LQCollideShape }, + './LaserRules': rules, + './prop/LaserView': { default: View }, +}, { cc }).default; +const MapController = loadMembers('assets/Script/Map.ts', + ['passWall', 'lateUpdate', 'createWall', 'changeLockWall', 'downDoor'], { cc, setTimeout: callback => callback() }); +const close = (actual, expected) => assert.ok(Math.abs(actual - expected) < 1e-6, `${actual} != ${expected}`); + +function child(parent, name, x = 0, y = 0) { + const node = new Node(name); + node.parent = parent; + node.setPosition(x, y); + return node; +} +function fixture(length = 2) { + LQCollideSystem.collide_arr = []; + const map = { node: new Node('Map'), mapBlocksWall: [], riseFallBlock: [] }; + const slots = [], configs = []; + function wall(x, y, direction, info = null) { + const holder = child(map.node, direction, x * 100, y * 100); + const node = child(holder, 'wall'); + node.width = node.height = 60; + child(holder, 'laser'); + child(holder, 'length').active = false; + const component = { node, posX: x, posY: y, direction, wall_Info: info, + color: info ? info.color : 0, colorArray: [], special: 0 }; + node.components.Wall = component; + if (!map.mapBlocksWall[x]) map.mapBlocksWall[x] = []; + map.mapBlocksWall[x][y] = { opacity: 250 }; + slots.push(component); + return component; + } + function group(id, row, gateLength = length, color = 1) { + const emitter = slots.length; + wall(0, row, 'right'); + const receiver = slots.length; + wall(10, row, 'left'); + for (let i = 0; i < gateLength; i++) { + wall(2 + i, row + 1, 'down', { laserId: id, color: 3, length: i ? 0 : gateLength, special: 0 }); + } + configs.push({ id, color, emitter: { num: emitter }, receiver: { num: receiver } }); + } + group('first', 2); + return { map, slots, configs, wall, group, create: () => new LaserSystem(map, slots, configs, {}) }; +} +function collider(parent, x, y, options = {}) { + const node = child(parent, options.name || 'edge', x, y); + const value = { node, is_enable: true, enabled: true, data_string: '', + collide_shape: LQCollideShape.Rect, offset: v2(), size: { width: 100, height: 100 }, ...options }; + LQCollideSystem.collide_arr.push(value); + return value; +} +function block(parent, type = 0) { + const node = child(parent, 'block'); + node.components.Block = { type, over: false }; + return node; +} + +test('only solid active colliders block; both monochrome types stay transparent and vines stay solid', () => { + const { map, create } = fixture(); + const system = create(); + const ordinary = collider(block(map.node), 400, 200); + const vineCell = child(map.node, 'vineCell'); + const vine = collider(vineCell, 600, 200, { name: 'rise' }); + collider(block(map.node, 22), 400, 200); + const riseCell = child(map.node, 'monochromeCell'); + map.riseFallBlock.push(riseCell); + collider(riseCell, 400, 200, { name: 'rise' }); + collider(block(map.node), 400, 200, { data_string: '-1' }); + collider(block(map.node), 400, 200, { data_string: '-2' }); + collider(block(map.node), 400, 200, { is_enable: false }); + collider(block(map.node), 400, 200, { enabled: false }); + collider(block(map.node), 400, 200).node.active = false; + const hiddenBlock = block(map.node); + hiddenBlock.active = false; + collider(hiddenBlock, 400, 200); + collider(block(map.node), 400, 200).node.valid = false; + const exiting = block(map.node); + exiting.components.Block.over = true; + collider(exiting, 400, 200); + collider(new Node('another map'), 400, 200); + const collected = system.collectColliders(); + assert.equal(collected.length, 2); + close(collected[0].shape.minX, ordinary.node.x - 50); + close(collected[1].shape.minX, vine.node.x - 50); + ordinary.is_enable = false; + system.update(); + assert.equal(system.groups[0].connected, false, 'the remaining vine must block'); + vine.is_enable = false; + system.update(); + assert.equal(system.groups[0].connected, true, 'logically removed vine must stop blocking'); +}); + +test('moving before the collision cache refresh updates beam length and gate state immediately', () => { + const { map, create } = fixture(); + const system = create(); + const moving = collider(block(map.node), 400, 200); + Object.defineProperty(moving, 'world_rect', { get() { throw new Error('stale cache must not be read'); } }); + system.update(); + close(system.groups[0].beam.beam.length, 327); + moving.node.x = 425.125; + system.update(); + close(system.groups[0].beam.beam.length, 352.125); + moving.node.y = 250.001; + system.update(); + assert.equal(system.groups[0].connected, true); + close(system.groups[0].beam.beam.length, 952); +}); + +test('all gate cells change before animation, including an immediate reversal during the previous tween', () => { + const { map, create } = fixture(3); + const system = create(), group = system.groups[0]; + group.gate.gateCalls.length = 0; + group.gate.beforeAnimation = open => assert.ok(group.gates.every(wall => wall.open === open)); + const moving = collider(block(map.node), 400, 200); + system.update(); + assert.equal(group.gate.gateCalls.length, 1); + assert.equal(group.gate.gateCalls[0].open, false); + assert.equal(group.gate.gateCalls[0].immediate, false); + moving.node.y += 60; + system.update(); + assert.equal(group.gate.gateCalls[1].open, true); + assert.equal(group.gate.gateCalls.length, 2); + system.update(); + assert.equal(group.gate.gateCalls.length, 2, 'stable reception must not restart an animation'); +}); + +test('a logically exited block is transparent while its visual node remains active', () => { + const { map, create } = fixture(); + const system = create(), obstacle = block(map.node); + collider(obstacle, 400, 200); + system.update(); + assert.equal(system.groups[0].connected, false); + obstacle.components.Block.over = true; + system.update(); + assert.equal(obstacle.activeInHierarchy, true); + assert.equal(system.groups[0].connected, true); +}); + +test('same-color groups are independent and each beam ends at its nearest solid', () => { + const setup = fixture(1); + setup.group('second', 6, 1, 1); + const system = setup.create(); + const farther = collider(block(setup.map.node), 700, 200); + const nearer = collider(block(setup.map.node), 300, 200); + system.update(); + assert.equal(system.groups[0].connected, false); + close(system.groups[0].beam.beam.length, 227); + assert.equal(system.groups[1].connected, true); + close(system.groups[1].beam.beam.length, 952); + nearer.node.y = 600; + system.update(); + close(system.groups[0].beam.beam.length, 627); + close(system.groups[1].beam.beam.length, 227); + farther.node.y = 400; + system.update(); + assert.equal(system.groups[0].connected, true); + assert.equal(system.groups[1].connected, false); +}); + +test('the source and target wall colliders do not obstruct their own optical path', () => { + const setup = fixture(); + const system = setup.create(); + collider(setup.slots[0].node.parent, 0, 0); + collider(setup.slots[1].node.parent, 0, 0); + system.update(); + assert.equal(system.groups[0].connected, true); +}); + +for (const [direction, opposite, dx, dy, mouth, length] of [ + ['right', 'left', 1, 0, 23, 952], ['left', 'right', -1, 0, 25, 952], + ['up', 'down', 0, 1, 30, 953], ['down', 'up', 0, -1, 17, 953], +]) { + test(`${direction} visible origins move inward while hidden-start blockers still close the logical gate`, () => { + const { map, slots, create } = fixture(); + [direction, opposite].forEach((facing, index) => { + const wall = slots[index]; + wall.direction = facing; + wall.posX = 10 + index * dx * 10; + wall.posY = 10 + index * dy * 10; + if (!map.mapBlocksWall[wall.posX]) map.mapBlocksWall[wall.posX] = []; + map.mapBlocksWall[wall.posX][wall.posY] = { opacity: 250 }; + wall.node.parent.setPosition(index * dx * 1000, index * dy * 1000); + }); + const system = create(), group = system.groups[0]; + system.update(); + close(group.source.getBeamOrigin().x, 0); + close(group.source.getBeamOrigin().y, 0); + close(group.target.getBeamOrigin().x, dx * 1000); + close(group.target.getBeamOrigin().y, dy * 1000); + close(group.beam.node.x, dx * mouth); + close(group.beam.node.y, dy * mouth); + close(group.beam.node.x + dx * group.beam.startOffset, dx * 31); + close(group.beam.node.y + dy * group.beam.startOffset, dy * 31); + close(group.beam.beam.length, length); + assert.equal(system.layer.zIndex, 10, 'do not raise the whole beam over blocks'); + assert.equal(group.connected, true); + collider(block(map.node), dx * 10, dy * 10, { size: { width: 10, height: 10 } }); + system.update(); + assert.equal(group.connected, false, 'collision still starts at the original wall socket'); + assert.ok(group.gates.every(wall => wall.open === false)); + assert.equal(group.beam.beam.length, 0, 'a hit behind the visible start must not make a reversed beam'); + }); +} + +test('head inset uses the wall face without moving the shared socket or gate attachment', () => { + const setup = fixture(), wall = setup.slots[0].node; + wall.setPosition(6.333, -73.465); + wall.anchorX = wall.anchorY = 0; + wall.width = 61; + wall.height = 146; + const socket = wall.parent.getChildByName('laser'); + socket.x = 36.695; + const system = setup.create(), group = system.groups[0]; + close(group.source.inset, 31.638); + close(group.source.getBeamOrigin().x, 36.695); + close(group.source.getVisibleBeamOrigin().x, 60.333); + close(group.beam.node.x + group.beam.startOffset, 68.333); + close(socket.x, 36.695); + close(group.gate.node.x, 0); + close(group.gate.node.parent.x, 0); +}); + +test('map scaling moves only the visible head coordinates and preserves beam length in map space', () => { + const setup = fixture(); + setup.map.node.scale = 0.5; + const system = setup.create(), group = system.groups[0]; + close(group.source.getVisibleBeamOrigin().x, 11.5); + close(group.target.getVisibleBeamOrigin().x, 487.5); + close(group.beam.node.x, 23); + close(group.beam.node.x + group.beam.startOffset, 31); + close(group.beam.beam.length, 952); + assert.equal(group.connected, true); +}); + +test('LQ pre-scaled dimensions and polygon points are not scaled a second time', () => { + const { map, create } = fixture(); + const system = create(); + map.node.scale = 0.5; + const rectangle = collider(block(map.node), 8, 4, { offset: v2(2, 1), size: { width: 3, height: 2 } }); + const shape = system.colliderShape(rectangle); + close(shape.minX, 3.5); + close(shape.maxX, 6.5); + close(shape.minY, 1.5); + const circle = collider(block(map.node), 8, 4, { collide_shape: LQCollideShape.Circle, radius: 3 }); + close(system.colliderShape(circle).radius, 3); + const polygon = collider(block(map.node), 8, 4, { + collide_shape: LQCollideShape.Polygon, polygon_points: [v2(2, 0), v2(0, 2), v2(-2, 0)], + }); + polygon.node.angle = 90; + const points = system.colliderShape(polygon).points; + close(points[0].x, 4); + close(points[0].y, 4); + close(points[1].x, 2); + close(points[1].y, 2); +}); + +test('individual collision strips and corner circles preserve the empty part of a compound shape', () => { + const { map, create } = fixture(); + const system = create(), compound = block(map.node); + collider(compound, 3, 5, { size: { width: 2, height: 10 } }); + collider(compound, 6, 1, { size: { width: 8, height: 2 } }); + collider(compound, 9, 9, { collide_shape: LQCollideShape.Circle, radius: 1 }); + const shapes = system.collectColliders().map(item => item.shape); + assert.equal(shapes.length, 3); + assert.equal(rules.nearestLaserHit(v2(6, 6), v2(9, 6), shapes), null); + close(rules.nearestLaserHit(v2(6, 6), v2(0, 6), shapes).distance, 2); +}); + +for (const [name, change, error] of [ + ['missing receiver', setup => delete setup.configs[0].receiver, /完整直墙/], + ['same-facing endpoints', setup => setup.slots[1].direction = 'right', /相向/], + ['misaligned endpoints', setup => setup.slots[1].posY++, /相向/], + ['corner wall', setup => setup.map.mapBlocksWall[0][2].opacity = 251, /完整直墙/], + ['occupied head slot', setup => setup.slots[0].wall_Info = { color: 1 }, /已被占用/], + ['missing gate segment', setup => setup.slots.pop(), /完整的/], + ['noncontiguous gate', setup => setup.slots[3].posX++, /连续同色/], + ['mixed gate colors', setup => setup.slots[3].wall_Info.color++, /连续同色/], + ['other gate mechanics', setup => setup.slots[2].wall_Info.toggle = 1, /连续同色/], + ['orphan gate', setup => setup.configs.length = 0, /缺少对应组/], +]) { + test(`invalid laser configuration rejects ${name}`, () => { + const setup = fixture(); + // Keep a valid map cell at adjacent positions for coordinate-mutating cases. + setup.map.mapBlocksWall[10][3] = { opacity: 250 }; + setup.map.mapBlocksWall[4] = [{}, {}, {}, { opacity: 250 }]; + change(setup); + assert.throws(setup.create, error); + }); +} + +test('passWall refreshes reception before checking every segment and preserves color restrictions', () => { + const setup = fixture(); + const system = setup.create(); + const map = Object.assign(new MapController(), { laserSystem: system, checkColor() {} }); + const piece = block(setup.map.node); + piece.components.Block.color = 3; + const gates = system.groups[0].gates.map(wall => wall.node); + const obstacle = collider(block(setup.map.node), 500, 200); + assert.equal(map.passWall(true, gates, piece), false); + obstacle.node.y += 60; + assert.equal(map.passWall(true, gates, piece), true); + piece.components.Block.color = 2; + assert.equal(map.passWall(true, gates, piece), false); + piece.components.Block.oldRainbow = true; + assert.equal(map.passWall(true, gates, piece), true); + obstacle.node.y -= 60; + assert.equal(map.passWall(true, gates, piece), false, 'rainbow cannot bypass a disconnected laser gate'); +}); + +test('lateUpdate refreshes lasers and legacy gates continue to work with no laser system', () => { + let updates = 0; + const map = Object.assign(new MapController(), { laserSystem: { update() { updates++; } }, checkColor() {} }); + map.lateUpdate(); + assert.equal(updates, 1); + map.laserSystem = null; + map.lateUpdate(); + const setup = fixture(1), wall = setup.slots[2]; + delete wall.wall_Info.laserId; + const piece = block(setup.map.node); + piece.components.Block.color = wall.color; + wall.open = false; + assert.equal(map.passWall(true, [wall.node], piece), true); + wall.special = 2; + assert.equal(map.passWall(true, [wall.node], piece), false); + wall.open = true; + assert.equal(map.passWall(true, [wall.node], piece), true); +}); + +test('creating laser gates leaves them outside the global switch-door toggle list', () => { + const created = []; + const prefab = () => { + const holder = new Node('right'), wall = child(holder, 'wall'); + wall.components.Wall = { special: 0, longAndShort: [], open: true, + init() {}, changeLock() { this.open = !this.open; } }; + created.push(wall.components.Wall); + return holder; + }; + const map = Object.assign(new MapController(), { + node: new Node('Map'), Wall_Prefab: Array(12).fill(prefab), wallNum: 0, + leftDoors: [], openWall: [], freezeWall: [], lockWall: [], longAndShortWall: [], + setDoorInfo(wall) { + const component = wall.getComponent('Wall'); + component.special = this.wallNum === 0 ? 0 : 2; + component.wall_Info = this.wallNum === 0 ? { laserId: 'first', special: 0 } : { special: 2 }; + }, + }); + const cell = new Node('cell'); + cell.components.MapBlock = { posX: 0, posY: 0, setDiraction() {} }; + map.createWall('right', cell); + map.createWall('right', cell); + assert.equal(map.openWall.length, 1); + map.changeLockWall(); + assert.equal(created[0].open, true, 'laser gate must not be toggled by ordinary block exits'); + assert.equal(created[1].open, false, 'the existing switch door still toggles'); +}); + +test('door hints skip a closed laser gate and preserve ordinary door color hints', () => { + const setup = fixture(1), laserWall = setup.slots[2]; + const ordinaryWall = setup.wall(5, 5, 'down', { special: 0, length: 1, color: 3 }); + const calls = []; + laserWall.downDoor = () => calls.push('laser'); + ordinaryWall.downDoor = () => calls.push('ordinary'); + const map = Object.assign(new MapController(), { + wallArray: [laserWall.node.parent, ordinaryWall.node.parent], + }); + laserWall.open = false; + map.downDoor(3, 0); + assert.deepEqual(calls, ['ordinary']); + calls.length = 0; + laserWall.open = true; + map.downDoor(3, 0); + assert.deepEqual(calls, ['laser', 'ordinary']); + calls.length = 0; + map.downDoor(2, 0); + assert.deepEqual(calls, []); +});