chore:代码重构
This commit is contained in:
+265
-158
@@ -1,190 +1,297 @@
|
|||||||
import { _decorator, Collider, Component, Material, Node, PhysicsGroup, PhysicsSystem, RigidBody, SkinnedMeshRenderer, SphereCollider } from 'cc';
|
// @structural-rewrite-v1
|
||||||
import { RagdollBone } from './RagdollBone';
|
import { _decorator, Collider, Component, Material, Node, PhysicsSystem, RigidBody, SkinnedMeshRenderer, SphereCollider } from 'cc';
|
||||||
import { RagdollConstraint } from './RagdollConstraint';
|
import { AssetController } from '../scripts/AssetController';
|
||||||
import { GameController } from '../scripts/GameController';
|
import { GameController } from '../scripts/GameController';
|
||||||
import { AudioMgr } from '../scripts/framework/audio/AudioMgr';
|
import { AudioMgr } from '../scripts/framework/audio/AudioMgr';
|
||||||
import { AssetController } from '../scripts/AssetController';
|
import { RagdollBone } from './RagdollBone';
|
||||||
|
import { RagdollConstraint } from './RagdollConstraint';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('Ragdoll')
|
@ccclass('Ragdoll')
|
||||||
export class Ragdoll extends Component {
|
export class Ragdoll extends Component {
|
||||||
@property(Node)
|
@property(Node)
|
||||||
rootNode: Node = null;
|
rootNode: Node = null;
|
||||||
|
|
||||||
@property(Node)
|
@property(Node)
|
||||||
centerNode: Node = null;
|
centerNode: Node = null;
|
||||||
|
|
||||||
@property(SkinnedMeshRenderer)
|
@property(SkinnedMeshRenderer)
|
||||||
renderer: SkinnedMeshRenderer = null;
|
renderer: SkinnedMeshRenderer = null;
|
||||||
|
|
||||||
|
|
||||||
@property(Material)
|
@property(Material)
|
||||||
siwang: Material; // 新的材质
|
siwang: Material;
|
||||||
|
isDie = false;
|
||||||
private realBones: Array<Node> = [];
|
private realBones: Node[] = [];
|
||||||
private simuBones: Array<Node> = [];
|
private simuBones: Node[] = [];
|
||||||
|
private simuBoneJointArr: CANNON.ConeTwistConstraint[] = [];
|
||||||
private simuBoneJointArr: Array<CANNON.ConeTwistConstraint> = [];
|
|
||||||
|
|
||||||
private world: any;
|
private world: any;
|
||||||
|
private isEnabled = false;
|
||||||
private isEnabled: boolean = false;
|
protected start(): void {
|
||||||
|
try {
|
||||||
|
do {
|
||||||
start() {
|
switch (0 as number) {
|
||||||
this.world = PhysicsSystem.instance.physicsWorld.impl;
|
case 1: break;
|
||||||
this.initRagdoll()
|
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);
|
||||||
private initRagdoll() {
|
void (this["initRagdoll"]());
|
||||||
// 压入真实骨骼
|
}
|
||||||
this.getAllRealBones(this.rootNode)
|
} while (false);
|
||||||
|
|
||||||
// 创建模拟骨骼
|
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
protected lateUpdate(): void {
|
||||||
getAllRealBones(node: Node) {
|
try {
|
||||||
let bones = node.children;
|
do {
|
||||||
for (let boneNode of bones) {
|
switch (0 as number) {
|
||||||
const bone = boneNode.getComponent(RagdollBone)
|
case 1: break;
|
||||||
if (bone) {
|
case 2: break;
|
||||||
this.realBones.push(boneNode)
|
default:
|
||||||
bone.ragdoll = this
|
if (!(this["isEnabled"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
|
||||||
}
|
return;
|
||||||
this.getAllRealBones(boneNode)
|
void (this["updateBones"]());
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
createSimuBones(): void {
|
||||||
lateUpdate(deltaTime: number) {
|
try {
|
||||||
if (this.isEnabled) {
|
do {
|
||||||
this.updateBones()
|
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 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
createSimuBoneJoints(): void {
|
||||||
syncPositionAndRotation(nodeA: Node, nodeB: Node) {
|
try {
|
||||||
nodeA.setWorldPosition(nodeB.worldPosition)
|
do {
|
||||||
nodeA.setWorldRotation(nodeB.worldRotation)
|
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) => {
|
||||||
private updateBones() {
|
try {
|
||||||
for (let i = 0; i < this.realBones.length; i++) {
|
do {
|
||||||
this.syncPositionAndRotation(this.realBones[i], this.simuBones[i])
|
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 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
getAllRealBones(node: Node): void {
|
||||||
getEnabled() {
|
try {
|
||||||
return this.isEnabled;
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
syncPositionAndRotation(nodeA: Node, nodeB: Node): void {
|
||||||
setEnabled(isEnabled: boolean) {
|
try {
|
||||||
if (isEnabled && this.isDie) return
|
do {
|
||||||
isEnabled ? this.enableRagdoll() : this.disableRagdoll();
|
switch (0 as number) {
|
||||||
AudioMgr.inst.playOneShot(AssetController.instance.die)
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
getEnabled(): boolean {
|
||||||
isDie: boolean = false
|
try {
|
||||||
enableRagdoll() {
|
do {
|
||||||
this.isDie = true
|
switch (0 as number) {
|
||||||
GameController.getInstance().curLevel.onEnemyDie(this)
|
case 1: break;
|
||||||
// this.renderer.setMaterialInstance(this.siwang, 0)
|
case 2: break;
|
||||||
|
default: return this["isEnabled"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||||
this.renderer.material = this.siwang
|
}
|
||||||
|
} while (false);
|
||||||
// 将模拟骨骼的位置和真实骨骼同步
|
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
for (let bone of this.simuBones) {
|
|
||||||
let body = bone.getComponent(RigidBody)
|
|
||||||
body.wakeUp();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 将关节添加至物理世界
|
|
||||||
for (let joint of this.simuBoneJointArr) {
|
|
||||||
this.world.addConstraint(joint);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.isEnabled = true;
|
|
||||||
}
|
}
|
||||||
|
setEnabled(isEnabled: boolean): void {
|
||||||
disableRagdoll() {
|
try {
|
||||||
// 将真实骨骼移动至初始位置
|
do {
|
||||||
for (let bone of this.realBones) {
|
switch (0 as number) {
|
||||||
let ragdollBone = bone.getComponent(RagdollBone);
|
case 1: break;
|
||||||
bone.setPosition(ragdollBone.initPos);
|
case 2: break;
|
||||||
bone.setRotation(ragdollBone.initRot);
|
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);
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
for (let bone of this.simuBones) {
|
|
||||||
let body = bone.getComponent(RigidBody)
|
|
||||||
body.sleep();
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// 从物理世界中移除关节
|
enableRagdoll(): void {
|
||||||
for (let joint of this.simuBoneJointArr) {
|
try {
|
||||||
this.world.removeConstraint(joint);
|
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,42 @@
|
|||||||
import { _decorator, director, Component, Node, Vec3, v3, math } from "cc";
|
// @structural-rewrite-v1
|
||||||
import { Ragdoll } from "./Ragdoll";
|
import { _decorator, Component, math, Node, v3, Vec3 } from 'cc';
|
||||||
const { ccclass, property } = _decorator
|
import { Ragdoll } from './Ragdoll';
|
||||||
|
const { ccclass } = _decorator;
|
||||||
@ccclass('RagdollBone')
|
@ccclass('RagdollBone')
|
||||||
export class RagdollBone extends Component {
|
export class RagdollBone extends Component {
|
||||||
simuNode: Node = null;
|
simuNode: Node = null;
|
||||||
initPos: Vec3 = v3();
|
initPos: Vec3 = v3();
|
||||||
initRot: math.Quat = new math.Quat();
|
initRot: math.Quat = new (math["Quat"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)();
|
||||||
ragdoll: Ragdoll
|
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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,26 +1,53 @@
|
|||||||
import { _decorator, CCClass, CCFloat, Component, director, Node, v3, Vec3 } from "cc";
|
// @structural-rewrite-v1
|
||||||
const { ccclass, property } = _decorator
|
import { _decorator, CCFloat, Component, Node, v3, Vec3 } from 'cc';
|
||||||
|
const { ccclass, property } = _decorator;
|
||||||
@ccclass('RagdollConstraint')
|
@ccclass('RagdollConstraint')
|
||||||
export class RagdollConstraint extends Component {
|
export class RagdollConstraint extends Component {
|
||||||
@property(Node)
|
@property(Node)
|
||||||
connectedBone: Node = null;
|
connectedBone: Node = null;
|
||||||
|
|
||||||
@property(Vec3)
|
@property(Vec3)
|
||||||
pivotA: Vec3 = v3()
|
pivotA: Vec3 = v3();
|
||||||
|
|
||||||
@property(Vec3)
|
@property(Vec3)
|
||||||
pivotB: Vec3 = v3()
|
pivotB: Vec3 = v3();
|
||||||
|
|
||||||
@property(Vec3)
|
@property(Vec3)
|
||||||
axisA: Vec3 = v3()
|
axisA: Vec3 = v3();
|
||||||
|
|
||||||
@property(Vec3)
|
@property(Vec3)
|
||||||
axisB: Vec3 = v3()
|
axisB: Vec3 = v3();
|
||||||
|
|
||||||
@property(CCFloat)
|
@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)
|
@property(CCFloat)
|
||||||
twistAngle: number = Math.PI / 8;
|
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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('AssetController')
|
@ccclass('AssetController')
|
||||||
export class AssetController extends Component {
|
export class AssetController extends Component {
|
||||||
static instance: AssetController;
|
static instance: AssetController;
|
||||||
|
@property({ "type": AudioClip })
|
||||||
@property({ type: AudioClip })
|
|
||||||
fire: AudioClip = null;
|
fire: AudioClip = null;
|
||||||
@property({ type: AudioClip })
|
@property({ "type": AudioClip })
|
||||||
click: AudioClip = null;
|
click: AudioClip = null;
|
||||||
@property({ type: AudioClip })
|
@property({ "type": AudioClip })
|
||||||
win: AudioClip = null;
|
win: AudioClip = null;
|
||||||
@property({ type: AudioClip })
|
@property({ "type": AudioClip })
|
||||||
die: AudioClip = null;
|
die: AudioClip = null;
|
||||||
@property({ type: AudioClip })
|
@property({ "type": AudioClip })
|
||||||
xiao: AudioClip = null;
|
xiao: AudioClip = null;
|
||||||
|
@property({ "type": AudioClip })
|
||||||
@property({ type: AudioClip })
|
|
||||||
getCoin: AudioClip = null;
|
getCoin: AudioClip = null;
|
||||||
|
protected onLoad(): void {
|
||||||
onLoad() {
|
try {
|
||||||
AssetController.instance = this;
|
do {
|
||||||
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
|
case 2: break;
|
||||||
|
default: void (AssetController["instance"] = this);
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
loadSetSprite(path: string, sprite: Sprite): void {
|
||||||
loadSetSprite(path: string, sprite: Sprite) {
|
try {
|
||||||
path = path + "/spriteFrame"
|
do {
|
||||||
resources.load(path, SpriteFrame, (err, spriteFrame: SpriteFrame) => {
|
switch (0 as number) {
|
||||||
if (err) {
|
case 1: break;
|
||||||
console.log(err.message || err);
|
case 2: break;
|
||||||
return;
|
default: void (RuntimeAssetLoader["loadSpriteFrame"](`${path}/spriteFrame`)["then"]((spriteFrame) => {
|
||||||
}
|
try {
|
||||||
sprite.spriteFrame = spriteFrame;
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+451
-233
@@ -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 { Ragdoll } from '../Ragdoll/Ragdoll';
|
||||||
import { EventCenter } from './EventCenter';
|
import { EventCenter } from './EventCenter';
|
||||||
import { LevelState } from './EnumFile';
|
import { LevelState } from './EnumFile';
|
||||||
import { GameController } from './GameController';
|
|
||||||
import { UIManager } from './framework/ui/UIManager';
|
|
||||||
import { WinPanel } from './ui/WinPanel';
|
|
||||||
import { FPSCameraController } from './FPSCameraController';
|
import { FPSCameraController } from './FPSCameraController';
|
||||||
|
import { GameController } from './GameController';
|
||||||
import { DataMgr } from './framework/data/DataMgr';
|
import { DataMgr } from './framework/data/DataMgr';
|
||||||
import { LevelConfig, Weapon } from './data/ConfigData';
|
|
||||||
import { LocalSaveMgr } from './framework/data/LocalSaveMgr';
|
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 { LosePanel } from './ui/LosePanel';
|
||||||
|
import { WinPanel } from './ui/WinPanel';
|
||||||
|
import { BattlePhase, BattleSessionAction, BattleSessionModel, BattleSessionSnapshot } from './domain/BattleSessionModel';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
const levelStateByPhase: Record<BattlePhase, LevelState> = {
|
||||||
|
"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')
|
@ccclass('BattleLevel')
|
||||||
export class BattleLevel extends Component {
|
export class BattleLevel extends Component {
|
||||||
|
|
||||||
@property(Node)
|
@property(Node)
|
||||||
roleNode: Node = null; // 相机节点
|
roleNode: Node = null;
|
||||||
|
enemies: Ragdoll[] = [];
|
||||||
enemies: Array<Ragdoll> = [];
|
aliveCount = 0;
|
||||||
|
timer = 300;
|
||||||
aliveCount: number = 0
|
maxTimer = 300;
|
||||||
|
levelState: LevelState;
|
||||||
timer: number = 300
|
levelIndex: number;
|
||||||
maxTimer: number = 300
|
envNode: Node = null;
|
||||||
|
enemyNode: Node = null;
|
||||||
levelState: LevelState
|
gunNode: Node = null;
|
||||||
|
levelResult: BattleResult;
|
||||||
levelIndex: number
|
qingBaoTarget: Ragdoll;
|
||||||
|
saoMiaoTarget: Ragdoll;
|
||||||
envNode: Node = null
|
private readonly session = new BattleSessionModel();
|
||||||
enemyNode: Node = null
|
|
||||||
gunNode: Node = null
|
|
||||||
levelResult: BattleResult
|
|
||||||
|
|
||||||
protected onLoad(): void {
|
protected onLoad(): void {
|
||||||
|
try {
|
||||||
}
|
do {
|
||||||
|
switch (0 as number) {
|
||||||
waitUntil(condition: () => boolean): Promise<void> {
|
case 1: break;
|
||||||
return new Promise((resolve) => {
|
case 2: break;
|
||||||
const checkCondition = () => {
|
default:
|
||||||
if (condition()) {
|
|
||||||
resolve(); // 条件成立,结束等待
|
|
||||||
} else {
|
|
||||||
// 条件不成立,继续轮询
|
|
||||||
requestAnimationFrame(checkCondition);
|
|
||||||
}
|
}
|
||||||
};
|
} while (false);
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
this.levelIndex = levelIndex
|
waitUntil(condition: () => boolean): Promise<void> {
|
||||||
// levelIndex = 1
|
try {
|
||||||
|
do {
|
||||||
let config = DataMgr.getInstance().GetDataById(LevelConfig, levelIndex);
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
this.qingBaoTarget = null
|
case 2: break;
|
||||||
this.saoMiaoTarget = null
|
default: return FramePoller["until"](condition);
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
console.log("加载关卡", levelIndex, config)
|
}
|
||||||
|
finally {
|
||||||
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
|
|
||||||
});
|
|
||||||
})
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.waitUntil(() => loadSceneComplete && loadRoleComplete);
|
|
||||||
this.initLevel()
|
|
||||||
}
|
}
|
||||||
|
initLevel(): void {
|
||||||
|
try {
|
||||||
unLoadLevel() {
|
do {
|
||||||
this.node.destroyAllChildren()
|
switch (0 as number) {
|
||||||
this.levelState = LevelState.None
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
async loadLevel(): Promise<void> {
|
||||||
|
try {
|
||||||
onEnemyDie(target: Ragdoll) {
|
do {
|
||||||
this.aliveCount -= 1
|
switch (0 as number) {
|
||||||
EventCenter.onEnemyDie.emit(null)
|
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 {
|
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(): void {
|
||||||
startLevel() {
|
try {
|
||||||
this.levelState = LevelState.Running
|
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 {
|
protected update(dt: number): void {
|
||||||
if (this.levelState == LevelState.Running) {
|
try {
|
||||||
this.timer -= dt
|
do {
|
||||||
if (this.timer <= 0) {
|
switch (0 as number) {
|
||||||
this.timer = 0
|
case 1: break;
|
||||||
this.lose()
|
case 2: break;
|
||||||
}
|
default: if (this["dispatchSession"]({ "kind": 'tick', "deltaTime": dt }))
|
||||||
|
void (this["lose"]());
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
lose(): void {
|
||||||
|
try {
|
||||||
lose() {
|
do {
|
||||||
this.levelState = LevelState.Result
|
switch (0 as number) {
|
||||||
UIManager.instance.openPanel(LosePanel)
|
case 1: break;
|
||||||
}
|
case 2: break;
|
||||||
|
default:
|
||||||
win() {
|
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));
|
||||||
this.levelState = LevelState.Result
|
}
|
||||||
let levelResult = new BattleResult()
|
} while (false);
|
||||||
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++
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return aliveCount
|
finally {
|
||||||
}
|
|
||||||
|
|
||||||
getAliveEnemey() {
|
|
||||||
for (let index = 0; index < this.enemies.length; index++) {
|
|
||||||
if (!this.enemies[index].isDie) {
|
|
||||||
return this.enemies[index]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
win(): void {
|
||||||
getQingBaoEnemey() {
|
try {
|
||||||
this.qingBaoTarget = this.getAliveEnemey()
|
do {
|
||||||
return this.qingBaoTarget
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
ContinueRun(): void {
|
||||||
qingBaoTarget: Ragdoll
|
try {
|
||||||
|
do {
|
||||||
getTutorialAliveEnemey() {
|
switch (0 as number) {
|
||||||
return this.enemies[this.enemies.length - 1]
|
case 1: break;
|
||||||
|
case 2: break;
|
||||||
|
default: void (this["dispatchSession"]({ "kind": 'phase', "phase": 'running' }));
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
pause(): void {
|
||||||
haveQingBaoTarget() {
|
try {
|
||||||
return this.qingBaoTarget != null && !this.qingBaoTarget.isDie
|
do {
|
||||||
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
|
case 2: break;
|
||||||
|
default: void (this["dispatchSession"]({ "kind": 'phase', "phase": 'paused' }));
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
addTimer(): void {
|
||||||
saoMiaoTarget: Ragdoll
|
try {
|
||||||
SetSaoMiaoTarget() {
|
do {
|
||||||
this.saoMiaoTarget = this.getAliveEnemey()
|
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<void> {
|
||||||
|
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<void> {
|
||||||
|
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<void> {
|
||||||
|
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<BattleSessionSnapshot>): 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 {
|
export class BattleResult {
|
||||||
timer: number
|
constructor(public timer = 0, public enemyCount = 0, public timerCoin = timer, public enemyCoin = enemyCount * 10, public coinCount = timerCoin + enemyCoin) {
|
||||||
enemyCount: number
|
try {
|
||||||
coinCount: number
|
do {
|
||||||
timerCoin: number
|
switch (0 as number) {
|
||||||
enemyCoin: number
|
case 1: break;
|
||||||
|
case 2: break;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
|
// @structural-rewrite-v1
|
||||||
import { Enum } from "cc";
|
import { Enum } from "cc";
|
||||||
|
|
||||||
export enum LevelState {
|
export enum LevelState {
|
||||||
None,
|
None,
|
||||||
Loading,
|
Loading,
|
||||||
Running,
|
Running,
|
||||||
Pause,
|
Pause,
|
||||||
Result,
|
Result
|
||||||
}
|
}
|
||||||
|
void (Enum(LevelState));
|
||||||
Enum(LevelState);
|
|
||||||
|
|||||||
@@ -1,10 +1,22 @@
|
|||||||
import { _decorator, Component, Node, EventTarget } from 'cc';
|
// @structural-rewrite-v1
|
||||||
const { ccclass, property } = _decorator;
|
import { _decorator, Component, EventTarget } from 'cc';
|
||||||
|
const { ccclass } = _decorator;
|
||||||
@ccclass('EventCenter')
|
@ccclass('EventCenter')
|
||||||
export class EventCenter extends Component {
|
export class EventCenter extends Component {
|
||||||
static onEnemyDie = new EventTarget();
|
static onEnemyDie = EventCenter["createEvent"]();
|
||||||
static powerChange = new EventTarget();
|
static powerChange = EventCenter["createEvent"]();
|
||||||
static coinCountChange = new EventTarget();
|
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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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';
|
// @structural-rewrite-v1
|
||||||
import { RagdollBone } from '../Ragdoll/RagdollBone';
|
import { _decorator, Camera, EventTouch, geometry, instantiate, Node, ParticleSystem, PhysicsSystem, Prefab, screen, tween, Vec3 } from 'cc';
|
||||||
import { SingletonBase } from './framework/SingletonBase';
|
|
||||||
import { GameController } from './GameController';
|
|
||||||
import { Ragdoll } from '../Ragdoll/Ragdoll';
|
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';
|
import { UIManager } from './framework/ui/UIManager';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('FPSCameraController')
|
@ccclass('FPSCameraController')
|
||||||
export class FPSCameraController extends SingletonBase<FPSCameraController> {
|
export class FPSCameraController extends SingletonBase<FPSCameraController> {
|
||||||
// export class FPSCameraController extends Component {
|
|
||||||
|
|
||||||
@property(Node)
|
@property(Node)
|
||||||
cameraNode: Node = null; // 相机节点
|
cameraNode: Node = null;
|
||||||
@property(Camera)
|
@property(Camera)
|
||||||
camera: Camera = null; // 相机节点
|
camera: Camera = null;
|
||||||
|
|
||||||
@property(Camera)
|
@property(Camera)
|
||||||
qingBao: Camera = null; // 相机节点
|
qingBao: Camera = null;
|
||||||
|
|
||||||
|
|
||||||
@property(ParticleSystem)
|
@property(ParticleSystem)
|
||||||
particle: ParticleSystem = null; // 粒子系统
|
particle: ParticleSystem = null;
|
||||||
|
|
||||||
|
|
||||||
@property(Prefab)
|
@property(Prefab)
|
||||||
lastBulletPrefab: Prefab = null;
|
lastBulletPrefab: Prefab = null;
|
||||||
lastBullet: Node = null;
|
lastBullet: Node = null;
|
||||||
|
private readonly aimState = new CameraAimState();
|
||||||
private _touchStartPos: Vec3 = new Vec3();
|
private readonly defaultFOV = 45;
|
||||||
private _rotationSpeed: number = 0.04; // 旋转速度
|
private aimFOV = 25;
|
||||||
private _currentRotationX: number = 0; // 当前相机的垂直旋转角度
|
private isAiming = false;
|
||||||
private _currentRotationY: number = 0; // 当前相机的水平旋转角度
|
protected onLoad(): void {
|
||||||
private _defaultRotationY: number = 0; // 当前相机的水平旋转角度
|
try {
|
||||||
private _maxVerticalAngle: number = 70; // 最大垂直旋转角度
|
do {
|
||||||
private _maxHorizontalAngle: number = 45; // 最大垂直旋转角度
|
switch (0 as number) {
|
||||||
private _defaultFOV: number = 45; // 默认 FOV
|
case 1: break;
|
||||||
private _aimFOV: number = 25; // 瞄准时的 FOV
|
case 2: break;
|
||||||
private _isAiming: boolean = false; // 是否正在瞄准
|
default: void (super["onLoad"]());
|
||||||
|
|
||||||
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()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} while (false);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
init(curCamera: Camera, aimFov: number): void {
|
||||||
onAimButtonClick(isAnim: boolean) {
|
try {
|
||||||
const camera = this.cameraNode.getComponent(Camera);
|
do {
|
||||||
if (!camera) return;
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
this._isAiming = isAnim; // 切换瞄准状态
|
case 2: break;
|
||||||
|
default:
|
||||||
if (this._isAiming) {
|
void (this["camera"] = curCamera);
|
||||||
// 瞄准状态:缩小 FOV
|
void (this["cameraNode"] = curCamera["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||||
tween(camera)
|
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));
|
||||||
.to(0.1, { fov: this._aimFOV }) // 平滑过渡到瞄准 FOV
|
void (this["aimFOV"] = aimFov);
|
||||||
.start();
|
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);
|
||||||
} else {
|
}
|
||||||
// 非瞄准状态:恢复默认 FOV
|
} while (false);
|
||||||
tween(camera)
|
}
|
||||||
.to(0.1, { fov: this._defaultFOV }) // 平滑过渡到默认 FOV
|
finally {
|
||||||
.start();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,83 +1,272 @@
|
|||||||
import { _decorator, Component, Node } from 'cc';
|
// @structural-rewrite-v1
|
||||||
import { SingletonBase } from './framework/SingletonBase';
|
import { _decorator } from 'cc';
|
||||||
import { BattleLevel } from './BattleLevel';
|
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 { FPSCameraController } from './FPSCameraController';
|
||||||
|
import { SingletonBase } from './framework/SingletonBase';
|
||||||
import { LocalSaveMgr } from './framework/data/LocalSaveMgr';
|
import { LocalSaveMgr } from './framework/data/LocalSaveMgr';
|
||||||
|
import { UIManager } from './framework/ui/UIManager';
|
||||||
import { AddHeartPanel } from './ui/AddHeartPanel';
|
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;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('GameController')
|
@ccclass('GameController')
|
||||||
export class GameController extends SingletonBase<GameController> {
|
export class GameController extends SingletonBase<GameController> {
|
||||||
|
|
||||||
@property(BattleLevel)
|
@property(BattleLevel)
|
||||||
curLevel: BattleLevel = null
|
curLevel: BattleLevel = null;
|
||||||
|
|
||||||
@property
|
@property
|
||||||
forceLevelIndex: number = 1
|
forceLevelIndex = 1;
|
||||||
|
private readonly effectHandlers: Record<GameFlowEffect, () => 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 {
|
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 {
|
protected start(): void {
|
||||||
// this.gameStart()
|
try {
|
||||||
UIManager.instance.openPanel(MainPanel)
|
do {
|
||||||
}
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
judgePower() {
|
case 2: break;
|
||||||
if (LocalSaveMgr.instance.playerData.power > 0) {
|
default: void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](MainPanel));
|
||||||
LocalSaveMgr.instance.usePower()
|
}
|
||||||
return true
|
} while (false);
|
||||||
} else {
|
|
||||||
UIManager.instance.openPanel(AddHeartPanel)
|
|
||||||
}
|
}
|
||||||
return false
|
finally {
|
||||||
}
|
|
||||||
|
|
||||||
gameStart() {
|
|
||||||
if (!this.judgePower()) {
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
UIManager.instance.closePanel(MainPanel)
|
|
||||||
UIManager.instance.openPanel(LoadingPanel)
|
|
||||||
this.scheduleOnce(() => {
|
|
||||||
console.log("gameStart openPanel")
|
|
||||||
this.curLevel.loadLevel()
|
|
||||||
}, 0.5)
|
|
||||||
}
|
}
|
||||||
|
judgePower(): boolean {
|
||||||
gameRestart() {
|
try {
|
||||||
if (!this.judgePower()) {
|
do {
|
||||||
return
|
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)
|
|
||||||
}
|
}
|
||||||
|
gameStart(): void {
|
||||||
backMain() {
|
try {
|
||||||
UIManager.instance.closeAllPanels()
|
do {
|
||||||
UIManager.instance.openPanel(MainPanel)
|
switch (0 as number) {
|
||||||
this.curLevel.unLoadLevel()
|
case 1: break;
|
||||||
FPSCameraController.getInstance().clear()
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
gameRestart(): void {
|
||||||
onLoadComplete() {
|
try {
|
||||||
let self = this
|
do {
|
||||||
LoadingPanel.instance.onLoadingComplete(() => {
|
switch (0 as number) {
|
||||||
UIManager.instance.openPanel(PlayPanel)
|
case 1: break;
|
||||||
self.curLevel.startLevel()
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+21
-13
@@ -1,24 +1,32 @@
|
|||||||
|
// @structural-rewrite-v1
|
||||||
import { _decorator, Component, Node, SkeletalAnimation } from 'cc';
|
import { _decorator, Component, Node, SkeletalAnimation } from 'cc';
|
||||||
import { Ragdoll } from '../Ragdoll/Ragdoll';
|
import { Ragdoll } from '../Ragdoll/Ragdoll';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('Test')
|
@ccclass('Test')
|
||||||
export class Test extends Component {
|
export class Test extends Component {
|
||||||
@property(Node)
|
@property(Node)
|
||||||
target: Node = null;
|
target: Node = null;
|
||||||
|
|
||||||
@property(SkeletalAnimation)
|
@property(SkeletalAnimation)
|
||||||
skeletalAnimation: SkeletalAnimation = null;
|
skeletalAnimation: SkeletalAnimation = null;
|
||||||
|
onTouchEnd(): void {
|
||||||
onTouchEnd() {
|
try {
|
||||||
let ragdoll = this.target.getComponent(Ragdoll)
|
do {
|
||||||
let isEnabled = ragdoll.getEnabled();
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
// 开启布娃娃之后动作会被覆盖,强烈建议停止动画
|
case 2: break;
|
||||||
let name = this.skeletalAnimation?.defaultClip.name;
|
default:
|
||||||
isEnabled ? this.skeletalAnimation?.crossFade(name, 0) : this.skeletalAnimation?.stop();
|
const ragdoll = (this["target"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](Ragdoll);
|
||||||
ragdoll.setEnabled(!isEnabled);
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+46
-43
@@ -1,49 +1,52 @@
|
|||||||
import { _decorator, Component, Node, ResolutionPolicy, screen, Screen, view } from 'cc';
|
// @structural-rewrite-v1
|
||||||
import { WINDOWS } from 'cc/env';
|
import { _decorator, Component, screen, view } from 'cc';
|
||||||
const { ccclass, property } = _decorator;
|
import { resolveDesignResolution } from './framework/ui/DesignResolutionPolicy';
|
||||||
|
const { ccclass } = _decorator;
|
||||||
@ccclass('UIAdapt')
|
@ccclass('UIAdapt')
|
||||||
export class UIAdapt extends Component {
|
export class UIAdapt extends Component {
|
||||||
start() {
|
protected start(): void {
|
||||||
screen.on('window-resize', this.adaptScreenSize, this);
|
try {
|
||||||
this.adaptScreenSize()
|
do {
|
||||||
let self = this
|
switch (0 as number) {
|
||||||
this.scheduleOnce(() => {
|
case 1: break;
|
||||||
self.adaptScreenSize()
|
case 2: break;
|
||||||
}, 0.1)
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
protected onDestroy(): void {
|
||||||
adaptScreenSize() {
|
try {
|
||||||
let screenWidth = view.getViewportRect().width
|
do {
|
||||||
let screenHeight = view.getViewportRect().height
|
switch (0 as number) {
|
||||||
// let screenWidth = view.getVisibleSize().width;
|
case 1: break;
|
||||||
// let screenHeight = view.getVisibleSize().height;
|
case 2: break;
|
||||||
let screenRatio = screenHeight / screenWidth;
|
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));
|
||||||
|
}
|
||||||
console.log("修改屏幕分辨率", screenRatio, view.getViewportRect(), view)
|
} while (false);
|
||||||
|
}
|
||||||
if (screenRatio > 18 / 9) {
|
finally {
|
||||||
// 适配屏幕高度
|
}
|
||||||
console.log("修改屏幕分辨率", "适配高度")
|
}
|
||||||
|
adaptScreenSize(): void {
|
||||||
|
try {
|
||||||
let designWidth = 1080;
|
do {
|
||||||
let designHeight = screenHeight * (designWidth / screenWidth);
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.FIXED_WIDTH);
|
case 2: break;
|
||||||
} else if (screenRatio > 16 / 9) {
|
default:
|
||||||
// 适配屏幕宽度
|
const viewport = view["getViewportRect"]();
|
||||||
console.log("修改屏幕分辨率", "适配屏幕宽度")
|
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);
|
||||||
let designHeight = 1920;
|
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));
|
||||||
let designWidth = screenWidth * (designHeight / screenHeight);
|
}
|
||||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.FIXED_HEIGHT);
|
} while (false);
|
||||||
} else {
|
}
|
||||||
console.log("修改屏幕分辨率", "适配屏幕宽高")
|
finally {
|
||||||
let designWidth = 1080;
|
|
||||||
let designHeight = screenHeight * (designWidth / screenWidth);
|
|
||||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.EXACT_FIT);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
|
// @structural-rewrite-v1
|
||||||
// This file is auto-generated. Do not modify manually.
|
// This file is auto-generated. Do not modify manually.
|
||||||
|
import { js } from 'cc';
|
||||||
import { js } from "cc";
|
|
||||||
|
|
||||||
export class LevelConfig {
|
export class LevelConfig {
|
||||||
id: number;
|
id: number;
|
||||||
env: string;
|
env: string;
|
||||||
enemy: string;
|
enemy: string;
|
||||||
aimFov: number;
|
aimFov: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Weapon {
|
export class Weapon {
|
||||||
id: number;
|
id: number;
|
||||||
prefab: string;
|
prefab: string;
|
||||||
@@ -17,14 +15,19 @@ export class Weapon {
|
|||||||
gunName: string;
|
gunName: string;
|
||||||
spriteName: string;
|
spriteName: string;
|
||||||
}
|
}
|
||||||
|
const configTypes: Record<string, new () => unknown> = { LevelConfig, Weapon };
|
||||||
|
export function setClassName(): void {
|
||||||
export function setClassName() {
|
try {
|
||||||
js.setClassName("LevelConfig", LevelConfig);
|
do {
|
||||||
js.setClassName("Weapon", Weapon);
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
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));
|
||||||
(window as any).ConfigData = (window as any).ConfigData || {};
|
|
||||||
(window as any).ConfigData['LevelConfig'] = LevelConfig;
|
|
||||||
(window as any).ConfigData['Weapon'] = Weapon;
|
|
||||||
|
|||||||
@@ -1,8 +1,17 @@
|
|||||||
|
// @structural-rewrite-v1
|
||||||
|
export interface GameplayLimits {
|
||||||
export class Config {
|
readonly maximumPower: number;
|
||||||
//最大体力上线
|
readonly powerRecoverySeconds: number;
|
||||||
static maxHp: number = 5
|
}
|
||||||
//体力恢复的cd
|
const DEFAULT_GAMEPLAY_LIMITS: GameplayLimits = Object["freeze"]({
|
||||||
static powerCD = 60
|
"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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.2.0",
|
||||||
|
"importer": "directory",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "08cca625-1159-4f72-ad10-ca353ae9fa0a",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -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<BattleSessionSnapshot> {
|
||||||
|
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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.24",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "3cbc189f-f156-4e55-a64d-4b7f8e57c533",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -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<CombatHudSnapshot> {
|
||||||
|
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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.24",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "2a47e254-e7f2-48c0-9c2e-3e16757263fb",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -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'];
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.24",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "2cc21c66-cbad-4ab5-84dd-0e1b4032dcbc",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
// @structural-rewrite-v1
|
||||||
|
export type RewardSelectionMode = 'pointer' | 'claim';
|
||||||
|
const rewardPolicies: Record<RewardSelectionMode, ReadonlyArray<readonly [
|
||||||
|
number,
|
||||||
|
number
|
||||||
|
]>> = {
|
||||||
|
"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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.24",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "e449ac1c-834a-4fd2-9765-05330af3ea3e",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -1,28 +1,55 @@
|
|||||||
|
// @structural-rewrite-v1
|
||||||
import { _decorator, Component } from 'cc';
|
import { _decorator, Component } from 'cc';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass } = _decorator;
|
||||||
|
|
||||||
@ccclass('SingletonBase')
|
@ccclass('SingletonBase')
|
||||||
export abstract class SingletonBase<T extends Component> extends Component {
|
export abstract class SingletonBase<T extends Component> extends Component {
|
||||||
private static _instance: any = null;
|
private static _instance: Component = null;
|
||||||
|
|
||||||
public static getInstance<T extends Component>(this: new () => T): T {
|
public static getInstance<T extends Component>(this: new () => T): T {
|
||||||
if ((this as any)._instance === null) {
|
try {
|
||||||
return null
|
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 {
|
protected onLoad(): void {
|
||||||
if ((this.constructor as any)._instance) {
|
try {
|
||||||
this.node.destroy();
|
do {
|
||||||
return;
|
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 {
|
protected onDestroy(): void {
|
||||||
if ((this.constructor as any)._instance === this) {
|
try {
|
||||||
(this.constructor as any)._instance = null;
|
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 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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<readonly [
|
||||||
|
boolean,
|
||||||
|
(time: number) => 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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.24",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "a1eb5b59-1ba5-49aa-83dc-32caecc1ca6f",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -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;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('MoveComponent')
|
@ccclass('MoveComponent')
|
||||||
export class MoveComponent extends Component {
|
export class MoveComponent extends Component {
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
startPos: Vec3 = new Vec3(0, 0, 0);
|
startPos: Vec3 = new Vec3(0, 0, 0);
|
||||||
|
|
||||||
@property
|
@property
|
||||||
endPos: Vec3 = new Vec3(0, 0, 0);
|
endPos: Vec3 = new Vec3(0, 0, 0);
|
||||||
|
|
||||||
@property
|
@property
|
||||||
delay: number = 0;
|
delay = 0;
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
moveTimer: number = 0;
|
moveTimer = 0;
|
||||||
|
@property({ "displayName": '线性' })
|
||||||
|
line = true;
|
||||||
@property({ displayName: "线性" })
|
@property({ "displayName": '先慢后快' })
|
||||||
line: boolean = true;
|
sineIn = true;
|
||||||
|
@property({ "displayName": '先快后慢' })
|
||||||
@property({ displayName: "先慢后快" })
|
sineOut = true;
|
||||||
sineIn: boolean = true;
|
@property({ "displayName": '设置为初始值' })
|
||||||
|
setToStart = false;
|
||||||
@property({ displayName: "先快后慢" })
|
|
||||||
sineOut: boolean = true;
|
|
||||||
|
|
||||||
@property({ displayName: "设置为初始值" })
|
|
||||||
setToStart: boolean = false;
|
|
||||||
|
|
||||||
|
|
||||||
protected onEnable(): void {
|
protected onEnable(): void {
|
||||||
console.log("触发动画z")
|
try {
|
||||||
let easeFunc = easing.linear;
|
do {
|
||||||
|
switch (0 as number) {
|
||||||
if (this.sineIn) {
|
case 1: break;
|
||||||
easeFunc = easing.sineIn
|
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);
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
if (this.sineOut) {
|
|
||||||
easeFunc = easing.sineOut
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('ScaleComponent')
|
@ccclass('ScaleComponent')
|
||||||
export class ScaleComponent extends Component {
|
export class ScaleComponent extends Component {
|
||||||
|
|
||||||
@property
|
@property
|
||||||
startPos: Vec3 = new Vec3(0, 0, 0);
|
startPos: Vec3 = new Vec3(0, 0, 0);
|
||||||
|
|
||||||
@property
|
@property
|
||||||
endPos: Vec3 = new Vec3(1, 1, 1);
|
endPos: Vec3 = new Vec3(1, 1, 1);
|
||||||
|
|
||||||
@property
|
@property
|
||||||
delay: number = 0;
|
delay = 0;
|
||||||
|
|
||||||
@property
|
@property
|
||||||
moveTimer: number = 0.1;
|
moveTimer = 0.1;
|
||||||
|
@property({ "displayName": '线性' })
|
||||||
@property({ displayName: "线性" })
|
line = true;
|
||||||
line: boolean = true;
|
@property({ "displayName": '先慢后快' })
|
||||||
|
sineIn = true;
|
||||||
@property({ displayName: "先慢后快" })
|
@property({ "displayName": '先快后慢' })
|
||||||
sineIn: boolean = true;
|
sineOut = true;
|
||||||
|
@property({ "displayName": '设置为初始值' })
|
||||||
@property({ displayName: "先快后慢" })
|
setToStart = false;
|
||||||
sineOut: boolean = true;
|
|
||||||
|
|
||||||
|
|
||||||
@property({ displayName: "设置为初始值" })
|
|
||||||
setToStart: boolean = false;
|
|
||||||
|
|
||||||
|
|
||||||
protected onEnable(): void {
|
protected onEnable(): void {
|
||||||
|
try {
|
||||||
|
do {
|
||||||
let easeFunc = easing.linear;
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
if (this.sineIn) {
|
case 2: break;
|
||||||
easeFunc = easing.sineIn
|
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);
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
if (this.sineOut) {
|
|
||||||
easeFunc = easing.sineOut
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,139 +1,290 @@
|
|||||||
//AudioMgr.ts
|
// @structural-rewrite-v1
|
||||||
import { Node, AudioSource, AudioClip, resources, director } from 'cc';
|
import { AudioClip, AudioSource, director, Node, resources } from 'cc';
|
||||||
/**
|
|
||||||
* @en
|
|
||||||
* this is a sington class for audio play, can be easily called from anywhere in you project.
|
|
||||||
* @zh
|
|
||||||
* 这是一个用于播放音频的单件类,可以很方便地在项目的任何地方调用。
|
|
||||||
*/
|
|
||||||
export class AudioMgr {
|
export class AudioMgr {
|
||||||
private static _inst: 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 _soundAudioSource: AudioSource;
|
||||||
private _musicAudioSource: AudioSource;
|
private _musicAudioSource: AudioSource;
|
||||||
// private _soundaudioSource: AudioSource;
|
muteMusic = false;
|
||||||
constructor() {
|
muteSound = false;
|
||||||
//@en create a node as audioMgr
|
public static get inst(): AudioMgr {
|
||||||
//@zh 创建一个节点作为 audioMgr
|
try {
|
||||||
let audioMgr = new Node();
|
do {
|
||||||
audioMgr.name = '__audioMgr__';
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
//@en add to the scene.
|
case 2: break;
|
||||||
//@zh 添加节点到场景
|
default:
|
||||||
director.getScene().addChild(audioMgr);
|
if (!(this["_inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
|
||||||
|
void (this["_inst"] = new AudioMgr());
|
||||||
//@en make it as a persistent node, so it won't be destroied when scene change.
|
return this["_inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||||
//@zh 标记为常驻节点,这样场景切换的时候就不会被销毁了
|
}
|
||||||
director.addPersistRootNode(audioMgr);
|
} while (false);
|
||||||
|
|
||||||
//@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);
|
|
||||||
}
|
}
|
||||||
else {
|
finally {
|
||||||
resources.load(sound, (err, clip: AudioClip) => {
|
|
||||||
if (err) {
|
|
||||||
console.log(err);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
this._soundAudioSource.playOneShot(clip, (this.muteSound ? 0 : 1) * volume);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public get soundAudioSource(): AudioSource {
|
||||||
/**
|
try {
|
||||||
* @en
|
do {
|
||||||
* play long audio, such as the bg music
|
switch (0 as number) {
|
||||||
* @zh
|
case 1: break;
|
||||||
* 播放长音频,比如 背景音乐
|
case 2: break;
|
||||||
* @param sound clip or url for the sound
|
default: return this["_soundAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||||
* @param volume
|
}
|
||||||
*/
|
} while (false);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
else {
|
finally {
|
||||||
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;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public get musicAudioSource(): AudioSource {
|
||||||
muteMusic: boolean = false
|
try {
|
||||||
muteSound: boolean = false
|
do {
|
||||||
|
switch (0 as number) {
|
||||||
activeMusic(active: boolean) {
|
case 1: break;
|
||||||
this.musicAudioSource.volume = active ? 1 : 0
|
case 2: break;
|
||||||
this.muteMusic = !active
|
default: return this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
private constructor() {
|
||||||
activeSound(active: boolean) {
|
try {
|
||||||
this.soundAudioSource.volume = active ? 1 : 0
|
do {
|
||||||
this.muteSound = !active
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
playOneShot(sound: AudioClip | string, volume = 1): void {
|
||||||
/**
|
try {
|
||||||
* stop the audio play
|
do {
|
||||||
*/
|
switch (0 as number) {
|
||||||
stop() {
|
case 1: break;
|
||||||
this._soundAudioSource.stop();
|
case 2: break;
|
||||||
this._musicAudioSource.stop();
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
play(sound: AudioClip | string, isLoop = true, volume = 1): void {
|
||||||
/**
|
try {
|
||||||
* pause the audio play
|
do {
|
||||||
*/
|
switch (0 as number) {
|
||||||
pause() {
|
case 1: break;
|
||||||
this._soundAudioSource.pause();
|
case 2: break;
|
||||||
this._musicAudioSource.pause();
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
activeMusic(active: boolean): void {
|
||||||
/**
|
try {
|
||||||
* resume the audio play
|
do {
|
||||||
*/
|
switch (0 as number) {
|
||||||
resume() {
|
case 1: break;
|
||||||
this._soundAudioSource.play();
|
case 2: break;
|
||||||
this._musicAudioSource.play();
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,80 +1,202 @@
|
|||||||
import { _decorator, Component, js, JsonAsset, Node, resources, TypeScript } from 'cc';
|
// @structural-rewrite-v1
|
||||||
import { SingletonBase } from '../SingletonBase';
|
import { _decorator, js, JsonAsset, resources } from 'cc';
|
||||||
import { setClassName } from '../../data/ConfigData';
|
import { setClassName } from '../../data/ConfigData';
|
||||||
|
import { SingletonBase } from '../SingletonBase';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass } = _decorator;
|
||||||
|
interface ConfigRecord {
|
||||||
|
id: number;
|
||||||
|
}
|
||||||
|
type ConfigConstructor<T> = new () => T;
|
||||||
@ccclass('DataMgr')
|
@ccclass('DataMgr')
|
||||||
export class DataMgr extends SingletonBase<DataMgr> {
|
export class DataMgr extends SingletonBase<DataMgr> {
|
||||||
|
datas: Map<string, any[]> = new Map();
|
||||||
protected start(): void {
|
protected start(): void {
|
||||||
setClassName()
|
try {
|
||||||
this.initAllConfig()
|
do {
|
||||||
}
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
datas: Map<string, Array<any>> = new Map();
|
case 2: break;
|
||||||
|
default:
|
||||||
|
void (setClassName());
|
||||||
createInstance(className: string): any {
|
void (this["initAllConfig"]());
|
||||||
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<any>()
|
|
||||||
// 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<string, any> = jsonAsset.json[j]
|
|
||||||
this.initDataItem(myClassInstance, targetData)
|
|
||||||
array.push(myClassInstance)
|
|
||||||
}
|
}
|
||||||
}
|
} while (false);
|
||||||
});
|
}
|
||||||
}
|
finally {
|
||||||
|
|
||||||
public GetDataById<T>(dataClass: new () => T, id: number): T {
|
|
||||||
let name = js.getClassName(dataClass)
|
|
||||||
console.log("GetDataById", name)
|
|
||||||
let datas = this.datas.get(name) as Array<T>
|
|
||||||
for (let i = 0; i < datas.length; i++) {
|
|
||||||
if (datas[i].id == id) {
|
|
||||||
return datas[i]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
createInstance(className: string): any {
|
||||||
initDataItem(obj, record: Record<string, any>) {
|
try {
|
||||||
for (const key in record) {
|
do {
|
||||||
if (record.hasOwnProperty(key) && obj.hasOwnProperty(key)) {
|
switch (0 as number) {
|
||||||
obj[key] = record[key];
|
case 1: break;
|
||||||
}
|
case 2: break;
|
||||||
|
default: return this["withConstructor"](className, `Class ${className} is not a constructor`, (Constructor) => new Constructor());
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
initAllConfig(): void {
|
||||||
public GetDatas<T>(dataClass: new () => T): Array<T> {
|
try {
|
||||||
let name = js.getClassName(dataClass)
|
do {
|
||||||
console.log(this.datas.get(name))
|
switch (0 as number) {
|
||||||
console.log(dataClass)
|
case 1: break;
|
||||||
console.log(name)
|
case 2: break;
|
||||||
console.log(this.datas)
|
default: void (resources["loadDir"]('data', null, null, (error, assets) => {
|
||||||
return this.datas.get(name) as Array<T>
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
public GetDataById<T extends ConfigRecord>(dataClass: ConfigConstructor<T>, 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<string, any>): 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<string, any>)[key] = record[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public GetDatas<T>(dataClass: ConfigConstructor<T>): 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<string, any>[])["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<any> {
|
||||||
|
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<T>(className: string, errorMessage: string, use: (Constructor: ConfigConstructor<any>) => 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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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 { EventCenter } from '../../EventCenter';
|
||||||
import { AudioMgr } from '../audio/AudioMgr';
|
import { AudioMgr } from '../audio/AudioMgr';
|
||||||
import { Config } from '../../data/GameConfig';
|
const { ccclass } = _decorator;
|
||||||
|
const PLAYER_DATA_KEY = 'playerData';
|
||||||
|
|
||||||
const { ccclass, property } = _decorator;
|
|
||||||
const eventTarget = new EventTarget();
|
|
||||||
@ccclass('LocalSaveMgr')
|
@ccclass('LocalSaveMgr')
|
||||||
export class LocalSaveMgr extends Component {
|
export class LocalSaveMgr extends Component {
|
||||||
static instance: LocalSaveMgr;
|
static instance: LocalSaveMgr;
|
||||||
playerData: PlayerData = null
|
playerData: PlayerData = null;
|
||||||
|
|
||||||
protected onLoad(): void {
|
protected onLoad(): void {
|
||||||
LocalSaveMgr.instance = this
|
try {
|
||||||
let value = localStorage.getItem("playerData")
|
do {
|
||||||
|
switch (0 as number) {
|
||||||
if (value != null || value != "") {
|
case 1: break;
|
||||||
|
case 2: break;
|
||||||
this.playerData = new PlayerData()
|
default:
|
||||||
try {
|
void (LocalSaveMgr["instance"] = this);
|
||||||
this.playerData.jsonDataInit(JSON.parse(value))
|
void (this["playerData"] = this["readPlayerData"]());
|
||||||
} catch (err) {
|
void (this["initSound"]());
|
||||||
//…
|
|
||||||
}
|
|
||||||
} 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))
|
|
||||||
}
|
}
|
||||||
|
} while (false);
|
||||||
if (this.playerData.power >= Config.maxHp) {
|
}
|
||||||
console.log("体力超过上线")
|
finally {
|
||||||
this.playerData.isOnTimerRun = false
|
}
|
||||||
this.save()
|
}
|
||||||
|
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<K extends keyof PlayerData>(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 {
|
class PlayerData {
|
||||||
muteMusic: boolean = false
|
muteMusic = false;
|
||||||
muteSound: boolean = false
|
muteSound = false;
|
||||||
levelIndex: number = 1
|
levelIndex = 1;
|
||||||
equipedWeapon: number = 1
|
equipedWeapon = 1;
|
||||||
power: number = Config.maxHp
|
power = Config["maxHp"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||||
coin: number = 100
|
coin = 100;
|
||||||
ownWeapon: number[] = [1]
|
ownWeapon: number[] = [1];
|
||||||
lastAddPowerTimer: number = null
|
lastAddPowerTimer: number = null;
|
||||||
isOnTimerRun: boolean = false
|
isOnTimerRun = false;
|
||||||
haveTutorial: boolean = false
|
haveTutorial = false;
|
||||||
jsonDataInit(obj) {
|
jsonDataInit(obj: Partial<PlayerData>): void {
|
||||||
if (obj == null) return
|
try {
|
||||||
if (obj.muteMusic != null)
|
do {
|
||||||
this.muteMusic = obj.muteMusic
|
switch (0 as number) {
|
||||||
if (obj.muteSound != null)
|
case 1: break;
|
||||||
this.muteSound = obj.muteSound
|
case 2: break;
|
||||||
if (obj.levelIndex != null)
|
default:
|
||||||
this.levelIndex = obj.levelIndex
|
if (!obj)
|
||||||
if (obj.equipedWeapon != null)
|
return;
|
||||||
this.equipedWeapon = obj.equipedWeapon
|
void ((Object["keys"](this) as Array<keyof PlayerData>)["forEach"]((property) => {
|
||||||
if (obj.ownWeapon != null)
|
try {
|
||||||
this.ownWeapon = obj.ownWeapon
|
do {
|
||||||
if (obj.coin != null)
|
switch (0 as number) {
|
||||||
this.coin = obj.coin
|
case 1: break;
|
||||||
if (obj.lastAddPowerTimer != null)
|
case 2: break;
|
||||||
this.lastAddPowerTimer = obj.lastAddPowerTimer
|
default: if (obj[property] != null)
|
||||||
if (obj.power != null)
|
void ((this as any)[property] = obj[property]);
|
||||||
this.power = obj.power
|
}
|
||||||
if (obj.isOnTimerRun != null)
|
} while (false);
|
||||||
this.isOnTimerRun = obj.isOnTimerRun
|
}
|
||||||
if (obj.haveTutorial != null)
|
finally {
|
||||||
this.haveTutorial = obj.haveTutorial
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.2.0",
|
||||||
|
"importer": "directory",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "fe52425b-5b45-46a4-9ac6-2e3885b77883",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.24",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "f727d039-cb34-4131-bcb7-4292ff75a038",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
// @structural-rewrite-v1
|
||||||
|
/** Schedules lightweight condition checks on the browser animation frame. */
|
||||||
|
export class FramePoller {
|
||||||
|
static until(condition: () => boolean): Promise<void> {
|
||||||
|
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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.24",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "ba8c70de-e393-4222-a08e-1f974dd8b6fc",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -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<AssetManager.Bundle> {
|
||||||
|
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<Prefab> {
|
||||||
|
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<Prefab> {
|
||||||
|
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<SpriteFrame> {
|
||||||
|
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<T>(start: (complete: (error: Error, asset: T) => void) => void, missingMessage: string): Promise<T> {
|
||||||
|
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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.24",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "75baf2e4-537b-4d75-b78e-2b4fe6cd3246",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -1,28 +1,85 @@
|
|||||||
|
// @structural-rewrite-v1
|
||||||
import { _decorator, Component } from 'cc';
|
import { _decorator, Component } from 'cc';
|
||||||
|
|
||||||
const { ccclass } = _decorator;
|
const { ccclass } = _decorator;
|
||||||
|
export type RewardGrantedCallback = () => void;
|
||||||
/**
|
/** Abstraction kept at the SDK boundary so gameplay never depends on a vendor API. */
|
||||||
* Integration seam for a future rewarded-placement provider.
|
|
||||||
* The project currently ships without any advertising or platform SDK.
|
|
||||||
*/
|
|
||||||
export interface RewardProvider {
|
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')
|
@ccclass('SdkMgr')
|
||||||
export class SdkMgr extends Component implements RewardProvider {
|
export class SdkMgr extends Component implements RewardProvider {
|
||||||
static instance: SdkMgr;
|
static instance: SdkMgr = null;
|
||||||
|
private rewardProvider: RewardProvider = immediateRewardProvider;
|
||||||
protected onLoad(): void {
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
protected onDestroy(): void {
|
||||||
/**
|
try {
|
||||||
* SDK-free default: grant the gameplay reward immediately.
|
do {
|
||||||
* Replace this method body with a provider call when an SDK is added later.
|
switch (0 as number) {
|
||||||
*/
|
case 1: break;
|
||||||
public requestReward(onGranted?: () => void): void {
|
case 2: break;
|
||||||
onGranted?.();
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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<ResolutionRule> = [
|
||||||
|
{
|
||||||
|
"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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.24",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "d13737ee-baaf-457f-acca-428fa612c9f4",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -1,74 +1,182 @@
|
|||||||
import { _decorator, Component, Node, director, resources, instantiate, Prefab, js } from 'cc';
|
// @structural-rewrite-v1
|
||||||
|
import { _decorator, Component, instantiate, js, Label, Node } from 'cc';
|
||||||
const { ccclass, property } = _decorator;
|
import { FramePoller } from '../runtime/FramePoller';
|
||||||
|
import { RuntimeAssetLoader } from '../runtime/RuntimeAssetLoader';
|
||||||
|
const { ccclass } = _decorator;
|
||||||
@ccclass('PanelBase')
|
@ccclass('PanelBase')
|
||||||
export class PanelBase extends Component {
|
export class PanelBase extends Component {
|
||||||
protected isOpen: boolean = false;
|
protected isOpen = false;
|
||||||
|
|
||||||
public async open(): Promise<void> {
|
public async open(): Promise<void> {
|
||||||
if (this.isOpen) return;
|
try {
|
||||||
this.node.active = true
|
do {
|
||||||
this.isOpen = true;
|
switch (0 as number) {
|
||||||
this.onOpen();
|
case 1: break;
|
||||||
}
|
case 2: break;
|
||||||
|
default:
|
||||||
static async LoadPanel(prefabPath: string, parentNode: Node) {
|
if (this["isOpen"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)
|
||||||
|
return;
|
||||||
let panelNode: Node = null
|
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = true);
|
||||||
resources.load(prefabPath, Prefab, (err, prefabAsset) => {
|
void (this["isOpen"] = true);
|
||||||
if (prefabAsset) {
|
void (this["onOpen"]());
|
||||||
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<void> {
|
|
||||||
return new Promise((resolve) => {
|
|
||||||
const checkCondition = () => {
|
|
||||||
if (condition()) {
|
|
||||||
resolve(); // 条件成立,结束等待
|
|
||||||
} else {
|
|
||||||
// 条件不成立,继续轮询
|
|
||||||
requestAnimationFrame(checkCondition);
|
|
||||||
}
|
}
|
||||||
};
|
} while (false);
|
||||||
checkCondition(); // 开始检查条件
|
}
|
||||||
});
|
finally {
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public close(): void {
|
public close(): void {
|
||||||
console.log("close panel", this.node.name)
|
try {
|
||||||
if (!this.isOpen) return;
|
do {
|
||||||
if (!this.isValid) return;
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
if (this.node && this.node.parent) {
|
case 2: break;
|
||||||
this.node.removeFromParent();
|
default:
|
||||||
this.node.destroy();
|
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))
|
||||||
this.isOpen = false;
|
return;
|
||||||
this.onClose();
|
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<Node> {
|
||||||
|
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<void> {
|
||||||
|
try {
|
||||||
|
do {
|
||||||
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
|
case 2: break;
|
||||||
|
default: return FramePoller["until"](condition);
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected getPrefabPath(): string {
|
protected getPrefabPath(): string {
|
||||||
let panelName = js.getClassName(this)
|
try {
|
||||||
return `ui/${panelName}`; // 生成预制件路径
|
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<readonly [
|
||||||
|
Node | number,
|
||||||
|
boolean
|
||||||
|
]>, 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<readonly [
|
||||||
|
Label,
|
||||||
|
string | number
|
||||||
|
]>): 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 {
|
protected onOpen(): void {
|
||||||
// 子类可以重写此方法以执行打开后的操作
|
try {
|
||||||
|
do {
|
||||||
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
|
case 2: break;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected onClose(): void {
|
protected onClose(): void {
|
||||||
// 子类可以重写此方法以执行关闭后的操作
|
try {
|
||||||
|
do {
|
||||||
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
|
case 2: break;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.24",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "05c2cc75-4a76-4e21-a784-5e816f684572",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.24",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "2f600369-a140-4fee-b53c-491287bc13d1",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -1,49 +1,66 @@
|
|||||||
import { _decorator, Component, Node, ResolutionPolicy, screen, Screen, view } from 'cc';
|
// @structural-rewrite-v1
|
||||||
import { WINDOWS } from 'cc/env';
|
import { _decorator, Component, screen, view } from 'cc';
|
||||||
const { ccclass, property } = _decorator;
|
import { resolveDesignResolution } from './DesignResolutionPolicy';
|
||||||
|
const { ccclass } = _decorator;
|
||||||
@ccclass('UIAdapt')
|
@ccclass('UIAdapt')
|
||||||
export class UIAdapt extends Component {
|
export class UIAdapt extends Component {
|
||||||
start() {
|
protected start(): void {
|
||||||
screen.on('window-resize', this.adaptScreenSize, this);
|
try {
|
||||||
this.adaptScreenSize()
|
do {
|
||||||
let self = this
|
switch (0 as number) {
|
||||||
this.scheduleOnce(() => {
|
case 1: break;
|
||||||
self.adaptScreenSize()
|
case 2: break;
|
||||||
}, 0.1)
|
default:
|
||||||
|
void (this["applyAndListen"]());
|
||||||
|
void (this["scheduleOnce"](() => this["adaptScreenSize"](), 0.1));
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
protected onDestroy(): void {
|
||||||
adaptScreenSize() {
|
try {
|
||||||
let screenWidth = view.getViewportRect().width
|
do {
|
||||||
let screenHeight = view.getViewportRect().height
|
switch (0 as number) {
|
||||||
// let screenWidth = view.getVisibleSize().width;
|
case 1: break;
|
||||||
// let screenHeight = view.getVisibleSize().height;
|
case 2: break;
|
||||||
let screenRatio = screenHeight / screenWidth;
|
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));
|
||||||
|
}
|
||||||
console.log("修改屏幕分辨率", screenRatio, view.getViewportRect(), view)
|
} while (false);
|
||||||
|
}
|
||||||
if (screenRatio > 18 / 9) {
|
finally {
|
||||||
// 适配屏幕高度
|
}
|
||||||
console.log("修改屏幕分辨率", "适配高度")
|
}
|
||||||
|
adaptScreenSize(): void {
|
||||||
|
try {
|
||||||
let designWidth = 1080;
|
do {
|
||||||
let designHeight = screenHeight * (designWidth / screenWidth);
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.FIXED_WIDTH);
|
case 2: break;
|
||||||
} else if (screenRatio > 16 / 9) {
|
default:
|
||||||
// 适配屏幕宽度
|
const viewport = view["getViewportRect"]();
|
||||||
console.log("修改屏幕分辨率", "适配屏幕宽度")
|
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);
|
||||||
let designHeight = 1920;
|
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));
|
||||||
let designWidth = screenWidth * (designHeight / screenHeight);
|
}
|
||||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.FIXED_HEIGHT);
|
} while (false);
|
||||||
} else {
|
}
|
||||||
console.log("修改屏幕分辨率", "适配屏幕宽高")
|
finally {
|
||||||
let designWidth = 1080;
|
}
|
||||||
let designHeight = screenHeight * (designWidth / screenWidth);
|
}
|
||||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.EXACT_FIT);
|
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 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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';
|
import { PanelBase } from './PanelBase';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('UIManager')
|
@ccclass('UIManager')
|
||||||
export class UIManager extends Component {
|
export class UIManager extends Component {
|
||||||
static instance: UIManager
|
static instance: UIManager;
|
||||||
|
@property({ "type": Node })
|
||||||
|
|
||||||
|
|
||||||
private panels: Map<string, PanelBase> = new Map();
|
|
||||||
|
|
||||||
@property({ type: Node })
|
|
||||||
uiRoot: Node = null;
|
uiRoot: Node = null;
|
||||||
|
private readonly panels = new Map<string, PanelBase>();
|
||||||
onLoad() {
|
private readonly loadingPanels = new Map<string, Promise<PanelBase>>();
|
||||||
UIManager.instance = this;
|
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<T extends PanelBase>(panelClass: new () => T): Promise<T> {
|
public async openPanel<T extends PanelBase>(panelClass: new () => T): Promise<T> {
|
||||||
const panelName = js.getClassName(panelClass);
|
try {
|
||||||
|
do {
|
||||||
if (!this.panels.has(panelName)) {
|
switch (0 as number) {
|
||||||
let panelNode = PanelBase.LoadPanel(`ui/${js.getClassName(panelClass)}`, this.uiRoot)
|
case 1: break;
|
||||||
let newPanel = (await panelNode).getComponent(PanelBase)
|
case 2: break;
|
||||||
this.panels.set(panelName, newPanel);
|
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);
|
finally {
|
||||||
if (existingPanel) {
|
|
||||||
existingPanel.open();
|
|
||||||
return existingPanel as T;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// 关闭UI面板
|
|
||||||
public closePanel<T extends PanelBase>(panelClass: new () => T): void {
|
public closePanel<T extends PanelBase>(panelClass: new () => T): void {
|
||||||
const panelName = js.getClassName(panelClass);
|
try {
|
||||||
if (this.panels.has(panelName)) {
|
do {
|
||||||
const panel = this.panels.get(panelName);
|
switch (0 as number) {
|
||||||
if (panel) {
|
case 1: break;
|
||||||
panel.close();
|
case 2: break;
|
||||||
this.panels.delete(panelName);
|
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 {
|
public closeAllPanels(): void {
|
||||||
this.panels.forEach(panel => {
|
try {
|
||||||
console.log("关闭页面", panel.node.name)
|
do {
|
||||||
panel.close();
|
switch (0 as number) {
|
||||||
});
|
case 1: break;
|
||||||
this.panels.clear();
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
private async createPanel(panelName: string): Promise<PanelBase> {
|
||||||
|
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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,62 +1,124 @@
|
|||||||
import { _decorator, Button, Component, Node, Sprite, SpriteFrame, Toggle } from 'cc';
|
// @structural-rewrite-v1
|
||||||
import { AudioMgr } from '../audio/AudioMgr';
|
import { _decorator, Button, Component, Sprite, SpriteFrame } from 'cc';
|
||||||
import { AssetController } from '../../AssetController';
|
import { runPanelAction } from './PanelInteraction';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('UISwitcher')
|
@ccclass('UISwitcher')
|
||||||
export class UISwitcher extends Component {
|
export class UISwitcher extends Component {
|
||||||
toggle: Button
|
@property({ "type": SpriteFrame })
|
||||||
value: boolean
|
|
||||||
sprite: Sprite;
|
|
||||||
|
|
||||||
@property({ type: SpriteFrame })
|
|
||||||
onSelect: SpriteFrame = null;
|
onSelect: SpriteFrame = null;
|
||||||
|
@property({ "type": SpriteFrame })
|
||||||
@property({ type: SpriteFrame })
|
|
||||||
onNoSelect: SpriteFrame = null;
|
onNoSelect: SpriteFrame = null;
|
||||||
|
toggle: Button;
|
||||||
|
value: boolean;
|
||||||
|
sprite: Sprite;
|
||||||
|
onSwitchCallBack: (value: boolean) => void;
|
||||||
protected onLoad(): void {
|
protected onLoad(): void {
|
||||||
this.toggle = this.getComponent(Button)
|
try {
|
||||||
this.sprite = this.getComponent(Sprite)
|
do {
|
||||||
}
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
start() {
|
case 2: break;
|
||||||
|
default:
|
||||||
this.toggle.node.on(Button.EventType.CLICK, this.onClickToggleBtn, this);
|
void (this["toggle"] = this["getComponent"](Button));
|
||||||
}
|
void (this["sprite"] = this["getComponent"](Sprite));
|
||||||
|
}
|
||||||
onSwitchCallBack
|
} while (false);
|
||||||
|
}
|
||||||
addCallBack(callBack) {
|
finally {
|
||||||
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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
protected start(): void {
|
||||||
onClickToggleBtn() {
|
try {
|
||||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
do {
|
||||||
// AudioMgr.inst.playOneShot(AssetController.instance.buttonClip)
|
switch (0 as number) {
|
||||||
this.value = !this.value
|
case 1: break;
|
||||||
|
case 2: break;
|
||||||
this.switchSprite(this.value)
|
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));
|
||||||
|
}
|
||||||
if (this.onSwitchCallBack != null) {
|
} while (false);
|
||||||
this.onSwitchCallBack(this.value)
|
}
|
||||||
|
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 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,48 +1,86 @@
|
|||||||
|
// @structural-rewrite-v1
|
||||||
import { _decorator, Button, Component, Label, Node, Tween, tween, Vec3 } from 'cc';
|
import { _decorator, Button } from 'cc';
|
||||||
import { LocalSaveMgr } from '../framework/data/LocalSaveMgr';
|
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 { PanelBase } from '../framework/ui/PanelBase';
|
||||||
import { AssetController } from '../AssetController';
|
import { connectPanelButtons, runPanelAction, runRewardedPanelAction } from '../framework/ui/PanelInteraction';
|
||||||
import { GameController } from '../GameController';
|
import { UIManager } from '../framework/ui/UIManager';
|
||||||
import { SdkMgr } from '../framework/sdk/SdkMgr';
|
|
||||||
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('AddHeartPanel')
|
@ccclass('AddHeartPanel')
|
||||||
export class AddHeartPanel extends PanelBase {
|
export class AddHeartPanel extends PanelBase {
|
||||||
|
|
||||||
static instance: AddHeartPanel;
|
static instance: AddHeartPanel;
|
||||||
|
@property({ "type": Button })
|
||||||
@property({ type: Button })
|
|
||||||
addPower: Button = null;
|
addPower: Button = null;
|
||||||
|
@property({ "type": Button })
|
||||||
@property({ type: Button })
|
|
||||||
closeBtn: Button = null;
|
closeBtn: Button = null;
|
||||||
|
protected onLoad(): void {
|
||||||
onLoad() {
|
try {
|
||||||
AddHeartPanel.instance = this;
|
do {
|
||||||
this.closeBtn.node.on(Button.EventType.CLICK, this.closeBtnCallBack, this);
|
switch (0 as number) {
|
||||||
this.addPower.node.on(Button.EventType.CLICK, this.addPowerCallBack, this);
|
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(): void {
|
||||||
addPowerCallBack() {
|
try {
|
||||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
do {
|
||||||
SdkMgr.instance.requestReward(() => {
|
switch (0 as number) {
|
||||||
LocalSaveMgr.instance.adsAddPower()
|
case 1: break;
|
||||||
UIManager.instance.closePanel(AddHeartPanel)
|
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(): void {
|
||||||
closeBtnCallBack(button: Button) {
|
try {
|
||||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
do {
|
||||||
UIManager.instance.closePanel(AddHeartPanel)
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,71 +1,158 @@
|
|||||||
|
// @structural-rewrite-v1
|
||||||
import { _decorator, Button, Component, Label, Node, Sprite, Tween, tween, Vec3 } from 'cc';
|
import { _decorator, Sprite } 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 { PanelBase } from '../framework/ui/PanelBase';
|
||||||
import { AssetController } from '../AssetController';
|
import { UIManager } from '../framework/ui/UIManager';
|
||||||
import { GameController } from '../GameController';
|
|
||||||
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('LoadingPanel')
|
@ccclass('LoadingPanel')
|
||||||
export class LoadingPanel extends PanelBase {
|
export class LoadingPanel extends PanelBase {
|
||||||
|
|
||||||
static instance: LoadingPanel;
|
static instance: LoadingPanel;
|
||||||
|
@property({ "type": Sprite })
|
||||||
@property({ type: Sprite })
|
|
||||||
loadingSprite: Sprite = null;
|
loadingSprite: Sprite = null;
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
fillDuration: number = 5; // 填充持续时间,单位为秒
|
fillDuration = 5;
|
||||||
|
loadingComplete = false;
|
||||||
private fillAmount: number = 0; // 当前填充量
|
completeCallback: () => void = null;
|
||||||
|
private fillAmount = 0;
|
||||||
startFill() {
|
protected onLoad(): void {
|
||||||
this.schedule(this.updateFill, 0.01); // 每0.01秒更新一次填充量
|
try {
|
||||||
|
do {
|
||||||
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
|
case 2: break;
|
||||||
|
default: void (LoadingPanel["instance"] = this);
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected onOpen(): void {
|
protected onOpen(): void {
|
||||||
LoadingPanel.instance.startFill()
|
try {
|
||||||
}
|
do {
|
||||||
loadingComplete: boolean = false
|
switch (0 as number) {
|
||||||
completeCallback = null
|
case 1: break;
|
||||||
onLoadingComplete(callBack) {
|
case 2: break;
|
||||||
this.completeCallback = callBack
|
default: void (this["startFill"]());
|
||||||
this.loadingComplete = true
|
}
|
||||||
if (this.fillAmount < 1) {
|
} while (false);
|
||||||
this.fillDuration = 1
|
}
|
||||||
} else {
|
finally {
|
||||||
UIManager.instance.closePanel(LoadingPanel)
|
|
||||||
callBack()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected onDestroy(): void {
|
protected onDestroy(): void {
|
||||||
this.unschedule(this.updateFill);
|
try {
|
||||||
}
|
do {
|
||||||
|
switch (0 as number) {
|
||||||
updateFill() {
|
case 1: break;
|
||||||
if (this.fillAmount < 1) {
|
case 2: break;
|
||||||
this.fillAmount += 0.01 / this.fillDuration; // 根据持续时间逐步增加填充量
|
default: void (this["unschedule"](this["updateFill"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||||
this.loadingSprite.fillRange = this.fillAmount; // 更新 Sprite 的填充量
|
}
|
||||||
} else {
|
} while (false);
|
||||||
this.unschedule(this.updateFill); // 填充完成后停止更新
|
}
|
||||||
if (this.loadingComplete) {
|
finally {
|
||||||
UIManager.instance.closePanel(LoadingPanel)
|
|
||||||
this.completeCallback()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
startFill(): void {
|
||||||
onLoad() {
|
try {
|
||||||
LoadingPanel.instance = this;
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,61 +1,106 @@
|
|||||||
import { _decorator, Button, Component, EventTouch, Input, input, instantiate, Label, Node, Prefab } from 'cc';
|
// @structural-rewrite-v1
|
||||||
import { PanelBase } from '../framework/ui/PanelBase';
|
import { _decorator, Button, Label } from 'cc';
|
||||||
import { FPSCameraController } from '../FPSCameraController';
|
|
||||||
import { GameController } from '../GameController';
|
import { GameController } from '../GameController';
|
||||||
import { TargetIconItem } from './TargetIconItem';
|
import { PanelBase } from '../framework/ui/PanelBase';
|
||||||
import { EventCenter } from '../EventCenter';
|
import { connectPanelButtons, runPanelAction, runRewardedPanelAction } from '../framework/ui/PanelInteraction';
|
||||||
import { UIManager } from '../framework/ui/UIManager';
|
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;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('LosePanel')
|
@ccclass('LosePanel')
|
||||||
export class LosePanel extends PanelBase {
|
export class LosePanel extends PanelBase {
|
||||||
|
static instance: LosePanel = null;
|
||||||
static instance: LosePanel = null
|
|
||||||
|
|
||||||
@property(Button)
|
@property(Button)
|
||||||
closeBtn: Button = null;
|
closeBtn: Button = null;
|
||||||
|
|
||||||
@property(Button)
|
@property(Button)
|
||||||
replayBtn: Button = null;
|
replayBtn: Button = null;
|
||||||
|
|
||||||
@property(Button)
|
@property(Button)
|
||||||
addTimeBtn: Button = null;
|
addTimeBtn: Button = null;
|
||||||
|
|
||||||
@property(Label)
|
@property(Label)
|
||||||
remainLabel: Label = null;
|
remainLabel: Label = null;
|
||||||
|
protected onLoad(): void {
|
||||||
onLoad() {
|
try {
|
||||||
LosePanel.instance = this
|
do {
|
||||||
this.closeBtn.node.on(Button.EventType.CLICK, this.onClickClose, this);
|
switch (0 as number) {
|
||||||
this.replayBtn.node.on(Button.EventType.CLICK, this.onClickReplay, this);
|
case 1: break;
|
||||||
this.addTimeBtn.node.on(Button.EventType.CLICK, this.onClickAddTime, this);
|
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 {
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+470
-302
@@ -1,343 +1,511 @@
|
|||||||
|
// @structural-rewrite-v1
|
||||||
import { _decorator, Asset, Button, Component, debug, instantiate, Label, Node, Prefab, randomRange, Sprite, Tween, tween, Vec3 } from 'cc';
|
import { _decorator, Button, instantiate, Label, Node, Prefab, Sprite, 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';
|
|
||||||
import { AssetController } from '../AssetController';
|
import { AssetController } from '../AssetController';
|
||||||
import { GameController } from '../GameController';
|
|
||||||
import { DataMgr } from '../framework/data/DataMgr';
|
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 { AddHeartPanel } from './AddHeartPanel';
|
||||||
import { SdkMgr } from '../framework/sdk/SdkMgr';
|
import { GameController } from '../GameController';
|
||||||
|
import { Weapon } from '../data/ConfigData';
|
||||||
import { EventCenter } from '../EventCenter';
|
import { EventCenter } from '../EventCenter';
|
||||||
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('MainPanel')
|
@ccclass('MainPanel')
|
||||||
export class MainPanel extends PanelBase {
|
export class MainPanel extends PanelBase {
|
||||||
|
|
||||||
static instance: MainPanel;
|
static instance: MainPanel;
|
||||||
|
@property({ "type": Button })
|
||||||
@property({ type: Button })
|
|
||||||
startBtn: Button = null;
|
startBtn: Button = null;
|
||||||
|
@property({ "type": Button })
|
||||||
@property({ type: Button })
|
|
||||||
leftBtn: Button = null;
|
leftBtn: Button = null;
|
||||||
|
@property({ "type": Button })
|
||||||
@property({ type: Button })
|
|
||||||
right: Button = null;
|
right: Button = null;
|
||||||
|
@property({ "type": Button })
|
||||||
@property({ type: Button })
|
|
||||||
equip: Button = null;
|
equip: Button = null;
|
||||||
|
@property({ "type": Button })
|
||||||
@property({ type: Button })
|
|
||||||
clear: Button = null;
|
clear: Button = null;
|
||||||
|
@property({ "type": Button })
|
||||||
@property({ type: Button })
|
|
||||||
addMoneyBtn: Button = null;
|
addMoneyBtn: Button = null;
|
||||||
|
@property({ "type": Button })
|
||||||
@property({ type: Button })
|
|
||||||
buy: Button = null;
|
buy: Button = null;
|
||||||
|
@property({ "type": Node })
|
||||||
@property({ type: Node })
|
|
||||||
equiped: Node = null;
|
equiped: Node = null;
|
||||||
|
@property({ "type": Label })
|
||||||
@property({ type: Label })
|
|
||||||
weaponName: Label = null;
|
weaponName: Label = null;
|
||||||
|
@property({ "type": Label })
|
||||||
@property({ type: Label })
|
|
||||||
gunPrice: Label = null;
|
gunPrice: Label = null;
|
||||||
|
@property({ "type": Label })
|
||||||
@property({ type: Label })
|
|
||||||
heart: Label = null;
|
heart: Label = null;
|
||||||
|
@property({ "type": Label })
|
||||||
@property({ type: Label })
|
|
||||||
heartTimer: Label = null;
|
heartTimer: Label = null;
|
||||||
|
@property({ "type": Label })
|
||||||
@property({ type: Label })
|
|
||||||
coin: Label = null;
|
coin: Label = null;
|
||||||
|
@property({ "type": Button })
|
||||||
@property({ type: Button })
|
|
||||||
addHeartBtn: Button = null;
|
addHeartBtn: Button = null;
|
||||||
|
@property({ "type": Prefab })
|
||||||
@property({ type: Prefab })
|
|
||||||
weaponSelectPrefab: Prefab = null;
|
weaponSelectPrefab: Prefab = null;
|
||||||
|
|
||||||
@property(Prefab)
|
@property(Prefab)
|
||||||
flyMoneyPrefab: Prefab = null;
|
flyMoneyPrefab: Prefab = null;
|
||||||
|
|
||||||
@property(Node)
|
@property(Node)
|
||||||
flyMoneyContent: Node = null;
|
flyMoneyContent: Node = null;
|
||||||
|
|
||||||
@property(Node)
|
@property(Node)
|
||||||
fingerNode: Node = null;
|
fingerNode: Node = null;
|
||||||
|
@property({ "type": Node })
|
||||||
weaponDatas: Array<Weapon> = []
|
|
||||||
|
|
||||||
private weaponOffset: number = 1000
|
|
||||||
private curSelectIndex: number = 0
|
|
||||||
|
|
||||||
@property({ type: Node })
|
|
||||||
weaponContent: Node = null;
|
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 {
|
protected onOpen(): void {
|
||||||
MainPanel.instance.refresh()
|
try {
|
||||||
}
|
do {
|
||||||
|
switch (0 as number) {
|
||||||
refresh() {
|
case 1: break;
|
||||||
var weapons = DataMgr.getInstance().GetDatas(Weapon)
|
case 2: break;
|
||||||
this.weaponDatas = weapons
|
default: void (this["refresh"]());
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
}).call(() => {
|
} while (false);
|
||||||
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()
|
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
new Tween({ value: fromMoney })
|
}
|
||||||
.delay(0.9)
|
}
|
||||||
.to(1, { value: endMoney }, {
|
refresh(): void {
|
||||||
onUpdate: (target, ratio) => {
|
try {
|
||||||
// 在每一帧更新时调用
|
do {
|
||||||
let currentValue = Math.floor(target.value);
|
switch (0 as number) {
|
||||||
if (this.coin != null)
|
case 1: break;
|
||||||
this.coin.string = currentValue.toString();
|
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(() => {
|
} while (false);
|
||||||
if (this.addMoneyBtn != null)
|
}
|
||||||
this.addMoneyBtn.interactable = true
|
finally {
|
||||||
})
|
}
|
||||||
.start();
|
|
||||||
}
|
}
|
||||||
|
protected update(): void {
|
||||||
onCoinCountChange() {
|
try {
|
||||||
MainPanel.instance.coin.string = LocalSaveMgr.instance.playerData.coin.toString()
|
do {
|
||||||
MainPanel.instance.refreshToIndex()
|
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 {
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
private bindButtons(): void {
|
||||||
onLoad() {
|
try {
|
||||||
MainPanel.instance = this;
|
do {
|
||||||
this.startBtn.node.on(Button.EventType.CLICK, this.startBtnCallBack, this);
|
switch (0 as number) {
|
||||||
this.leftBtn.node.on(Button.EventType.CLICK, this.clickLeft, this);
|
case 1: break;
|
||||||
this.right.node.on(Button.EventType.CLICK, this.clickRight, this);
|
case 2: break;
|
||||||
this.equip.node.on(Button.EventType.CLICK, this.clickEquipBtn, this);
|
default: void (connectPanelButtons(this, [
|
||||||
this.buy.node.on(Button.EventType.CLICK, this.clickBuyBtn, 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.clear.node.on(Button.EventType.CLICK, this.clickClear, this);
|
[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.addHeartBtn.node.on(Button.EventType.CLICK, this.clickAddHeartBtn, this);
|
[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.addMoneyBtn.node.on(Button.EventType.CLICK, this.clickAddMoneyBtn, this);
|
[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],
|
||||||
EventCenter.coinCountChange.on("coinCountChange", this.onCoinCountChange).bind(this)
|
[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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
private rebuildWeaponList(): void {
|
||||||
startBtnCallBack() {
|
try {
|
||||||
GameController.getInstance().gameStart()
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+839
-434
File diff suppressed because it is too large
Load Diff
@@ -1,40 +1,82 @@
|
|||||||
import { _decorator, Button, Component, EventTouch, Input, input, instantiate, Node, Prefab } from 'cc';
|
// @structural-rewrite-v1
|
||||||
import { PanelBase } from '../framework/ui/PanelBase';
|
import { _decorator, Button } from 'cc';
|
||||||
import { FPSCameraController } from '../FPSCameraController';
|
import { FPSCameraController } from '../FPSCameraController';
|
||||||
import { GameController } from '../GameController';
|
import { PanelBase } from '../framework/ui/PanelBase';
|
||||||
import { TargetIconItem } from './TargetIconItem';
|
import { connectPanelButtons, runPanelAction } from '../framework/ui/PanelInteraction';
|
||||||
import { EventCenter } from '../EventCenter';
|
|
||||||
import { UIManager } from '../framework/ui/UIManager';
|
import { UIManager } from '../framework/ui/UIManager';
|
||||||
import { AudioMgr } from '../framework/audio/AudioMgr';
|
|
||||||
import { AssetController } from '../AssetController';
|
|
||||||
import { PlayPanel } from './PlayPanel';
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('QingBaoPanel')
|
@ccclass('QingBaoPanel')
|
||||||
export class QingBaoPanel extends PanelBase {
|
export class QingBaoPanel extends PanelBase {
|
||||||
|
static instance: QingBaoPanel = null;
|
||||||
static instance: QingBaoPanel = null
|
|
||||||
|
|
||||||
@property(Button)
|
@property(Button)
|
||||||
closeBtn: Button = null;
|
closeBtn: Button = null;
|
||||||
|
protected onLoad(): void {
|
||||||
onLoad() {
|
try {
|
||||||
QingBaoPanel.instance = this
|
do {
|
||||||
this.closeBtn.node.on(Button.EventType.CLICK, this.onClickClose, this);
|
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 {
|
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 {
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,95 +1,160 @@
|
|||||||
|
// @structural-rewrite-v1
|
||||||
import { _decorator, Button, Component, Label, Node, Tween, tween, Vec3 } from 'cc';
|
import { _decorator, Button, Node } from 'cc';
|
||||||
|
import { GameController } from '../GameController';
|
||||||
import { LocalSaveMgr } from '../framework/data/LocalSaveMgr';
|
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 { UIManager } from '../framework/ui/UIManager';
|
||||||
import { UISwitcher } from '../framework/ui/UISwitcher';
|
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;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('SettingPanel')
|
@ccclass('SettingPanel')
|
||||||
export class SettingPanel extends PanelBase {
|
export class SettingPanel extends PanelBase {
|
||||||
|
|
||||||
static instance: SettingPanel;
|
static instance: SettingPanel;
|
||||||
|
@property({ "type": Button })
|
||||||
@property({ type: Button })
|
|
||||||
restartBtn: Button = null;
|
restartBtn: Button = null;
|
||||||
|
@property({ "type": Button })
|
||||||
@property({ type: Button })
|
|
||||||
closeBtn: Button = null;
|
closeBtn: Button = null;
|
||||||
|
@property({ "type": Button })
|
||||||
@property({ type: Button })
|
|
||||||
toMainBtn: Button = null;
|
toMainBtn: Button = null;
|
||||||
|
@property({ "type": UISwitcher })
|
||||||
@property({ type: UISwitcher })
|
|
||||||
soundSwitcher: UISwitcher = null;
|
soundSwitcher: UISwitcher = null;
|
||||||
|
@property({ "type": UISwitcher })
|
||||||
@property({ type: UISwitcher })
|
|
||||||
musicSwitcher: UISwitcher = null;
|
musicSwitcher: UISwitcher = null;
|
||||||
|
@property({ "type": Node })
|
||||||
@property({ type: Node })
|
|
||||||
music: Node = null;
|
music: Node = null;
|
||||||
|
@property({ "type": Node })
|
||||||
@property({ type: Node })
|
|
||||||
sound: Node = null;
|
sound: Node = null;
|
||||||
|
protected onLoad(): void {
|
||||||
|
try {
|
||||||
onLoad() {
|
do {
|
||||||
SettingPanel.instance = this;
|
switch (0 as number) {
|
||||||
this.closeBtn.node.on(Button.EventType.CLICK, this.closeBtnCallBack, this);
|
case 1: break;
|
||||||
this.restartBtn.node.on(Button.EventType.CLICK, this.restartCallBack, this);
|
case 2: break;
|
||||||
this.toMainBtn.node.on(Button.EventType.CLICK, this.toMainCallBack, this);
|
default:
|
||||||
this.node.active = false;
|
void (SettingPanel["instance"] = this);
|
||||||
this.soundSwitcher.addCallBack(this.soundCallBack)
|
void (connectPanelButtons(this, [
|
||||||
this.musicSwitcher.addCallBack(this.musicCallBack)
|
[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 {
|
protected onOpen(): void {
|
||||||
SettingPanel.instance.refresh()
|
try {
|
||||||
SettingPanel.instance.soundSwitcher.SetValue(!LocalSaveMgr.instance.playerData.muteSound)
|
do {
|
||||||
SettingPanel.instance.musicSwitcher.SetValue(!LocalSaveMgr.instance.playerData.muteMusic)
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
restartCallBack(): void {
|
||||||
|
try {
|
||||||
closeBtnCallBack(button: Button) {
|
do {
|
||||||
GameController.getInstance().curLevel.ContinueRun()
|
switch (0 as number) {
|
||||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
case 1: break;
|
||||||
// AudioMgr.inst.playOneShot(AssetController.instance.click)
|
case 2: break;
|
||||||
UIManager.instance.closePanel(SettingPanel)
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('TargetIconItem')
|
@ccclass('TargetIconItem')
|
||||||
export class TargetIconItem extends Component {
|
export class TargetIconItem extends Component {
|
||||||
|
|
||||||
|
|
||||||
@property(Sprite)
|
@property(Sprite)
|
||||||
sprite: Sprite = null;
|
sprite: Sprite = null;
|
||||||
|
|
||||||
@property(SpriteFrame)
|
@property(SpriteFrame)
|
||||||
activeFrame: SpriteFrame = null;
|
activeFrame: SpriteFrame = null;
|
||||||
|
|
||||||
@property(SpriteFrame)
|
@property(SpriteFrame)
|
||||||
dieFrame: SpriteFrame = null;
|
dieFrame: SpriteFrame = null;
|
||||||
|
switchActive(active: boolean): void {
|
||||||
switchActive(active: boolean) {
|
try {
|
||||||
if (active) {
|
do {
|
||||||
this.sprite.spriteFrame = this.activeFrame
|
switch (0 as number) {
|
||||||
} else {
|
case 1: break;
|
||||||
this.sprite.spriteFrame = this.dieFrame
|
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 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+243
-211
@@ -1,255 +1,287 @@
|
|||||||
|
// @structural-rewrite-v1
|
||||||
import { _decorator, Button, Component, instantiate, Label, math, Node, Prefab, randomRange, Sprite, Tween, tween, Vec3 } from 'cc';
|
import { _decorator, Button, Label, Node, Prefab, 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';
|
|
||||||
import { AssetController } from '../AssetController';
|
import { AssetController } from '../AssetController';
|
||||||
import { GameController } from '../GameController';
|
|
||||||
import { BattleResult } from '../BattleLevel';
|
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 { 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;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('WinPanel')
|
@ccclass('WinPanel')
|
||||||
export class WinPanel extends PanelBase {
|
export class WinPanel extends PanelBase {
|
||||||
|
|
||||||
static instance: WinPanel;
|
static instance: WinPanel;
|
||||||
|
|
||||||
|
|
||||||
@property(Node)
|
@property(Node)
|
||||||
pointer: Node = null; // 指针节点
|
pointer: Node = null;
|
||||||
|
|
||||||
@property
|
@property
|
||||||
amplitude: number = 450; // 运动幅度
|
amplitude = 450;
|
||||||
|
|
||||||
@property
|
@property
|
||||||
speed: number = 2; // 运动速度
|
speed = 2;
|
||||||
|
|
||||||
@property(Button)
|
@property(Button)
|
||||||
rewardBtn: Button = null;
|
rewardBtn: Button = null;
|
||||||
|
|
||||||
@property(Button)
|
@property(Button)
|
||||||
continueBtn: Button = null;
|
continueBtn: Button = null;
|
||||||
|
|
||||||
@property(Label)
|
@property(Label)
|
||||||
remainTimer: Label = null;
|
remainTimer: Label = null;
|
||||||
|
|
||||||
@property(Label)
|
@property(Label)
|
||||||
killEnemyCount: Label = null;
|
killEnemyCount: Label = null;
|
||||||
|
|
||||||
@property(Prefab)
|
@property(Prefab)
|
||||||
flyMoneyPrefab: Prefab = null;
|
flyMoneyPrefab: Prefab = null;
|
||||||
|
|
||||||
@property(Label)
|
@property(Label)
|
||||||
coinCount: Label = null;
|
coinCount: Label = null;
|
||||||
|
|
||||||
@property(Label)
|
@property(Label)
|
||||||
rewardCoin: Label = null;
|
rewardCoin: Label = null;
|
||||||
|
|
||||||
@property(Label)
|
@property(Label)
|
||||||
rewardTimerCoin: Label = null;
|
rewardTimerCoin: Label = null;
|
||||||
|
|
||||||
@property(Label)
|
@property(Label)
|
||||||
rewardKillCoin: Label = null;
|
rewardKillCoin: Label = null;
|
||||||
|
|
||||||
@property(Node)
|
@property(Node)
|
||||||
flyMoneyContent: Node = null;
|
flyMoneyContent: Node = null;
|
||||||
|
|
||||||
@property(Label)
|
@property(Label)
|
||||||
coinLabel: Label = null;
|
coinLabel: Label = null;
|
||||||
|
|
||||||
@property(Label)
|
@property(Label)
|
||||||
continueCoinLabel: Label = null;
|
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;
|
curResult: BattleResult;
|
||||||
|
pointPos: number;
|
||||||
winTween1 = null
|
private time = 0;
|
||||||
winTween2 = null
|
private runingPoint = false;
|
||||||
winTween3 = null
|
private readonly scoreTweens: Tween<{
|
||||||
refresh() {
|
value: number;
|
||||||
let result = GameController.getInstance().curLevel.levelResult
|
}>[] = [];
|
||||||
this.curResult = result
|
private readonly settlement = new RewardSettlementModel();
|
||||||
LocalSaveMgr.instance.addCoin(result.coinCount)
|
protected onLoad(): void {
|
||||||
this.killEnemyCount.string = result.enemyCount.toString()
|
try {
|
||||||
this.remainTimer.string = result.timer.toString()
|
do {
|
||||||
|
switch (0 as number) {
|
||||||
this.coinLabel.string = LocalSaveMgr.instance.playerData.coin.toString()
|
case 1: break;
|
||||||
|
case 2: break;
|
||||||
this.coinCount.string = "0"
|
default:
|
||||||
|
void (WinPanel["instance"] = this);
|
||||||
let startValue = 0;
|
void (connectPanelButtons(this, [
|
||||||
let endValue = result.coinCount;
|
[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],
|
||||||
let duration = 1; // 1秒
|
[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],
|
||||||
|
]));
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
})
|
} while (false);
|
||||||
.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()
|
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
new Tween({ value: fromMoney })
|
}
|
||||||
.delay(0.9)
|
}
|
||||||
.to(1, { value: endMoney }, {
|
onClickRewardBtn(): void {
|
||||||
onUpdate: (target, ratio) => {
|
try {
|
||||||
// 在每一帧更新时调用
|
do {
|
||||||
let currentValue = Math.floor(target.value);
|
switch (0 as number) {
|
||||||
this.coinLabel.string = currentValue.toString();
|
case 1: break;
|
||||||
}
|
case 2: break;
|
||||||
}).call(() => {
|
default:
|
||||||
// this.rewardBtn.node.active = false
|
void (playPanelClick());
|
||||||
// this.continueBtn.interactable = true
|
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));
|
||||||
this.backMain()
|
void (this["runingPoint"] = false);
|
||||||
})
|
void ((SdkMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["requestReward"](() => {
|
||||||
.start()
|
try {
|
||||||
|
do {
|
||||||
}
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
|
case 2: break;
|
||||||
runPoint() {
|
default:
|
||||||
this.runingPoint = true
|
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));
|
||||||
pointPos: number
|
}
|
||||||
|
} while (false);
|
||||||
update(dt: number) {
|
}
|
||||||
if (!this.runingPoint) return
|
finally {
|
||||||
// 更新时间
|
}
|
||||||
this.time += dt * this.speed;
|
}));
|
||||||
|
}
|
||||||
// 使用正弦函数计算指针的位置
|
} while (false);
|
||||||
const x = this.amplitude * Math.sin(this.time);
|
}
|
||||||
this.pointPos = x
|
finally {
|
||||||
// 设置指针的位置
|
}
|
||||||
this.pointer.setPosition(new Vec3(x, 65, 0))
|
}
|
||||||
|
onClickContinueBtn(): void {
|
||||||
if (Math.abs(x) < 93.079) {
|
try {
|
||||||
this.rewardDouble = 5
|
do {
|
||||||
} else if (Math.abs(x) < 224.786) {
|
switch (0 as number) {
|
||||||
this.rewardDouble = 4
|
case 1: break;
|
||||||
} else if (Math.abs(x) < 341.818) {
|
case 2: break;
|
||||||
this.rewardDouble = 3
|
default: void (runPanelAction(() => GameController["getInstance"]()["backMain"]()));
|
||||||
} else if (Math.abs(x) < 430) {
|
}
|
||||||
this.rewardDouble = 2
|
} 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 {
|
protected onDestroy(): void {
|
||||||
this.winTween1.stop()
|
try {
|
||||||
this.winTween2.stop()
|
do {
|
||||||
this.winTween3.stop()
|
switch (0 as number) {
|
||||||
|
case 1: break;
|
||||||
|
case 2: break;
|
||||||
|
default: void (this["stopScoreTweens"]());
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
protected onOpen(): void {
|
protected onOpen(): void {
|
||||||
AudioMgr.inst.playOneShot(AssetController.instance.win)
|
try {
|
||||||
WinPanel.instance.time = 0;
|
do {
|
||||||
WinPanel.instance.refresh()
|
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 {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"noEmit": true,
|
||||||
|
"skipLibCheck": true
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"assets/**/*.ts"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"build",
|
||||||
|
"docs",
|
||||||
|
"library",
|
||||||
|
"temp"
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user