|
@@ -1,9 +1,11 @@
|
|
|
-import { _decorator, Component, Prefab, Sprite, SpriteFrame, instantiate, Node, Vec3, assetManager, AssetManager, resources, randomRangeInt, randomRange, UITransform, Vec2 } from "cc";
|
|
|
+import { _decorator, Component, Prefab, Sprite, SpriteFrame, instantiate, Node, Vec3, assetManager, AssetManager, resources, randomRangeInt, randomRange, UITransform, Vec2, input, Input, Camera, find, Size } from "cc";
|
|
|
import FindItem, { ItemState } from "./FindItem";
|
|
|
import { LayerMgr } from "../../script/Manager/LayerMgr";
|
|
|
import { CCFloat } from "cc";
|
|
|
import EventMgr from "../../script/Manager/EventMgr";
|
|
|
import { Difficulty, Skin, SuperFind } from "../../script/Manager/LocalDataMgr";
|
|
|
+import { BundleName } from "../../script/Config/EnumCfg";
|
|
|
+import { AudioManager } from "../../script/Manager/AudioMgr";
|
|
|
const { ccclass, property } = _decorator;
|
|
|
|
|
|
// 关卡模式枚举
|
|
@@ -47,13 +49,39 @@ export class LevelContainer extends Component {
|
|
|
_defaultScales: number[] = [1.18, 1.16, 1.14, 0.3976, 0.3690, 0.3029,
|
|
|
0.0667, 0.0766, 0.0531, 0.0716];
|
|
|
|
|
|
+ _canTouch: boolean = true;
|
|
|
+ _camera: Camera = null;
|
|
|
+
|
|
|
start() {
|
|
|
// LayerMgr.instance.loadBundle("editor", () => {
|
|
|
// this.genLvlContent("image/bg1", ["prefab/spine/spine01"], 10);
|
|
|
// });
|
|
|
+ try {
|
|
|
+ this._camera = find("Canvas/Camera").getComponent(Camera);
|
|
|
+ } catch (error) {
|
|
|
+ console.error("超级找茬未找到相机组件");
|
|
|
+ }
|
|
|
this.addResetListener()
|
|
|
+ input.on(Input.EventType.TOUCH_START, this.onTouchStart, this);
|
|
|
}
|
|
|
|
|
|
+ onTouchStart()
|
|
|
+ {
|
|
|
+ input.getAllTouches().forEach(touch => {
|
|
|
+ for(let i = 0; i < this._findItems.length; i++)
|
|
|
+ {
|
|
|
+ const item = this._findItems[i];
|
|
|
+ let itemPos = item.node.getWorldPosition();
|
|
|
+ let screenPos = touch.getLocation();
|
|
|
+ let touchWorldPos = this._camera.screenToWorld(new Vec3(screenPos.x, screenPos.y, 0));
|
|
|
+ if(Vec3.squaredDistance(itemPos, touchWorldPos) > 10000)
|
|
|
+ {
|
|
|
+ this.touchItemFail(touchWorldPos);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 切换编辑模式
|
|
|
* @param isEdit 是否为编辑模式
|
|
@@ -106,6 +134,7 @@ export class LevelContainer extends Component {
|
|
|
for (let i = 0; i < itemcnt; i++) {
|
|
|
// 随机选择一个物品
|
|
|
randomIndex = Skin.skinData.singleSelect == "true" && Skin.skinData.selectedSkinList.length > 0?randomIndex: randomRangeInt(0, itemSpinePaths.length);
|
|
|
+ console.log("皮肤路径", itemSpinePaths,"索引",randomIndex,"last",Skin.skinData._lastSelectSpinePath);
|
|
|
this.createItem(itemSpinePaths[randomIndex], Difficulty.difficutyData.scales[i]);
|
|
|
}
|
|
|
}
|
|
@@ -194,6 +223,7 @@ export class LevelContainer extends Component {
|
|
|
findItem.node.on("itemFound", () => {
|
|
|
if (this._currentMode === LevelMode.NORMAL) {
|
|
|
this._foundItems++;
|
|
|
+ AudioManager.instance.playBundleAudio("right")
|
|
|
// console.log("itemFound", this._foundItems, this._totalItems);
|
|
|
// 检查是否所有物品都被找到
|
|
|
if (this._foundItems >= this._totalItems) {
|
|
@@ -203,6 +233,22 @@ export class LevelContainer extends Component {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ touchItemFail(worldPos: Vec3) {
|
|
|
+ if (this._canTouch == false) return
|
|
|
+ this._canTouch = false
|
|
|
+ this.scheduleOnce(() => {
|
|
|
+ this._canTouch = true
|
|
|
+ }, 0.1)
|
|
|
+ LayerMgr.instance.ShowPrefab(BundleName.hall, "prefab/x", (node: Node) => {
|
|
|
+ this.itemContainer.addChild(node)
|
|
|
+ AudioManager.instance.playBundleAudio("wrong")
|
|
|
+ node.setWorldPosition(worldPos)
|
|
|
+ this.scheduleOnce(() => {
|
|
|
+ node?.destroy()
|
|
|
+ }, 0.3)
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 关卡完成回调
|
|
|
*/
|
|
@@ -289,9 +335,41 @@ export class LevelContainer extends Component {
|
|
|
* @param path 图片路径
|
|
|
* @param callback 回调函数
|
|
|
*/
|
|
|
- loadSprite(path: string, callback: (spriteFrame: SpriteFrame) => void) {
|
|
|
- LayerMgr.instance.loadSprite("editor", path, callback);
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 加载精灵图片
|
|
|
+ * @param path 图片路径
|
|
|
+ * @param callback 回调函数
|
|
|
+ */
|
|
|
+loadSprite(path: string, callback: (spriteFrame: SpriteFrame) => void) {
|
|
|
+ LayerMgr.instance.loadSprite("editor", path, (spriteFrame: SpriteFrame) => {
|
|
|
+ if (this.lvlBg && spriteFrame) {
|
|
|
+ this.lvlBg.spriteFrame = spriteFrame;
|
|
|
+
|
|
|
+ // 获取Mask的尺寸
|
|
|
+ const maskSize = this.mask.getComponent(UITransform).contentSize;
|
|
|
+
|
|
|
+ // 获取原始图片尺寸
|
|
|
+ const originalSize = spriteFrame.originalSize;
|
|
|
+
|
|
|
+ // 计算缩放比例
|
|
|
+ const scaleRatio = maskSize.width / originalSize.width;
|
|
|
+
|
|
|
+ // 设置背景图尺寸
|
|
|
+ this.lvlBg.node.getComponent(UITransform).contentSize = new Size(
|
|
|
+ maskSize.width,
|
|
|
+ originalSize.height * scaleRatio
|
|
|
+ );
|
|
|
+
|
|
|
+ // 确保背景图填满整个Mask区域
|
|
|
+ this.lvlBg.node.setScale(1, 1);
|
|
|
+
|
|
|
+ // 调用原始回调
|
|
|
+ if (callback) {
|
|
|
+ callback(spriteFrame);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
|
|
|
prefabMap: Map<string, Prefab> = new Map();
|
|
|
/**
|