diff --git a/assets/Ragdoll/Ragdoll.ts b/assets/Ragdoll/Ragdoll.ts index 5177276..8a07cb9 100644 --- a/assets/Ragdoll/Ragdoll.ts +++ b/assets/Ragdoll/Ragdoll.ts @@ -1,190 +1,297 @@ -import { _decorator, Collider, Component, Material, Node, PhysicsGroup, PhysicsSystem, RigidBody, SkinnedMeshRenderer, SphereCollider } from 'cc'; -import { RagdollBone } from './RagdollBone'; -import { RagdollConstraint } from './RagdollConstraint'; +// @structural-rewrite-v1 +import { _decorator, Collider, Component, Material, Node, PhysicsSystem, RigidBody, SkinnedMeshRenderer, SphereCollider } from 'cc'; +import { AssetController } from '../scripts/AssetController'; import { GameController } from '../scripts/GameController'; import { AudioMgr } from '../scripts/framework/audio/AudioMgr'; -import { AssetController } from '../scripts/AssetController'; +import { RagdollBone } from './RagdollBone'; +import { RagdollConstraint } from './RagdollConstraint'; const { ccclass, property } = _decorator; - @ccclass('Ragdoll') export class Ragdoll extends Component { @property(Node) rootNode: Node = null; - @property(Node) centerNode: Node = null; - @property(SkinnedMeshRenderer) renderer: SkinnedMeshRenderer = null; - - @property(Material) - siwang: Material; // 新的材质 - - private realBones: Array = []; - private simuBones: Array = []; - - private simuBoneJointArr: Array = []; - + siwang: Material; + isDie = false; + private realBones: Node[] = []; + private simuBones: Node[] = []; + private simuBoneJointArr: CANNON.ConeTwistConstraint[] = []; private world: any; - - private isEnabled: boolean = false; - - - start() { - this.world = PhysicsSystem.instance.physicsWorld.impl; - this.initRagdoll() - } - - private initRagdoll() { - // 压入真实骨骼 - this.getAllRealBones(this.rootNode) - - // 创建模拟骨骼 - this.createSimuBones(); - - // 创建模拟骨骼的关节 - this.createSimuBoneJoints(); - } - - createSimuBones() { - for (let boneNode of this.realBones) { - let node = new Node - node.addComponent(SphereCollider).radius = 0.2 * node.worldScale.x - node.addComponent(RigidBody) - - this.node.addChild(node) - this.simuBones.push(node) - - this.syncPositionAndRotation(node, boneNode) - // 同步之后将位置赋给初始位置 - let ragdollBone = boneNode.getComponent(RagdollBone) - ragdollBone.simuNode = node - ragdollBone.initPos = boneNode.getPosition(); - ragdollBone.initRot = boneNode.getRotation(); + private isEnabled = false; + protected start(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["world"] = ((PhysicsSystem["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["physicsWorld"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["impl"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (this["initRagdoll"]()); + } + } while (false); } - - this.scheduleOnce(() => { - for (let bone of this.simuBones) { - let body = bone.getComponent(RigidBody) - body.sleep() - } - }, 0) - } - - createSimuBoneJoints() { - for (let boneNode of this.realBones) { - const joint = boneNode.getComponent(RagdollConstraint) - if (joint) { - const simuNodeA = boneNode.getComponent(RagdollBone).simuNode - const simuNodeB = joint.connectedBone.getComponent(RagdollBone).simuNode - const bodyA = simuNodeA.getComponent(RigidBody).body.impl - const bodyB = simuNodeB.getComponent(RigidBody).body.impl - - let spineJoint = new CANNON.ConeTwistConstraint(bodyA, bodyB, { - pivotA: new CANNON.Vec3(joint.pivotA.x, joint.pivotA.y, joint.pivotA.z), - pivotB: new CANNON.Vec3(joint.pivotB.x, joint.pivotB.y, joint.pivotB.z), - axisA: new CANNON.Vec3(joint.axisA.x, joint.axisA.y, joint.axisA.z), - axisB: new CANNON.Vec3(joint.axisB.x, joint.axisB.y, joint.axisB.z), - angle: joint.angle, - twistAngle: joint.twistAngle - }) - this.world.addConstraint(spineJoint) - this.simuBoneJointArr.push(spineJoint) - } + finally { } } - - getAllRealBones(node: Node) { - let bones = node.children; - for (let boneNode of bones) { - const bone = boneNode.getComponent(RagdollBone) - if (bone) { - this.realBones.push(boneNode) - bone.ragdoll = this - } - this.getAllRealBones(boneNode) + protected lateUpdate(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (!(this["isEnabled"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) + return; + void (this["updateBones"]()); + } + } while (false); + } + finally { } } - - lateUpdate(deltaTime: number) { - if (this.isEnabled) { - this.updateBones() + createSimuBones(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["simuBones"] = (this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["map"]((bone) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const simulation = new Node(); + void (simulation["addComponent"](SphereCollider)["radius"] = 0.2 * ((simulation["worldScale"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (simulation["addComponent"](RigidBody)); + void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addChild"](simulation)); + void (this["syncPositionAndRotation"](simulation, bone)); + void (bone["getComponent"](RagdollBone)["initializeSimulation"](simulation)); + return simulation; + } + } while (false); + } + finally { + } + })); + void (this["scheduleOnce"](() => (this["simuBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => bone["getComponent"](RigidBody)["sleep"]()), 0)); + } + } while (false); + } + finally { } } - - syncPositionAndRotation(nodeA: Node, nodeB: Node) { - nodeA.setWorldPosition(nodeB.worldPosition) - nodeA.setWorldRotation(nodeB.worldRotation) - } - - // 将模拟骨骼的位置和转角同步到真实骨骼 - private updateBones() { - for (let i = 0; i < this.realBones.length; i++) { - this.syncPositionAndRotation(this.realBones[i], this.simuBones[i]) + createSimuBoneJoints(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["simuBoneJointArr"] = (this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["map"]((bone) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const joint = bone["getComponent"](RagdollConstraint); + if (!joint) + return null; + const bodyA = ((bone["getComponent"](RagdollBone)["simuNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](RigidBody)["body"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["impl"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + const bodyB = (((joint["connectedBone"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](RagdollBone)["simuNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](RigidBody)["body"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["impl"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + const constraint = joint["createConstraint"](bodyA, bodyB); + void ((this["world"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addConstraint"](constraint)); + return constraint; + } + } while (false); + } + finally { + } + })["filter"]((constraint): constraint is CANNON.ConeTwistConstraint => constraint != null)); + } + } while (false); + } + finally { } } - - getEnabled() { - return this.isEnabled; + getAllRealBones(node: Node): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((node["children"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((child) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const bone = child["getComponent"](RagdollBone); + if (bone) { + void ((this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["push"](child)); + void (bone["ragdoll"] = this); + } + void (this["getAllRealBones"](child)); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } } - - setEnabled(isEnabled: boolean) { - if (isEnabled && this.isDie) return - isEnabled ? this.enableRagdoll() : this.disableRagdoll(); - AudioMgr.inst.playOneShot(AssetController.instance.die) + syncPositionAndRotation(nodeA: Node, nodeB: Node): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (nodeA["setWorldPosition"](nodeB["worldPosition"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (nodeA["setWorldRotation"](nodeB["worldRotation"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + } + } while (false); + } + finally { + } } - - isDie: boolean = false - enableRagdoll() { - this.isDie = true - GameController.getInstance().curLevel.onEnemyDie(this) - // this.renderer.setMaterialInstance(this.siwang, 0) - - this.renderer.material = this.siwang - - // 将模拟骨骼的位置和真实骨骼同步 - for (let bone of this.realBones) { - let ragdollBone = bone.getComponent(RagdollBone) - this.syncPositionAndRotation(ragdollBone.simuNode, bone) - let collider = ragdollBone.getComponent(Collider) - if (collider) - collider.enabled = false + getEnabled(): boolean { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["isEnabled"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + } + } while (false); } - - for (let bone of this.simuBones) { - let body = bone.getComponent(RigidBody) - body.wakeUp(); + finally { } - - // 将关节添加至物理世界 - for (let joint of this.simuBoneJointArr) { - this.world.addConstraint(joint); - } - - this.isEnabled = true; } - - disableRagdoll() { - // 将真实骨骼移动至初始位置 - for (let bone of this.realBones) { - let ragdollBone = bone.getComponent(RagdollBone); - bone.setPosition(ragdollBone.initPos); - bone.setRotation(ragdollBone.initRot); + setEnabled(isEnabled: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (isEnabled && this["isDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + return; + void ([this["disableRagdoll"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["enableRagdoll"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown][Number(isEnabled)]["call"](this)); + void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["die"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + } + } while (false); } - - for (let bone of this.simuBones) { - let body = bone.getComponent(RigidBody) - body.sleep(); + finally { } - - // 从物理世界中移除关节 - for (let joint of this.simuBoneJointArr) { - this.world.removeConstraint(joint); + } + enableRagdoll(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["isDie"] = true); + void ((GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["onEnemyDie"](this)); + void ((this["renderer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["material"] = this["siwang"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void ((this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => this["prepareBoneForPhysics"](bone))); + void ((this["simuBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => bone["getComponent"](RigidBody)["wakeUp"]())); + void ((this["simuBoneJointArr"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((joint) => (this["world"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addConstraint"](joint))); + void (this["isEnabled"] = true); + } + } while (false); + } + finally { + } + } + disableRagdoll(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const ragdollBone = bone["getComponent"](RagdollBone); + void (ragdollBone["restorePose"]()); + } + } while (false); + } + finally { + } + })); + void ((this["simuBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => bone["getComponent"](RigidBody)["sleep"]())); + void ((this["simuBoneJointArr"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((joint) => (this["world"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["removeConstraint"](joint))); + void (this["isEnabled"] = false); + } + } while (false); + } + finally { + } + } + private initRagdoll(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["getAllRealBones"](this["rootNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["createSimuBones"]()); + void (this["createSimuBoneJoints"]()); + } + } while (false); + } + finally { + } + } + private updateBones(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone, index) => this["syncPositionAndRotation"](bone, (this["simuBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[index]))); + } + } while (false); + } + finally { + } + } + private prepareBoneForPhysics(bone: Node): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const ragdollBone = bone["getComponent"](RagdollBone); + void (this["syncPositionAndRotation"](ragdollBone["simuNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, bone)); + const collider = ragdollBone["getComponent"](Collider); + if (collider) + void (collider["enabled"] = false); + } + } while (false); + } + finally { } - - this.isEnabled = false; } } - - diff --git a/assets/Ragdoll/RagdollBone.ts b/assets/Ragdoll/RagdollBone.ts index 30b0a25..9498c99 100644 --- a/assets/Ragdoll/RagdollBone.ts +++ b/assets/Ragdoll/RagdollBone.ts @@ -1,11 +1,42 @@ -import { _decorator, director, Component, Node, Vec3, v3, math } from "cc"; -import { Ragdoll } from "./Ragdoll"; -const { ccclass, property } = _decorator - +// @structural-rewrite-v1 +import { _decorator, Component, math, Node, v3, Vec3 } from 'cc'; +import { Ragdoll } from './Ragdoll'; +const { ccclass } = _decorator; @ccclass('RagdollBone') export class RagdollBone extends Component { simuNode: Node = null; initPos: Vec3 = v3(); - initRot: math.Quat = new math.Quat(); - ragdoll: Ragdoll -} \ No newline at end of file + initRot: math.Quat = new (math["Quat"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)(); + ragdoll: Ragdoll; + initializeSimulation(node: Node): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["simuNode"] = node); + void (this["initPos"] = (this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getPosition"]()); + void (this["initRot"] = (this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getRotation"]()); + } + } while (false); + } + finally { + } + } + restorePose(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setPosition"](this["initPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setRotation"](this["initRot"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + } + } while (false); + } + finally { + } + } +} diff --git a/assets/Ragdoll/RagdollConstraint.ts b/assets/Ragdoll/RagdollConstraint.ts index 2dc9a48..57cd8b4 100644 --- a/assets/Ragdoll/RagdollConstraint.ts +++ b/assets/Ragdoll/RagdollConstraint.ts @@ -1,26 +1,53 @@ -import { _decorator, CCClass, CCFloat, Component, director, Node, v3, Vec3 } from "cc"; -const { ccclass, property } = _decorator - +// @structural-rewrite-v1 +import { _decorator, CCFloat, Component, Node, v3, Vec3 } from 'cc'; +const { ccclass, property } = _decorator; @ccclass('RagdollConstraint') export class RagdollConstraint extends Component { @property(Node) connectedBone: Node = null; - @property(Vec3) - pivotA: Vec3 = v3() - + pivotA: Vec3 = v3(); @property(Vec3) - pivotB: Vec3 = v3() - + pivotB: Vec3 = v3(); @property(Vec3) - axisA: Vec3 = v3() - + axisA: Vec3 = v3(); @property(Vec3) - axisB: Vec3 = v3() - + axisB: Vec3 = v3(); @property(CCFloat) - angle: number = Math.PI / 4; - + angle = (Math["PI"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) / 4; @property(CCFloat) - twistAngle: number = Math.PI / 8; -} \ No newline at end of file + twistAngle = (Math["PI"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) / 8; + createConstraint(bodyA: CANNON.Body, bodyB: CANNON.Body): CANNON.ConeTwistConstraint { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return new (CANNON["ConeTwistConstraint"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)(bodyA, bodyB, { + "pivotA": this["toCannonVector"](this["pivotA"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown), + "pivotB": this["toCannonVector"](this["pivotB"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown), + "axisA": this["toCannonVector"](this["axisA"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown), + "axisB": this["toCannonVector"](this["axisB"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown), + "angle": this["angle"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, + "twistAngle": this["twistAngle"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, + }); + } + } while (false); + } + finally { + } + } + private toCannonVector(vector: Vec3): CANNON.Vec3 { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return new (CANNON["Vec3"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)(vector["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, vector["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, vector["z"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + } + } while (false); + } + finally { + } + } +} diff --git a/assets/scripts/AssetController.ts b/assets/scripts/AssetController.ts index d0f659b..fc92393 100644 --- a/assets/scripts/AssetController.ts +++ b/assets/scripts/AssetController.ts @@ -1,38 +1,59 @@ -import { _decorator, AudioClip, Component, Node, Prefab, resources, Sprite, SpriteFrame } from 'cc'; +// @structural-rewrite-v1 +import { _decorator, AudioClip, Component, Sprite } from 'cc'; +import { RuntimeAssetLoader } from './framework/runtime/RuntimeAssetLoader'; const { ccclass, property } = _decorator; - @ccclass('AssetController') export class AssetController extends Component { static instance: AssetController; - - @property({ type: AudioClip }) + @property({ "type": AudioClip }) fire: AudioClip = null; - @property({ type: AudioClip }) + @property({ "type": AudioClip }) click: AudioClip = null; - @property({ type: AudioClip }) + @property({ "type": AudioClip }) win: AudioClip = null; - @property({ type: AudioClip }) + @property({ "type": AudioClip }) die: AudioClip = null; - @property({ type: AudioClip }) + @property({ "type": AudioClip }) xiao: AudioClip = null; - - @property({ type: AudioClip }) + @property({ "type": AudioClip }) getCoin: AudioClip = null; - - onLoad() { - AssetController.instance = this; + protected onLoad(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (AssetController["instance"] = this); + } + } while (false); + } + finally { + } } - - loadSetSprite(path: string, sprite: Sprite) { - path = path + "/spriteFrame" - resources.load(path, SpriteFrame, (err, spriteFrame: SpriteFrame) => { - if (err) { - console.log(err.message || err); - return; - } - sprite.spriteFrame = spriteFrame; - }); + loadSetSprite(path: string, sprite: Sprite): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (RuntimeAssetLoader["loadSpriteFrame"](`${path}/spriteFrame`)["then"]((spriteFrame) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: if (sprite?.["isValid"]) + void (sprite["spriteFrame"] = spriteFrame); + } + } while (false); + } + finally { + } + })["catch"]((error) => console["error"](error))); + } + } while (false); + } + finally { + } } } - - diff --git a/assets/scripts/BattleLevel.ts b/assets/scripts/BattleLevel.ts index 3767574..6a00c0f 100644 --- a/assets/scripts/BattleLevel.ts +++ b/assets/scripts/BattleLevel.ts @@ -1,268 +1,486 @@ -import { _decorator, AssetManager, Camera, Component, instantiate, math, Node, Prefab, resources } from 'cc'; +// @structural-rewrite-v1 +import { _decorator, AssetManager, Camera, Component, instantiate, Node } from 'cc'; import { Ragdoll } from '../Ragdoll/Ragdoll'; import { EventCenter } from './EventCenter'; import { LevelState } from './EnumFile'; -import { GameController } from './GameController'; -import { UIManager } from './framework/ui/UIManager'; -import { WinPanel } from './ui/WinPanel'; import { FPSCameraController } from './FPSCameraController'; +import { GameController } from './GameController'; import { DataMgr } from './framework/data/DataMgr'; -import { LevelConfig, Weapon } from './data/ConfigData'; import { LocalSaveMgr } from './framework/data/LocalSaveMgr'; +import { FramePoller } from './framework/runtime/FramePoller'; +import { RuntimeAssetLoader } from './framework/runtime/RuntimeAssetLoader'; +import { UIManager } from './framework/ui/UIManager'; +import { LevelConfig, Weapon } from './data/ConfigData'; import { LosePanel } from './ui/LosePanel'; +import { WinPanel } from './ui/WinPanel'; +import { BattlePhase, BattleSessionAction, BattleSessionModel, BattleSessionSnapshot } from './domain/BattleSessionModel'; const { ccclass, property } = _decorator; - +const levelStateByPhase: Record = { + "none": LevelState["None"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, + "loading": LevelState["Loading"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, + "running": LevelState["Running"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, + "paused": LevelState["Pause"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, + "result": LevelState["Result"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, +}; @ccclass('BattleLevel') export class BattleLevel extends Component { - @property(Node) - roleNode: Node = null; // 相机节点 - - enemies: Array = []; - - aliveCount: number = 0 - - timer: number = 300 - maxTimer: number = 300 - - levelState: LevelState - - levelIndex: number - - envNode: Node = null - enemyNode: Node = null - gunNode: Node = null - levelResult: BattleResult - + roleNode: Node = null; + enemies: Ragdoll[] = []; + aliveCount = 0; + timer = 300; + maxTimer = 300; + levelState: LevelState; + levelIndex: number; + envNode: Node = null; + enemyNode: Node = null; + gunNode: Node = null; + levelResult: BattleResult; + qingBaoTarget: Ragdoll; + saoMiaoTarget: Ragdoll; + private readonly session = new BattleSessionModel(); protected onLoad(): void { - - } - - waitUntil(condition: () => boolean): Promise { - return new Promise((resolve) => { - const checkCondition = () => { - if (condition()) { - resolve(); // 条件成立,结束等待 - } else { - // 条件不成立,继续轮询 - requestAnimationFrame(checkCondition); + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: } - }; - checkCondition(); // 开始检查条件 - }); - } - - initLevel() { - this.enemies = [] - this.aliveCount = 0 - this.timer = this.maxTimer - for (let index = 0; index < this.roleNode.children.length; index++) { - let ragdoll = this.roleNode.children[index].getComponent(Ragdoll) - if (ragdoll) { - this.enemies.push(ragdoll) - this.aliveCount += 1 - } + } while (false); } - - this.levelState = LevelState.Loading - GameController.getInstance().onLoadComplete() - } - - async loadLevel() { - let loadSceneComplete: boolean = false - let loadRoleComplete: boolean = false - this.node.destroyAllChildren() - - - let levelIndex = LocalSaveMgr.instance.playerData.levelIndex - if (GameController.getInstance().forceLevelIndex > 1) { - levelIndex = GameController.getInstance().forceLevelIndex + finally { } - - this.levelIndex = levelIndex - // levelIndex = 1 - - let config = DataMgr.getInstance().GetDataById(LevelConfig, levelIndex); - - this.qingBaoTarget = null - this.saoMiaoTarget = null - - - console.log("加载关卡", levelIndex, config) - - if (levelIndex <= 30) { - // games-display/cdn/SearchAliens/assets/ - - AssetManager.instance.loadBundle('level', (err, bundle) => { - bundle.load(`env/${config.env}`, Prefab, (err, prefab) => { - var item = instantiate(prefab) - item.setParent(this.node) - loadSceneComplete = true - }) - - bundle.load(`enemy/${config.enemy}`, Prefab, (err, prefab) => { - var item = instantiate(prefab) - item.setParent(this.node) - FPSCameraController.getInstance().init(item.getChildByPath("Player/Main Camera").getComponent(Camera), config.aimFov) - this.roleNode = item - let weapon = DataMgr.getInstance().GetDataById(Weapon, LocalSaveMgr.instance.playerData.equipedWeapon) - - resources.load(`weapon/${weapon.prefab}`, Prefab, (err, prefab) => { - var gun = instantiate(prefab) - this.gunNode = gun - gun.setParent(item.getChildByPath(`Player/Main Camera/${weapon.point}`)) - loadRoleComplete = true - }); - }) - } - ); - } else { - - - - - AssetManager.instance.loadBundle('level', (err, bundle) => { - bundle.load(`env/${config.env}`, Prefab, (err, prefab) => { - var item = instantiate(prefab) - item.setParent(this.node) - loadSceneComplete = true - }) - - AssetManager.instance.loadBundle('levelRemote', (err, bundle) => { - - bundle.load(`enemy/${config.enemy}`, Prefab, (err, prefab) => { - var item = instantiate(prefab) - item.setParent(this.node) - FPSCameraController.getInstance().init(item.getChildByPath("Player/Main Camera").getComponent(Camera), config.aimFov) - this.roleNode = item - let weapon = DataMgr.getInstance().GetDataById(Weapon, LocalSaveMgr.instance.playerData.equipedWeapon) - - resources.load(`weapon/${weapon.prefab}`, Prefab, (err, prefab) => { - var gun = instantiate(prefab) - this.gunNode = gun - gun.setParent(item.getChildByPath(`Player/Main Camera/${weapon.point}`)) - loadRoleComplete = true - }); - }) - }); - } - ); + } + waitUntil(condition: () => boolean): Promise { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return FramePoller["until"](condition); + } + } while (false); + } + finally { } - - await this.waitUntil(() => loadSceneComplete && loadRoleComplete); - this.initLevel() } - - - unLoadLevel() { - this.node.destroyAllChildren() - this.levelState = LevelState.None + initLevel(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["enemies"] = this["collectEnemies"]()); + void (this["dispatchSession"]({ "kind": 'reset', "timer": this["maxTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, "aliveCount": (this["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown })); + void (GameController["getInstance"]()["onLoadComplete"]()); + } + } while (false); + } + finally { + } } - - - onEnemyDie(target: Ragdoll) { - this.aliveCount -= 1 - EventCenter.onEnemyDie.emit(null) + async loadLevel(): Promise { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["destroyAllChildren"]()); + void (this["qingBaoTarget"] = null); + void (this["saoMiaoTarget"] = null); + const levelIndex = this["resolveLevelIndex"](); + const config = DataMgr["getInstance"]()["GetDataById"](LevelConfig, levelIndex); + void (this["levelIndex"] = levelIndex); + if (!config) { + void (console["error"](`Missing LevelConfig for level ${levelIndex}`)); + return; + } + try { + const levelBundle = await RuntimeAssetLoader["loadBundle"]('level'); + const environmentLoading = this["loadEnvironment"](levelBundle, config); + const enemyBundle = levelIndex <= 30 ? levelBundle : await RuntimeAssetLoader["loadBundle"]('levelRemote'); + void (await Promise["all"]([ + environmentLoading, + this["loadRoleAndWeapon"](enemyBundle, config), + ])); + void (this["initLevel"]()); + } + catch (error) { + void (console["error"](`Failed to load level ${levelIndex}`, error)); + } + } + } while (false); + } + finally { + } + } + unLoadLevel(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["destroyAllChildren"]()); + void (this["dispatchSession"]({ "kind": 'phase', "phase": 'none' })); + } + } while (false); + } + finally { + } + } + onEnemyDie(target: Ragdoll): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["dispatchSession"]({ "kind": 'enemyDown' })); + void ((EventCenter["onEnemyDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["emit"](null)); + } + } while (false); + } + finally { + } } - - judgeLastBullet(): boolean { - return this.aliveCount == 1 + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["aliveCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === 1; + } + } while (false); + } + finally { + } } - - startLevel() { - this.levelState = LevelState.Running + startLevel(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["dispatchSession"]({ "kind": 'phase', "phase": 'running' })); + } + } while (false); + } + finally { + } } - - protected update(dt: number): void { - if (this.levelState == LevelState.Running) { - this.timer -= dt - if (this.timer <= 0) { - this.timer = 0 - this.lose() - } + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: if (this["dispatchSession"]({ "kind": 'tick', "deltaTime": dt })) + void (this["lose"]()); + } + } while (false); + } + finally { } } - - - lose() { - this.levelState = LevelState.Result - UIManager.instance.openPanel(LosePanel) - } - - win() { - - this.levelState = LevelState.Result - let levelResult = new BattleResult() - let remainTimer = Math.ceil(this.timer) - levelResult.timer = remainTimer - levelResult.enemyCount = this.enemies.length - levelResult.timerCoin = levelResult.timer - levelResult.enemyCoin = levelResult.enemyCount * 10 - levelResult.coinCount = levelResult.timerCoin + levelResult.enemyCoin - this.levelResult = levelResult - LocalSaveMgr.instance.passLevel() - UIManager.instance.openPanel(WinPanel) - } - - ContinueRun() { - this.levelState = LevelState.Running - } - - pause() { - this.levelState = LevelState.Pause - } - - addTimer() { - this.timer += 180 - } - - getAliveEnemeyCount() { - let aliveCount = 0 - for (let index = 0; index < this.enemies.length; index++) { - if (!this.enemies[index].isDie) { - aliveCount++ - } + lose(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["dispatchSession"]({ "kind": 'phase', "phase": 'result' })); + void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](LosePanel)); + } + } while (false); } - return aliveCount - } - - getAliveEnemey() { - for (let index = 0; index < this.enemies.length; index++) { - if (!this.enemies[index].isDie) { - return this.enemies[index] - } + finally { } } - - getQingBaoEnemey() { - this.qingBaoTarget = this.getAliveEnemey() - return this.qingBaoTarget + win(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["dispatchSession"]({ "kind": 'phase', "phase": 'result' })); + void (this["levelResult"] = this["createBattleResult"]()); + void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["passLevel"]()); + void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](WinPanel)); + } + } while (false); + } + finally { + } } - - qingBaoTarget: Ragdoll - - getTutorialAliveEnemey() { - return this.enemies[this.enemies.length - 1] + ContinueRun(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["dispatchSession"]({ "kind": 'phase', "phase": 'running' })); + } + } while (false); + } + finally { + } } - - haveQingBaoTarget() { - return this.qingBaoTarget != null && !this.qingBaoTarget.isDie + pause(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["dispatchSession"]({ "kind": 'phase', "phase": 'paused' })); + } + } while (false); + } + finally { + } } - - saoMiaoTarget: Ragdoll - SetSaoMiaoTarget() { - this.saoMiaoTarget = this.getAliveEnemey() + addTimer(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["dispatchSession"]({ "kind": 'extendTime', "seconds": 180 })); + } + } while (false); + } + finally { + } + } + getAliveEnemeyCount(): number { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return (this["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["filter"]((enemy) => !(enemy["isDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + } + } while (false); + } + finally { + } + } + getAliveEnemey(): Ragdoll { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return (this["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["find"]((enemy) => !(enemy["isDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + } + } while (false); + } + finally { + } + } + getQingBaoEnemey(): Ragdoll { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["qingBaoTarget"] = this["getAliveEnemey"]()); + return this["qingBaoTarget"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + } + } while (false); + } + finally { + } + } + getTutorialAliveEnemey(): Ragdoll { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return (this["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[((this["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - 1]; + } + } while (false); + } + finally { + } + } + haveQingBaoTarget(): boolean { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["qingBaoTarget"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown != null && !((this["qingBaoTarget"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["isDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + } + } while (false); + } + finally { + } + } + SetSaoMiaoTarget(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["saoMiaoTarget"] = this["getAliveEnemey"]()); + } + } while (false); + } + finally { + } + } + private resolveLevelIndex(): number { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const forcedIndex = GameController["getInstance"]()["forceLevelIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + return forcedIndex > 1 ? forcedIndex : ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["levelIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + } + } while (false); + } + finally { + } + } + private collectEnemies(): Ragdoll[] { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (!(this["roleNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) + return []; + return ((this["roleNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["children"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["map"]((child) => child["getComponent"](Ragdoll))["filter"]((ragdoll): ragdoll is Ragdoll => ragdoll != null); + } + } while (false); + } + finally { + } + } + private async loadEnvironment(bundle: AssetManager.Bundle, config: LevelConfig): Promise { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const prefab = await RuntimeAssetLoader["loadBundlePrefab"](bundle, `env/${config["env"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown}`); + void (this["envNode"] = instantiate(prefab)); + void ((this["envNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["parent"] = this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + } + } while (false); + } + finally { + } + } + private async loadRoleAndWeapon(bundle: AssetManager.Bundle, config: LevelConfig): Promise { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const rolePrefab = await RuntimeAssetLoader["loadBundlePrefab"](bundle, `enemy/${config["enemy"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown}`); + void (this["roleNode"] = instantiate(rolePrefab)); + void ((this["roleNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["parent"] = this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + const camera = (this["roleNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getChildByPath"]('Player/Main Camera')["getComponent"](Camera); + void (FPSCameraController["getInstance"]()["init"](camera, config["aimFov"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (await this["equipWeapon"]()); + } + } while (false); + } + finally { + } + } + private async equipWeapon(): Promise { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const weapon = DataMgr["getInstance"]()["GetDataById"](Weapon, ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["equipedWeapon"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + if (!weapon) + throw new Error('Equipped weapon config is missing'); + const gunPrefab = await RuntimeAssetLoader["loadResourcePrefab"](`weapon/${weapon["prefab"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown}`); + void (this["gunNode"] = instantiate(gunPrefab)); + void ((this["gunNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["parent"] = (this["roleNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getChildByPath"](`Player/Main Camera/${weapon["point"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown}`)); + } + } while (false); + } + finally { + } + } + private createBattleResult(): BattleResult { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return new BattleResult(Math["ceil"](this["timer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown), (this["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + } + } while (false); + } + finally { + } + } + private applySession(snapshot: Readonly): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["timer"] = snapshot["timer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (this["aliveCount"] = snapshot["aliveCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (this["levelState"] = levelStateByPhase[snapshot["phase"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown]); + } + } while (false); + } + finally { + } + } + private dispatchSession(action: BattleSessionAction): boolean { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const timedOut = (this["session"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["dispatch"](action); + void (this["applySession"]((this["session"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["snapshot"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + return timedOut; + } + } while (false); + } + finally { + } } - } - - export class BattleResult { - timer: number - enemyCount: number - coinCount: number - timerCoin: number - enemyCoin: number + constructor(public timer = 0, public enemyCount = 0, public timerCoin = timer, public enemyCoin = enemyCount * 10, public coinCount = timerCoin + enemyCoin) { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + } + } while (false); + } + finally { + } + } } diff --git a/assets/scripts/EnumFile.ts b/assets/scripts/EnumFile.ts index 5bcfcf5..0ecb41a 100644 --- a/assets/scripts/EnumFile.ts +++ b/assets/scripts/EnumFile.ts @@ -1,12 +1,10 @@ - +// @structural-rewrite-v1 import { Enum } from "cc"; - export enum LevelState { None, Loading, Running, Pause, - Result, + Result } - -Enum(LevelState); \ No newline at end of file +void (Enum(LevelState)); diff --git a/assets/scripts/EventCenter.ts b/assets/scripts/EventCenter.ts index 057ab88..43964d2 100644 --- a/assets/scripts/EventCenter.ts +++ b/assets/scripts/EventCenter.ts @@ -1,10 +1,22 @@ -import { _decorator, Component, Node, EventTarget } from 'cc'; -const { ccclass, property } = _decorator; - +// @structural-rewrite-v1 +import { _decorator, Component, EventTarget } from 'cc'; +const { ccclass } = _decorator; @ccclass('EventCenter') export class EventCenter extends Component { - static onEnemyDie = new EventTarget(); - static powerChange = new EventTarget(); - static coinCountChange = new EventTarget(); - -} \ No newline at end of file + static onEnemyDie = EventCenter["createEvent"](); + static powerChange = EventCenter["createEvent"](); + static coinCountChange = EventCenter["createEvent"](); + private static createEvent(): EventTarget { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return new EventTarget(); + } + } while (false); + } + finally { + } + } +} diff --git a/assets/scripts/FPSCameraController.ts b/assets/scripts/FPSCameraController.ts index bef0cd6..19c62ec 100644 --- a/assets/scripts/FPSCameraController.ts +++ b/assets/scripts/FPSCameraController.ts @@ -1,221 +1,262 @@ -import { _decorator, Component, Node, input, Input, EventTouch, Vec3, Quat, v3, Button, tween, v2, Camera, director, geometry, screen, PhysicsSystem, Prefab, instantiate, ParticleSystem } from 'cc'; -import { RagdollBone } from '../Ragdoll/RagdollBone'; -import { SingletonBase } from './framework/SingletonBase'; -import { GameController } from './GameController'; +// @structural-rewrite-v1 +import { _decorator, Camera, EventTouch, geometry, instantiate, Node, ParticleSystem, PhysicsSystem, Prefab, screen, tween, Vec3 } from 'cc'; import { Ragdoll } from '../Ragdoll/Ragdoll'; +import { RagdollBone } from '../Ragdoll/RagdollBone'; +import { GameController } from './GameController'; +import { SingletonBase } from './framework/SingletonBase'; +import { CameraAimState } from './framework/runtime/CameraAimState'; import { UIManager } from './framework/ui/UIManager'; const { ccclass, property } = _decorator; - @ccclass('FPSCameraController') export class FPSCameraController extends SingletonBase { - // export class FPSCameraController extends Component { - @property(Node) - cameraNode: Node = null; // 相机节点 + cameraNode: Node = null; @property(Camera) - camera: Camera = null; // 相机节点 - + camera: Camera = null; @property(Camera) - qingBao: Camera = null; // 相机节点 - - + qingBao: Camera = null; @property(ParticleSystem) - particle: ParticleSystem = null; // 粒子系统 - - + particle: ParticleSystem = null; @property(Prefab) lastBulletPrefab: Prefab = null; lastBullet: Node = null; - - private _touchStartPos: Vec3 = new Vec3(); - private _rotationSpeed: number = 0.04; // 旋转速度 - private _currentRotationX: number = 0; // 当前相机的垂直旋转角度 - private _currentRotationY: number = 0; // 当前相机的水平旋转角度 - private _defaultRotationY: number = 0; // 当前相机的水平旋转角度 - private _maxVerticalAngle: number = 70; // 最大垂直旋转角度 - private _maxHorizontalAngle: number = 45; // 最大垂直旋转角度 - private _defaultFOV: number = 45; // 默认 FOV - private _aimFOV: number = 25; // 瞄准时的 FOV - private _isAiming: boolean = false; // 是否正在瞄准 - - onLoad() { - super.onLoad() - } - - init(curCamera: Camera, aimFov: number) { - this.camera = curCamera - this.cameraNode = curCamera.node - - const initialRotation = this.cameraNode.getWorldRotation(); - const eulerAngles = initialRotation.getEulerAngles(v3()); - this._currentRotationX = eulerAngles.x; - this._currentRotationY = eulerAngles.y; - this._defaultRotationY = eulerAngles.y; - this._aimFOV = aimFov; - - // 获取摄像机的默认 FOV - const camera = this.cameraNode.getComponent(Camera); - camera.fov = this._defaultFOV - - } - - onTouchStart(event: EventTouch) { - // console.log("onTouchStart", event) - const touch = event.touch; - this._touchStartPos.set(touch.getLocation().x, touch.getLocation().y, 0); - - } - - onTouchMove(event: EventTouch) { - // console.log("onTouchMove", event) - const touch = event.touch; - const deltaX = touch.getLocation().x - this._touchStartPos.x; - const deltaY = touch.getLocation().y - this._touchStartPos.y; - - // 横向旋转(左右滑动):作用于摄像机的 Y 轴 - const rotationY = -deltaX * this._rotationSpeed * this.camera.fov / 45; - - // console.log("this.camera.fov", this.camera.fov) - this._currentRotationY += rotationY; - - // 纵向旋转(上下滑动):作用于摄像机的 X 轴 - const rotationX = deltaY * this._rotationSpeed * this.camera.fov / 45;// 修正:去掉负号 - this._currentRotationX += rotationX; - - // 限制垂直旋转角度 - this._currentRotationX = Math.min(Math.max(this._currentRotationX, -this._maxVerticalAngle), 60); - this._currentRotationY = Math.min(Math.max(this._currentRotationY, this._defaultRotationY - this._maxHorizontalAngle), this._defaultRotationY + this._maxHorizontalAngle); - - - - // 应用旋转到相机节点 - const newRotation = Quat.fromEuler(new Quat(), this._currentRotationX, this._currentRotationY, 0); - this.cameraNode.setWorldRotation(newRotation); - - // console.log("newRotation", this._currentRotationX, this._currentRotationY) - - // 更新起始位置 - this._touchStartPos.set(touch.getLocation().x, touch.getLocation().y, 0); - } - - setTutorialRotate() { - this._currentRotationX = -3.99 - this._currentRotationY = -32.27 - const newRotation = Quat.fromEuler(new Quat(), this._currentRotationX, this._currentRotationY, 0); - this.cameraNode.setWorldRotation(newRotation); - } - - shoot() { - - let ray = new geometry.Ray(); - this.camera.screenPointToRay(screen.windowSize.width / 2, screen.windowSize.height / 2, ray); - // 以下参数可选 - const mask = 0xffffffff; - const maxDistance = 10000000; - const queryTrigger = true; - let result = false - if (PhysicsSystem.instance.raycastClosest(ray, mask, maxDistance, queryTrigger)) { - const raycastClosestResult = PhysicsSystem.instance.raycastClosestResult; - const hitPoint = raycastClosestResult.hitPoint - const hitNormal = raycastClosestResult.hitNormal; - const collider = raycastClosestResult.collider; - const distance = raycastClosestResult.distance; - console.log("碰撞检测", raycastClosestResult.collider.node.name) - let bone = raycastClosestResult.collider.node.getComponent(RagdollBone) - if (bone != null) { - if (!bone.ragdoll.isDie) { - if (GameController.getInstance().curLevel.judgeLastBullet()) { - this.fireLastBullet(bone.ragdoll, hitPoint) - } else { - this.scheduleOnce(() => { - bone.ragdoll.node.active = false - }, 2); - bone.ragdoll.setEnabled(true); - result = true - this.particle.node.setWorldPosition(hitPoint.clone()) - this.particle.play() - } + private readonly aimState = new CameraAimState(); + private readonly defaultFOV = 45; + private aimFOV = 25; + private isAiming = false; + protected onLoad(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (super["onLoad"]()); } - - } + } while (false); } - - tween(this.camera.node) - .by(0.05, { position: new Vec3(0, 2, 0) }, { easing: 'sineOutIn' }) - .by(0.05, { position: new Vec3(0, -2, 0) }, { easing: 'sineOutIn' }) - .start() - - return result - - } - - closeQingBao() { - this.qingBao.node.active = false - } - - showQingBao() { - this.qingBao.node.active = true - var enemy = GameController.getInstance().curLevel.getQingBaoEnemey().centerNode; - let pos = enemy.getWorldPosition().add(enemy.getWorldPosition().subtract(this.cameraNode.getWorldPosition()).normalize().multiplyScalar(-5)) - let enemyPos = enemy.getWorldPosition() - let cameraPos = this.cameraNode.getWorldPosition() - let dirNor = enemy.getWorldPosition().subtract(this.cameraNode.getWorldPosition()).normalize() - - let newPos = enemy.getWorldPosition().add(dirNor.multiplyScalar(-15)) - - let dir = this.cameraNode.getWorldPosition().subtract(enemy.getWorldPosition()) - - console.log("enemy", enemy.getWorldPosition()) - console.log("camera", this.cameraNode.getWorldPosition()) - console.log("newPos", newPos) - console.log("dirNor", enemy.getWorldPosition().subtract(this.cameraNode.getWorldPosition()).normalize()) - this.qingBao.node.setWorldPosition(newPos) - this.qingBao.node.forward = enemy.getWorldPosition().subtract(this.cameraNode.getWorldPosition()).normalize() - } - - fireLastBullet(ragdoll: Ragdoll, hitPoint: Vec3) { - var last = instantiate(this.lastBulletPrefab) - last.setParent(this.node) - last.setWorldPosition(this.cameraNode.worldPosition) - last.forward = this.cameraNode.worldPosition.subtract(hitPoint).normalize() - this.lastBullet = last - this.camera.enabled = false - - UIManager.instance.closeAllPanels() - - tween(last) - .to(1.67, { worldPosition: hitPoint }, { easing: 'cubicIn' }) - .call(() => { - ragdoll.setEnabled(true); - last.getChildByName("bullet").active = false - GameController.getInstance().curLevel.win() - }) - .start() - } - - clear() { - if (this.lastBullet != null) { - this.lastBullet.destroy() - this.lastBullet = null + finally { } } - - onAimButtonClick(isAnim: boolean) { - const camera = this.cameraNode.getComponent(Camera); - if (!camera) return; - - this._isAiming = isAnim; // 切换瞄准状态 - - if (this._isAiming) { - // 瞄准状态:缩小 FOV - tween(camera) - .to(0.1, { fov: this._aimFOV }) // 平滑过渡到瞄准 FOV - .start(); - } else { - // 非瞄准状态:恢复默认 FOV - tween(camera) - .to(0.1, { fov: this._defaultFOV }) // 平滑过渡到默认 FOV - .start(); + init(curCamera: Camera, aimFov: number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["camera"] = curCamera); + void (this["cameraNode"] = curCamera["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void ((this["aimState"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["initialize"](this["cameraNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["aimFOV"] = aimFov); + void ((this["cameraNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](Camera)["fov"] = this["defaultFOV"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + } + } while (false); + } + finally { } } -} \ No newline at end of file + onTouchStart(event: EventTouch): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((this["aimState"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["begin"]((event["touch"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getLocation"]())); + } + } while (false); + } + finally { + } + } + onTouchMove(event: EventTouch): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const fovScale = ((this["camera"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["fov"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) / (this["defaultFOV"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void ((this["cameraNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setWorldRotation"]((this["aimState"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["move"]((event["touch"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getLocation"](), fovScale))); + } + } while (false); + } + finally { + } + } + setTutorialRotate(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((this["cameraNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setWorldRotation"]((this["aimState"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["tutorialRotation"]())); + } + } while (false); + } + finally { + } + } + shoot(): boolean { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const didHitEnemy = this["handleRaycastHit"](); + void (this["playRecoil"]()); + return didHitEnemy; + } + } while (false); + } + finally { + } + } + closeQingBao(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (((this["qingBao"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = false); + } + } while (false); + } + finally { + } + } + showQingBao(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (((this["qingBao"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = true); + const enemy = (GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getQingBaoEnemey"]()["centerNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + const enemyPosition = enemy["getWorldPosition"](); + const direction = enemyPosition["clone"]()["subtract"]((this["cameraNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getWorldPosition"]())["normalize"](); + const cameraPosition = enemyPosition["clone"]()["add"](direction["clone"]()["multiplyScalar"](-15)); + void (((this["qingBao"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setWorldPosition"](cameraPosition)); + void (((this["qingBao"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forward"] = direction); + } + } while (false); + } + finally { + } + } + fireLastBullet(ragdoll: Ragdoll, hitPoint: Vec3): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const lastBullet = instantiate(this["lastBulletPrefab"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (lastBullet["parent"] = this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (lastBullet["setWorldPosition"]((this["cameraNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["worldPosition"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (lastBullet["forward"] = ((this["cameraNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["worldPosition"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["subtract"](hitPoint)["normalize"]()); + void (this["lastBullet"] = lastBullet); + void ((this["camera"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["enabled"] = false); + void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closeAllPanels"]()); + void (tween(lastBullet)["to"](1.67, { "worldPosition": hitPoint }, { "easing": 'cubicIn' })["call"](() => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (ragdoll["setEnabled"](true)); + void (lastBullet["getChildByName"]('bullet')["active"] = false); + void ((GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["win"]()); + } + } while (false); + } + finally { + } + })["start"]()); + } + } while (false); + } + finally { + } + } + clear(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (!(this["lastBullet"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) + return; + void ((this["lastBullet"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["destroy"]()); + void (this["lastBullet"] = null); + } + } while (false); + } + finally { + } + } + onAimButtonClick(isAnim: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const camera = (this["cameraNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](Camera); + if (!camera) + return; + void (this["isAiming"] = isAnim); + void (tween(camera)["to"](0.1, { "fov": this["isAiming"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown ? this["aimFOV"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown : this["defaultFOV"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown })["start"]()); + } + } while (false); + } + finally { + } + } + private handleRaycastHit(): boolean { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const ray = new (geometry["Ray"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)(); + void ((this["camera"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["screenPointToRay"](((screen["windowSize"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["width"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) / 2, ((screen["windowSize"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["height"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) / 2, ray)); + if (!(PhysicsSystem["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["raycastClosest"](ray, 0xffffffff, 10000000, true)) + return false; + const hit = (PhysicsSystem["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["raycastClosestResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + const bone = ((hit["collider"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](RagdollBone); + if (!bone || (bone["ragdoll"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["isDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + return false; + if ((GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["judgeLastBullet"]()) { + void (this["fireLastBullet"](bone["ragdoll"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, hit["hitPoint"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + return false; + } + void (this["scheduleOnce"](() => ((bone["ragdoll"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = false, 2)); + void ((bone["ragdoll"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setEnabled"](true)); + void (((this["particle"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setWorldPosition"]((hit["hitPoint"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["clone"]())); + void ((this["particle"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["play"]()); + return true; + } + } while (false); + } + finally { + } + } + private playRecoil(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (tween((this["camera"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["by"](0.05, { "position": new Vec3(0, 2, 0) }, { "easing": 'sineOutIn' })["by"](0.05, { "position": new Vec3(0, -2, 0) }, { "easing": 'sineOutIn' })["start"]()); + } + } while (false); + } + finally { + } + } +} diff --git a/assets/scripts/GameController.ts b/assets/scripts/GameController.ts index 95a68cc..fe745fe 100644 --- a/assets/scripts/GameController.ts +++ b/assets/scripts/GameController.ts @@ -1,83 +1,272 @@ -import { _decorator, Component, Node } from 'cc'; -import { SingletonBase } from './framework/SingletonBase'; +// @structural-rewrite-v1 +import { _decorator } from 'cc'; import { BattleLevel } from './BattleLevel'; -import { UIManager } from './framework/ui/UIManager'; -import { PlayPanel } from './ui/PlayPanel'; -import { MainPanel } from './ui/MainPanel'; -import { LoadingPanel } from './ui/LoadingPanel'; -import { WinPanel } from './ui/WinPanel'; import { FPSCameraController } from './FPSCameraController'; +import { SingletonBase } from './framework/SingletonBase'; import { LocalSaveMgr } from './framework/data/LocalSaveMgr'; +import { UIManager } from './framework/ui/UIManager'; import { AddHeartPanel } from './ui/AddHeartPanel'; -import { SettingPanel } from './ui/SettingPanel'; +import { LoadingPanel } from './ui/LoadingPanel'; +import { MainPanel } from './ui/MainPanel'; +import { PlayPanel } from './ui/PlayPanel'; +import { backToMainPlan, GameFlowEffect, levelReadyPlan, planBattleEntry, planPowerCheck } from './domain/GameFlowModel'; const { ccclass, property } = _decorator; - @ccclass('GameController') export class GameController extends SingletonBase { - @property(BattleLevel) - curLevel: BattleLevel = null - + curLevel: BattleLevel = null; @property - forceLevelIndex: number = 1 - + forceLevelIndex = 1; + private readonly effectHandlers: Record void> = { + "showAddHeart": () => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](AddHeartPanel)); + } + } while (false); + } + finally { + } + }, + "consumePower": () => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["usePower"]()); + } + } while (false); + } + finally { + } + }, + "closeMain": () => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closePanel"](MainPanel)); + } + } while (false); + } + finally { + } + }, + "closeAll": () => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closeAllPanels"]()); + } + } while (false); + } + finally { + } + }, + "openLoading": () => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](LoadingPanel)); + } + } while (false); + } + finally { + } + }, + "scheduleLevelLoad": () => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["scheduleOnce"](() => (this["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["loadLevel"](), 0.5)); + } + } while (false); + } + finally { + } + }, + "openMain": () => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](MainPanel)); + } + } while (false); + } + finally { + } + }, + "unloadLevel": () => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((this["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["unLoadLevel"]()); + } + } while (false); + } + finally { + } + }, + "clearLastBullet": () => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (FPSCameraController["getInstance"]()["clear"]()); + } + } while (false); + } + finally { + } + }, + "openPlay": () => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](PlayPanel)); + } + } while (false); + } + finally { + } + }, + "startLevel": () => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((this["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["startLevel"]()); + } + } while (false); + } + finally { + } + }, + }; protected onLoad(): void { - super.onLoad() + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (super["onLoad"]()); + } + } while (false); + } + finally { + } } - protected start(): void { - // this.gameStart() - UIManager.instance.openPanel(MainPanel) - } - - judgePower() { - if (LocalSaveMgr.instance.playerData.power > 0) { - LocalSaveMgr.instance.usePower() - return true - } else { - UIManager.instance.openPanel(AddHeartPanel) + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](MainPanel)); + } + } while (false); } - return false - } - - gameStart() { - if (!this.judgePower()) { - return + finally { } - UIManager.instance.closePanel(MainPanel) - UIManager.instance.openPanel(LoadingPanel) - this.scheduleOnce(() => { - console.log("gameStart openPanel") - this.curLevel.loadLevel() - }, 0.5) } - - gameRestart() { - if (!this.judgePower()) { - return + judgePower(): boolean { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const hasPower = ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown > 0; + void (this["runFlow"](planPowerCheck(hasPower))); + return hasPower; + } + } while (false); + } + finally { } - UIManager.instance.closeAllPanels() - UIManager.instance.openPanel(LoadingPanel) - this.scheduleOnce(() => { - console.log("gameStart openPanel") - this.curLevel.loadLevel() - }, 0.5) } - - backMain() { - UIManager.instance.closeAllPanels() - UIManager.instance.openPanel(MainPanel) - this.curLevel.unLoadLevel() - FPSCameraController.getInstance().clear() + gameStart(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["runFlow"](planBattleEntry('start', ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown > 0))); + } + } while (false); + } + finally { + } } - - onLoadComplete() { - let self = this - LoadingPanel.instance.onLoadingComplete(() => { - UIManager.instance.openPanel(PlayPanel) - self.curLevel.startLevel() - }) + gameRestart(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["runFlow"](planBattleEntry('restart', ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown > 0))); + } + } while (false); + } + finally { + } + } + backMain(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["runFlow"](backToMainPlan)); + } + } while (false); + } + finally { + } + } + onLoadComplete(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((LoadingPanel["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["onLoadingComplete"](() => this["runFlow"](levelReadyPlan))); + } + } while (false); + } + finally { + } + } + private runFlow(effects: readonly GameFlowEffect[]): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (effects["forEach"](effect => (this["effectHandlers"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[effect]())); + } + } while (false); + } + finally { + } } } - - diff --git a/assets/scripts/Test.ts b/assets/scripts/Test.ts index 1503f01..c35ef25 100644 --- a/assets/scripts/Test.ts +++ b/assets/scripts/Test.ts @@ -1,24 +1,32 @@ +// @structural-rewrite-v1 import { _decorator, Component, Node, SkeletalAnimation } from 'cc'; import { Ragdoll } from '../Ragdoll/Ragdoll'; const { ccclass, property } = _decorator; - @ccclass('Test') export class Test extends Component { @property(Node) target: Node = null; - @property(SkeletalAnimation) skeletalAnimation: SkeletalAnimation = null; - - onTouchEnd() { - let ragdoll = this.target.getComponent(Ragdoll) - let isEnabled = ragdoll.getEnabled(); - - // 开启布娃娃之后动作会被覆盖,强烈建议停止动画 - let name = this.skeletalAnimation?.defaultClip.name; - isEnabled ? this.skeletalAnimation?.crossFade(name, 0) : this.skeletalAnimation?.stop(); - ragdoll.setEnabled(!isEnabled); + onTouchEnd(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const ragdoll = (this["target"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](Ragdoll); + const enabled = ragdoll["getEnabled"](); + const animationActions = [ + () => (this["skeletalAnimation"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)?.["stop"](), + () => (this["skeletalAnimation"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)?.["crossFade"](((this["skeletalAnimation"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["defaultClip"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["name"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 0), + ]; + void (animationActions[Number(enabled)]()); + void (ragdoll["setEnabled"](!enabled)); + } + } while (false); + } + finally { + } } } - - diff --git a/assets/scripts/UIAdapt.ts b/assets/scripts/UIAdapt.ts index 339c2a2..5de33a3 100644 --- a/assets/scripts/UIAdapt.ts +++ b/assets/scripts/UIAdapt.ts @@ -1,49 +1,52 @@ -import { _decorator, Component, Node, ResolutionPolicy, screen, Screen, view } from 'cc'; -import { WINDOWS } from 'cc/env'; -const { ccclass, property } = _decorator; - +// @structural-rewrite-v1 +import { _decorator, Component, screen, view } from 'cc'; +import { resolveDesignResolution } from './framework/ui/DesignResolutionPolicy'; +const { ccclass } = _decorator; @ccclass('UIAdapt') export class UIAdapt extends Component { - start() { - screen.on('window-resize', this.adaptScreenSize, this); - this.adaptScreenSize() - let self = this - this.scheduleOnce(() => { - self.adaptScreenSize() - }, 0.1) + protected start(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (screen["on"]('window-resize', this["adaptScreenSize"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this)); + void (this["adaptScreenSize"]()); + void (this["scheduleOnce"](() => this["adaptScreenSize"](), 0.1)); + } + } while (false); + } + finally { + } } - - adaptScreenSize() { - let screenWidth = view.getViewportRect().width - let screenHeight = view.getViewportRect().height - // let screenWidth = view.getVisibleSize().width; - // let screenHeight = view.getVisibleSize().height; - let screenRatio = screenHeight / screenWidth; - - console.log("修改屏幕分辨率", screenRatio, view.getViewportRect(), view) - - if (screenRatio > 18 / 9) { - // 适配屏幕高度 - console.log("修改屏幕分辨率", "适配高度") - - - let designWidth = 1080; - let designHeight = screenHeight * (designWidth / screenWidth); - - view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.FIXED_WIDTH); - } else if (screenRatio > 16 / 9) { - // 适配屏幕宽度 - console.log("修改屏幕分辨率", "适配屏幕宽度") - let designHeight = 1920; - let designWidth = screenWidth * (designHeight / screenHeight); - view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.FIXED_HEIGHT); - } else { - console.log("修改屏幕分辨率", "适配屏幕宽高") - let designWidth = 1080; - let designHeight = screenHeight * (designWidth / screenWidth); - view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.EXACT_FIT); + protected onDestroy(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (screen["off"]('window-resize', this["adaptScreenSize"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this)); + } + } while (false); + } + finally { + } + } + adaptScreenSize(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const viewport = view["getViewportRect"](); + const resolution = resolveDesignResolution(viewport["width"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, viewport["height"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (view["setDesignResolutionSize"](resolution["width"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, resolution["height"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, resolution["policy"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + } + } while (false); + } + finally { } } } - - diff --git a/assets/scripts/data/ConfigData.ts b/assets/scripts/data/ConfigData.ts index 65492d4..17ba208 100644 --- a/assets/scripts/data/ConfigData.ts +++ b/assets/scripts/data/ConfigData.ts @@ -1,14 +1,12 @@ +// @structural-rewrite-v1 // This file is auto-generated. Do not modify manually. - -import { js } from "cc"; - +import { js } from 'cc'; export class LevelConfig { id: number; env: string; enemy: string; aimFov: number; } - export class Weapon { id: number; prefab: string; @@ -17,14 +15,19 @@ export class Weapon { gunName: string; spriteName: string; } - - -export function setClassName() { - js.setClassName("LevelConfig", LevelConfig); - js.setClassName("Weapon", Weapon); +const configTypes: Record unknown> = { LevelConfig, Weapon }; +export function setClassName(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (Object["keys"](configTypes)["forEach"]((name) => js["setClassName"](name, configTypes[name]))); + } + } while (false); + } + finally { + } } - - -(window as any).ConfigData = (window as any).ConfigData || {}; -(window as any).ConfigData['LevelConfig'] = LevelConfig; -(window as any).ConfigData['Weapon'] = Weapon; +const configNamespace = (window as any)["ConfigData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown ?? ((window as any)["ConfigData"] = {}); +void (Object["assign"](configNamespace, configTypes)); diff --git a/assets/scripts/data/GameConfig.ts b/assets/scripts/data/GameConfig.ts index 3ec3c92..c1176bd 100644 --- a/assets/scripts/data/GameConfig.ts +++ b/assets/scripts/data/GameConfig.ts @@ -1,8 +1,17 @@ - - -export class Config { - //最大体力上线 - static maxHp: number = 5 - //体力恢复的cd - static powerCD = 60 +// @structural-rewrite-v1 +export interface GameplayLimits { + readonly maximumPower: number; + readonly powerRecoverySeconds: number; +} +const DEFAULT_GAMEPLAY_LIMITS: GameplayLimits = Object["freeze"]({ + "maximumPower": 5, + "powerRecoverySeconds": 60, +}); +/** + * Compatibility facade for the rule names already used by saved-data code. + * Values are sourced from one immutable rule object so future additions stay explicit. + */ +export class Config { + static readonly maxHp = DEFAULT_GAMEPLAY_LIMITS["maximumPower"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + static readonly powerCD = DEFAULT_GAMEPLAY_LIMITS["powerRecoverySeconds"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; } diff --git a/assets/scripts/domain.meta b/assets/scripts/domain.meta new file mode 100644 index 0000000..ad5495c --- /dev/null +++ b/assets/scripts/domain.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "08cca625-1159-4f72-ad10-ca353ae9fa0a", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/domain/BattleSessionModel.ts b/assets/scripts/domain/BattleSessionModel.ts new file mode 100644 index 0000000..a935fea --- /dev/null +++ b/assets/scripts/domain/BattleSessionModel.ts @@ -0,0 +1,74 @@ +// @structural-rewrite-v1 +export type BattlePhase = 'none' | 'loading' | 'running' | 'paused' | 'result'; +export type BattleSessionAction = { + kind: 'reset'; + timer: number; + aliveCount: number; +} | { + kind: 'phase'; + phase: BattlePhase; +} | { + kind: 'tick'; + deltaTime: number; +} | { + kind: 'enemyDown'; +} | { + kind: 'extendTime'; + seconds: number; +}; +export interface BattleSessionSnapshot { + phase: BattlePhase; + timer: number; + aliveCount: number; +} +export class BattleSessionModel { + private current: BattleSessionSnapshot = { "phase": 'none', "timer": 300, "aliveCount": 0 }; + get snapshot(): Readonly { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + } + } while (false); + } + finally { + } + } + dispatch(action: BattleSessionAction): boolean { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + switch (action["kind"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) { + case 'reset': + void (this["current"] = { "phase": 'loading', "timer": action["timer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, "aliveCount": action["aliveCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown }); + break; + case 'phase': + void (this["current"] = { ...this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, "phase": action["phase"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown }); + break; + case 'enemyDown': + void (this["current"] = { ...this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, "aliveCount": ((this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["aliveCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - 1 }); + break; + case 'extendTime': + void (this["current"] = { ...this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, "timer": ((this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["timer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + (action["seconds"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) }); + break; + case 'tick': { + if ((this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["phase"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown !== 'running') + break; + const timer = Math["max"](0, ((this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["timer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - (action["deltaTime"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["current"] = { ...this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, timer }); + return timer === 0; + } + } + return false; + } + } while (false); + } + finally { + } + } +} diff --git a/assets/scripts/domain/BattleSessionModel.ts.meta b/assets/scripts/domain/BattleSessionModel.ts.meta new file mode 100644 index 0000000..73ecfbe --- /dev/null +++ b/assets/scripts/domain/BattleSessionModel.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "3cbc189f-f156-4e55-a64d-4b7f8e57c533", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/domain/CombatHudModel.ts b/assets/scripts/domain/CombatHudModel.ts new file mode 100644 index 0000000..d4dd493 --- /dev/null +++ b/assets/scripts/domain/CombatHudModel.ts @@ -0,0 +1,92 @@ +// @structural-rewrite-v1 +export interface CombatHudSnapshot { + isOnAim: boolean; + isOpenSaomiao: boolean; + onTip: boolean; + tipTimer: number; + onStep: boolean; + limitFire: boolean; +} +export type CombatHudAction = { + kind: 'reset'; +} | { + kind: 'aim'; + active: boolean; +} | { + kind: 'scan'; + open: boolean; +} | { + kind: 'tip'; + open: boolean; +} | { + kind: 'tutorial'; + active: boolean; +} | { + kind: 'fireLock'; + locked: boolean; +} | { + kind: 'tickTip'; + deltaTime: number; +}; +export class CombatHudModel { + private current: CombatHudSnapshot = { + "isOnAim": false, + "isOpenSaomiao": false, + "onTip": false, + "tipTimer": 0, + "onStep": false, + "limitFire": false, + }; + get snapshot(): Readonly { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + } + } while (false); + } + finally { + } + } + dispatch(action: CombatHudAction): boolean { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + switch (action["kind"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) { + case 'reset': + void (this["current"] = { ...this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, "isOnAim": false, "isOpenSaomiao": false, "onTip": false, "tipTimer": 0 }); + break; + case 'aim': + void (this["current"] = { ...this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, "isOnAim": action["active"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown }); + break; + case 'scan': + void (this["current"] = { ...this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, "isOpenSaomiao": action["open"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown }); + break; + case 'tip': + void (this["current"] = { ...this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, "onTip": action["open"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, "tipTimer": 0 }); + break; + case 'tutorial': + void (this["current"] = { ...this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, "onStep": action["active"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown }); + break; + case 'fireLock': + void (this["current"] = { ...this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, "limitFire": action["locked"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown }); + break; + case 'tickTip': + if ((this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["onStep"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown || (this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["onTip"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + break; + void (this["current"] = { ...this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, "tipTimer": ((this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["tipTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + (action["deltaTime"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) }); + return (this["current"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["tipTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown > 30; + } + return false; + } + } while (false); + } + finally { + } + } +} diff --git a/assets/scripts/domain/CombatHudModel.ts.meta b/assets/scripts/domain/CombatHudModel.ts.meta new file mode 100644 index 0000000..e0d5a64 --- /dev/null +++ b/assets/scripts/domain/CombatHudModel.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "2a47e254-e7f2-48c0-9c2e-3e16757263fb", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/domain/GameFlowModel.ts b/assets/scripts/domain/GameFlowModel.ts new file mode 100644 index 0000000..1fa7f26 --- /dev/null +++ b/assets/scripts/domain/GameFlowModel.ts @@ -0,0 +1,38 @@ +// @structural-rewrite-v1 +export type GameEntry = 'start' | 'restart'; +export type GameFlowEffect = 'showAddHeart' | 'consumePower' | 'closeMain' | 'closeAll' | 'openLoading' | 'scheduleLevelLoad' | 'openMain' | 'unloadLevel' | 'clearLastBullet' | 'openPlay' | 'startLevel'; +export function planPowerCheck(hasPower: boolean): readonly GameFlowEffect[] { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return hasPower ? ['consumePower'] : ['showAddHeart']; + } + } while (false); + } + finally { + } +} +export function planBattleEntry(entry: GameEntry, hasPower: boolean): readonly GameFlowEffect[] { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return hasPower + ? ['consumePower', entry === 'start' ? 'closeMain' : 'closeAll', 'openLoading', 'scheduleLevelLoad'] + : ['showAddHeart']; + } + } while (false); + } + finally { + } +} +export const backToMainPlan: readonly GameFlowEffect[] = [ + 'closeAll', + 'openMain', + 'unloadLevel', + 'clearLastBullet', +]; +export const levelReadyPlan: readonly GameFlowEffect[] = ['openPlay', 'startLevel']; diff --git a/assets/scripts/domain/GameFlowModel.ts.meta b/assets/scripts/domain/GameFlowModel.ts.meta new file mode 100644 index 0000000..068043a --- /dev/null +++ b/assets/scripts/domain/GameFlowModel.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "2cc21c66-cbad-4ab5-84dd-0e1b4032dcbc", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/domain/RewardSettlementModel.ts b/assets/scripts/domain/RewardSettlementModel.ts new file mode 100644 index 0000000..1161221 --- /dev/null +++ b/assets/scripts/domain/RewardSettlementModel.ts @@ -0,0 +1,69 @@ +// @structural-rewrite-v1 +export type RewardSelectionMode = 'pointer' | 'claim'; +const rewardPolicies: Record> = { + "pointer": [[93.079, 5], [224.786, 4], [341.818, 3], [430, 2]], + "claim": [[50, 5], [150, 4], [250, 3], [350, 2], [450, 1]], +}; +/** Pure reward calculation used by the Cocos result-panel adapter. */ +export class RewardSettlementModel { + private baseCoin = 0; + private selectedMultiplier = 1; + get multiplier(): number { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["selectedMultiplier"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + } + } while (false); + } + finally { + } + } + get rewardCoin(): number { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return Math["ceil"]((this["baseCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) * (this["selectedMultiplier"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + } + } while (false); + } + finally { + } + } + load(baseCoin: number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["baseCoin"] = baseCoin); + } + } while (false); + } + finally { + } + } + select(mode: RewardSelectionMode, distance: number): number { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const selected = rewardPolicies[mode]["find"](([ceiling]) => distance < ceiling)?.[1]; + void (this["selectedMultiplier"] = selected ?? this["selectedMultiplier"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + return this["rewardCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + } + } while (false); + } + finally { + } + } +} diff --git a/assets/scripts/domain/RewardSettlementModel.ts.meta b/assets/scripts/domain/RewardSettlementModel.ts.meta new file mode 100644 index 0000000..6db0f1e --- /dev/null +++ b/assets/scripts/domain/RewardSettlementModel.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "e449ac1c-834a-4fd2-9765-05330af3ea3e", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/framework/SingletonBase.ts b/assets/scripts/framework/SingletonBase.ts index 008f2db..5e32970 100644 --- a/assets/scripts/framework/SingletonBase.ts +++ b/assets/scripts/framework/SingletonBase.ts @@ -1,28 +1,55 @@ +// @structural-rewrite-v1 import { _decorator, Component } from 'cc'; -const { ccclass, property } = _decorator; - +const { ccclass } = _decorator; @ccclass('SingletonBase') export abstract class SingletonBase extends Component { - private static _instance: any = null; - + private static _instance: Component = null; public static getInstance(this: new () => T): T { - if ((this as any)._instance === null) { - return null + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return ((this as unknown) as typeof SingletonBase)["_instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown as T; + } + } while (false); + } + finally { } - return (this as any)._instance; } - protected onLoad(): void { - if ((this.constructor as any)._instance) { - this.node.destroy(); - return; + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const singletonType = this["constructor"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown as typeof SingletonBase; + if (singletonType["_instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) { + void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["destroy"]()); + return; + } + void (singletonType["_instance"] = this); + } + } while (false); + } + finally { } - (this.constructor as any)._instance = this; } - protected onDestroy(): void { - if ((this.constructor as any)._instance === this) { - (this.constructor as any)._instance = null; + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const singletonType = this["constructor"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown as typeof SingletonBase; + if (singletonType["_instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === this) + void (singletonType["_instance"] = null); + } + } while (false); + } + finally { } } -} \ No newline at end of file +} diff --git a/assets/scripts/framework/animation/EasingSelector.ts b/assets/scripts/framework/animation/EasingSelector.ts new file mode 100644 index 0000000..97ca251 --- /dev/null +++ b/assets/scripts/framework/animation/EasingSelector.ts @@ -0,0 +1,41 @@ +// @structural-rewrite-v1 +import { easing, Node, tween, Vec3 } from 'cc'; +export function selectAnimationEasing(preferSineOut: boolean, preferSineIn: boolean): (time: number) => number { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const candidates: Array number + ]> = [ + [preferSineOut, easing["sineOut"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [preferSineIn, easing["sineIn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + ]; + return candidates["find"](([enabled]) => enabled)?.[1] ?? easing["linear"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + } + } while (false); + } + finally { + } +} +export function runNodeTransition(node: Node, channel: 'position' | 'scale', start: Vec3, end: Vec3, delay: number, duration: number, applyImmediately: boolean, easingFunction: (time: number) => number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const applyStart = channel === 'position' ? () => node["setPosition"](start) : () => node["setScale"](start); + if (applyImmediately) + void (applyStart()); + const destination = channel === 'position' ? { "position": end } : { "scale": end }; + void (tween(node)["delay"](delay)["call"](applyStart)["to"](duration, destination, { "easing": easingFunction })["start"]()); + } + } while (false); + } + finally { + } +} diff --git a/assets/scripts/framework/animation/EasingSelector.ts.meta b/assets/scripts/framework/animation/EasingSelector.ts.meta new file mode 100644 index 0000000..199ffc6 --- /dev/null +++ b/assets/scripts/framework/animation/EasingSelector.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "a1eb5b59-1ba5-49aa-83dc-32caecc1ca6f", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/framework/animation/MoveComponent.ts b/assets/scripts/framework/animation/MoveComponent.ts index 7f1e625..d421070 100644 --- a/assets/scripts/framework/animation/MoveComponent.ts +++ b/assets/scripts/framework/animation/MoveComponent.ts @@ -1,64 +1,36 @@ -import { _decorator, Component, easing, Node, tween, Vec2, Vec3 } from 'cc'; +// @structural-rewrite-v1 +import { _decorator, Component, Vec3 } from 'cc'; +import { runNodeTransition, selectAnimationEasing } from './EasingSelector'; const { ccclass, property } = _decorator; - @ccclass('MoveComponent') export class MoveComponent extends Component { - - @property startPos: Vec3 = new Vec3(0, 0, 0); - @property endPos: Vec3 = new Vec3(0, 0, 0); - @property - delay: number = 0; - - + delay = 0; @property - moveTimer: number = 0; - - - @property({ displayName: "线性" }) - line: boolean = true; - - @property({ displayName: "先慢后快" }) - sineIn: boolean = true; - - @property({ displayName: "先快后慢" }) - sineOut: boolean = true; - - @property({ displayName: "设置为初始值" }) - setToStart: boolean = false; - - + moveTimer = 0; + @property({ "displayName": '线性' }) + line = true; + @property({ "displayName": '先慢后快' }) + sineIn = true; + @property({ "displayName": '先快后慢' }) + sineOut = true; + @property({ "displayName": '设置为初始值' }) + setToStart = false; protected onEnable(): void { - console.log("触发动画z") - let easeFunc = easing.linear; - - if (this.sineIn) { - easeFunc = easing.sineIn + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runNodeTransition(this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 'position', this["startPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["endPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["delay"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["moveTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["setToStart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, selectAnimationEasing(this["sineOut"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["sineIn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))); + } + } while (false); } - - if (this.sineOut) { - easeFunc = easing.sineOut + finally { } - - if (this.setToStart) { - this.node.setPosition(this.startPos) - } - - - tween(this.node) - .delay(this.delay) - .call(() => { - this.node.setPosition(this.startPos) - }) - .to(this.moveTimer, { position: this.endPos }, { easing: easeFunc }) - .start() } - - } - - diff --git a/assets/scripts/framework/animation/ScaleComponent.ts b/assets/scripts/framework/animation/ScaleComponent.ts index 4a86143..ff3682d 100644 --- a/assets/scripts/framework/animation/ScaleComponent.ts +++ b/assets/scripts/framework/animation/ScaleComponent.ts @@ -1,63 +1,36 @@ -import { _decorator, Component, easing, Node, tween, Vec2, Vec3 } from 'cc'; +// @structural-rewrite-v1 +import { _decorator, Component, Vec3 } from 'cc'; +import { runNodeTransition, selectAnimationEasing } from './EasingSelector'; const { ccclass, property } = _decorator; - @ccclass('ScaleComponent') export class ScaleComponent extends Component { - @property startPos: Vec3 = new Vec3(0, 0, 0); - @property endPos: Vec3 = new Vec3(1, 1, 1); - @property - delay: number = 0; - + delay = 0; @property - moveTimer: number = 0.1; - - @property({ displayName: "线性" }) - line: boolean = true; - - @property({ displayName: "先慢后快" }) - sineIn: boolean = true; - - @property({ displayName: "先快后慢" }) - sineOut: boolean = true; - - - @property({ displayName: "设置为初始值" }) - setToStart: boolean = false; - - + moveTimer = 0.1; + @property({ "displayName": '线性' }) + line = true; + @property({ "displayName": '先慢后快' }) + sineIn = true; + @property({ "displayName": '先快后慢' }) + sineOut = true; + @property({ "displayName": '设置为初始值' }) + setToStart = false; protected onEnable(): void { - - - let easeFunc = easing.linear; - - if (this.sineIn) { - easeFunc = easing.sineIn + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runNodeTransition(this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 'scale', this["startPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["endPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["delay"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["moveTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["setToStart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, selectAnimationEasing(this["sineOut"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["sineIn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))); + } + } while (false); } - - if (this.sineOut) { - easeFunc = easing.sineOut + finally { } - - if (this.setToStart) { - this.node.setScale(this.startPos) - } - - - tween(this.node) - .delay(this.delay) - .call(() => { - this.node.setScale(this.startPos) - }) - .to(this.moveTimer, { scale: this.endPos }, { easing: easeFunc }) - .start() } - - } - - diff --git a/assets/scripts/framework/audio/AudioMgr.ts b/assets/scripts/framework/audio/AudioMgr.ts index 9e2e180..4ee8f0a 100644 --- a/assets/scripts/framework/audio/AudioMgr.ts +++ b/assets/scripts/framework/audio/AudioMgr.ts @@ -1,139 +1,290 @@ -//AudioMgr.ts -import { Node, AudioSource, AudioClip, resources, director } from 'cc'; -/** - * @en - * this is a sington class for audio play, can be easily called from anywhere in you project. - * @zh - * 这是一个用于播放音频的单件类,可以很方便地在项目的任何地方调用。 - */ +// @structural-rewrite-v1 +import { AudioClip, AudioSource, director, Node, resources } from 'cc'; export class AudioMgr { private static _inst: AudioMgr; - public static get inst(): AudioMgr { - if (this._inst == null) { - this._inst = new AudioMgr(); - } - return this._inst; - } - private _soundAudioSource: AudioSource; private _musicAudioSource: AudioSource; - // private _soundaudioSource: AudioSource; - constructor() { - //@en create a node as audioMgr - //@zh 创建一个节点作为 audioMgr - let audioMgr = new Node(); - audioMgr.name = '__audioMgr__'; - - //@en add to the scene. - //@zh 添加节点到场景 - director.getScene().addChild(audioMgr); - - //@en make it as a persistent node, so it won't be destroied when scene change. - //@zh 标记为常驻节点,这样场景切换的时候就不会被销毁了 - director.addPersistRootNode(audioMgr); - - //@en add AudioSource componrnt to play audios. - //@zh 添加 AudioSource 组件,用于播放音频。 - this._soundAudioSource = audioMgr.addComponent(AudioSource); - this._musicAudioSource = audioMgr.addComponent(AudioSource); - } - - public get soundAudioSource() { - return this._soundAudioSource; - } - - public get musicAudioSource() { - return this._musicAudioSource; - } - - /** - * @en - * play short audio, such as strikes,explosions - * @zh - * 播放短音频,比如 打击音效,爆炸音效等 - * @param sound clip or url for the audio - * @param volume - */ - playOneShot(sound: AudioClip | string, volume: number = 1.0) { - if (sound instanceof AudioClip) { - this._soundAudioSource.playOneShot(sound, (this.muteSound ? 0 : 1) * volume); + muteMusic = false; + muteSound = false; + public static get inst(): AudioMgr { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (!(this["_inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) + void (this["_inst"] = new AudioMgr()); + return this["_inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + } + } while (false); } - else { - resources.load(sound, (err, clip: AudioClip) => { - if (err) { - console.log(err); - } - else { - this._soundAudioSource.playOneShot(clip, (this.muteSound ? 0 : 1) * volume); - } - }); + finally { } } - - /** - * @en - * play long audio, such as the bg music - * @zh - * 播放长音频,比如 背景音乐 - * @param sound clip or url for the sound - * @param volume - */ - play(sound: AudioClip, isLoop: boolean = true, volume: number = 1.0) { - if (sound instanceof AudioClip) { - this.musicAudioSource.stop(); - this.musicAudioSource.clip = sound; - this.musicAudioSource.loop = isLoop - this.musicAudioSource.play(); - this.musicAudioSource.volume = (this.muteMusic ? 0 : 1) * volume; + public get soundAudioSource(): AudioSource { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["_soundAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + } + } while (false); } - else { - resources.load(sound, (err, clip: AudioClip) => { - if (err) { - console.log(err); - } - else { - this.musicAudioSource.clip = clip; - this.musicAudioSource.play(); - this.musicAudioSource.volume = (this.muteMusic ? 0 : 1) * volume; - } - }); + finally { } } - - muteMusic: boolean = false - muteSound: boolean = false - - activeMusic(active: boolean) { - this.musicAudioSource.volume = active ? 1 : 0 - this.muteMusic = !active + public get musicAudioSource(): AudioSource { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + } + } while (false); + } + finally { + } } - - activeSound(active: boolean) { - this.soundAudioSource.volume = active ? 1 : 0 - this.muteSound = !active + private constructor() { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const audioRoot = new Node('__audioMgr__'); + void (director["getScene"]()["addChild"](audioRoot)); + void (director["addPersistRootNode"](audioRoot)); + void (this["_soundAudioSource"] = audioRoot["addComponent"](AudioSource)); + void (this["_musicAudioSource"] = audioRoot["addComponent"](AudioSource)); + } + } while (false); + } + finally { + } } - - /** - * stop the audio play - */ - stop() { - this._soundAudioSource.stop(); - this._musicAudioSource.stop(); + playOneShot(sound: AudioClip | string, volume = 1): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["resolveClip"](sound, (clip) => (this["_soundAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"](clip, this["getSoundVolume"](volume)))); + } + } while (false); + } + finally { + } } - - /** - * pause the audio play - */ - pause() { - this._soundAudioSource.pause(); - this._musicAudioSource.pause(); + play(sound: AudioClip | string, isLoop = true, volume = 1): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (sound instanceof AudioClip) { + void (this["startMusic"](sound, volume, { "stopCurrent": true, "loop": isLoop })); + return; + } + void (this["resolveClip"](sound, (clip) => this["startMusic"](clip, volume))); + } + } while (false); + } + finally { + } } - - /** - * resume the audio play - */ - resume() { - this._soundAudioSource.play(); - this._musicAudioSource.play(); + activeMusic(active: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["setChannelActive"]('muteMusic', this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, active)); + } + } while (false); + } + finally { + } } -} \ No newline at end of file + activeSound(active: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["setChannelActive"]('muteSound', this["_soundAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, active)); + } + } while (false); + } + finally { + } + } + stop(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["forEachChannel"]((source) => source["stop"]())); + } + } while (false); + } + finally { + } + } + pause(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["forEachChannel"]((source) => source["pause"]())); + } + } while (false); + } + finally { + } + } + resume(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["forEachChannel"]((source) => source["play"]())); + } + } while (false); + } + finally { + } + } + private resolveClip(sound: AudioClip | string, onLoaded: (clip: AudioClip) => void): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (sound instanceof AudioClip) { + void (onLoaded(sound)); + return; + } + void (resources["load"](sound, (error, clip: AudioClip) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (error) { + void (console["error"](error)); + return; + } + void (onLoaded(clip)); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + } + private getSoundVolume(volume: number): number { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["getChannelVolume"](this["muteSound"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, volume); + } + } while (false); + } + finally { + } + } + private startMusic(clip: AudioClip, volume: number, options?: { + stopCurrent: boolean; + loop: boolean; + }): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (options?.["stopCurrent"]) + void ((this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["stop"]()); + void ((this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["clip"] = clip); + if (options) + void ((this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["loop"] = options["loop"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void ((this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["play"]()); + void ((this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["volume"] = this["getMusicVolume"](volume)); + } + } while (false); + } + finally { + } + } + private getMusicVolume(volume: number): number { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["getChannelVolume"](this["muteMusic"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, volume); + } + } while (false); + } + finally { + } + } + private setChannelActive(muteProperty: 'muteMusic' | 'muteSound', source: AudioSource, active: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this[muteProperty] = !active); + void (source["volume"] = Number(active)); + } + } while (false); + } + finally { + } + } + private getChannelVolume(isMuted: boolean, volume: number): number { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return Number(!isMuted) * volume; + } + } while (false); + } + finally { + } + } + private forEachChannel(action: (source: AudioSource) => void): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ([this["_soundAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown]["forEach"](action)); + } + } while (false); + } + finally { + } + } +} diff --git a/assets/scripts/framework/data/DataMgr.ts b/assets/scripts/framework/data/DataMgr.ts index 2ca8c4e..db10370 100644 --- a/assets/scripts/framework/data/DataMgr.ts +++ b/assets/scripts/framework/data/DataMgr.ts @@ -1,80 +1,202 @@ -import { _decorator, Component, js, JsonAsset, Node, resources, TypeScript } from 'cc'; -import { SingletonBase } from '../SingletonBase'; +// @structural-rewrite-v1 +import { _decorator, js, JsonAsset, resources } from 'cc'; import { setClassName } from '../../data/ConfigData'; - -const { ccclass, property } = _decorator; - +import { SingletonBase } from '../SingletonBase'; +const { ccclass } = _decorator; +interface ConfigRecord { + id: number; +} +type ConfigConstructor = new () => T; @ccclass('DataMgr') export class DataMgr extends SingletonBase { - + datas: Map = new Map(); protected start(): void { - setClassName() - this.initAllConfig() - } - - datas: Map> = new Map(); - - - createInstance(className: string): any { - const Constructor = (window as any).ConfigData[className]; - - if (typeof Constructor === 'function') { - return new Constructor(); - } else { - console.error(`Class ${className} is not a constructor`); - return null; - } - } - - - initAllConfig() { - resources.loadDir(`data`, null, null, (err, assets) => { - for (let i = 0; i < assets.length; i++) { - let jsonAsset = assets[i] as JsonAsset - let className = jsonAsset.name - let array = new Array() - // this.datas.set((window as any)[className].name, array) - console.log("是否有类", (window as any).ConfigData, className, (window as any).ConfigData[className]) - this.datas.set(js.getClassName((window as any).ConfigData[className]), array) - - console.log("设置data", className, js.getClassName((window as any).ConfigData[className])) - - for (let j = 0; j < jsonAsset.json.length; j++) { - let myClassInstance = new (window as any).ConfigData[className](); - let targetData: Record = jsonAsset.json[j] - this.initDataItem(myClassInstance, targetData) - array.push(myClassInstance) + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (setClassName()); + void (this["initAllConfig"]()); } - } - }); - } - - public GetDataById(dataClass: new () => T, id: number): T { - let name = js.getClassName(dataClass) - console.log("GetDataById", name) - let datas = this.datas.get(name) as Array - for (let i = 0; i < datas.length; i++) { - if (datas[i].id == id) { - return datas[i] - } + } while (false); + } + finally { } } - - initDataItem(obj, record: Record) { - for (const key in record) { - if (record.hasOwnProperty(key) && obj.hasOwnProperty(key)) { - obj[key] = record[key]; - } + createInstance(className: string): any { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["withConstructor"](className, `Class ${className} is not a constructor`, (Constructor) => new Constructor()); + } + } while (false); + } + finally { } } - - public GetDatas(dataClass: new () => T): Array { - let name = js.getClassName(dataClass) - console.log(this.datas.get(name)) - console.log(dataClass) - console.log(name) - console.log(this.datas) - return this.datas.get(name) as Array + initAllConfig(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (resources["loadDir"]('data', null, null, (error, assets) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (error) { + void (console["error"]('Failed to load config data', error)); + return; + } + void (assets["forEach"]((asset) => this["registerJsonAsset"](asset as JsonAsset))); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } } - -} \ No newline at end of file + public GetDataById(dataClass: ConfigConstructor, id: number): T { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const records = this["GetDatas"](dataClass); + return records["find"]((record) => record["id"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === id); + } + } while (false); + } + finally { + } + } + initDataItem(obj: object, record: Record): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (Object["keys"](record)["forEach"]((key) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: if (((Object["prototype"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["hasOwnProperty"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["call"](obj, key)) { + void ((obj as Record)[key] = record[key]); + } + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + } + public GetDatas(dataClass: ConfigConstructor): T[] { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return ((this["datas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](js["getClassName"](dataClass)) || []) as T[]; + } + } while (false); + } + finally { + } + } + private registerJsonAsset(jsonAsset: JsonAsset): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const className = jsonAsset["name"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + void (this["withConstructor"](className, `Config class is not registered: ${className}`, (Constructor) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const records = (jsonAsset["json"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown as Record[])["map"]((record) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const instance = new Constructor(); + void (this["initDataItem"](instance, record)); + return instance; + } + } while (false); + } + finally { + } + }); + void ((this["datas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["set"](className, records)); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + } + private getConstructor(className: string): ConfigConstructor { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return ((window as any)["ConfigData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)?.[className]; + } + } while (false); + } + finally { + } + } + private withConstructor(className: string, errorMessage: string, use: (Constructor: ConfigConstructor) => T): T | null { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const Constructor = this["getConstructor"](className); + if (!Constructor) { + void (console["error"](errorMessage)); + return null; + } + return use(Constructor); + } + } while (false); + } + finally { + } + } +} diff --git a/assets/scripts/framework/data/LocalSaveMgr.ts b/assets/scripts/framework/data/LocalSaveMgr.ts index 12846a8..166f11b 100644 --- a/assets/scripts/framework/data/LocalSaveMgr.ts +++ b/assets/scripts/framework/data/LocalSaveMgr.ts @@ -1,182 +1,355 @@ -import { _decorator, Component, math, Node, EventTarget } from 'cc'; +// @structural-rewrite-v1 +import { _decorator, Component } from 'cc'; +import { Config } from '../../data/GameConfig'; import { EventCenter } from '../../EventCenter'; import { AudioMgr } from '../audio/AudioMgr'; -import { Config } from '../../data/GameConfig'; - - -const { ccclass, property } = _decorator; -const eventTarget = new EventTarget(); +const { ccclass } = _decorator; +const PLAYER_DATA_KEY = 'playerData'; @ccclass('LocalSaveMgr') export class LocalSaveMgr extends Component { static instance: LocalSaveMgr; - playerData: PlayerData = null - + playerData: PlayerData = null; protected onLoad(): void { - LocalSaveMgr.instance = this - let value = localStorage.getItem("playerData") - - if (value != null || value != "") { - - this.playerData = new PlayerData() - try { - this.playerData.jsonDataInit(JSON.parse(value)) - } catch (err) { - //… - } - } else { - this.playerData = new PlayerData() - } - this.initSound() - } - - passLevel() { - this.playerData.levelIndex += 1 - this.save() - } - - addCoin(count: number) { - console.log("addCoin", count) - this.playerData.coin += count - EventCenter.coinCountChange.emit("coinCountChange") - this.save() - } - - - save() { - localStorage.setItem("playerData", JSON.stringify(this.playerData)) - } - - clearData() { - localStorage.clear() - } - - initSound() { - AudioMgr.inst.activeSound(!this.playerData.muteSound) - AudioMgr.inst.activeMusic(!this.playerData.muteMusic) - } - - activeSound(active: boolean) { - this.playerData.muteSound = !active - AudioMgr.inst.activeSound(active) - this.save() - - } - activeMusic(active: boolean) { - this.playerData.muteMusic = !active - AudioMgr.inst.activeMusic(active) - this.save() - } - - equipWeapon(index: number) { - this.playerData.equipedWeapon = index - this.save() - } - - buyWeapon(index: number) { - this.playerData.ownWeapon.push(index) - console.log("购买武器", index, this.playerData.ownWeapon[this.playerData.ownWeapon.length - 1]) - this.save() - } - - timerAddPower(count: number) { - this.playerData.power += count - if (this.playerData.power > Config.maxHp) { - this.playerData.power = Config.maxHp - } - EventCenter.powerChange.emit("powerChange") - this.save() - } - - usePower() { - this.playerData.power -= 1 - EventCenter.powerChange.emit("powerChange") - this.save() - } - - adsAddPower() { - this.playerData.power += 3 - EventCenter.powerChange.emit("powerChange") - this.save() - } - - completeTutorial() { - this.playerData.haveTutorial = true - this.save() - } - - getPowerCD() { - const lastAddPowerTimer = this.playerData.lastAddPowerTimer - if (!Number.isFinite(lastAddPowerTimer) || lastAddPowerTimer <= 0) { - return Config.powerCD - } - - const passTime = Math.max(0, (Date.now() - lastAddPowerTimer) / 1000) - return Math.max(0, Config.powerCD - passTime) - } - - protected update(dt: number): void { - if (this.playerData.power < Config.maxHp) { - if (this.playerData.isOnTimerRun == false) { - this.playerData.isOnTimerRun = true - this.playerData.lastAddPowerTimer = Date.now() - this.save() - } - - if (this.playerData.isOnTimerRun) { - let passTime = (Date.now() - this.playerData.lastAddPowerTimer) / 1000 - // console.log(passTime) - if ((passTime > Config.powerCD)) { - console.log("倒计时足够") - this.playerData.lastAddPowerTimer = Date.now() - this.timerAddPower(Math.floor(passTime / Config.powerCD)) + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (LocalSaveMgr["instance"] = this); + void (this["playerData"] = this["readPlayerData"]()); + void (this["initSound"]()); } - - if (this.playerData.power >= Config.maxHp) { - console.log("体力超过上线") - this.playerData.isOnTimerRun = false - this.save() + } while (false); + } + finally { + } + } + passLevel(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["change"]('levelIndex', (value) => value + 1)); } - } - + } while (false); + } + finally { + } + } + addCoin(count: number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["change"]('coin', (value) => value + count, () => (EventCenter["coinCountChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["emit"]('coinCountChange'))); + } + } while (false); + } + finally { + } + } + save(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (localStorage["setItem"](PLAYER_DATA_KEY, JSON["stringify"](this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))); + } + } while (false); + } + finally { + } + } + clearData(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (localStorage["clear"]()); + } + } while (false); + } + finally { + } + } + initSound(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeSound"](!((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["muteSound"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))); + void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeMusic"](!((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["muteMusic"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))); + } + } while (false); + } + finally { + } + } + activeSound(active: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["change"]('muteSound', () => !active, () => (AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeSound"](active))); + } + } while (false); + } + finally { + } + } + activeMusic(active: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["change"]('muteMusic', () => !active, () => (AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeMusic"](active))); + } + } while (false); + } + finally { + } + } + equipWeapon(index: number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["change"]('equipedWeapon', () => index)); + } + } while (false); + } + finally { + } + } + buyWeapon(index: number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["change"]('ownWeapon', (weapons) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (weapons["push"](index)); + return weapons; + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + } + timerAddPower(count: number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["change"]('power', (value) => Math["min"](Config["maxHp"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, value + count), () => (EventCenter["powerChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["emit"]('powerChange'))); + } + } while (false); + } + finally { + } + } + usePower(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["change"]('power', (value) => value - 1, () => (EventCenter["powerChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["emit"]('powerChange'))); + } + } while (false); + } + finally { + } + } + adsAddPower(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["change"]('power', (value) => value + 3, () => (EventCenter["powerChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["emit"]('powerChange'))); + } + } while (false); + } + finally { + } + } + completeTutorial(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["change"]('haveTutorial', () => true)); + } + } while (false); + } + finally { + } + } + getPowerCD(): number { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const lastTimer = (this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["lastAddPowerTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + if (!Number["isFinite"](lastTimer) || lastTimer <= 0) + return Config["powerCD"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + const elapsed = Math["max"](0, (Date["now"]() - lastTimer) / 1000); + return Math["max"](0, (Config["powerCD"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - elapsed); + } + } while (false); + } + finally { + } + } + protected update(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown >= (Config["maxHp"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) + return; + void (this["startPowerTimerIfNeeded"]()); + const elapsed = (Date["now"]() - ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["lastAddPowerTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) / 1000; + if (elapsed <= (Config["powerCD"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) + return; + void ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["lastAddPowerTimer"] = Date["now"]()); + void (this["timerAddPower"](Math["floor"](elapsed / (Config["powerCD"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)))); + if ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown >= (Config["maxHp"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) { + void ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["isOnTimerRun"] = false); + void (this["save"]()); + } + } + } while (false); + } + finally { + } + } + private readPlayerData(): PlayerData { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const playerData = new PlayerData(); + const storedData = localStorage["getItem"](PLAYER_DATA_KEY); + if (!storedData) + return playerData; + try { + void (playerData["jsonDataInit"](JSON["parse"](storedData))); + } + catch (error) { + void (console["warn"]('Unable to restore player data', error)); + } + return playerData; + } + } while (false); + } + finally { + } + } + private startPowerTimerIfNeeded(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["isOnTimerRun"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + return; + void ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["isOnTimerRun"] = true); + void ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["lastAddPowerTimer"] = Date["now"]()); + void (this["save"]()); + } + } while (false); + } + finally { + } + } + private change(key: K, update: (value: PlayerData[K]) => PlayerData[K], afterChange?: () => void): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[key] = update((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[key])); + void (afterChange?.()); + void (this["save"]()); + } + } while (false); + } + finally { } } } - - class PlayerData { - muteMusic: boolean = false - muteSound: boolean = false - levelIndex: number = 1 - equipedWeapon: number = 1 - power: number = Config.maxHp - coin: number = 100 - ownWeapon: number[] = [1] - lastAddPowerTimer: number = null - isOnTimerRun: boolean = false - haveTutorial: boolean = false - jsonDataInit(obj) { - if (obj == null) return - if (obj.muteMusic != null) - this.muteMusic = obj.muteMusic - if (obj.muteSound != null) - this.muteSound = obj.muteSound - if (obj.levelIndex != null) - this.levelIndex = obj.levelIndex - if (obj.equipedWeapon != null) - this.equipedWeapon = obj.equipedWeapon - if (obj.ownWeapon != null) - this.ownWeapon = obj.ownWeapon - if (obj.coin != null) - this.coin = obj.coin - if (obj.lastAddPowerTimer != null) - this.lastAddPowerTimer = obj.lastAddPowerTimer - if (obj.power != null) - this.power = obj.power - if (obj.isOnTimerRun != null) - this.isOnTimerRun = obj.isOnTimerRun - if (obj.haveTutorial != null) - this.haveTutorial = obj.haveTutorial + muteMusic = false; + muteSound = false; + levelIndex = 1; + equipedWeapon = 1; + power = Config["maxHp"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + coin = 100; + ownWeapon: number[] = [1]; + lastAddPowerTimer: number = null; + isOnTimerRun = false; + haveTutorial = false; + jsonDataInit(obj: Partial): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (!obj) + return; + void ((Object["keys"](this) as Array)["forEach"]((property) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: if (obj[property] != null) + void ((this as any)[property] = obj[property]); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } } } - - diff --git a/assets/scripts/framework/runtime.meta b/assets/scripts/framework/runtime.meta new file mode 100644 index 0000000..09628f3 --- /dev/null +++ b/assets/scripts/framework/runtime.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "fe52425b-5b45-46a4-9ac6-2e3885b77883", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/framework/runtime/CameraAimState.ts b/assets/scripts/framework/runtime/CameraAimState.ts new file mode 100644 index 0000000..9b01cdc --- /dev/null +++ b/assets/scripts/framework/runtime/CameraAimState.ts @@ -0,0 +1,80 @@ +// @structural-rewrite-v1 +import { Node, Quat, Vec3, v3 } from 'cc'; +interface ScreenPoint { + x: number; + y: number; +} +/** Keeps FPS touch-aim math independent from the camera component lifecycle. */ +export class CameraAimState { + private readonly touchStart = new Vec3(); + private horizontal = 0; + private vertical = 0; + private defaultHorizontal = 0; + initialize(cameraNode: Node): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const angles = cameraNode["getWorldRotation"]()["getEulerAngles"](v3()); + void (this["vertical"] = angles["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (this["horizontal"] = angles["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (this["defaultHorizontal"] = angles["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + } + } while (false); + } + finally { + } + } + begin(point: ScreenPoint): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((this["touchStart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["set"](point["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, point["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 0)); + } + } while (false); + } + finally { + } + } + move(point: ScreenPoint, fovScale: number): Quat { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const deltaX = (point["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - ((this["touchStart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + const deltaY = (point["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - ((this["touchStart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (this["horizontal"] -= deltaX * 0.04 * fovScale); + void (this["vertical"] += deltaY * 0.04 * fovScale); + void (this["vertical"] = Math["min"](Math["max"](this["vertical"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, -70), 60)); + void (this["horizontal"] = Math["min"](Math["max"](this["horizontal"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["defaultHorizontal"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - 45), (this["defaultHorizontal"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + 45)); + void ((this["touchStart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["set"](point["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, point["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 0)); + return Quat["fromEuler"](new Quat(), this["vertical"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["horizontal"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 0); + } + } while (false); + } + finally { + } + } + tutorialRotation(): Quat { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["vertical"] = -3.99); + void (this["horizontal"] = -32.27); + return Quat["fromEuler"](new Quat(), this["vertical"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["horizontal"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 0); + } + } while (false); + } + finally { + } + } +} diff --git a/assets/scripts/framework/runtime/CameraAimState.ts.meta b/assets/scripts/framework/runtime/CameraAimState.ts.meta new file mode 100644 index 0000000..2137ac5 --- /dev/null +++ b/assets/scripts/framework/runtime/CameraAimState.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "f727d039-cb34-4131-bcb7-4292ff75a038", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/framework/runtime/FramePoller.ts b/assets/scripts/framework/runtime/FramePoller.ts new file mode 100644 index 0000000..3360cec --- /dev/null +++ b/assets/scripts/framework/runtime/FramePoller.ts @@ -0,0 +1,48 @@ +// @structural-rewrite-v1 +/** Schedules lightweight condition checks on the browser animation frame. */ +export class FramePoller { + static until(condition: () => boolean): Promise { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return new Promise((resolve) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const inspect = () => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (condition()) { + void (resolve()); + return; + } + void (requestAnimationFrame(inspect)); + } + } while (false); + } + finally { + } + }; + void (inspect()); + } + } while (false); + } + finally { + } + }); + } + } while (false); + } + finally { + } + } +} diff --git a/assets/scripts/framework/runtime/FramePoller.ts.meta b/assets/scripts/framework/runtime/FramePoller.ts.meta new file mode 100644 index 0000000..a59b916 --- /dev/null +++ b/assets/scripts/framework/runtime/FramePoller.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "ba8c70de-e393-4222-a08e-1f974dd8b6fc", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/framework/runtime/RuntimeAssetLoader.ts b/assets/scripts/framework/runtime/RuntimeAssetLoader.ts new file mode 100644 index 0000000..ad405b0 --- /dev/null +++ b/assets/scripts/framework/runtime/RuntimeAssetLoader.ts @@ -0,0 +1,99 @@ +// @structural-rewrite-v1 +import { AssetManager, Prefab, resources, SpriteFrame } from 'cc'; +/** Shared promise-based bridge for Cocos bundle and resources callbacks. */ +export class RuntimeAssetLoader { + static loadBundle(name: string): Promise { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["request"]((complete) => (AssetManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["loadBundle"](name, complete), `Bundle not found: ${name}`); + } + } while (false); + } + finally { + } + } + static loadBundlePrefab(bundle: AssetManager.Bundle, path: string): Promise { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["request"]((complete) => bundle["load"](path, Prefab, complete), `Prefab not found: ${path}`); + } + } while (false); + } + finally { + } + } + static loadResourcePrefab(path: string): Promise { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["request"]((complete) => resources["load"](path, Prefab, complete), `Resource prefab not found: ${path}`); + } + } while (false); + } + finally { + } + } + static loadSpriteFrame(path: string): Promise { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["request"]((complete) => resources["load"](path, SpriteFrame, complete), `SpriteFrame not found: ${path}`); + } + } while (false); + } + finally { + } + } + private static request(start: (complete: (error: Error, asset: T) => void) => void, missingMessage: string): Promise { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return new Promise((resolve, reject) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (start((error, asset) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (error || !asset) { + void (reject(error || new Error(missingMessage))); + return; + } + void (resolve(asset)); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + }); + } + } while (false); + } + finally { + } + } +} diff --git a/assets/scripts/framework/runtime/RuntimeAssetLoader.ts.meta b/assets/scripts/framework/runtime/RuntimeAssetLoader.ts.meta new file mode 100644 index 0000000..5e6ee77 --- /dev/null +++ b/assets/scripts/framework/runtime/RuntimeAssetLoader.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "75baf2e4-537b-4d75-b78e-2b4fe6cd3246", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/framework/sdk/SdkMgr.ts b/assets/scripts/framework/sdk/SdkMgr.ts index 0e79698..7a19a4f 100644 --- a/assets/scripts/framework/sdk/SdkMgr.ts +++ b/assets/scripts/framework/sdk/SdkMgr.ts @@ -1,28 +1,85 @@ +// @structural-rewrite-v1 import { _decorator, Component } from 'cc'; - const { ccclass } = _decorator; - -/** - * Integration seam for a future rewarded-placement provider. - * The project currently ships without any advertising or platform SDK. - */ +export type RewardGrantedCallback = () => void; +/** Abstraction kept at the SDK boundary so gameplay never depends on a vendor API. */ export interface RewardProvider { - requestReward(onGranted: () => void): void; + requestReward(onGranted: RewardGrantedCallback): void; } - +const immediateRewardProvider: RewardProvider = Object["freeze"]({ + requestReward(onGranted: RewardGrantedCallback): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (onGranted()); + } + } while (false); + } + finally { + } + }, +}); +const ignoreReward = (): void => undefined; @ccclass('SdkMgr') export class SdkMgr extends Component implements RewardProvider { - static instance: SdkMgr; - + static instance: SdkMgr = null; + private rewardProvider: RewardProvider = immediateRewardProvider; protected onLoad(): void { - SdkMgr.instance = this; + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (SdkMgr["instance"] = this); + } + } while (false); + } + finally { + } } - - /** - * SDK-free default: grant the gameplay reward immediately. - * Replace this method body with a provider call when an SDK is added later. - */ - public requestReward(onGranted?: () => void): void { - onGranted?.(); + protected onDestroy(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: if (SdkMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === this) { + void (SdkMgr["instance"] = null); + } + } + } while (false); + } + finally { + } + } + /** Allows a platform adapter to be injected without changing panel code. */ + public useRewardProvider(provider: RewardProvider): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["rewardProvider"] = provider || immediateRewardProvider); + } + } while (false); + } + finally { + } + } + /** SDK-free builds preserve the existing behaviour by granting immediately. */ + public requestReward(onGranted: RewardGrantedCallback = ignoreReward): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((this["rewardProvider"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["requestReward"](onGranted)); + } + } while (false); + } + finally { + } } } diff --git a/assets/scripts/framework/ui/DesignResolutionPolicy.ts b/assets/scripts/framework/ui/DesignResolutionPolicy.ts new file mode 100644 index 0000000..790f835 --- /dev/null +++ b/assets/scripts/framework/ui/DesignResolutionPolicy.ts @@ -0,0 +1,49 @@ +// @structural-rewrite-v1 +import { ResolutionPolicy } from 'cc'; +export interface DesignResolution { + width: number; + height: number; + policy: number; +} +type ResolutionRule = { + minimumRatio: number; + create: (width: number, height: number) => DesignResolution; +}; +const resolutionRules: ReadonlyArray = [ + { + "minimumRatio": 18 / 9, + "create": (width, height) => ({ + "width": 1080, + "height": height * (1080 / width), + "policy": ResolutionPolicy["FIXED_WIDTH"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, + }), + }, + { + "minimumRatio": 16 / 9, + "create": (width, height) => ({ + "width": width * (1920 / height), + "height": 1920, + "policy": ResolutionPolicy["FIXED_HEIGHT"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, + }), + }, +]; +export function resolveDesignResolution(width: number, height: number): DesignResolution { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const ratio = height / width; + const rule = resolutionRules["find"]((candidate) => ratio > (candidate["minimumRatio"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + return rule?.["create"](width, height) ?? { + "width": 1080, + "height": height * (1080 / width), + "policy": ResolutionPolicy["EXACT_FIT"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, + }; + } + } while (false); + } + finally { + } +} diff --git a/assets/scripts/framework/ui/DesignResolutionPolicy.ts.meta b/assets/scripts/framework/ui/DesignResolutionPolicy.ts.meta new file mode 100644 index 0000000..1355f45 --- /dev/null +++ b/assets/scripts/framework/ui/DesignResolutionPolicy.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "d13737ee-baaf-457f-acca-428fa612c9f4", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/framework/ui/PanelBase.ts b/assets/scripts/framework/ui/PanelBase.ts index 2a7b9d2..d2063a6 100644 --- a/assets/scripts/framework/ui/PanelBase.ts +++ b/assets/scripts/framework/ui/PanelBase.ts @@ -1,74 +1,182 @@ -import { _decorator, Component, Node, director, resources, instantiate, Prefab, js } from 'cc'; - -const { ccclass, property } = _decorator; - +// @structural-rewrite-v1 +import { _decorator, Component, instantiate, js, Label, Node } from 'cc'; +import { FramePoller } from '../runtime/FramePoller'; +import { RuntimeAssetLoader } from '../runtime/RuntimeAssetLoader'; +const { ccclass } = _decorator; @ccclass('PanelBase') export class PanelBase extends Component { - protected isOpen: boolean = false; - + protected isOpen = false; public async open(): Promise { - if (this.isOpen) return; - this.node.active = true - this.isOpen = true; - this.onOpen(); - } - - static async LoadPanel(prefabPath: string, parentNode: Node) { - - let panelNode: Node = null - resources.load(prefabPath, Prefab, (err, prefabAsset) => { - if (prefabAsset) { - const node = instantiate(prefabAsset); - node.parent = parentNode; - node.getComponent(PanelBase).open() - panelNode = node - } else { - console.error(`Failed to load UI prefab: ${prefabPath}`); - } - }); - - await this.waitUntil(() => panelNode != null); - return panelNode - } - - - static waitUntil(condition: () => boolean): Promise { - return new Promise((resolve) => { - const checkCondition = () => { - if (condition()) { - resolve(); // 条件成立,结束等待 - } else { - // 条件不成立,继续轮询 - requestAnimationFrame(checkCondition); + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (this["isOpen"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + return; + void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = true); + void (this["isOpen"] = true); + void (this["onOpen"]()); } - }; - checkCondition(); // 开始检查条件 - }); - } - - public close(): void { - console.log("close panel", this.node.name) - if (!this.isOpen) return; - if (!this.isValid) return; - - if (this.node && this.node.parent) { - this.node.removeFromParent(); - this.node.destroy(); - this.isOpen = false; - this.onClose(); + } while (false); + } + finally { + } + } + public close(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (!(this["isOpen"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) || !(this["isValid"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) + return; + void (this["isOpen"] = false); + void (this["onClose"]()); + void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["removeFromParent"]()); + void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["destroy"]()); + } + } while (false); + } + finally { + } + } + static async LoadPanel(prefabPath: string, parentNode: Node): Promise { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const prefab = await this["loadPrefab"](prefabPath); + const panelNode = instantiate(prefab); + void (panelNode["parent"] = parentNode); + const panel = panelNode["getComponent"](PanelBase); + if (!panel) { + void (panelNode["destroy"]()); + throw new Error(`UI prefab does not contain PanelBase: ${prefabPath}`); + } + void (await panel["open"]()); + return panelNode; + } + } while (false); + } + finally { + } + } + static waitUntil(condition: () => boolean): Promise { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return FramePoller["until"](condition); + } + } while (false); + } + finally { } } - protected getPrefabPath(): string { - let panelName = js.getClassName(this) - return `ui/${panelName}`; // 生成预制件路径 + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return `ui/${js["getClassName"](this)}`; + } + } while (false); + } + finally { + } + } + protected formatTime(totalSeconds: number): string { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const minutes = Math["floor"](totalSeconds / 60); + const seconds = totalSeconds % 60; + return `${minutes < 10 ? `0${minutes}` : minutes}:${seconds < 10 ? `0${seconds}` : seconds}`; + } + } while (false); + } + finally { + } + } + protected setNodesActive(states: ReadonlyArray, nodes: readonly Node[] = []): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (states["forEach"](([target, active]) => (typeof target === 'number' ? nodes[target] : target)["active"] = active)); + } + } while (false); + } + finally { + } + } + protected setLabelStrings(states: ReadonlyArray): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (states["forEach"](([label, value]) => label["string"] = String(value))); + } + } while (false); + } + finally { + } } - protected onOpen(): void { - // 子类可以重写此方法以执行打开后的操作 + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + } + } while (false); + } + finally { + } } - protected onClose(): void { - // 子类可以重写此方法以执行关闭后的操作 + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + } + } while (false); + } + finally { + } } -} \ No newline at end of file + private static loadPrefab(path: string) { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return RuntimeAssetLoader["loadResourcePrefab"](path); + } + } while (false); + } + finally { + } + } +} diff --git a/assets/scripts/framework/ui/PanelInteraction.ts b/assets/scripts/framework/ui/PanelInteraction.ts new file mode 100644 index 0000000..cfaa332 --- /dev/null +++ b/assets/scripts/framework/ui/PanelInteraction.ts @@ -0,0 +1,65 @@ +// @structural-rewrite-v1 +import { Button, Component } from 'cc'; +import { AssetController } from '../../AssetController'; +import { AudioMgr } from '../audio/AudioMgr'; +import { SdkMgr } from '../sdk/SdkMgr'; +export type PanelButtonAction = readonly [ + button: Button, + execute: () => void +]; +export function connectPanelButtons(owner: Component, actions: readonly PanelButtonAction[]): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (actions["forEach"](([button, execute]) => (button["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["on"]((Button["EventType"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["CLICK"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, execute, owner))); + } + } while (false); + } + finally { + } +} +export function playPanelClick(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["click"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + } + } while (false); + } + finally { + } +} +export function runPanelAction(action: () => void): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (playPanelClick()); + void (action()); + } + } while (false); + } + finally { + } +} +export function runRewardedPanelAction(onReward: () => void): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (playPanelClick()); + void ((SdkMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["requestReward"](onReward)); + } + } while (false); + } + finally { + } +} diff --git a/assets/scripts/framework/ui/PanelInteraction.ts.meta b/assets/scripts/framework/ui/PanelInteraction.ts.meta new file mode 100644 index 0000000..b6cf8b9 --- /dev/null +++ b/assets/scripts/framework/ui/PanelInteraction.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "05c2cc75-4a76-4e21-a784-5e816f684572", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/framework/ui/RewardFlight.ts b/assets/scripts/framework/ui/RewardFlight.ts new file mode 100644 index 0000000..2869a3c --- /dev/null +++ b/assets/scripts/framework/ui/RewardFlight.ts @@ -0,0 +1,44 @@ +// @structural-rewrite-v1 +import { instantiate, Node, Prefab, randomRange, Tween, tween, Vec3 } from 'cc'; +/** Reusable visual and numerical presentation for coin rewards. */ +export class RewardFlight { + static launch(prefab: Prefab, parent: Node, origin: Vec3, destination: Node, count = 10): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: for (let index = 0; index < count; index++) { + const item = instantiate(prefab); + void (item["parent"] = parent); + void (item["setPosition"](origin)); + void (tween(item)["by"](0.3, { "position": new Vec3(randomRange(-150, 150), randomRange(-150, 150), 0) })["delay"](index * 0.1)["to"](0.6, { "worldPosition": destination["getWorldPosition"]() })["call"](() => item["destroy"]())["start"]()); + } + } + } while (false); + } + finally { + } + } + static count(from: number, to: number, onUpdate: (value: number) => void, onComplete?: () => void, delay = 0): Tween<{ + value: number; + }> { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return new Tween<{ + value: number; + }>({ "value": from })["delay"](delay)["to"](1, { "value": to }, { + "onUpdate": (target) => onUpdate(Math["floor"]((target as { + value: number; + })["value"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)), + })["call"](() => onComplete?.())["start"](); + } + } while (false); + } + finally { + } + } +} diff --git a/assets/scripts/framework/ui/RewardFlight.ts.meta b/assets/scripts/framework/ui/RewardFlight.ts.meta new file mode 100644 index 0000000..5a0b606 --- /dev/null +++ b/assets/scripts/framework/ui/RewardFlight.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "2f600369-a140-4fee-b53c-491287bc13d1", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/framework/ui/UIAdapt.ts b/assets/scripts/framework/ui/UIAdapt.ts index 339c2a2..a260363 100644 --- a/assets/scripts/framework/ui/UIAdapt.ts +++ b/assets/scripts/framework/ui/UIAdapt.ts @@ -1,49 +1,66 @@ -import { _decorator, Component, Node, ResolutionPolicy, screen, Screen, view } from 'cc'; -import { WINDOWS } from 'cc/env'; -const { ccclass, property } = _decorator; - +// @structural-rewrite-v1 +import { _decorator, Component, screen, view } from 'cc'; +import { resolveDesignResolution } from './DesignResolutionPolicy'; +const { ccclass } = _decorator; @ccclass('UIAdapt') export class UIAdapt extends Component { - start() { - screen.on('window-resize', this.adaptScreenSize, this); - this.adaptScreenSize() - let self = this - this.scheduleOnce(() => { - self.adaptScreenSize() - }, 0.1) + protected start(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["applyAndListen"]()); + void (this["scheduleOnce"](() => this["adaptScreenSize"](), 0.1)); + } + } while (false); + } + finally { + } } - - adaptScreenSize() { - let screenWidth = view.getViewportRect().width - let screenHeight = view.getViewportRect().height - // let screenWidth = view.getVisibleSize().width; - // let screenHeight = view.getVisibleSize().height; - let screenRatio = screenHeight / screenWidth; - - console.log("修改屏幕分辨率", screenRatio, view.getViewportRect(), view) - - if (screenRatio > 18 / 9) { - // 适配屏幕高度 - console.log("修改屏幕分辨率", "适配高度") - - - let designWidth = 1080; - let designHeight = screenHeight * (designWidth / screenWidth); - - view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.FIXED_WIDTH); - } else if (screenRatio > 16 / 9) { - // 适配屏幕宽度 - console.log("修改屏幕分辨率", "适配屏幕宽度") - let designHeight = 1920; - let designWidth = screenWidth * (designHeight / screenHeight); - view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.FIXED_HEIGHT); - } else { - console.log("修改屏幕分辨率", "适配屏幕宽高") - let designWidth = 1080; - let designHeight = screenHeight * (designWidth / screenWidth); - view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.EXACT_FIT); + protected onDestroy(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (screen["off"]('window-resize', this["adaptScreenSize"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this)); + } + } while (false); + } + finally { + } + } + adaptScreenSize(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const viewport = view["getViewportRect"](); + const resolution = resolveDesignResolution(viewport["width"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, viewport["height"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (view["setDesignResolutionSize"](resolution["width"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, resolution["height"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, resolution["policy"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + } + } while (false); + } + finally { + } + } + private applyAndListen(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (screen["on"]('window-resize', this["adaptScreenSize"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this)); + void (this["adaptScreenSize"]()); + } + } while (false); + } + finally { } } } - - diff --git a/assets/scripts/framework/ui/UIManager.ts b/assets/scripts/framework/ui/UIManager.ts index 6fcc14e..3048b07 100644 --- a/assets/scripts/framework/ui/UIManager.ts +++ b/assets/scripts/framework/ui/UIManager.ts @@ -1,57 +1,114 @@ -import { _decorator, Node, director, resources, instantiate, Canvas, Component, js } from 'cc'; +// @structural-rewrite-v1 +import { _decorator, Component, js, Node } from 'cc'; import { PanelBase } from './PanelBase'; const { ccclass, property } = _decorator; - @ccclass('UIManager') export class UIManager extends Component { - static instance: UIManager - - - - private panels: Map = new Map(); - - @property({ type: Node }) + static instance: UIManager; + @property({ "type": Node }) uiRoot: Node = null; - - onLoad() { - UIManager.instance = this; + private readonly panels = new Map(); + private readonly loadingPanels = new Map>(); + protected onLoad(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (UIManager["instance"] = this); + } + } while (false); + } + finally { + } } - - - // 打开UI面板 public async openPanel(panelClass: new () => T): Promise { - const panelName = js.getClassName(panelClass); - - if (!this.panels.has(panelName)) { - let panelNode = PanelBase.LoadPanel(`ui/${js.getClassName(panelClass)}`, this.uiRoot) - let newPanel = (await panelNode).getComponent(PanelBase) - this.panels.set(panelName, newPanel); + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const panelName = js["getClassName"](panelClass); + return ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](panelName) + ?? await ((this["loadingPanels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](panelName) ?? this["createPanel"](panelName))) as T; + } + } while (false); } - const existingPanel = this.panels.get(panelName); - if (existingPanel) { - existingPanel.open(); - return existingPanel as T; + finally { } - } - // 关闭UI面板 public closePanel(panelClass: new () => T): void { - const panelName = js.getClassName(panelClass); - if (this.panels.has(panelName)) { - const panel = this.panels.get(panelName); - if (panel) { - panel.close(); - this.panels.delete(panelName); - } + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const panelName = js["getClassName"](panelClass); + const panel = (this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](panelName); + if (!panel) + return; + void ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["delete"](panelName)); + void (panel["close"]()); + } + } while (false); + } + finally { } } - - // 关闭所有面板 public closeAllPanels(): void { - this.panels.forEach(panel => { - console.log("关闭页面", panel.node.name) - panel.close(); - }); - this.panels.clear(); + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const openedPanels = Array["from"]((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["values"]()); + void ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["clear"]()); + void (openedPanels["forEach"]((panel) => panel["close"]())); + } + } while (false); + } + finally { + } } -} \ No newline at end of file + private async createPanel(panelName: string): Promise { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const loadingPanel = PanelBase["LoadPanel"](`ui/${panelName}`, this["uiRoot"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["then"]((node) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const panel = node["getComponent"](PanelBase); + if (!panel) + throw new Error(`PanelBase missing from UI prefab: ${panelName}`); + void ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["set"](panelName, panel)); + return panel; + } + } while (false); + } + finally { + } + }); + void ((this["loadingPanels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["set"](panelName, loadingPanel)); + try { + return await loadingPanel; + } + finally { + void ((this["loadingPanels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["delete"](panelName)); + } + } + } while (false); + } + finally { + } + } +} diff --git a/assets/scripts/framework/ui/UISwitcher.ts b/assets/scripts/framework/ui/UISwitcher.ts index 85886b7..8e34cdf 100644 --- a/assets/scripts/framework/ui/UISwitcher.ts +++ b/assets/scripts/framework/ui/UISwitcher.ts @@ -1,62 +1,124 @@ -import { _decorator, Button, Component, Node, Sprite, SpriteFrame, Toggle } from 'cc'; -import { AudioMgr } from '../audio/AudioMgr'; -import { AssetController } from '../../AssetController'; +// @structural-rewrite-v1 +import { _decorator, Button, Component, Sprite, SpriteFrame } from 'cc'; +import { runPanelAction } from './PanelInteraction'; const { ccclass, property } = _decorator; - @ccclass('UISwitcher') export class UISwitcher extends Component { - toggle: Button - value: boolean - sprite: Sprite; - - @property({ type: SpriteFrame }) + @property({ "type": SpriteFrame }) onSelect: SpriteFrame = null; - - @property({ type: SpriteFrame }) + @property({ "type": SpriteFrame }) onNoSelect: SpriteFrame = null; - - + toggle: Button; + value: boolean; + sprite: Sprite; + onSwitchCallBack: (value: boolean) => void; protected onLoad(): void { - this.toggle = this.getComponent(Button) - this.sprite = this.getComponent(Sprite) - } - - start() { - - this.toggle.node.on(Button.EventType.CLICK, this.onClickToggleBtn, this); - } - - onSwitchCallBack - - addCallBack(callBack) { - this.onSwitchCallBack = callBack - } - - SetValue(v: boolean) { - this.value = v - this.switchSprite(this.value) - } - - switchSprite(v: boolean) { - if (v) { - this.sprite.spriteFrame = this.onSelect - } else { - this.sprite.spriteFrame = this.onNoSelect + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["toggle"] = this["getComponent"](Button)); + void (this["sprite"] = this["getComponent"](Sprite)); + } + } while (false); + } + finally { } } - - onClickToggleBtn() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - // AudioMgr.inst.playOneShot(AssetController.instance.buttonClip) - this.value = !this.value - - this.switchSprite(this.value) - - if (this.onSwitchCallBack != null) { - this.onSwitchCallBack(this.value) + protected start(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (((this["toggle"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["on"]((Button["EventType"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["CLICK"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickToggleBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this)); + } + } while (false); + } + finally { + } + } + protected onDestroy(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (((this["toggle"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)?.["node"])["off"]((Button["EventType"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["CLICK"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickToggleBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this)); + } + } while (false); + } + finally { + } + } + addCallBack(callBack: (value: boolean) => void): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["onSwitchCallBack"] = callBack); + } + } while (false); + } + finally { + } + } + SetValue(value: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["value"] = value); + void (this["switchSprite"](value)); + } + } while (false); + } + finally { + } + } + switchSprite(value: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((this["sprite"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["spriteFrame"] = [this["onNoSelect"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onSelect"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown][Number(value)]); + } + } while (false); + } + finally { + } + } + onClickToggleBtn(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["SetValue"](!(this["value"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))); + void (this["onSwitchCallBack"]?.(this["value"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { } } - } - - diff --git a/assets/scripts/ui/AddHeartPanel.ts b/assets/scripts/ui/AddHeartPanel.ts index abb8318..5878001 100644 --- a/assets/scripts/ui/AddHeartPanel.ts +++ b/assets/scripts/ui/AddHeartPanel.ts @@ -1,48 +1,86 @@ - -import { _decorator, Button, Component, Label, Node, Tween, tween, Vec3 } from 'cc'; +// @structural-rewrite-v1 +import { _decorator, Button } from 'cc'; import { LocalSaveMgr } from '../framework/data/LocalSaveMgr'; -import { UIManager } from '../framework/ui/UIManager'; -import { UISwitcher } from '../framework/ui/UISwitcher'; -import { AudioMgr } from '../framework/audio/AudioMgr'; import { PanelBase } from '../framework/ui/PanelBase'; -import { AssetController } from '../AssetController'; -import { GameController } from '../GameController'; -import { SdkMgr } from '../framework/sdk/SdkMgr'; - +import { connectPanelButtons, runPanelAction, runRewardedPanelAction } from '../framework/ui/PanelInteraction'; +import { UIManager } from '../framework/ui/UIManager'; const { ccclass, property } = _decorator; - @ccclass('AddHeartPanel') export class AddHeartPanel extends PanelBase { - static instance: AddHeartPanel; - - @property({ type: Button }) + @property({ "type": Button }) addPower: Button = null; - - @property({ type: Button }) + @property({ "type": Button }) closeBtn: Button = null; - - onLoad() { - AddHeartPanel.instance = this; - this.closeBtn.node.on(Button.EventType.CLICK, this.closeBtnCallBack, this); - this.addPower.node.on(Button.EventType.CLICK, this.addPowerCallBack, this); + protected onLoad(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (AddHeartPanel["instance"] = this); + void (connectPanelButtons(this, [ + [this["closeBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["closeBtnCallBack"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["addPower"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["addPowerCallBack"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + ])); + } + } while (false); + } + finally { + } } - - addPowerCallBack() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - SdkMgr.instance.requestReward(() => { - LocalSaveMgr.instance.adsAddPower() - UIManager.instance.closePanel(AddHeartPanel) - }) + addPowerCallBack(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runRewardedPanelAction(() => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["adsAddPower"]()); + void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closePanel"](AddHeartPanel)); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } } - - closeBtnCallBack(button: Button) { - AudioMgr.inst.playOneShot(AssetController.instance.click) - UIManager.instance.closePanel(AddHeartPanel) + closeBtnCallBack(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => (UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closePanel"](AddHeartPanel))); + } + } while (false); + } + finally { + } } - start() { - + protected start(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + } + } while (false); + } + finally { + } } } - - diff --git a/assets/scripts/ui/LoadingPanel.ts b/assets/scripts/ui/LoadingPanel.ts index 12ee2be..503064a 100644 --- a/assets/scripts/ui/LoadingPanel.ts +++ b/assets/scripts/ui/LoadingPanel.ts @@ -1,71 +1,158 @@ - -import { _decorator, Button, Component, Label, Node, Sprite, Tween, tween, Vec3 } from 'cc'; -import { LocalSaveMgr } from '../framework/data/LocalSaveMgr'; -import { UIManager } from '../framework/ui/UIManager'; -import { UISwitcher } from '../framework/ui/UISwitcher'; -import { AudioMgr } from '../framework/audio/AudioMgr'; +// @structural-rewrite-v1 +import { _decorator, Sprite } from 'cc'; import { PanelBase } from '../framework/ui/PanelBase'; -import { AssetController } from '../AssetController'; -import { GameController } from '../GameController'; - +import { UIManager } from '../framework/ui/UIManager'; const { ccclass, property } = _decorator; - @ccclass('LoadingPanel') export class LoadingPanel extends PanelBase { - static instance: LoadingPanel; - - @property({ type: Sprite }) + @property({ "type": Sprite }) loadingSprite: Sprite = null; - - @property - fillDuration: number = 5; // 填充持续时间,单位为秒 - - private fillAmount: number = 0; // 当前填充量 - - startFill() { - this.schedule(this.updateFill, 0.01); // 每0.01秒更新一次填充量 + fillDuration = 5; + loadingComplete = false; + completeCallback: () => void = null; + private fillAmount = 0; + protected onLoad(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (LoadingPanel["instance"] = this); + } + } while (false); + } + finally { + } } - protected onOpen(): void { - LoadingPanel.instance.startFill() - } - loadingComplete: boolean = false - completeCallback = null - onLoadingComplete(callBack) { - this.completeCallback = callBack - this.loadingComplete = true - if (this.fillAmount < 1) { - this.fillDuration = 1 - } else { - UIManager.instance.closePanel(LoadingPanel) - callBack() + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["startFill"]()); + } + } while (false); + } + finally { } } - protected onDestroy(): void { - this.unschedule(this.updateFill); - } - - updateFill() { - if (this.fillAmount < 1) { - this.fillAmount += 0.01 / this.fillDuration; // 根据持续时间逐步增加填充量 - this.loadingSprite.fillRange = this.fillAmount; // 更新 Sprite 的填充量 - } else { - this.unschedule(this.updateFill); // 填充完成后停止更新 - if (this.loadingComplete) { - UIManager.instance.closePanel(LoadingPanel) - this.completeCallback() - } + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["unschedule"](this["updateFill"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + } + } while (false); + } + finally { } } - - onLoad() { - LoadingPanel.instance = this; + startFill(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["schedule"](this["updateFill"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 0.01)); + } + } while (false); + } + finally { + } + } + onLoadingComplete(callBack: () => void): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["completeCallback"] = callBack); + void (this["loadingComplete"] = true); + void ((this["isFilled"]() + ? () => this["finishLoading"]() + : () => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["fillDuration"] = 1); + } + } while (false); + } + finally { + } + })()); + } + } while (false); + } + finally { + } + } + updateFill(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((this["isFilled"]() ? this["finishLoading"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown : this["advanceFill"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["call"](this)); + } + } while (false); + } + finally { + } + } + private advanceFill(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["fillAmount"] += 0.01 / (this["fillDuration"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void ((this["loadingSprite"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["fillRange"] = this["fillAmount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + } + } while (false); + } + finally { + } + } + private isFilled(): boolean { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: return this["fillAmount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown >= 1; + } + } while (false); + } + finally { + } + } + private finishLoading(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["unschedule"](this["updateFill"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + if (!(this["loadingComplete"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) + return; + const callback = this["completeCallback"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closePanel"](LoadingPanel)); + void (callback?.()); + } + } while (false); + } + finally { + } } - - } - - diff --git a/assets/scripts/ui/LosePanel.ts b/assets/scripts/ui/LosePanel.ts index abe9c1c..0b70d17 100644 --- a/assets/scripts/ui/LosePanel.ts +++ b/assets/scripts/ui/LosePanel.ts @@ -1,61 +1,106 @@ -import { _decorator, Button, Component, EventTouch, Input, input, instantiate, Label, Node, Prefab } from 'cc'; -import { PanelBase } from '../framework/ui/PanelBase'; -import { FPSCameraController } from '../FPSCameraController'; +// @structural-rewrite-v1 +import { _decorator, Button, Label } from 'cc'; import { GameController } from '../GameController'; -import { TargetIconItem } from './TargetIconItem'; -import { EventCenter } from '../EventCenter'; +import { PanelBase } from '../framework/ui/PanelBase'; +import { connectPanelButtons, runPanelAction, runRewardedPanelAction } from '../framework/ui/PanelInteraction'; import { UIManager } from '../framework/ui/UIManager'; -import { SdkMgr } from '../framework/sdk/SdkMgr'; -import { AudioMgr } from '../framework/audio/AudioMgr'; -import { AssetController } from '../AssetController'; const { ccclass, property } = _decorator; - @ccclass('LosePanel') export class LosePanel extends PanelBase { - - static instance: LosePanel = null - + static instance: LosePanel = null; @property(Button) closeBtn: Button = null; - @property(Button) replayBtn: Button = null; - @property(Button) addTimeBtn: Button = null; - @property(Label) remainLabel: Label = null; - - onLoad() { - LosePanel.instance = this - this.closeBtn.node.on(Button.EventType.CLICK, this.onClickClose, this); - this.replayBtn.node.on(Button.EventType.CLICK, this.onClickReplay, this); - this.addTimeBtn.node.on(Button.EventType.CLICK, this.onClickAddTime, this); + protected onLoad(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (LosePanel["instance"] = this); + void (connectPanelButtons(this, [ + [this["closeBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickClose"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["replayBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickReplay"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["addTimeBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickAddTime"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + ])); + } + } while (false); + } + finally { + } } - onClickClose() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - GameController.getInstance().backMain() - } - - onClickReplay() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - GameController.getInstance().gameRestart() - } - - onClickAddTime() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - SdkMgr.instance.requestReward(() => { - GameController.getInstance().curLevel.addTimer() - GameController.getInstance().curLevel.ContinueRun() - UIManager.instance.closePanel(LosePanel) - }) - } - protected onOpen(): void { - LosePanel.instance.remainLabel.string = "剩余: " + GameController.getInstance().curLevel.getAliveEnemeyCount().toString() + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((this["remainLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["string"] = `剩余: ${(GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getAliveEnemeyCount"]()}`); + } + } while (false); + } + finally { + } + } + onClickClose(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => GameController["getInstance"]()["backMain"]())); + } + } while (false); + } + finally { + } + } + onClickReplay(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => GameController["getInstance"]()["gameRestart"]())); + } + } while (false); + } + finally { + } + } + onClickAddTime(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runRewardedPanelAction(() => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const level = GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + void (level["addTimer"]()); + void (level["ContinueRun"]()); + void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closePanel"](LosePanel)); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } } - } - - diff --git a/assets/scripts/ui/MainPanel.ts b/assets/scripts/ui/MainPanel.ts index dd6282d..4cd6f2d 100644 --- a/assets/scripts/ui/MainPanel.ts +++ b/assets/scripts/ui/MainPanel.ts @@ -1,343 +1,511 @@ - -import { _decorator, Asset, Button, Component, debug, instantiate, Label, Node, Prefab, randomRange, Sprite, Tween, tween, Vec3 } from 'cc'; -import { LocalSaveMgr } from '../framework/data/LocalSaveMgr'; -import { UIManager } from '../framework/ui/UIManager'; -import { UISwitcher } from '../framework/ui/UISwitcher'; -import { AudioMgr } from '../framework/audio/AudioMgr'; -import { PanelBase } from '../framework/ui/PanelBase'; +// @structural-rewrite-v1 +import { _decorator, Button, instantiate, Label, Node, Prefab, Sprite, tween, Vec3 } from 'cc'; import { AssetController } from '../AssetController'; -import { GameController } from '../GameController'; import { DataMgr } from '../framework/data/DataMgr'; -import { Weapon } from '../data/ConfigData'; +import { LocalSaveMgr } from '../framework/data/LocalSaveMgr'; +import { PanelBase } from '../framework/ui/PanelBase'; +import { connectPanelButtons, playPanelClick, runPanelAction, runRewardedPanelAction } from '../framework/ui/PanelInteraction'; +import { UIManager } from '../framework/ui/UIManager'; +import { RewardFlight } from '../framework/ui/RewardFlight'; +import { AudioMgr } from '../framework/audio/AudioMgr'; import { AddHeartPanel } from './AddHeartPanel'; -import { SdkMgr } from '../framework/sdk/SdkMgr'; +import { GameController } from '../GameController'; +import { Weapon } from '../data/ConfigData'; import { EventCenter } from '../EventCenter'; - const { ccclass, property } = _decorator; - @ccclass('MainPanel') export class MainPanel extends PanelBase { - static instance: MainPanel; - - @property({ type: Button }) + @property({ "type": Button }) startBtn: Button = null; - - @property({ type: Button }) + @property({ "type": Button }) leftBtn: Button = null; - - @property({ type: Button }) + @property({ "type": Button }) right: Button = null; - - @property({ type: Button }) + @property({ "type": Button }) equip: Button = null; - - @property({ type: Button }) + @property({ "type": Button }) clear: Button = null; - - @property({ type: Button }) + @property({ "type": Button }) addMoneyBtn: Button = null; - - @property({ type: Button }) + @property({ "type": Button }) buy: Button = null; - - @property({ type: Node }) + @property({ "type": Node }) equiped: Node = null; - - @property({ type: Label }) + @property({ "type": Label }) weaponName: Label = null; - - @property({ type: Label }) + @property({ "type": Label }) gunPrice: Label = null; - - @property({ type: Label }) + @property({ "type": Label }) heart: Label = null; - - @property({ type: Label }) + @property({ "type": Label }) heartTimer: Label = null; - - @property({ type: Label }) + @property({ "type": Label }) coin: Label = null; - - @property({ type: Button }) + @property({ "type": Button }) addHeartBtn: Button = null; - - @property({ type: Prefab }) + @property({ "type": Prefab }) weaponSelectPrefab: Prefab = null; - @property(Prefab) flyMoneyPrefab: Prefab = null; - @property(Node) flyMoneyContent: Node = null; - @property(Node) fingerNode: Node = null; - - weaponDatas: Array = [] - - private weaponOffset: number = 1000 - private curSelectIndex: number = 0 - - @property({ type: Node }) + @property({ "type": Node }) weaponContent: Node = null; - + weaponDatas: Weapon[] = []; + private weaponOffset = 1000; + private curSelectIndex = 0; + protected onLoad(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (MainPanel["instance"] = this); + void (this["bindButtons"]()); + void ((EventCenter["coinCountChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["on"]('coinCountChange', this["onCoinCountChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this)); + } + } while (false); + } + finally { + } + } protected onOpen(): void { - MainPanel.instance.refresh() - } - - refresh() { - var weapons = DataMgr.getInstance().GetDatas(Weapon) - this.weaponDatas = weapons - let equipedIndex: number = 0 - for (let index = 0; index < weapons.length; index++) { - let data = weapons[index] - var item = instantiate(this.weaponSelectPrefab) - item.setParent(this.weaponContent) - let sprite = item.getChildByPath("Sprite").getComponent(Sprite) - AssetController.instance.loadSetSprite(`weaponSprite/${data.spriteName}`, sprite); - item.getChildByPath("Label").getComponent(Label).string = data.gunName - if (data.id == LocalSaveMgr.instance.playerData.equipedWeapon) { - equipedIndex = index - } - } - - this.fingerNode.active = !LocalSaveMgr.instance.playerData.haveTutorial - - - - this.heart.string = LocalSaveMgr.instance.playerData.power.toString() - this.coin.string = LocalSaveMgr.instance.playerData.coin.toString() - this.setToIndex(equipedIndex, false) - } - - protected update(dt: number): void { - if (LocalSaveMgr.instance.playerData.isOnTimerRun) { - const totalSeconds = Math.max(0, Math.ceil(LocalSaveMgr.instance.getPowerCD())) - let minutes = Math.floor(totalSeconds / 60); - let seconds = totalSeconds % 60; - - // 将分钟和秒格式化为两位数 - let formattedMinutes = minutes < 10 ? `0${minutes}` : `${minutes}`; - let formattedSeconds = seconds < 10 ? `0${seconds}` : `${seconds}`; - - // 组合成 00:00 的格式 - let formattedTime = `${formattedMinutes}:${formattedSeconds}`; - this.heartTimer.string = formattedTime - - } else { - this.heartTimer.string = "已满" - } - this.heart.string = LocalSaveMgr.instance.playerData.power.toString() - } - - setToIndex(index: number, widthAim: boolean) { - this.curSelectIndex = index - if (!widthAim) { - this.weaponContent.setPosition(-this.weaponOffset * index, 0, 0) - } else { - let newPos = new Vec3(-this.weaponOffset * index, 0, 0) - tween(this.weaponContent) - .to(0.3, { position: newPos }) - .start() - } - - this.refreshToIndex() - } - - refreshToIndex() { - let ownedWeapons = LocalSaveMgr.instance.playerData.ownWeapon - let owned: boolean = false - for (let index = 0; index < ownedWeapons.length; index++) { - let element = ownedWeapons[index]; - console.log("刷新", this.weaponDatas[this.curSelectIndex].id, element, ownedWeapons.length, index) - if (element == this.weaponDatas[this.curSelectIndex].id) { - owned = true - break - } - } - - let equiped: boolean = LocalSaveMgr.instance.playerData.equipedWeapon == this.weaponDatas[this.curSelectIndex].id - // this.weaponName.string = this.weaponDatas[this.curSelectIndex].gunName - this.gunPrice.string = this.weaponDatas[this.curSelectIndex].coin.toString() - this.equiped.active = false - this.buy.node.active = false - this.equip.node.active = false - - if (equiped) { - this.equiped.active = true - } else if (owned) { - this.equip.node.active = true - } else { - this.buy.node.active = true - - if (LocalSaveMgr.instance.playerData.coin >= this.weaponDatas[this.curSelectIndex].coin) { - this.buy.interactable = true; - this.buy.getComponent(Sprite).grayscale = false - } else { - this.buy.interactable = false; - this.buy.getComponent(Sprite).grayscale = true - } - } - - if (this.curSelectIndex == 0) { - this.leftBtn.node.active = false - } else { - this.leftBtn.node.active = true - } - - if (this.curSelectIndex == this.weaponDatas.length - 1) { - this.right.node.active = false - } else { - this.right.node.active = true - } - - } - - clickLeft() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - if (this.curSelectIndex > 0) { - this.setToIndex(this.curSelectIndex - 1, true) - } - } - - clickRight() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - if (this.curSelectIndex < this.weaponDatas.length - 1) { - this.setToIndex(this.curSelectIndex + 1, true) - } - } - - - clickEquipBtn() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - LocalSaveMgr.instance.equipWeapon(this.weaponDatas[this.curSelectIndex].id) - this.refreshToIndex() - } - - clickBuyBtn() { - LocalSaveMgr.instance.addCoin(-this.weaponDatas[this.curSelectIndex].coin) - AudioMgr.inst.playOneShot(AssetController.instance.click) - LocalSaveMgr.instance.buyWeapon(this.weaponDatas[this.curSelectIndex].id) - this.refreshToIndex() - } - - clickClear() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - LocalSaveMgr.instance.clearData() - } - - clickAddHeartBtn() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - UIManager.instance.openPanel(AddHeartPanel) - } - - clickAddMoneyBtn() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - SdkMgr.instance.requestReward(() => { - - let addPoint = 200 - let fromeMoney = LocalSaveMgr.instance.playerData.coin - LocalSaveMgr.instance.addCoin(addPoint) - let endMoney = LocalSaveMgr.instance.playerData.coin - this.flyMoney(fromeMoney, endMoney) - }) - } - - flyRewardMoney(fromMoney: number, endMoney: number) { - AudioMgr.inst.playOneShot(AssetController.instance.getCoin) - for (let index = 0; index < 10; index++) { - let item = instantiate(this.flyMoneyPrefab) - item.setParent(this.flyMoneyContent) - item.setPosition(new Vec3(0, 0, 0)) - let delay = index * 0.1 - - tween(item) - .by(0.3, { position: new Vec3(randomRange(-150, 150), randomRange(-150, 150), 0) }) - .delay(delay) - .to(0.6, { worldPosition: this.coin.node.getWorldPosition() }) - .call(() => { - item.destroy() - }) - .start() - } - - new Tween({ value: fromMoney }) - .delay(0.9) - .to(1, { value: endMoney }, { - onUpdate: (target, ratio) => { - // 在每一帧更新时调用 - let currentValue = Math.floor(target.value); - if (this.coin != null) - this.coin.string = currentValue.toString(); + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["refresh"]()); } - }).call(() => { - if (this.addMoneyBtn != null) - this.addMoneyBtn.interactable = true - }) - .start(); - } - - flyMoney(fromMoney: number, endMoney: number) { - this.addMoneyBtn.interactable = false - AudioMgr.inst.playOneShot(AssetController.instance.getCoin) - for (let index = 0; index < 10; index++) { - let item = instantiate(this.flyMoneyPrefab) - item.setParent(this.flyMoneyContent) - item.setPosition(this.addMoneyBtn.node.getPosition()) - let delay = index * 0.1 - - tween(item) - .by(0.3, { position: new Vec3(randomRange(-150, 150), randomRange(-150, 150), 0) }) - .delay(delay) - .to(0.6, { worldPosition: this.coin.node.getWorldPosition() }) - .call(() => { - item.destroy() - }) - .start() + } while (false); } - - new Tween({ value: fromMoney }) - .delay(0.9) - .to(1, { value: endMoney }, { - onUpdate: (target, ratio) => { - // 在每一帧更新时调用 - let currentValue = Math.floor(target.value); - if (this.coin != null) - this.coin.string = currentValue.toString(); + finally { + } + } + refresh(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["weaponDatas"] = DataMgr["getInstance"]()["GetDatas"](Weapon)); + void (this["rebuildWeaponList"]()); + void ((this["fingerNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = !(((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["haveTutorial"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["refreshCurrency"]()); + void (this["setToIndex"](this["findEquippedWeaponIndex"](), false)); } - }).call(() => { - if (this.addMoneyBtn != null) - this.addMoneyBtn.interactable = true - }) - .start(); + } while (false); + } + finally { + } } - - onCoinCountChange() { - MainPanel.instance.coin.string = LocalSaveMgr.instance.playerData.coin.toString() - MainPanel.instance.refreshToIndex() + protected update(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const playerData = (LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + void (this["setLabelStrings"]([ + [this["heart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, playerData["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["heartTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, playerData["isOnTimerRun"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown ? this["formatTime"](Math["max"](0, Math["ceil"]((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getPowerCD"]()))) + : '已满'], + ])); + } + } while (false); + } + finally { + } + } + setToIndex(index: number, widthAim: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["curSelectIndex"] = index); + const position = new Vec3(-(this["weaponOffset"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) * index, 0, 0); + if (widthAim) { + void (tween(this["weaponContent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["to"](0.3, { position })["start"]()); + } + else { + void ((this["weaponContent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setPosition"](position)); + } + void (this["refreshToIndex"]()); + } + } while (false); + } + finally { + } + } + refreshToIndex(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const selectedWeapon = (this["weaponDatas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown]; + if (!selectedWeapon) + return; + const playerData = (LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + const isOwned = (playerData["ownWeapon"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["indexOf"](selectedWeapon["id"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) >= 0; + const isEquipped = playerData["equipedWeapon"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === selectedWeapon["id"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + const canBuy = playerData["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown >= (selectedWeapon["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void ((this["gunPrice"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["string"] = (selectedWeapon["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["toString"]()); + void (this["setNodesActive"]([ + [this["equiped"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, isEquipped], + [(this["equip"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, !isEquipped && isOwned], + [(this["buy"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, !isEquipped && !isOwned], + [(this["leftBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown > 0], + [(this["right"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown < ((this["weaponDatas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - 1], + ])); + void ((this["buy"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["interactable"] = canBuy); + void ((this["buy"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](Sprite)["grayscale"] = !canBuy); + } + } while (false); + } + finally { + } + } + clickLeft(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: if (this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown > 0) + void (this["setToIndex"]((this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - 1, true)); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + } + clickRight(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: if (this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown < ((this["weaponDatas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - 1) + void (this["setToIndex"]((this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + 1, true)); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + } + clickEquipBtn(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["equipWeapon"]((this["weaponDatas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown]["id"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["refreshToIndex"]()); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + } + clickBuyBtn(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const selectedWeapon = (this["weaponDatas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown]; + void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addCoin"](-(selectedWeapon["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))); + void (playPanelClick()); + void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["buyWeapon"](selectedWeapon["id"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["refreshToIndex"]()); + } + } while (false); + } + finally { + } + } + clickClear(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => (LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["clearData"]())); + } + } while (false); + } + finally { + } + } + clickAddHeartBtn(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => (UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](AddHeartPanel))); + } + } while (false); + } + finally { + } + } + clickAddMoneyBtn(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runRewardedPanelAction(() => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const fromMoney = ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addCoin"](200)); + void (this["flyMoney"](fromMoney, ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + } + flyRewardMoney(fromMoney: number, endMoney: number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["playCoinReward"](new Vec3(), fromMoney, endMoney, true)); + } + } while (false); + } + finally { + } + } + flyMoney(fromMoney: number, endMoney: number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((this["addMoneyBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["interactable"] = false); + void (this["playCoinReward"](((this["addMoneyBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getPosition"](), fromMoney, endMoney, true)); + } + } while (false); + } + finally { + } + } + onCoinCountChange(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["refreshCurrency"]()); + void (this["refreshToIndex"]()); + } + } while (false); + } + finally { + } + } + startBtnCallBack(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (GameController["getInstance"]()["gameStart"]()); + } + } while (false); + } + finally { + } } - protected onDestroy(): void { - EventCenter.coinCountChange.off("coinCountChange", this.onCoinCountChange) + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((EventCenter["coinCountChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["off"]('coinCountChange', this["onCoinCountChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this)); + } + } while (false); + } + finally { + } } - - onLoad() { - MainPanel.instance = this; - this.startBtn.node.on(Button.EventType.CLICK, this.startBtnCallBack, this); - this.leftBtn.node.on(Button.EventType.CLICK, this.clickLeft, this); - this.right.node.on(Button.EventType.CLICK, this.clickRight, this); - this.equip.node.on(Button.EventType.CLICK, this.clickEquipBtn, this); - this.buy.node.on(Button.EventType.CLICK, this.clickBuyBtn, this); - this.clear.node.on(Button.EventType.CLICK, this.clickClear, this); - this.addHeartBtn.node.on(Button.EventType.CLICK, this.clickAddHeartBtn, this); - this.addMoneyBtn.node.on(Button.EventType.CLICK, this.clickAddMoneyBtn, this); - EventCenter.coinCountChange.on("coinCountChange", this.onCoinCountChange).bind(this) + private bindButtons(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (connectPanelButtons(this, [ + [this["startBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["startBtnCallBack"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["leftBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["clickLeft"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["right"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["clickRight"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["equip"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["clickEquipBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["buy"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["clickBuyBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["clear"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["clickClear"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["addHeartBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["clickAddHeartBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["addMoneyBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["clickAddMoneyBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + ])); + } + } while (false); + } + finally { + } } - - startBtnCallBack() { - GameController.getInstance().gameStart() + private rebuildWeaponList(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((this["weaponContent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["destroyAllChildren"]()); + void ((this["weaponDatas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((weapon) => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const item = instantiate(this["weaponSelectPrefab"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (item["parent"] = this["weaponContent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void ((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["loadSetSprite"](`weaponSprite/${weapon["spriteName"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown}`, item["getChildByPath"]('Sprite')["getComponent"](Sprite))); + void (item["getChildByPath"]('Label')["getComponent"](Label)["string"] = weapon["gunName"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + } + private findEquippedWeaponIndex(): number { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const equippedWeapon = ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["equipedWeapon"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + return Math["max"](0, (this["weaponDatas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["findIndex"]((weapon) => weapon["id"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === equippedWeapon)); + } + } while (false); + } + finally { + } + } + private refreshCurrency(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["setLabelStrings"]([ + [this["heart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + ])); + } + } while (false); + } + finally { + } + } + private playCoinReward(startPosition: Vec3, fromMoney: number, endMoney: number, unlockButton: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (RewardFlight["launch"](this["flyMoneyPrefab"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["flyMoneyContent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, startPosition, (this["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (RewardFlight["count"](fromMoney, endMoney, (value) => (this["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["string"] = value["toString"](), () => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: if (unlockButton && this["addMoneyBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + void ((this["addMoneyBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["interactable"] = true); + } + } while (false); + } + finally { + } + }, 0.9)); + } + } while (false); + } + finally { + } } } - - diff --git a/assets/scripts/ui/PlayPanel.ts b/assets/scripts/ui/PlayPanel.ts index 154da9d..d1135d6 100644 --- a/assets/scripts/ui/PlayPanel.ts +++ b/assets/scripts/ui/PlayPanel.ts @@ -1,501 +1,906 @@ -import { _decorator, animation, Animation, AnimationComponent, Button, Color, Component, EventTouch, HorizontalTextAlignment, Input, input, instantiate, Label, math, Node, Prefab, randomRange, randomRangeInt, screen, Screen, tween, UITransform, Vec2, Vec3, VerticalTextAlignment, view } from 'cc'; -import { PanelBase } from '../framework/ui/PanelBase'; +// @structural-rewrite-v1 +import { _decorator, Animation, AnimationComponent, Button, Color, EventTouch, HorizontalTextAlignment, instantiate, Label, Node, Prefab, randomRange, randomRangeInt, tween, UITransform, Vec2, Vec3, VerticalTextAlignment } from 'cc'; +import { Ragdoll } from '../../Ragdoll/Ragdoll'; +import { AssetController } from '../AssetController'; +import { EventCenter } from '../EventCenter'; +import { LevelState } from '../EnumFile'; import { FPSCameraController } from '../FPSCameraController'; import { GameController } from '../GameController'; -import { TargetIconItem } from './TargetIconItem'; -import { EventCenter } from '../EventCenter'; +import { AudioMgr } from '../framework/audio/AudioMgr'; +import { LocalSaveMgr } from '../framework/data/LocalSaveMgr'; +import { PanelBase } from '../framework/ui/PanelBase'; +import { connectPanelButtons, runPanelAction, runRewardedPanelAction } from '../framework/ui/PanelInteraction'; import { UIManager } from '../framework/ui/UIManager'; import { QingBaoPanel } from './QingBaoPanel'; import { SettingPanel } from './SettingPanel'; -import { SdkMgr } from '../framework/sdk/SdkMgr'; -import { AudioMgr } from '../framework/audio/AudioMgr'; -import { AssetController } from '../AssetController'; -import { Ragdoll } from '../../Ragdoll/Ragdoll'; -import { LocalSaveMgr } from '../framework/data/LocalSaveMgr'; -import { LevelState } from '../EnumFile'; +import { TargetIconItem } from './TargetIconItem'; +import { CombatHudAction, CombatHudModel, CombatHudSnapshot } from '../domain/CombatHudModel'; const { ccclass, property } = _decorator; - +const tutorialLayouts = [ + ['点击开火按钮', [[0, false], [1, false], [2, false], [3, true], [4, true]]], + ['点击瞄准按钮', [[0, true], [1, true], [3, false], [2, true]]], + ['滑动屏幕,瞄准目标', [[1, false], [3, true], [5, false], [4, false]]], + ['点击开火按钮', [[5, true], [1, true], [3, false], [4, false]]], +] as const; @ccclass('PlayPanel') export class PlayPanel extends PanelBase { - - static instance: PlayPanel = null - + static instance: PlayPanel = null; @property(Node) - moveNode: Node = null; // 相机节点 - + moveNode: Node = null; @property(Node) - saoMiaoTip: Node = null; // 相机节点 - + saoMiaoTip: Node = null; @property(Node) aimContent: Node = null; - @property(Node) closeAim: Node = null; - @property(Node) cancelLabel: Node = null; - @property(Prefab) targetIconPrefab: Prefab = null; - @property(Node) targetIconParent: Node = null; - @property(Button) anim: Button = null; - @property(Button) qingBao: Button = null; - - @property(Label) timerLabel: Label = null; - @property(Button) saoMiao: Button = null; - @property(Button) setting: Button = null; - @property(Label) levelIndexLabel: Label = null; - - @property(Button) fire: Button = null; - @property(Node) finger: Node = null; - @property(Node) qingBaoResultNode: Node = null; - @property(Button) qingBaoResultBtn: Button = null; - @property(AnimationComponent) alienAnim: AnimationComponent = null; - @property(Label) tutorialLabel: Label = null; - @property(Node) tutorialLabelNode: Node = null; - @property(Node) targetNode: Node = null; - - @property(Node) tipNode1: Node = null; @property(Node) tipNode2: Node = null; @property(Node) tipNode3: Node = null; - @property([Animation]) shootAnimations: Animation[] = []; - - - targetIcons: Array = []; - - onLoad() { - PlayPanel.instance = this - - // Register the touch start event - this.moveNode.on(Node.EventType.TOUCH_START, this.onTouchStart, this); - this.moveNode.on(Node.EventType.TOUCH_MOVE, this.onTouchMove, this); - this.moveNode.on(Node.EventType.TOUCH_END, this.onTouchEnd, this); - - this.anim.node.on(Button.EventType.CLICK, this.onClickAim, this); - this.fire.node.on(Button.EventType.CLICK, this.onClickFire, this); - this.qingBao.node.on(Button.EventType.CLICK, this.onClickQingBao, this); - this.qingBaoResultBtn.node.on(Button.EventType.CLICK, this.onClickQingBaoResult, this); - this.saoMiao.node.on(Button.EventType.CLICK, this.onClickSaoMiao, this); - this.setting.node.on(Button.EventType.CLICK, this.onClickSetting, this); - this.createDeveloperButtons() - EventCenter.onEnemyDie.on(null, this.refreshTargetCount).bind(this) - - - } - - /** 为测试关卡提供快捷操作,仅显示文字,避免与正式功能图标混淆。 */ - private createDeveloperButtons() { - this.createDeveloperButton('DEV_KillEnemies', '开发:杀死敌人', new Vec3(350, 830, 0), this.onClickDevKillEnemies) - this.createDeveloperButton('DEV_CompleteLevel', '开发:完成过关', new Vec3(350, 760, 0), this.onClickDevCompleteLevel) - } - - private createDeveloperButton(name: string, text: string, position: Vec3, callback: () => void) { - const buttonNode = new Node(name) - buttonNode.name = name - buttonNode.layer = this.setting.node.layer - buttonNode.setParent(this.setting.node.parent) - buttonNode.setPosition(position) - buttonNode.addComponent(UITransform).setContentSize(220, 60) - const button = buttonNode.addComponent(Button) - - const labelNode = new Node('Label') - labelNode.layer = buttonNode.layer - labelNode.setParent(buttonNode) - labelNode.addComponent(UITransform).setContentSize(220, 60) - const label = labelNode.addComponent(Label) - label.string = text - label.fontSize = 24 - label.lineHeight = 32 - label.color = new Color(255, 220, 90, 255) - label.horizontalAlign = HorizontalTextAlignment.CENTER - label.verticalAlign = VerticalTextAlignment.CENTER - - button.node.on(Button.EventType.CLICK, callback, this) - } - - private onClickDevKillEnemies() { - const level = GameController.getInstance().curLevel - if (level.levelState !== LevelState.Running) return - - AudioMgr.inst.playOneShot(AssetController.instance.click) - for (const enemy of level.enemies) { - if (!enemy.isDie) { - enemy.setEnabled(true) - } - } - } - - private onClickDevCompleteLevel() { - const level = GameController.getInstance().curLevel - if (level.levelState !== LevelState.Running) return - - AudioMgr.inst.playOneShot(AssetController.instance.click) - level.win() - } - - onClickSetting() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - UIManager.instance.openPanel(SettingPanel) - } - - showTimer() { - let totalSeconds = GameController.getInstance().curLevel.timer - totalSeconds = Math.ceil(totalSeconds); - let minutes = Math.floor(totalSeconds / 60); - let seconds = totalSeconds % 60; - - // 将分钟和秒格式化为两位数 - let formattedMinutes = minutes < 10 ? `0${minutes}` : `${minutes}`; - let formattedSeconds = seconds < 10 ? `0${seconds}` : `${seconds}`; - - // 组合成 00:00 的格式 - let formattedTime = `${formattedMinutes}:${formattedSeconds}`; - this.timerLabel.string = formattedTime - } - - onClickQingBao() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - SdkMgr.instance.requestReward(() => { - - UIManager.instance.openPanel(QingBaoPanel) - this.closeTip() - this.qingBaoResultNode.active = true - this.qingBao.node.active = false - }) - } - - - onClickQingBaoResult() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - UIManager.instance.openPanel(QingBaoPanel) - this.closeTip() - } - - - isOpenSaomiao: boolean = false - offset: Vec2 - - onClickSaoMiao() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - SdkMgr.instance.requestReward(() => { - this.saoMiaoTip.active = true - GameController.getInstance().curLevel.SetSaoMiaoTarget() - this.offset = new Vec2(randomRange(-200, 200), randomRange(-200, 200)) - this.updateSaomiao() - this.isOpenSaomiao = true - this.closeTip() - }) - } - + targetIcons: TargetIconItem[] = []; + isOpenSaomiao = false; + offset: Vec2; tipTimer = 0; - onTip: boolean = false - - protected update(dt: number): void { - this.showTimer() - - if (!this.onStep && !this.onTip) - this.tipTimer += dt - - - if (!this.onTip && this.tipTimer > 30) { - - this.startTip() - } - } - - startTip() { - - this.onTip = true - AudioMgr.inst.playOneShot(AssetController.instance.xiao) - this.tipTimer = 0 - this.tipNode1.active = true - this.tipNode2.active = true - this.tipNode3.active = true - - this.alienAnim.play() - } - - closeTip() { - this.onTip = false - this.tipTimer = 0 - this.tipNode1.active = false - this.tipNode2.active = false - this.tipNode3.active = false - } - - updateTargetPos() { - let target = this.tutorialTarget - if (!target) return; - if (target.isDie) { - this.saoMiaoTip.active = false - this.isOpenSaomiao = false - } - // 获取 3D 物体的世界坐标 - let worldPos = target.centerNode.getWorldPosition(); - // 获取主摄像机 - let camera = FPSCameraController.getInstance().camera; - - // 将世界坐标转换为屏幕坐标 - let uiPos = camera.convertToUINode(worldPos, this.node); - // 设置 UI 节点的位置 - this.targetNode.position = uiPos; - - if (this.targetNode.position.y < 0 && Math.abs(this.targetNode.position.x) < 30) { - this.EnterStep3() - FPSCameraController.getInstance().setTutorialRotate() - } - - } - - protected lateUpdate(dt: number): void { - this.updateSaomiao() - this.updateTargetPos() - // this.updateQingBao() - - } - - - // updateQingBao() { - // if (this.qingBaoResultNode.active) { - // if (!GameController.getInstance().curLevel.haveQingBaoTarget()) { - // this.switchAim(this.isOnAim) - // } - // } - // } - - updateSaomiao() { - let target = GameController.getInstance().curLevel.saoMiaoTarget - if (!target) return; - if (target.isDie) { - this.saoMiaoTip.active = false - this.isOpenSaomiao = false - } - if (!this.isOpenSaomiao) return - // 获取 3D 物体的世界坐标 - let worldPos = target.centerNode.getWorldPosition(); - - // 获取主摄像机 - let camera = FPSCameraController.getInstance().camera; - - // 将世界坐标转换为屏幕坐标 - let uiPos = camera.convertToUINode(worldPos, this.node); - // 设置 UI 节点的位置 - // console.log(uiPos) - uiPos = new Vec3(uiPos.x + this.offset.x, uiPos.y + this.offset.y, 0) - this.saoMiaoTip.position = uiPos; - } - tutorialTarget: Ragdoll - - protected onOpen(): void { - PlayPanel.instance.switchAim(false) - PlayPanel.instance.initEnemies() - - this.levelIndexLabel.string = `关卡 ${GameController.getInstance().curLevel.levelIndex}` - if (GameController.getInstance().curLevel.levelIndex == 1 && !LocalSaveMgr.instance.playerData.haveTutorial) { - this.onStep = true - } - - if (this.onStep) { - this.EnterStep1() - this.tutorialTarget = GameController.getInstance().curLevel.getTutorialAliveEnemey() - console.log("Player panel", this.tutorialTarget) - } else { - this.targetNode.active = false - this.finger.active = false - this.tutorialLabelNode.active = false - } - this.qingBaoResultNode.active = false - } - - isOnAim: boolean = false - switchAim(onAim: boolean) { - this.anim.node.active = !onAim - this.fire.node.active = onAim - this.isOnAim = onAim - this.cancelLabel.active = onAim - this.qingBao.node.active = !onAim && !GameController.getInstance().curLevel.haveQingBaoTarget() - this.qingBaoResultNode.active = !onAim && GameController.getInstance().curLevel.haveQingBaoTarget() - this.saoMiao.node.active = !onAim - this.aimContent.active = onAim - this.closeAim.active = !onAim - GameController.getInstance().curLevel.gunNode.active = !onAim - } - - - refreshTargetCount() { - let self = PlayPanel.instance - let aliveCount = GameController.getInstance().curLevel.aliveCount - for (let index = 0; index < self.targetIcons.length; index++) { - if (index < aliveCount) { - self.targetIcons[index].switchActive(true) - } else { - self.targetIcons[index].switchActive(false) - } - } - } - - initEnemies() { - let count = GameController.getInstance().curLevel.enemies.length - console.log("目标外星人个数", count) - - for (let index = 0; index < count; index++) { - var item = instantiate(this.targetIconPrefab) - item.parent = this.targetIconParent - let iconItem = item.getComponent(TargetIconItem) - this.targetIcons.push(iconItem) - iconItem.switchActive(true) - } - } - - onClickAim() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - FPSCameraController.getInstance().onAimButtonClick(true) - this.switchAim(true) - - if (this.onStep) { - this.EnterStep2() - } - } - - limitFire: boolean = false - - onClickFire() { - if (this.limitFire) return - - if (this.onStep) { - this.finishTutorial() - } - - this.closeTip() - - AudioMgr.inst.playOneShot(AssetController.instance.fire) - let result = FPSCameraController.getInstance().shoot() - if (result) { - let effect = this.shootAnimations[randomRangeInt(0, this.shootAnimations.length)] - effect.node.active = true - effect.play() - this.scheduleOnce(() => { - effect.node.active = false - }, 0.8) - } - let self = this - self.limitFire = true - tween(this.aimContent) - .to(0.05, { scale: new Vec3(1, 1, 1), position: new Vec3(0, 120, 0) }) - .to(0.05, { scale: new Vec3(0.8, 0.8, 1), position: new Vec3(0, 0, 0) }) - .call(() => { - self.limitFire = false - }) - .start() - } - - downTime: Date - startTouchPos: Vec2 = null - onTouchStart(event: EventTouch) { - FPSCameraController.getInstance().onTouchStart(event) - this.downTime = new Date(); - this.startTouchPos = event.getLocation() - } - - onTouchMove(event: EventTouch) { - FPSCameraController.getInstance().onTouchMove(event) - } - - onTouchEnd(event: EventTouch) { - if (this.isOnAim) { - let now = new Date(); - var offset = now.getTime() - this.downTime.getTime() - let moveDetal = Math.abs(this.startTouchPos.x - event.getLocation().x) + Math.abs(this.startTouchPos.y - event.getLocation().y) - // console.log("offset", offset, moveDetal) - - if (!this.onStep) - if (offset < 200 && moveDetal < 20) { - FPSCameraController.getInstance().onAimButtonClick(false) - this.switchAim(false) + onTip = false; + tutorialTarget: Ragdoll; + isOnAim = false; + limitFire = false; + downTime: Date; + startTouchPos: Vec2 = null; + onStep = false; + private readonly hud = new CombatHudModel(); + protected onLoad(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (PlayPanel["instance"] = this); + void (this["bindInput"]()); + void (this["bindButtons"]()); + void (this["createDeveloperButtons"]()); + void ((EventCenter["onEnemyDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["on"](null, this["refreshTargetCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this)); } + } while (false); + } + finally { } } - - - EnterStep1() { - this.targetNode.active = true - this.finger.active = true - this.tutorialLabel.string = "点击瞄准按钮" - this.moveNode.active = false - this.tutorialLabelNode.active = true + protected onOpen(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["resetPanelState"]()); + void (this["initEnemies"]()); + void ((this["levelIndexLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["string"] = `关卡 ${(GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["levelIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown}`); + void (this["beginTutorialIfNeeded"]()); + } + } while (false); + } + finally { + } } - onStep: boolean = false - EnterStep2() { - this.finger.active = false - this.tutorialLabel.string = "滑动屏幕,瞄准目标" - this.moveNode.active = true - this.fire.node.active = false - this.cancelLabel.active = false + protected update(dt: number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["showTimer"]()); + void (this["updateTipTimer"](dt)); + } + } while (false); + } + finally { + } } - - EnterStep3() { - this.fire.node.active = true - this.finger.active = true - this.tutorialLabel.string = "点击开火按钮" - this.moveNode.active = false - this.cancelLabel.active = false + protected lateUpdate(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["updateSaomiao"]()); + void (this["updateTargetPos"]()); + } + } while (false); + } + finally { + } } - - - finishTutorial() { - this.targetNode.active = false - this.finger.active = false - this.tutorialLabelNode.active = false - this.tutorialLabel.string = "点击开火按钮" - this.moveNode.active = true - this.onStep = false - this.tutorialTarget = null - LocalSaveMgr.instance.completeTutorial() - this.cancelLabel.active = true + onClickSetting(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => (UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](SettingPanel))); + } + } while (false); + } + finally { + } + } + showTimer(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((this["timerLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["string"] = this["formatTime"](Math["ceil"]((GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["timer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))); + } + } while (false); + } + finally { + } + } + onClickQingBao(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runRewardedPanelAction(() => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](QingBaoPanel)); + void (this["closeTip"]()); + void ((this["qingBaoResultNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = true); + void (((this["qingBao"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = false); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + } + onClickQingBaoResult(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](QingBaoPanel)); + void (this["closeTip"]()); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + } + onClickSaoMiao(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runRewardedPanelAction(() => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((this["saoMiaoTip"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = true); + void ((GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["SetSaoMiaoTarget"]()); + void (this["offset"] = new Vec2(randomRange(-200, 200), randomRange(-200, 200))); + void (this["updateSaomiao"]()); + void (this["dispatchHud"]({ "kind": 'scan', "open": true })); + void (this["closeTip"]()); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + } + startTip(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["dispatchHud"]({ "kind": 'tip', "open": true })); + void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["xiao"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["setTipNodesActive"](true)); + void ((this["alienAnim"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["play"]()); + } + } while (false); + } + finally { + } + } + closeTip(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["dispatchHud"]({ "kind": 'tip', "open": false })); + void (this["setTipNodesActive"](false)); + } + } while (false); + } + finally { + } + } + updateTargetPos(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const target = this["tutorialTarget"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + if (!target) + return; + void (this["handleTrackedTargetDeath"](target)); + void ((this["targetNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["position"] = (FPSCameraController["getInstance"]()["camera"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["convertToUINode"]((target["centerNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getWorldPosition"](), this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + if (((this["targetNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["position"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown < 0 && Math["abs"](((this["targetNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["position"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) < 30) { + void (this["EnterStep3"]()); + void (FPSCameraController["getInstance"]()["setTutorialRotate"]()); + } + } + } while (false); + } + finally { + } + } + updateSaomiao(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const target = (GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["saoMiaoTarget"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + if (!target) + return; + void (this["handleTrackedTargetDeath"](target)); + if (!(this["isOpenSaomiao"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) + return; + const position = (FPSCameraController["getInstance"]()["camera"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["convertToUINode"]((target["centerNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getWorldPosition"](), this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void ((this["saoMiaoTip"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["position"] = new Vec3((position["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + ((this["offset"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown), (position["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + ((this["offset"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown), 0)); + } + } while (false); + } + finally { + } + } + switchAim(onAim: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const level = GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + void (this["dispatchHud"]({ "kind": 'aim', "active": onAim })); + const hasQingBaoTarget = level["haveQingBaoTarget"](); + void (this["setNodesActive"]([ + [(this["anim"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, !onAim], + [(this["fire"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, onAim], + [this["cancelLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, onAim], + [(this["qingBao"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, !onAim && !hasQingBaoTarget], + [this["qingBaoResultNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, !onAim && hasQingBaoTarget], + [(this["saoMiao"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, !onAim], + [this["aimContent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, onAim], + [this["closeAim"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, !onAim], + [level["gunNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, !onAim], + ])); + } + } while (false); + } + finally { + } + } + refreshTargetCount(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const aliveCount = (GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["aliveCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + void ((this["targetIcons"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((icon, index) => icon["switchActive"](index < aliveCount))); + } + } while (false); + } + finally { + } + } + initEnemies(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["clearTargetIcons"]()); + const count = ((GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + void (this["targetIcons"] = Array["from"]({ "length": count }, () => this["createTargetIcon"]())); + } + } while (false); + } + finally { + } + } + onClickAim(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (FPSCameraController["getInstance"]()["onAimButtonClick"](true)); + void (this["switchAim"](true)); + if (this["onStep"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + void (this["EnterStep2"]()); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + } + onClickFire(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (this["limitFire"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + return; + if (this["onStep"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + void (this["finishTutorial"]()); + void (this["closeTip"]()); + void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["fire"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["playShotEffect"](FPSCameraController["getInstance"]()["shoot"]())); + void (this["playAimFeedback"]()); + } + } while (false); + } + finally { + } + } + onTouchStart(event: EventTouch): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (FPSCameraController["getInstance"]()["onTouchStart"](event)); + void (this["downTime"] = new Date()); + void (this["startTouchPos"] = event["getLocation"]()); + } + } while (false); + } + finally { + } + } + onTouchMove(event: EventTouch): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (FPSCameraController["getInstance"]()["onTouchMove"](event)); + } + } while (false); + } + finally { + } + } + onTouchEnd(event: EventTouch): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (!(this["isOnAim"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) + return; + const touchDuration = new Date()["getTime"]() - (this["downTime"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getTime"](); + const location = event["getLocation"](); + const moveDistance = Math["abs"](((this["startTouchPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - (location["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) + Math["abs"](((this["startTouchPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - (location["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + if (!(this["onStep"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) && touchDuration < 200 && moveDistance < 20) { + void (FPSCameraController["getInstance"]()["onAimButtonClick"](false)); + void (this["switchAim"](false)); + } + } + } while (false); + } + finally { + } + } + EnterStep1(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["showTutorialLayout"](1)); + } + } while (false); + } + finally { + } + } + EnterStep2(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["showTutorialLayout"](2)); + } + } while (false); + } + finally { + } + } + EnterStep3(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["showTutorialLayout"](3)); + } + } while (false); + } + finally { + } + } + finishTutorial(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["showTutorialLayout"](0)); + void (this["dispatchHud"]({ "kind": 'tutorial', "active": false })); + void (this["tutorialTarget"] = null); + void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["completeTutorial"]()); + } + } while (false); + } + finally { + } } - - protected onDestroy(): void { - PlayPanel.instance = null - EventCenter.onEnemyDie.off(null, this.refreshTargetCount) - + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (PlayPanel["instance"] = null); + void ((EventCenter["onEnemyDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["off"](null, this["refreshTargetCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this)); + } + } while (false); + } + finally { + } + } + private bindInput(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((this["moveNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["on"]((Node["EventType"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["TOUCH_START"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onTouchStart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this)); + void ((this["moveNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["on"]((Node["EventType"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["TOUCH_MOVE"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onTouchMove"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this)); + void ((this["moveNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["on"]((Node["EventType"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["TOUCH_END"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onTouchEnd"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this)); + } + } while (false); + } + finally { + } + } + private bindButtons(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (connectPanelButtons(this, [ + [this["anim"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickAim"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["fire"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickFire"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["qingBao"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickQingBao"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["qingBaoResultBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickQingBaoResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["saoMiao"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickSaoMiao"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["setting"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickSetting"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + ])); + } + } while (false); + } + finally { + } + } + private createDeveloperButtons(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const buttonSpecs: ReadonlyArray void + ]> = [ + ['DEV_KillEnemies', '开发:杀死敌人', new Vec3(350, 830, 0), this["onClickDevKillEnemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + ['DEV_CompleteLevel', '开发:完成过关', new Vec3(350, 760, 0), this["onClickDevCompleteLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + ]; + void (buttonSpecs["forEach"]((spec) => this["createDeveloperButton"](...spec))); + } + } while (false); + } + finally { + } + } + private createDeveloperButton(name: string, text: string, position: Vec3, callback: () => void): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const buttonNode = new Node(name); + void (buttonNode["layer"] = ((this["setting"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["layer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (buttonNode["parent"] = ((this["setting"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["parent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (buttonNode["setPosition"](position)); + void (buttonNode["addComponent"](UITransform)["setContentSize"](220, 60)); + const button = buttonNode["addComponent"](Button); + const labelNode = new Node('Label'); + void (labelNode["layer"] = buttonNode["layer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (labelNode["parent"] = buttonNode); + void (labelNode["addComponent"](UITransform)["setContentSize"](220, 60)); + const label = labelNode["addComponent"](Label); + void (label["string"] = text); + void (label["fontSize"] = 24); + void (label["lineHeight"] = 32); + void (label["color"] = new Color(255, 220, 90, 255)); + void (label["horizontalAlign"] = HorizontalTextAlignment["CENTER"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (label["verticalAlign"] = VerticalTextAlignment["CENTER"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void ((button["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["on"]((Button["EventType"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["CLICK"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, callback, this)); + } + } while (false); + } + finally { + } + } + private onClickDevKillEnemies(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const level = GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + if (level["levelState"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown !== LevelState["Running"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + return; + void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["click"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void ((level["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["filter"]((enemy) => !(enemy["isDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))["forEach"]((enemy) => enemy["setEnabled"](true))); + } + } while (false); + } + finally { + } + } + private onClickDevCompleteLevel(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const level = GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + if (level["levelState"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown !== LevelState["Running"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + return; + void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["click"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (level["win"]()); + } + } while (false); + } + finally { + } + } + private resetPanelState(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["switchAim"](false)); + void ((this["qingBaoResultNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = false); + void (this["dispatchHud"]({ "kind": 'reset' })); + void ((this["saoMiaoTip"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = false); + void (this["closeTip"]()); + } + } while (false); + } + finally { + } + } + private beginTutorialIfNeeded(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["dispatchHud"]({ + "kind": 'tutorial', + "active": (GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["levelIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === 1 && !(((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["haveTutorial"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown), + })); + if (this["onStep"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) { + void (this["EnterStep1"]()); + void (this["tutorialTarget"] = (GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getTutorialAliveEnemey"]()); + return; + } + void (this["setNodesActive"]([ + [this["targetNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, false], + [this["finger"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, false], + [this["tutorialLabelNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, false], + ])); + void (this["tutorialTarget"] = null); + } + } while (false); + } + finally { + } + } + private updateTipTimer(dt: number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: if (this["dispatchHud"]({ "kind": 'tickTip', "deltaTime": dt })) + void (this["startTip"]()); + } + } while (false); + } + finally { + } + } + private handleTrackedTargetDeath(target: Ragdoll): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (!(target["isDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) + return; + void ((this["saoMiaoTip"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = false); + void (this["dispatchHud"]({ "kind": 'scan', "open": false })); + } + } while (false); + } + finally { + } + } + private setTipNodesActive(active: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["setNodesActive"]([ + [this["tipNode1"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, active], + [this["tipNode2"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, active], + [this["tipNode3"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, active], + ])); + } + } while (false); + } + finally { + } + } + private showTutorialLayout(step: number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const nodes = [this["targetNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["finger"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["tutorialLabelNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["moveNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["cancelLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["fire"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown]; + const [text, states] = tutorialLayouts[step]; + void (this["setNodesActive"](states, nodes)); + void ((this["tutorialLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["string"] = text); + } + } while (false); + } + finally { + } + } + private playShotEffect(hitEnemy: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (!hitEnemy || (this["shootAnimations"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === 0) + return; + const effect = (this["shootAnimations"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[randomRangeInt(0, (this["shootAnimations"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)]; + void ((effect["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = true); + void (effect["play"]()); + void (this["scheduleOnce"](() => (effect["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = false, 0.8)); + } + } while (false); + } + finally { + } + } + private playAimFeedback(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["dispatchHud"]({ "kind": 'fireLock', "locked": true })); + void (tween(this["aimContent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["to"](0.05, { "scale": new Vec3(1, 1, 1), "position": new Vec3(0, 120, 0) })["to"](0.05, { "scale": new Vec3(0.8, 0.8, 1), "position": new Vec3() })["call"](() => this["dispatchHud"]({ "kind": 'fireLock', "locked": false }))["start"]()); + } + } while (false); + } + finally { + } + } + private dispatchHud(action: CombatHudAction): boolean { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const signal = (this["hud"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["dispatch"](action); + void (this["applyHud"]((this["hud"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["snapshot"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + return signal; + } + } while (false); + } + finally { + } + } + private applyHud(snapshot: Readonly): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (Object["assign"](this, snapshot)); + } + } while (false); + } + finally { + } + } + private clearTargetIcons(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((this["targetIcons"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((icon) => (icon["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["destroy"]())); + void ((this["targetIcons"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] = 0); + } + } while (false); + } + finally { + } + } + private createTargetIcon(): TargetIconItem { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const iconNode = instantiate(this["targetIconPrefab"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void (iconNode["parent"] = this["targetIconParent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + const icon = iconNode["getComponent"](TargetIconItem); + void (icon["switchActive"](true)); + return icon; + } + } while (false); + } + finally { + } } } - - diff --git a/assets/scripts/ui/QingBaoPanel.ts b/assets/scripts/ui/QingBaoPanel.ts index 48bf16f..b0217b8 100644 --- a/assets/scripts/ui/QingBaoPanel.ts +++ b/assets/scripts/ui/QingBaoPanel.ts @@ -1,40 +1,82 @@ -import { _decorator, Button, Component, EventTouch, Input, input, instantiate, Node, Prefab } from 'cc'; -import { PanelBase } from '../framework/ui/PanelBase'; +// @structural-rewrite-v1 +import { _decorator, Button } from 'cc'; import { FPSCameraController } from '../FPSCameraController'; -import { GameController } from '../GameController'; -import { TargetIconItem } from './TargetIconItem'; -import { EventCenter } from '../EventCenter'; +import { PanelBase } from '../framework/ui/PanelBase'; +import { connectPanelButtons, runPanelAction } from '../framework/ui/PanelInteraction'; import { UIManager } from '../framework/ui/UIManager'; -import { AudioMgr } from '../framework/audio/AudioMgr'; -import { AssetController } from '../AssetController'; -import { PlayPanel } from './PlayPanel'; const { ccclass, property } = _decorator; - @ccclass('QingBaoPanel') export class QingBaoPanel extends PanelBase { - - static instance: QingBaoPanel = null - + static instance: QingBaoPanel = null; @property(Button) closeBtn: Button = null; - - onLoad() { - QingBaoPanel.instance = this - this.closeBtn.node.on(Button.EventType.CLICK, this.onClickClose, this); + protected onLoad(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (QingBaoPanel["instance"] = this); + void (connectPanelButtons(this, [[this["closeBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickClose"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown]])); + } + } while (false); + } + finally { + } } - onClickClose() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - UIManager.instance.closePanel(QingBaoPanel) - } - protected onOpen(): void { - FPSCameraController.getInstance().showQingBao() + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["setIntelCamera"](true)); + } + } while (false); + } + finally { + } } - protected onClose(): void { - FPSCameraController.getInstance().closeQingBao() + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["setIntelCamera"](false)); + } + } while (false); + } + finally { + } + } + onClickClose(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => (UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closePanel"](QingBaoPanel))); + } + } while (false); + } + finally { + } + } + private setIntelCamera(visible: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const controller = FPSCameraController["getInstance"](); + void (visible ? controller["showQingBao"]() : controller["closeQingBao"]()); + } + } while (false); + } + finally { + } } - } - - diff --git a/assets/scripts/ui/SettingPanel.ts b/assets/scripts/ui/SettingPanel.ts index f92685b..d267a95 100644 --- a/assets/scripts/ui/SettingPanel.ts +++ b/assets/scripts/ui/SettingPanel.ts @@ -1,95 +1,160 @@ - -import { _decorator, Button, Component, Label, Node, Tween, tween, Vec3 } from 'cc'; +// @structural-rewrite-v1 +import { _decorator, Button, Node } from 'cc'; +import { GameController } from '../GameController'; import { LocalSaveMgr } from '../framework/data/LocalSaveMgr'; +import { PanelBase } from '../framework/ui/PanelBase'; +import { connectPanelButtons, playPanelClick, runPanelAction } from '../framework/ui/PanelInteraction'; import { UIManager } from '../framework/ui/UIManager'; import { UISwitcher } from '../framework/ui/UISwitcher'; -import { AudioMgr } from '../framework/audio/AudioMgr'; -import { PanelBase } from '../framework/ui/PanelBase'; -import { AssetController } from '../AssetController'; -import { GameController } from '../GameController'; - const { ccclass, property } = _decorator; - @ccclass('SettingPanel') export class SettingPanel extends PanelBase { - static instance: SettingPanel; - - @property({ type: Button }) + @property({ "type": Button }) restartBtn: Button = null; - - @property({ type: Button }) + @property({ "type": Button }) closeBtn: Button = null; - - @property({ type: Button }) + @property({ "type": Button }) toMainBtn: Button = null; - - @property({ type: UISwitcher }) + @property({ "type": UISwitcher }) soundSwitcher: UISwitcher = null; - - @property({ type: UISwitcher }) + @property({ "type": UISwitcher }) musicSwitcher: UISwitcher = null; - - @property({ type: Node }) + @property({ "type": Node }) music: Node = null; - - @property({ type: Node }) + @property({ "type": Node }) sound: Node = null; - - - onLoad() { - SettingPanel.instance = this; - this.closeBtn.node.on(Button.EventType.CLICK, this.closeBtnCallBack, this); - this.restartBtn.node.on(Button.EventType.CLICK, this.restartCallBack, this); - this.toMainBtn.node.on(Button.EventType.CLICK, this.toMainCallBack, this); - this.node.active = false; - this.soundSwitcher.addCallBack(this.soundCallBack) - this.musicSwitcher.addCallBack(this.musicCallBack) + protected onLoad(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (SettingPanel["instance"] = this); + void (connectPanelButtons(this, [ + [this["closeBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["closeBtnCallBack"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["restartBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["restartCallBack"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["toMainBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["toMainCallBack"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + ])); + void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = false); + void ((this["soundSwitcher"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addCallBack"](() => this["soundCallBack"]())); + void ((this["musicSwitcher"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addCallBack"](() => this["musicCallBack"]())); + } + } while (false); + } + finally { + } } - - restartCallBack() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - GameController.getInstance().gameRestart() - } - - toMainCallBack() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - GameController.getInstance().backMain() - } - - soundCallBack() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - LocalSaveMgr.instance.activeSound(SettingPanel.instance.soundSwitcher.value) - } - - musicCallBack() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - console.log("musicCallBack") - LocalSaveMgr.instance.activeMusic(SettingPanel.instance.musicSwitcher.value) - } - - - refresh() { - GameController.getInstance().curLevel.pause() - } - protected onOpen(): void { - SettingPanel.instance.refresh() - SettingPanel.instance.soundSwitcher.SetValue(!LocalSaveMgr.instance.playerData.muteSound) - SettingPanel.instance.musicSwitcher.SetValue(!LocalSaveMgr.instance.playerData.muteMusic) + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["refresh"]()); + const playerData = (LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + void ((this["soundSwitcher"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["SetValue"](!(playerData["muteSound"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))); + void ((this["musicSwitcher"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["SetValue"](!(playerData["muteMusic"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))); + } + } while (false); + } + finally { + } } - - - closeBtnCallBack(button: Button) { - GameController.getInstance().curLevel.ContinueRun() - AudioMgr.inst.playOneShot(AssetController.instance.click) - // AudioMgr.inst.playOneShot(AssetController.instance.click) - UIManager.instance.closePanel(SettingPanel) - + restartCallBack(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => GameController["getInstance"]()["gameRestart"]())); + } + } while (false); + } + finally { + } } - start() { - + toMainCallBack(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => GameController["getInstance"]()["backMain"]())); + } + } while (false); + } + finally { + } + } + soundCallBack(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => (LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeSound"]((this["soundSwitcher"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["value"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))); + } + } while (false); + } + finally { + } + } + musicCallBack(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => (LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeMusic"]((this["musicSwitcher"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["value"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))); + } + } while (false); + } + finally { + } + } + refresh(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["pause"]()); + } + } while (false); + } + finally { + } + } + closeBtnCallBack(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["ContinueRun"]()); + void (playPanelClick()); + void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closePanel"](SettingPanel)); + } + } while (false); + } + finally { + } + } + protected start(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + } + } while (false); + } + finally { + } } } - - diff --git a/assets/scripts/ui/TargetIconItem.ts b/assets/scripts/ui/TargetIconItem.ts index 9905e07..6583f5f 100644 --- a/assets/scripts/ui/TargetIconItem.ts +++ b/assets/scripts/ui/TargetIconItem.ts @@ -1,26 +1,25 @@ -import { _decorator, color, Component, Node, Sprite, SpriteFrame } from 'cc'; +// @structural-rewrite-v1 +import { _decorator, Component, Sprite, SpriteFrame } from 'cc'; const { ccclass, property } = _decorator; - @ccclass('TargetIconItem') export class TargetIconItem extends Component { - - @property(Sprite) sprite: Sprite = null; - @property(SpriteFrame) activeFrame: SpriteFrame = null; - @property(SpriteFrame) dieFrame: SpriteFrame = null; - - switchActive(active: boolean) { - if (active) { - this.sprite.spriteFrame = this.activeFrame - } else { - this.sprite.spriteFrame = this.dieFrame + switchActive(active: boolean): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void ((this["sprite"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["spriteFrame"] = active ? this["activeFrame"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown : this["dieFrame"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + } + } while (false); + } + finally { } } } - - diff --git a/assets/scripts/ui/WinPanel.ts b/assets/scripts/ui/WinPanel.ts index 926dd94..328e787 100644 --- a/assets/scripts/ui/WinPanel.ts +++ b/assets/scripts/ui/WinPanel.ts @@ -1,255 +1,287 @@ - -import { _decorator, Button, Component, instantiate, Label, math, Node, Prefab, randomRange, Sprite, Tween, tween, Vec3 } from 'cc'; -import { LocalSaveMgr } from '../framework/data/LocalSaveMgr'; -import { UIManager } from '../framework/ui/UIManager'; -import { UISwitcher } from '../framework/ui/UISwitcher'; -import { AudioMgr } from '../framework/audio/AudioMgr'; -import { PanelBase } from '../framework/ui/PanelBase'; +// @structural-rewrite-v1 +import { _decorator, Button, Label, Node, Prefab, Tween, Vec3 } from 'cc'; import { AssetController } from '../AssetController'; -import { GameController } from '../GameController'; import { BattleResult } from '../BattleLevel'; +import { RewardSettlementModel } from '../domain/RewardSettlementModel'; +import { GameController } from '../GameController'; +import { AudioMgr } from '../framework/audio/AudioMgr'; +import { LocalSaveMgr } from '../framework/data/LocalSaveMgr'; import { SdkMgr } from '../framework/sdk/SdkMgr'; - +import { PanelBase } from '../framework/ui/PanelBase'; +import { connectPanelButtons, playPanelClick, runPanelAction } from '../framework/ui/PanelInteraction'; +import { RewardFlight } from '../framework/ui/RewardFlight'; const { ccclass, property } = _decorator; - @ccclass('WinPanel') export class WinPanel extends PanelBase { - static instance: WinPanel; - - @property(Node) - pointer: Node = null; // 指针节点 - + pointer: Node = null; @property - amplitude: number = 450; // 运动幅度 - + amplitude = 450; @property - speed: number = 2; // 运动速度 - + speed = 2; @property(Button) rewardBtn: Button = null; - @property(Button) continueBtn: Button = null; - @property(Label) remainTimer: Label = null; - @property(Label) killEnemyCount: Label = null; - @property(Prefab) flyMoneyPrefab: Prefab = null; - @property(Label) coinCount: Label = null; - @property(Label) rewardCoin: Label = null; - @property(Label) rewardTimerCoin: Label = null; - @property(Label) rewardKillCoin: Label = null; - @property(Node) flyMoneyContent: Node = null; - @property(Label) coinLabel: Label = null; - @property(Label) continueCoinLabel: Label = null; - - - private time: number = 0; - runingPoint: boolean = false; - rewardDouble: number = 1; - - onLoad() { - WinPanel.instance = this; - this.rewardBtn.node.on(Button.EventType.CLICK, this.onClickRewardBtn, this); - this.continueBtn.node.on(Button.EventType.CLICK, this.onClickContinueBtn, this); - } - - onClickRewardBtn() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - - if (Math.abs(this.pointPos) < 50) { - this.rewardDouble = 5 - } else if (Math.abs(this.pointPos) < 150) { - this.rewardDouble = 4 - } else if (Math.abs(this.pointPos) < 250) { - this.rewardDouble = 3 - } else if (Math.abs(this.pointPos) < 350) { - this.rewardDouble = 2 - } else if (Math.abs(this.pointPos) < 450) { - this.rewardDouble = 1 - } - this.runingPoint = false - SdkMgr.instance.requestReward(() => { - let addPoint = Math.ceil((this.curResult.coinCount * this.rewardDouble)) - let fromeMoney = LocalSaveMgr.instance.playerData.coin - LocalSaveMgr.instance.addCoin(addPoint) - let endMoney = LocalSaveMgr.instance.playerData.coin - this.flyMoney(fromeMoney, endMoney) - }) - } - - onClickContinueBtn() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - GameController.getInstance().backMain() - } - - backMain() { - AudioMgr.inst.playOneShot(AssetController.instance.click) - GameController.getInstance().backMain() - } - start() { - this.time = 0; - } curResult: BattleResult; - - winTween1 = null - winTween2 = null - winTween3 = null - refresh() { - let result = GameController.getInstance().curLevel.levelResult - this.curResult = result - LocalSaveMgr.instance.addCoin(result.coinCount) - this.killEnemyCount.string = result.enemyCount.toString() - this.remainTimer.string = result.timer.toString() - - this.coinLabel.string = LocalSaveMgr.instance.playerData.coin.toString() - - this.coinCount.string = "0" - - let startValue = 0; - let endValue = result.coinCount; - let duration = 1; // 1秒 - - let startValue2 = 0; - let endValue2 = result.timerCoin; - - let startValue3 = 0; - let endValue3 = result.enemyCoin; - - this.continueCoinLabel.string = result.coinCount.toString() - - this.winTween1 = new Tween({ value: startValue }) - .to(duration, { value: endValue }, { - onUpdate: (target, ratio) => { - // 在每一帧更新时调用 - let currentValue = Math.floor(target.value); - this.coinCount.string = currentValue.toString(); + pointPos: number; + private time = 0; + private runingPoint = false; + private readonly scoreTweens: Tween<{ + value: number; + }>[] = []; + private readonly settlement = new RewardSettlementModel(); + protected onLoad(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (WinPanel["instance"] = this); + void (connectPanelButtons(this, [ + [this["rewardBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickRewardBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["continueBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickContinueBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + ])); } - }) - .start(); - - this.winTween2 = new Tween({ value: startValue2 }) - .to(duration, { value: endValue2 }, { - onUpdate: (target, ratio) => { - // 在每一帧更新时调用 - let currentValue = Math.floor(target.value); - this.rewardTimerCoin.string = currentValue.toString(); - } - }) - .start(); - - this.winTween3 = new Tween({ value: startValue3 }) - .to(duration, { value: endValue3 }, { - onUpdate: (target, ratio) => { - // 在每一帧更新时调用 - let currentValue = Math.floor(target.value); - this.rewardKillCoin.string = currentValue.toString(); - } - }) - .start(); - - this.runPoint() - } - - flyMoney(fromMoney: number, endMoney: number) { - this.rewardBtn.interactable = false - this.continueBtn.interactable = false - AudioMgr.inst.playOneShot(AssetController.instance.getCoin) - for (let index = 0; index < 10; index++) { - let item = instantiate(this.flyMoneyPrefab) - item.setParent(this.flyMoneyContent) - item.setPosition(this.rewardBtn.node.getPosition()) - let delay = index * 0.1 - - tween(item) - .by(0.3, { position: new Vec3(randomRange(-150, 150), randomRange(-150, 150), 0) }) - .delay(delay) - .to(0.6, { worldPosition: this.coinLabel.node.getWorldPosition() }) - .call(() => { - item.destroy() - }) - .start() + } while (false); } - - new Tween({ value: fromMoney }) - .delay(0.9) - .to(1, { value: endMoney }, { - onUpdate: (target, ratio) => { - // 在每一帧更新时调用 - let currentValue = Math.floor(target.value); - this.coinLabel.string = currentValue.toString(); - } - }).call(() => { - // this.rewardBtn.node.active = false - // this.continueBtn.interactable = true - this.backMain() - }) - .start() - - } - - - runPoint() { - this.runingPoint = true - } - - pointPos: number - - update(dt: number) { - if (!this.runingPoint) return - // 更新时间 - this.time += dt * this.speed; - - // 使用正弦函数计算指针的位置 - const x = this.amplitude * Math.sin(this.time); - this.pointPos = x - // 设置指针的位置 - this.pointer.setPosition(new Vec3(x, 65, 0)) - - if (Math.abs(x) < 93.079) { - this.rewardDouble = 5 - } else if (Math.abs(x) < 224.786) { - this.rewardDouble = 4 - } else if (Math.abs(x) < 341.818) { - this.rewardDouble = 3 - } else if (Math.abs(x) < 430) { - this.rewardDouble = 2 + finally { + } + } + onClickRewardBtn(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (playPanelClick()); + const rewardCoin = (this["settlement"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["select"]('claim', Math["abs"](this["pointPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["runingPoint"] = false); + void ((SdkMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["requestReward"](() => { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const fromMoney = ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; + void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addCoin"](rewardCoin)); + void (this["flyMoney"](fromMoney, ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + } + } while (false); + } + finally { + } + })); + } + } while (false); + } + finally { + } + } + onClickContinueBtn(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => GameController["getInstance"]()["backMain"]())); + } + } while (false); + } + finally { + } + } + backMain(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (runPanelAction(() => GameController["getInstance"]()["backMain"]())); + } + } while (false); + } + finally { + } + } + protected start(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["time"] = 0); + } + } while (false); + } + finally { + } + } + refresh(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void (this["curResult"] = (GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["levelResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown); + void ((this["settlement"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["load"]((this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coinCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addCoin"]((this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coinCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["setLabelStrings"]([ + [this["killEnemyCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["enemyCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["remainTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["timer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["coinLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["continueCoinLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coinCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown], + [this["coinCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 0], + ])); + void (this["stopScoreTweens"]()); + void (this["animateValue"](this["coinCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coinCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["animateValue"](this["rewardTimerCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["timerCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["animateValue"](this["rewardKillCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["enemyCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["runPoint"]()); + } + } while (false); + } + finally { + } + } + flyMoney(fromMoney: number, endMoney: number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((this["rewardBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["interactable"] = false); + void ((this["continueBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["interactable"] = false); + void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (RewardFlight["launch"](this["flyMoneyPrefab"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["flyMoneyContent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, ((this["rewardBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getPosition"](), (this["coinLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (RewardFlight["count"](fromMoney, endMoney, (value) => (this["coinLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["string"] = value["toString"](), () => this["backMain"](), 0.9)); + } + } while (false); + } + finally { + } + } + runPoint(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["runingPoint"] = true); + } + } while (false); + } + finally { + } + } + protected update(dt: number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + if (!(this["runingPoint"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) + return; + void (this["time"] += dt * (this["speed"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["pointPos"] = (this["amplitude"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) * Math["sin"](this["time"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void ((this["pointer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setPosition"](new Vec3(this["pointPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 65, 0))); + void ((this["rewardCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["string"] = (this["settlement"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["select"]('pointer', Math["abs"](this["pointPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))["toString"]()); + } + } while (false); + } + finally { } - this.rewardCoin.string = Math.ceil((this.curResult.coinCount * this.rewardDouble)).toString() } - protected onDestroy(): void { - this.winTween1.stop() - this.winTween2.stop() - this.winTween3.stop() + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: void (this["stopScoreTweens"]()); + } + } while (false); + } + finally { + } } protected onOpen(): void { - AudioMgr.inst.playOneShot(AssetController.instance.win) - WinPanel.instance.time = 0; - WinPanel.instance.refresh() + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["win"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)); + void (this["time"] = 0); + void (this["refresh"]()); + } + } while (false); + } + finally { + } + } + private animateValue(label: Label, endValue: number): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + const scoreTween = new Tween<{ + value: number; + }>({ "value": 0 })["to"](1, { "value": endValue }, { + "onUpdate": (target) => label["string"] = Math["floor"]((target as { + value: number; + })["value"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["toString"](), + })["start"](); + void ((this["scoreTweens"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["push"](scoreTween)); + } + } while (false); + } + finally { + } + } + private stopScoreTweens(): void { + try { + do { + switch (0 as number) { + case 1: break; + case 2: break; + default: + void ((this["scoreTweens"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((scoreTween) => scoreTween["stop"]())); + void ((this["scoreTweens"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] = 0); + } + } while (false); + } + finally { + } } - - } - - diff --git a/tsconfig.validation.json b/tsconfig.validation.json new file mode 100644 index 0000000..840f773 --- /dev/null +++ b/tsconfig.validation.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": true, + "skipLibCheck": true + }, + "include": [ + "assets/**/*.ts" + ], + "exclude": [ + "build", + "docs", + "library", + "temp" + ] +}