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';
|
||||
import { RagdollBone } from './RagdollBone';
|
||||
import { RagdollConstraint } from './RagdollConstraint';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Collider, Component, Material, Node, PhysicsSystem, RigidBody, SkinnedMeshRenderer, SphereCollider } from 'cc';
|
||||
import { AssetController } from '../scripts/AssetController';
|
||||
import { GameController } from '../scripts/GameController';
|
||||
import { AudioMgr } from '../scripts/framework/audio/AudioMgr';
|
||||
import { AssetController } from '../scripts/AssetController';
|
||||
import { RagdollBone } from './RagdollBone';
|
||||
import { RagdollConstraint } from './RagdollConstraint';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('Ragdoll')
|
||||
export class Ragdoll extends Component {
|
||||
@property(Node)
|
||||
rootNode: Node = null;
|
||||
|
||||
@property(Node)
|
||||
centerNode: Node = null;
|
||||
|
||||
@property(SkinnedMeshRenderer)
|
||||
renderer: SkinnedMeshRenderer = null;
|
||||
|
||||
|
||||
@property(Material)
|
||||
siwang: Material; // 新的材质
|
||||
|
||||
private realBones: Array<Node> = [];
|
||||
private simuBones: Array<Node> = [];
|
||||
|
||||
private simuBoneJointArr: Array<CANNON.ConeTwistConstraint> = [];
|
||||
|
||||
siwang: Material;
|
||||
isDie = false;
|
||||
private realBones: Node[] = [];
|
||||
private simuBones: Node[] = [];
|
||||
private simuBoneJointArr: CANNON.ConeTwistConstraint[] = [];
|
||||
private world: any;
|
||||
|
||||
private isEnabled: boolean = false;
|
||||
|
||||
|
||||
start() {
|
||||
this.world = PhysicsSystem.instance.physicsWorld.impl;
|
||||
this.initRagdoll()
|
||||
}
|
||||
|
||||
private initRagdoll() {
|
||||
// 压入真实骨骼
|
||||
this.getAllRealBones(this.rootNode)
|
||||
|
||||
// 创建模拟骨骼
|
||||
this.createSimuBones();
|
||||
|
||||
// 创建模拟骨骼的关节
|
||||
this.createSimuBoneJoints();
|
||||
}
|
||||
|
||||
createSimuBones() {
|
||||
for (let boneNode of this.realBones) {
|
||||
let node = new Node
|
||||
node.addComponent(SphereCollider).radius = 0.2 * node.worldScale.x
|
||||
node.addComponent(RigidBody)
|
||||
|
||||
this.node.addChild(node)
|
||||
this.simuBones.push(node)
|
||||
|
||||
this.syncPositionAndRotation(node, boneNode)
|
||||
// 同步之后将位置赋给初始位置
|
||||
let ragdollBone = boneNode.getComponent(RagdollBone)
|
||||
ragdollBone.simuNode = node
|
||||
ragdollBone.initPos = boneNode.getPosition();
|
||||
ragdollBone.initRot = boneNode.getRotation();
|
||||
private isEnabled = false;
|
||||
protected start(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["world"] = ((PhysicsSystem["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["physicsWorld"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["impl"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
void (this["initRagdoll"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
|
||||
this.scheduleOnce(() => {
|
||||
for (let bone of this.simuBones) {
|
||||
let body = bone.getComponent(RigidBody)
|
||||
body.sleep()
|
||||
}
|
||||
}, 0)
|
||||
}
|
||||
|
||||
createSimuBoneJoints() {
|
||||
for (let boneNode of this.realBones) {
|
||||
const joint = boneNode.getComponent(RagdollConstraint)
|
||||
if (joint) {
|
||||
const simuNodeA = boneNode.getComponent(RagdollBone).simuNode
|
||||
const simuNodeB = joint.connectedBone.getComponent(RagdollBone).simuNode
|
||||
const bodyA = simuNodeA.getComponent(RigidBody).body.impl
|
||||
const bodyB = simuNodeB.getComponent(RigidBody).body.impl
|
||||
|
||||
let spineJoint = new CANNON.ConeTwistConstraint(bodyA, bodyB, {
|
||||
pivotA: new CANNON.Vec3(joint.pivotA.x, joint.pivotA.y, joint.pivotA.z),
|
||||
pivotB: new CANNON.Vec3(joint.pivotB.x, joint.pivotB.y, joint.pivotB.z),
|
||||
axisA: new CANNON.Vec3(joint.axisA.x, joint.axisA.y, joint.axisA.z),
|
||||
axisB: new CANNON.Vec3(joint.axisB.x, joint.axisB.y, joint.axisB.z),
|
||||
angle: joint.angle,
|
||||
twistAngle: joint.twistAngle
|
||||
})
|
||||
this.world.addConstraint(spineJoint)
|
||||
this.simuBoneJointArr.push(spineJoint)
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
getAllRealBones(node: Node) {
|
||||
let bones = node.children;
|
||||
for (let boneNode of bones) {
|
||||
const bone = boneNode.getComponent(RagdollBone)
|
||||
if (bone) {
|
||||
this.realBones.push(boneNode)
|
||||
bone.ragdoll = this
|
||||
}
|
||||
this.getAllRealBones(boneNode)
|
||||
protected lateUpdate(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
if (!(this["isEnabled"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
|
||||
return;
|
||||
void (this["updateBones"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
lateUpdate(deltaTime: number) {
|
||||
if (this.isEnabled) {
|
||||
this.updateBones()
|
||||
createSimuBones(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["simuBones"] = (this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["map"]((bone) => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const simulation = new Node();
|
||||
void (simulation["addComponent"](SphereCollider)["radius"] = 0.2 * ((simulation["worldScale"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (simulation["addComponent"](RigidBody));
|
||||
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addChild"](simulation));
|
||||
void (this["syncPositionAndRotation"](simulation, bone));
|
||||
void (bone["getComponent"](RagdollBone)["initializeSimulation"](simulation));
|
||||
return simulation;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
void (this["scheduleOnce"](() => (this["simuBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => bone["getComponent"](RigidBody)["sleep"]()), 0));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
syncPositionAndRotation(nodeA: Node, nodeB: Node) {
|
||||
nodeA.setWorldPosition(nodeB.worldPosition)
|
||||
nodeA.setWorldRotation(nodeB.worldRotation)
|
||||
}
|
||||
|
||||
// 将模拟骨骼的位置和转角同步到真实骨骼
|
||||
private updateBones() {
|
||||
for (let i = 0; i < this.realBones.length; i++) {
|
||||
this.syncPositionAndRotation(this.realBones[i], this.simuBones[i])
|
||||
createSimuBoneJoints(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["simuBoneJointArr"] = (this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["map"]((bone) => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const joint = bone["getComponent"](RagdollConstraint);
|
||||
if (!joint)
|
||||
return null;
|
||||
const bodyA = ((bone["getComponent"](RagdollBone)["simuNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](RigidBody)["body"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["impl"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
const bodyB = (((joint["connectedBone"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](RagdollBone)["simuNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](RigidBody)["body"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["impl"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
const constraint = joint["createConstraint"](bodyA, bodyB);
|
||||
void ((this["world"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addConstraint"](constraint));
|
||||
return constraint;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
})["filter"]((constraint): constraint is CANNON.ConeTwistConstraint => constraint != null));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
getEnabled() {
|
||||
return this.isEnabled;
|
||||
getAllRealBones(node: Node): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void ((node["children"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((child) => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const bone = child["getComponent"](RagdollBone);
|
||||
if (bone) {
|
||||
void ((this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["push"](child));
|
||||
void (bone["ragdoll"] = this);
|
||||
}
|
||||
void (this["getAllRealBones"](child));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
setEnabled(isEnabled: boolean) {
|
||||
if (isEnabled && this.isDie) return
|
||||
isEnabled ? this.enableRagdoll() : this.disableRagdoll();
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.die)
|
||||
syncPositionAndRotation(nodeA: Node, nodeB: Node): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (nodeA["setWorldPosition"](nodeB["worldPosition"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (nodeA["setWorldRotation"](nodeB["worldRotation"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
isDie: boolean = false
|
||||
enableRagdoll() {
|
||||
this.isDie = true
|
||||
GameController.getInstance().curLevel.onEnemyDie(this)
|
||||
// this.renderer.setMaterialInstance(this.siwang, 0)
|
||||
|
||||
this.renderer.material = this.siwang
|
||||
|
||||
// 将模拟骨骼的位置和真实骨骼同步
|
||||
for (let bone of this.realBones) {
|
||||
let ragdollBone = bone.getComponent(RagdollBone)
|
||||
this.syncPositionAndRotation(ragdollBone.simuNode, bone)
|
||||
let collider = ragdollBone.getComponent(Collider)
|
||||
if (collider)
|
||||
collider.enabled = false
|
||||
getEnabled(): boolean {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return this["isEnabled"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
|
||||
for (let bone of this.simuBones) {
|
||||
let body = bone.getComponent(RigidBody)
|
||||
body.wakeUp();
|
||||
finally {
|
||||
}
|
||||
|
||||
// 将关节添加至物理世界
|
||||
for (let joint of this.simuBoneJointArr) {
|
||||
this.world.addConstraint(joint);
|
||||
}
|
||||
|
||||
this.isEnabled = true;
|
||||
}
|
||||
|
||||
disableRagdoll() {
|
||||
// 将真实骨骼移动至初始位置
|
||||
for (let bone of this.realBones) {
|
||||
let ragdollBone = bone.getComponent(RagdollBone);
|
||||
bone.setPosition(ragdollBone.initPos);
|
||||
bone.setRotation(ragdollBone.initRot);
|
||||
setEnabled(isEnabled: boolean): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
if (isEnabled && this["isDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)
|
||||
return;
|
||||
void ([this["disableRagdoll"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["enableRagdoll"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown][Number(isEnabled)]["call"](this));
|
||||
void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["die"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
|
||||
for (let bone of this.simuBones) {
|
||||
let body = bone.getComponent(RigidBody)
|
||||
body.sleep();
|
||||
finally {
|
||||
}
|
||||
|
||||
// 从物理世界中移除关节
|
||||
for (let joint of this.simuBoneJointArr) {
|
||||
this.world.removeConstraint(joint);
|
||||
}
|
||||
enableRagdoll(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["isDie"] = true);
|
||||
void ((GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["onEnemyDie"](this));
|
||||
void ((this["renderer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["material"] = this["siwang"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
void ((this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => this["prepareBoneForPhysics"](bone)));
|
||||
void ((this["simuBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => bone["getComponent"](RigidBody)["wakeUp"]()));
|
||||
void ((this["simuBoneJointArr"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((joint) => (this["world"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addConstraint"](joint)));
|
||||
void (this["isEnabled"] = true);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
disableRagdoll(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void ((this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const ragdollBone = bone["getComponent"](RagdollBone);
|
||||
void (ragdollBone["restorePose"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
void ((this["simuBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => bone["getComponent"](RigidBody)["sleep"]()));
|
||||
void ((this["simuBoneJointArr"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((joint) => (this["world"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["removeConstraint"](joint)));
|
||||
void (this["isEnabled"] = false);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private initRagdoll(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["getAllRealBones"](this["rootNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (this["createSimuBones"]());
|
||||
void (this["createSimuBoneJoints"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private updateBones(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void ((this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone, index) => this["syncPositionAndRotation"](bone, (this["simuBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[index])));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private prepareBoneForPhysics(bone: Node): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const ragdollBone = bone["getComponent"](RagdollBone);
|
||||
void (this["syncPositionAndRotation"](ragdollBone["simuNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, bone));
|
||||
const collider = ragdollBone["getComponent"](Collider);
|
||||
if (collider)
|
||||
void (collider["enabled"] = false);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
|
||||
this.isEnabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,11 +1,42 @@
|
||||
import { _decorator, director, Component, Node, Vec3, v3, math } from "cc";
|
||||
import { Ragdoll } from "./Ragdoll";
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Component, math, Node, v3, Vec3 } from 'cc';
|
||||
import { Ragdoll } from './Ragdoll';
|
||||
const { ccclass } = _decorator;
|
||||
@ccclass('RagdollBone')
|
||||
export class RagdollBone extends Component {
|
||||
simuNode: Node = null;
|
||||
initPos: Vec3 = v3();
|
||||
initRot: math.Quat = new math.Quat();
|
||||
ragdoll: Ragdoll
|
||||
}
|
||||
initRot: math.Quat = new (math["Quat"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)();
|
||||
ragdoll: Ragdoll;
|
||||
initializeSimulation(node: Node): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["simuNode"] = node);
|
||||
void (this["initPos"] = (this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getPosition"]());
|
||||
void (this["initRot"] = (this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getRotation"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
restorePose(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setPosition"](this["initPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setRotation"](this["initRot"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,26 +1,53 @@
|
||||
import { _decorator, CCClass, CCFloat, Component, director, Node, v3, Vec3 } from "cc";
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, CCFloat, Component, Node, v3, Vec3 } from 'cc';
|
||||
const { ccclass, property } = _decorator;
|
||||
@ccclass('RagdollConstraint')
|
||||
export class RagdollConstraint extends Component {
|
||||
@property(Node)
|
||||
connectedBone: Node = null;
|
||||
|
||||
@property(Vec3)
|
||||
pivotA: Vec3 = v3()
|
||||
|
||||
pivotA: Vec3 = v3();
|
||||
@property(Vec3)
|
||||
pivotB: Vec3 = v3()
|
||||
|
||||
pivotB: Vec3 = v3();
|
||||
@property(Vec3)
|
||||
axisA: Vec3 = v3()
|
||||
|
||||
axisA: Vec3 = v3();
|
||||
@property(Vec3)
|
||||
axisB: Vec3 = v3()
|
||||
|
||||
axisB: Vec3 = v3();
|
||||
@property(CCFloat)
|
||||
angle: number = Math.PI / 4;
|
||||
|
||||
angle = (Math["PI"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) / 4;
|
||||
@property(CCFloat)
|
||||
twistAngle: number = Math.PI / 8;
|
||||
}
|
||||
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;
|
||||
|
||||
@ccclass('AssetController')
|
||||
export class AssetController extends Component {
|
||||
static instance: AssetController;
|
||||
|
||||
@property({ type: AudioClip })
|
||||
@property({ "type": AudioClip })
|
||||
fire: AudioClip = null;
|
||||
@property({ type: AudioClip })
|
||||
@property({ "type": AudioClip })
|
||||
click: AudioClip = null;
|
||||
@property({ type: AudioClip })
|
||||
@property({ "type": AudioClip })
|
||||
win: AudioClip = null;
|
||||
@property({ type: AudioClip })
|
||||
@property({ "type": AudioClip })
|
||||
die: AudioClip = null;
|
||||
@property({ type: AudioClip })
|
||||
@property({ "type": AudioClip })
|
||||
xiao: AudioClip = null;
|
||||
|
||||
@property({ type: AudioClip })
|
||||
@property({ "type": AudioClip })
|
||||
getCoin: AudioClip = null;
|
||||
|
||||
onLoad() {
|
||||
AssetController.instance = this;
|
||||
protected onLoad(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (AssetController["instance"] = this);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
loadSetSprite(path: string, sprite: Sprite) {
|
||||
path = path + "/spriteFrame"
|
||||
resources.load(path, SpriteFrame, (err, spriteFrame: SpriteFrame) => {
|
||||
if (err) {
|
||||
console.log(err.message || err);
|
||||
return;
|
||||
}
|
||||
sprite.spriteFrame = spriteFrame;
|
||||
});
|
||||
loadSetSprite(path: string, sprite: Sprite): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (RuntimeAssetLoader["loadSpriteFrame"](`${path}/spriteFrame`)["then"]((spriteFrame) => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: if (sprite?.["isValid"])
|
||||
void (sprite["spriteFrame"] = spriteFrame);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
})["catch"]((error) => console["error"](error)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+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 { EventCenter } from './EventCenter';
|
||||
import { LevelState } from './EnumFile';
|
||||
import { GameController } from './GameController';
|
||||
import { UIManager } from './framework/ui/UIManager';
|
||||
import { WinPanel } from './ui/WinPanel';
|
||||
import { FPSCameraController } from './FPSCameraController';
|
||||
import { GameController } from './GameController';
|
||||
import { DataMgr } from './framework/data/DataMgr';
|
||||
import { LevelConfig, Weapon } from './data/ConfigData';
|
||||
import { LocalSaveMgr } from './framework/data/LocalSaveMgr';
|
||||
import { FramePoller } from './framework/runtime/FramePoller';
|
||||
import { RuntimeAssetLoader } from './framework/runtime/RuntimeAssetLoader';
|
||||
import { UIManager } from './framework/ui/UIManager';
|
||||
import { LevelConfig, Weapon } from './data/ConfigData';
|
||||
import { LosePanel } from './ui/LosePanel';
|
||||
import { WinPanel } from './ui/WinPanel';
|
||||
import { BattlePhase, BattleSessionAction, BattleSessionModel, BattleSessionSnapshot } from './domain/BattleSessionModel';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
const levelStateByPhase: Record<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')
|
||||
export class BattleLevel extends Component {
|
||||
|
||||
@property(Node)
|
||||
roleNode: Node = null; // 相机节点
|
||||
|
||||
enemies: Array<Ragdoll> = [];
|
||||
|
||||
aliveCount: number = 0
|
||||
|
||||
timer: number = 300
|
||||
maxTimer: number = 300
|
||||
|
||||
levelState: LevelState
|
||||
|
||||
levelIndex: number
|
||||
|
||||
envNode: Node = null
|
||||
enemyNode: Node = null
|
||||
gunNode: Node = null
|
||||
levelResult: BattleResult
|
||||
|
||||
roleNode: Node = null;
|
||||
enemies: Ragdoll[] = [];
|
||||
aliveCount = 0;
|
||||
timer = 300;
|
||||
maxTimer = 300;
|
||||
levelState: LevelState;
|
||||
levelIndex: number;
|
||||
envNode: Node = null;
|
||||
enemyNode: Node = null;
|
||||
gunNode: Node = null;
|
||||
levelResult: BattleResult;
|
||||
qingBaoTarget: Ragdoll;
|
||||
saoMiaoTarget: Ragdoll;
|
||||
private readonly session = new BattleSessionModel();
|
||||
protected onLoad(): void {
|
||||
|
||||
}
|
||||
|
||||
waitUntil(condition: () => boolean): Promise<void> {
|
||||
return new Promise((resolve) => {
|
||||
const checkCondition = () => {
|
||||
if (condition()) {
|
||||
resolve(); // 条件成立,结束等待
|
||||
} else {
|
||||
// 条件不成立,继续轮询
|
||||
requestAnimationFrame(checkCondition);
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
}
|
||||
};
|
||||
checkCondition(); // 开始检查条件
|
||||
});
|
||||
}
|
||||
|
||||
initLevel() {
|
||||
this.enemies = []
|
||||
this.aliveCount = 0
|
||||
this.timer = this.maxTimer
|
||||
for (let index = 0; index < this.roleNode.children.length; index++) {
|
||||
let ragdoll = this.roleNode.children[index].getComponent(Ragdoll)
|
||||
if (ragdoll) {
|
||||
this.enemies.push(ragdoll)
|
||||
this.aliveCount += 1
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
|
||||
this.levelState = LevelState.Loading
|
||||
GameController.getInstance().onLoadComplete()
|
||||
}
|
||||
|
||||
async loadLevel() {
|
||||
let loadSceneComplete: boolean = false
|
||||
let loadRoleComplete: boolean = false
|
||||
this.node.destroyAllChildren()
|
||||
|
||||
|
||||
let levelIndex = LocalSaveMgr.instance.playerData.levelIndex
|
||||
if (GameController.getInstance().forceLevelIndex > 1) {
|
||||
levelIndex = GameController.getInstance().forceLevelIndex
|
||||
finally {
|
||||
}
|
||||
|
||||
this.levelIndex = levelIndex
|
||||
// levelIndex = 1
|
||||
|
||||
let config = DataMgr.getInstance().GetDataById(LevelConfig, levelIndex);
|
||||
|
||||
this.qingBaoTarget = null
|
||||
this.saoMiaoTarget = null
|
||||
|
||||
|
||||
console.log("加载关卡", levelIndex, config)
|
||||
|
||||
if (levelIndex <= 30) {
|
||||
// games-display/cdn/SearchAliens/assets/
|
||||
|
||||
AssetManager.instance.loadBundle('level', (err, bundle) => {
|
||||
bundle.load(`env/${config.env}`, Prefab, (err, prefab) => {
|
||||
var item = instantiate(prefab)
|
||||
item.setParent(this.node)
|
||||
loadSceneComplete = true
|
||||
})
|
||||
|
||||
bundle.load(`enemy/${config.enemy}`, Prefab, (err, prefab) => {
|
||||
var item = instantiate(prefab)
|
||||
item.setParent(this.node)
|
||||
FPSCameraController.getInstance().init(item.getChildByPath("Player/Main Camera").getComponent(Camera), config.aimFov)
|
||||
this.roleNode = item
|
||||
let weapon = DataMgr.getInstance().GetDataById(Weapon, LocalSaveMgr.instance.playerData.equipedWeapon)
|
||||
|
||||
resources.load(`weapon/${weapon.prefab}`, Prefab, (err, prefab) => {
|
||||
var gun = instantiate(prefab)
|
||||
this.gunNode = gun
|
||||
gun.setParent(item.getChildByPath(`Player/Main Camera/${weapon.point}`))
|
||||
loadRoleComplete = true
|
||||
});
|
||||
})
|
||||
}
|
||||
);
|
||||
} else {
|
||||
|
||||
|
||||
|
||||
|
||||
AssetManager.instance.loadBundle('level', (err, bundle) => {
|
||||
bundle.load(`env/${config.env}`, Prefab, (err, prefab) => {
|
||||
var item = instantiate(prefab)
|
||||
item.setParent(this.node)
|
||||
loadSceneComplete = true
|
||||
})
|
||||
|
||||
AssetManager.instance.loadBundle('levelRemote', (err, bundle) => {
|
||||
|
||||
bundle.load(`enemy/${config.enemy}`, Prefab, (err, prefab) => {
|
||||
var item = instantiate(prefab)
|
||||
item.setParent(this.node)
|
||||
FPSCameraController.getInstance().init(item.getChildByPath("Player/Main Camera").getComponent(Camera), config.aimFov)
|
||||
this.roleNode = item
|
||||
let weapon = DataMgr.getInstance().GetDataById(Weapon, LocalSaveMgr.instance.playerData.equipedWeapon)
|
||||
|
||||
resources.load(`weapon/${weapon.prefab}`, Prefab, (err, prefab) => {
|
||||
var gun = instantiate(prefab)
|
||||
this.gunNode = gun
|
||||
gun.setParent(item.getChildByPath(`Player/Main Camera/${weapon.point}`))
|
||||
loadRoleComplete = true
|
||||
});
|
||||
})
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
waitUntil(condition: () => boolean): Promise<void> {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return FramePoller["until"](condition);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
|
||||
await this.waitUntil(() => loadSceneComplete && loadRoleComplete);
|
||||
this.initLevel()
|
||||
}
|
||||
|
||||
|
||||
unLoadLevel() {
|
||||
this.node.destroyAllChildren()
|
||||
this.levelState = LevelState.None
|
||||
initLevel(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["enemies"] = this["collectEnemies"]());
|
||||
void (this["dispatchSession"]({ "kind": 'reset', "timer": this["maxTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, "aliveCount": (this["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown }));
|
||||
void (GameController["getInstance"]()["onLoadComplete"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
onEnemyDie(target: Ragdoll) {
|
||||
this.aliveCount -= 1
|
||||
EventCenter.onEnemyDie.emit(null)
|
||||
async loadLevel(): Promise<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["qingBaoTarget"] = null);
|
||||
void (this["saoMiaoTarget"] = null);
|
||||
const levelIndex = this["resolveLevelIndex"]();
|
||||
const config = DataMgr["getInstance"]()["GetDataById"](LevelConfig, levelIndex);
|
||||
void (this["levelIndex"] = levelIndex);
|
||||
if (!config) {
|
||||
void (console["error"](`Missing LevelConfig for level ${levelIndex}`));
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const levelBundle = await RuntimeAssetLoader["loadBundle"]('level');
|
||||
const environmentLoading = this["loadEnvironment"](levelBundle, config);
|
||||
const enemyBundle = levelIndex <= 30 ? levelBundle : await RuntimeAssetLoader["loadBundle"]('levelRemote');
|
||||
void (await Promise["all"]([
|
||||
environmentLoading,
|
||||
this["loadRoleAndWeapon"](enemyBundle, config),
|
||||
]));
|
||||
void (this["initLevel"]());
|
||||
}
|
||||
catch (error) {
|
||||
void (console["error"](`Failed to load level ${levelIndex}`, error));
|
||||
}
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
unLoadLevel(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["destroyAllChildren"]());
|
||||
void (this["dispatchSession"]({ "kind": 'phase', "phase": 'none' }));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
onEnemyDie(target: Ragdoll): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["dispatchSession"]({ "kind": 'enemyDown' }));
|
||||
void ((EventCenter["onEnemyDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["emit"](null));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
judgeLastBullet(): boolean {
|
||||
return this.aliveCount == 1
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return this["aliveCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === 1;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
startLevel() {
|
||||
this.levelState = LevelState.Running
|
||||
startLevel(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["dispatchSession"]({ "kind": 'phase', "phase": 'running' }));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected update(dt: number): void {
|
||||
if (this.levelState == LevelState.Running) {
|
||||
this.timer -= dt
|
||||
if (this.timer <= 0) {
|
||||
this.timer = 0
|
||||
this.lose()
|
||||
}
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: if (this["dispatchSession"]({ "kind": 'tick', "deltaTime": dt }))
|
||||
void (this["lose"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
lose() {
|
||||
this.levelState = LevelState.Result
|
||||
UIManager.instance.openPanel(LosePanel)
|
||||
}
|
||||
|
||||
win() {
|
||||
|
||||
this.levelState = LevelState.Result
|
||||
let levelResult = new BattleResult()
|
||||
let remainTimer = Math.ceil(this.timer)
|
||||
levelResult.timer = remainTimer
|
||||
levelResult.enemyCount = this.enemies.length
|
||||
levelResult.timerCoin = levelResult.timer
|
||||
levelResult.enemyCoin = levelResult.enemyCount * 10
|
||||
levelResult.coinCount = levelResult.timerCoin + levelResult.enemyCoin
|
||||
this.levelResult = levelResult
|
||||
LocalSaveMgr.instance.passLevel()
|
||||
UIManager.instance.openPanel(WinPanel)
|
||||
}
|
||||
|
||||
ContinueRun() {
|
||||
this.levelState = LevelState.Running
|
||||
}
|
||||
|
||||
pause() {
|
||||
this.levelState = LevelState.Pause
|
||||
}
|
||||
|
||||
addTimer() {
|
||||
this.timer += 180
|
||||
}
|
||||
|
||||
getAliveEnemeyCount() {
|
||||
let aliveCount = 0
|
||||
for (let index = 0; index < this.enemies.length; index++) {
|
||||
if (!this.enemies[index].isDie) {
|
||||
aliveCount++
|
||||
}
|
||||
lose(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["dispatchSession"]({ "kind": 'phase', "phase": 'result' }));
|
||||
void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](LosePanel));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
return aliveCount
|
||||
}
|
||||
|
||||
getAliveEnemey() {
|
||||
for (let index = 0; index < this.enemies.length; index++) {
|
||||
if (!this.enemies[index].isDie) {
|
||||
return this.enemies[index]
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
getQingBaoEnemey() {
|
||||
this.qingBaoTarget = this.getAliveEnemey()
|
||||
return this.qingBaoTarget
|
||||
win(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["dispatchSession"]({ "kind": 'phase', "phase": 'result' }));
|
||||
void (this["levelResult"] = this["createBattleResult"]());
|
||||
void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["passLevel"]());
|
||||
void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](WinPanel));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
qingBaoTarget: Ragdoll
|
||||
|
||||
getTutorialAliveEnemey() {
|
||||
return this.enemies[this.enemies.length - 1]
|
||||
ContinueRun(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["dispatchSession"]({ "kind": 'phase', "phase": 'running' }));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
haveQingBaoTarget() {
|
||||
return this.qingBaoTarget != null && !this.qingBaoTarget.isDie
|
||||
pause(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["dispatchSession"]({ "kind": 'phase', "phase": 'paused' }));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
saoMiaoTarget: Ragdoll
|
||||
SetSaoMiaoTarget() {
|
||||
this.saoMiaoTarget = this.getAliveEnemey()
|
||||
addTimer(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["dispatchSession"]({ "kind": 'extendTime', "seconds": 180 }));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
getAliveEnemeyCount(): number {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return (this["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["filter"]((enemy) => !(enemy["isDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
getAliveEnemey(): Ragdoll {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return (this["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["find"]((enemy) => !(enemy["isDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
getQingBaoEnemey(): Ragdoll {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["qingBaoTarget"] = this["getAliveEnemey"]());
|
||||
return this["qingBaoTarget"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
getTutorialAliveEnemey(): Ragdoll {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return (this["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[((this["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - 1];
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
haveQingBaoTarget(): boolean {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return this["qingBaoTarget"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown != null && !((this["qingBaoTarget"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["isDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
SetSaoMiaoTarget(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["saoMiaoTarget"] = this["getAliveEnemey"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private resolveLevelIndex(): number {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const forcedIndex = GameController["getInstance"]()["forceLevelIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
return forcedIndex > 1 ? forcedIndex : ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["levelIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private collectEnemies(): Ragdoll[] {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
if (!(this["roleNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
|
||||
return [];
|
||||
return ((this["roleNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["children"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["map"]((child) => child["getComponent"](Ragdoll))["filter"]((ragdoll): ragdoll is Ragdoll => ragdoll != null);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private async loadEnvironment(bundle: AssetManager.Bundle, config: LevelConfig): Promise<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 {
|
||||
timer: number
|
||||
enemyCount: number
|
||||
coinCount: number
|
||||
timerCoin: number
|
||||
enemyCoin: number
|
||||
constructor(public timer = 0, public enemyCount = 0, public timerCoin = timer, public enemyCoin = enemyCount * 10, public coinCount = timerCoin + enemyCoin) {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
|
||||
// @structural-rewrite-v1
|
||||
import { Enum } from "cc";
|
||||
|
||||
export enum LevelState {
|
||||
None,
|
||||
Loading,
|
||||
Running,
|
||||
Pause,
|
||||
Result,
|
||||
Result
|
||||
}
|
||||
|
||||
Enum(LevelState);
|
||||
void (Enum(LevelState));
|
||||
|
||||
@@ -1,10 +1,22 @@
|
||||
import { _decorator, Component, Node, EventTarget } from 'cc';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Component, EventTarget } from 'cc';
|
||||
const { ccclass } = _decorator;
|
||||
@ccclass('EventCenter')
|
||||
export class EventCenter extends Component {
|
||||
static onEnemyDie = new EventTarget();
|
||||
static powerChange = new EventTarget();
|
||||
static coinCountChange = new EventTarget();
|
||||
|
||||
}
|
||||
static onEnemyDie = EventCenter["createEvent"]();
|
||||
static powerChange = EventCenter["createEvent"]();
|
||||
static coinCountChange = EventCenter["createEvent"]();
|
||||
private static createEvent(): EventTarget {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return new EventTarget();
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,221 +1,262 @@
|
||||
import { _decorator, Component, Node, input, Input, EventTouch, Vec3, Quat, v3, Button, tween, v2, Camera, director, geometry, screen, PhysicsSystem, Prefab, instantiate, ParticleSystem } from 'cc';
|
||||
import { RagdollBone } from '../Ragdoll/RagdollBone';
|
||||
import { SingletonBase } from './framework/SingletonBase';
|
||||
import { GameController } from './GameController';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Camera, EventTouch, geometry, instantiate, Node, ParticleSystem, PhysicsSystem, Prefab, screen, tween, Vec3 } from 'cc';
|
||||
import { Ragdoll } from '../Ragdoll/Ragdoll';
|
||||
import { RagdollBone } from '../Ragdoll/RagdollBone';
|
||||
import { GameController } from './GameController';
|
||||
import { SingletonBase } from './framework/SingletonBase';
|
||||
import { CameraAimState } from './framework/runtime/CameraAimState';
|
||||
import { UIManager } from './framework/ui/UIManager';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('FPSCameraController')
|
||||
export class FPSCameraController extends SingletonBase<FPSCameraController> {
|
||||
// export class FPSCameraController extends Component {
|
||||
|
||||
@property(Node)
|
||||
cameraNode: Node = null; // 相机节点
|
||||
cameraNode: Node = null;
|
||||
@property(Camera)
|
||||
camera: Camera = null; // 相机节点
|
||||
|
||||
camera: Camera = null;
|
||||
@property(Camera)
|
||||
qingBao: Camera = null; // 相机节点
|
||||
|
||||
|
||||
qingBao: Camera = null;
|
||||
@property(ParticleSystem)
|
||||
particle: ParticleSystem = null; // 粒子系统
|
||||
|
||||
|
||||
particle: ParticleSystem = null;
|
||||
@property(Prefab)
|
||||
lastBulletPrefab: Prefab = null;
|
||||
lastBullet: Node = null;
|
||||
|
||||
private _touchStartPos: Vec3 = new Vec3();
|
||||
private _rotationSpeed: number = 0.04; // 旋转速度
|
||||
private _currentRotationX: number = 0; // 当前相机的垂直旋转角度
|
||||
private _currentRotationY: number = 0; // 当前相机的水平旋转角度
|
||||
private _defaultRotationY: number = 0; // 当前相机的水平旋转角度
|
||||
private _maxVerticalAngle: number = 70; // 最大垂直旋转角度
|
||||
private _maxHorizontalAngle: number = 45; // 最大垂直旋转角度
|
||||
private _defaultFOV: number = 45; // 默认 FOV
|
||||
private _aimFOV: number = 25; // 瞄准时的 FOV
|
||||
private _isAiming: boolean = false; // 是否正在瞄准
|
||||
|
||||
onLoad() {
|
||||
super.onLoad()
|
||||
}
|
||||
|
||||
init(curCamera: Camera, aimFov: number) {
|
||||
this.camera = curCamera
|
||||
this.cameraNode = curCamera.node
|
||||
|
||||
const initialRotation = this.cameraNode.getWorldRotation();
|
||||
const eulerAngles = initialRotation.getEulerAngles(v3());
|
||||
this._currentRotationX = eulerAngles.x;
|
||||
this._currentRotationY = eulerAngles.y;
|
||||
this._defaultRotationY = eulerAngles.y;
|
||||
this._aimFOV = aimFov;
|
||||
|
||||
// 获取摄像机的默认 FOV
|
||||
const camera = this.cameraNode.getComponent(Camera);
|
||||
camera.fov = this._defaultFOV
|
||||
|
||||
}
|
||||
|
||||
onTouchStart(event: EventTouch) {
|
||||
// console.log("onTouchStart", event)
|
||||
const touch = event.touch;
|
||||
this._touchStartPos.set(touch.getLocation().x, touch.getLocation().y, 0);
|
||||
|
||||
}
|
||||
|
||||
onTouchMove(event: EventTouch) {
|
||||
// console.log("onTouchMove", event)
|
||||
const touch = event.touch;
|
||||
const deltaX = touch.getLocation().x - this._touchStartPos.x;
|
||||
const deltaY = touch.getLocation().y - this._touchStartPos.y;
|
||||
|
||||
// 横向旋转(左右滑动):作用于摄像机的 Y 轴
|
||||
const rotationY = -deltaX * this._rotationSpeed * this.camera.fov / 45;
|
||||
|
||||
// console.log("this.camera.fov", this.camera.fov)
|
||||
this._currentRotationY += rotationY;
|
||||
|
||||
// 纵向旋转(上下滑动):作用于摄像机的 X 轴
|
||||
const rotationX = deltaY * this._rotationSpeed * this.camera.fov / 45;// 修正:去掉负号
|
||||
this._currentRotationX += rotationX;
|
||||
|
||||
// 限制垂直旋转角度
|
||||
this._currentRotationX = Math.min(Math.max(this._currentRotationX, -this._maxVerticalAngle), 60);
|
||||
this._currentRotationY = Math.min(Math.max(this._currentRotationY, this._defaultRotationY - this._maxHorizontalAngle), this._defaultRotationY + this._maxHorizontalAngle);
|
||||
|
||||
|
||||
|
||||
// 应用旋转到相机节点
|
||||
const newRotation = Quat.fromEuler(new Quat(), this._currentRotationX, this._currentRotationY, 0);
|
||||
this.cameraNode.setWorldRotation(newRotation);
|
||||
|
||||
// console.log("newRotation", this._currentRotationX, this._currentRotationY)
|
||||
|
||||
// 更新起始位置
|
||||
this._touchStartPos.set(touch.getLocation().x, touch.getLocation().y, 0);
|
||||
}
|
||||
|
||||
setTutorialRotate() {
|
||||
this._currentRotationX = -3.99
|
||||
this._currentRotationY = -32.27
|
||||
const newRotation = Quat.fromEuler(new Quat(), this._currentRotationX, this._currentRotationY, 0);
|
||||
this.cameraNode.setWorldRotation(newRotation);
|
||||
}
|
||||
|
||||
shoot() {
|
||||
|
||||
let ray = new geometry.Ray();
|
||||
this.camera.screenPointToRay(screen.windowSize.width / 2, screen.windowSize.height / 2, ray);
|
||||
// 以下参数可选
|
||||
const mask = 0xffffffff;
|
||||
const maxDistance = 10000000;
|
||||
const queryTrigger = true;
|
||||
let result = false
|
||||
if (PhysicsSystem.instance.raycastClosest(ray, mask, maxDistance, queryTrigger)) {
|
||||
const raycastClosestResult = PhysicsSystem.instance.raycastClosestResult;
|
||||
const hitPoint = raycastClosestResult.hitPoint
|
||||
const hitNormal = raycastClosestResult.hitNormal;
|
||||
const collider = raycastClosestResult.collider;
|
||||
const distance = raycastClosestResult.distance;
|
||||
console.log("碰撞检测", raycastClosestResult.collider.node.name)
|
||||
let bone = raycastClosestResult.collider.node.getComponent(RagdollBone)
|
||||
if (bone != null) {
|
||||
if (!bone.ragdoll.isDie) {
|
||||
if (GameController.getInstance().curLevel.judgeLastBullet()) {
|
||||
this.fireLastBullet(bone.ragdoll, hitPoint)
|
||||
} else {
|
||||
this.scheduleOnce(() => {
|
||||
bone.ragdoll.node.active = false
|
||||
}, 2);
|
||||
bone.ragdoll.setEnabled(true);
|
||||
result = true
|
||||
this.particle.node.setWorldPosition(hitPoint.clone())
|
||||
this.particle.play()
|
||||
}
|
||||
private readonly aimState = new CameraAimState();
|
||||
private readonly defaultFOV = 45;
|
||||
private aimFOV = 25;
|
||||
private isAiming = false;
|
||||
protected onLoad(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (super["onLoad"]());
|
||||
}
|
||||
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
|
||||
tween(this.camera.node)
|
||||
.by(0.05, { position: new Vec3(0, 2, 0) }, { easing: 'sineOutIn' })
|
||||
.by(0.05, { position: new Vec3(0, -2, 0) }, { easing: 'sineOutIn' })
|
||||
.start()
|
||||
|
||||
return result
|
||||
|
||||
}
|
||||
|
||||
closeQingBao() {
|
||||
this.qingBao.node.active = false
|
||||
}
|
||||
|
||||
showQingBao() {
|
||||
this.qingBao.node.active = true
|
||||
var enemy = GameController.getInstance().curLevel.getQingBaoEnemey().centerNode;
|
||||
let pos = enemy.getWorldPosition().add(enemy.getWorldPosition().subtract(this.cameraNode.getWorldPosition()).normalize().multiplyScalar(-5))
|
||||
let enemyPos = enemy.getWorldPosition()
|
||||
let cameraPos = this.cameraNode.getWorldPosition()
|
||||
let dirNor = enemy.getWorldPosition().subtract(this.cameraNode.getWorldPosition()).normalize()
|
||||
|
||||
let newPos = enemy.getWorldPosition().add(dirNor.multiplyScalar(-15))
|
||||
|
||||
let dir = this.cameraNode.getWorldPosition().subtract(enemy.getWorldPosition())
|
||||
|
||||
console.log("enemy", enemy.getWorldPosition())
|
||||
console.log("camera", this.cameraNode.getWorldPosition())
|
||||
console.log("newPos", newPos)
|
||||
console.log("dirNor", enemy.getWorldPosition().subtract(this.cameraNode.getWorldPosition()).normalize())
|
||||
this.qingBao.node.setWorldPosition(newPos)
|
||||
this.qingBao.node.forward = enemy.getWorldPosition().subtract(this.cameraNode.getWorldPosition()).normalize()
|
||||
}
|
||||
|
||||
fireLastBullet(ragdoll: Ragdoll, hitPoint: Vec3) {
|
||||
var last = instantiate(this.lastBulletPrefab)
|
||||
last.setParent(this.node)
|
||||
last.setWorldPosition(this.cameraNode.worldPosition)
|
||||
last.forward = this.cameraNode.worldPosition.subtract(hitPoint).normalize()
|
||||
this.lastBullet = last
|
||||
this.camera.enabled = false
|
||||
|
||||
UIManager.instance.closeAllPanels()
|
||||
|
||||
tween(last)
|
||||
.to(1.67, { worldPosition: hitPoint }, { easing: 'cubicIn' })
|
||||
.call(() => {
|
||||
ragdoll.setEnabled(true);
|
||||
last.getChildByName("bullet").active = false
|
||||
GameController.getInstance().curLevel.win()
|
||||
})
|
||||
.start()
|
||||
}
|
||||
|
||||
clear() {
|
||||
if (this.lastBullet != null) {
|
||||
this.lastBullet.destroy()
|
||||
this.lastBullet = null
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
onAimButtonClick(isAnim: boolean) {
|
||||
const camera = this.cameraNode.getComponent(Camera);
|
||||
if (!camera) return;
|
||||
|
||||
this._isAiming = isAnim; // 切换瞄准状态
|
||||
|
||||
if (this._isAiming) {
|
||||
// 瞄准状态:缩小 FOV
|
||||
tween(camera)
|
||||
.to(0.1, { fov: this._aimFOV }) // 平滑过渡到瞄准 FOV
|
||||
.start();
|
||||
} else {
|
||||
// 非瞄准状态:恢复默认 FOV
|
||||
tween(camera)
|
||||
.to(0.1, { fov: this._defaultFOV }) // 平滑过渡到默认 FOV
|
||||
.start();
|
||||
init(curCamera: Camera, aimFov: number): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["camera"] = curCamera);
|
||||
void (this["cameraNode"] = curCamera["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
void ((this["aimState"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["initialize"](this["cameraNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (this["aimFOV"] = aimFov);
|
||||
void ((this["cameraNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](Camera)["fov"] = this["defaultFOV"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
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';
|
||||
import { SingletonBase } from './framework/SingletonBase';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator } from 'cc';
|
||||
import { BattleLevel } from './BattleLevel';
|
||||
import { UIManager } from './framework/ui/UIManager';
|
||||
import { PlayPanel } from './ui/PlayPanel';
|
||||
import { MainPanel } from './ui/MainPanel';
|
||||
import { LoadingPanel } from './ui/LoadingPanel';
|
||||
import { WinPanel } from './ui/WinPanel';
|
||||
import { FPSCameraController } from './FPSCameraController';
|
||||
import { SingletonBase } from './framework/SingletonBase';
|
||||
import { LocalSaveMgr } from './framework/data/LocalSaveMgr';
|
||||
import { UIManager } from './framework/ui/UIManager';
|
||||
import { AddHeartPanel } from './ui/AddHeartPanel';
|
||||
import { SettingPanel } from './ui/SettingPanel';
|
||||
import { LoadingPanel } from './ui/LoadingPanel';
|
||||
import { MainPanel } from './ui/MainPanel';
|
||||
import { PlayPanel } from './ui/PlayPanel';
|
||||
import { backToMainPlan, GameFlowEffect, levelReadyPlan, planBattleEntry, planPowerCheck } from './domain/GameFlowModel';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('GameController')
|
||||
export class GameController extends SingletonBase<GameController> {
|
||||
|
||||
@property(BattleLevel)
|
||||
curLevel: BattleLevel = null
|
||||
|
||||
curLevel: BattleLevel = null;
|
||||
@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 {
|
||||
super.onLoad()
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (super["onLoad"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
protected start(): void {
|
||||
// this.gameStart()
|
||||
UIManager.instance.openPanel(MainPanel)
|
||||
}
|
||||
|
||||
judgePower() {
|
||||
if (LocalSaveMgr.instance.playerData.power > 0) {
|
||||
LocalSaveMgr.instance.usePower()
|
||||
return true
|
||||
} else {
|
||||
UIManager.instance.openPanel(AddHeartPanel)
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](MainPanel));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
gameStart() {
|
||||
if (!this.judgePower()) {
|
||||
return
|
||||
finally {
|
||||
}
|
||||
UIManager.instance.closePanel(MainPanel)
|
||||
UIManager.instance.openPanel(LoadingPanel)
|
||||
this.scheduleOnce(() => {
|
||||
console.log("gameStart openPanel")
|
||||
this.curLevel.loadLevel()
|
||||
}, 0.5)
|
||||
}
|
||||
|
||||
gameRestart() {
|
||||
if (!this.judgePower()) {
|
||||
return
|
||||
judgePower(): boolean {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const hasPower = ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown > 0;
|
||||
void (this["runFlow"](planPowerCheck(hasPower)));
|
||||
return hasPower;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
UIManager.instance.closeAllPanels()
|
||||
UIManager.instance.openPanel(LoadingPanel)
|
||||
this.scheduleOnce(() => {
|
||||
console.log("gameStart openPanel")
|
||||
this.curLevel.loadLevel()
|
||||
}, 0.5)
|
||||
}
|
||||
|
||||
backMain() {
|
||||
UIManager.instance.closeAllPanels()
|
||||
UIManager.instance.openPanel(MainPanel)
|
||||
this.curLevel.unLoadLevel()
|
||||
FPSCameraController.getInstance().clear()
|
||||
gameStart(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["runFlow"](planBattleEntry('start', ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown > 0)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
onLoadComplete() {
|
||||
let self = this
|
||||
LoadingPanel.instance.onLoadingComplete(() => {
|
||||
UIManager.instance.openPanel(PlayPanel)
|
||||
self.curLevel.startLevel()
|
||||
})
|
||||
gameRestart(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["runFlow"](planBattleEntry('restart', ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown > 0)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
backMain(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["runFlow"](backToMainPlan));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
onLoadComplete(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void ((LoadingPanel["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["onLoadingComplete"](() => this["runFlow"](levelReadyPlan)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private runFlow(effects: readonly GameFlowEffect[]): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (effects["forEach"](effect => (this["effectHandlers"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[effect]()));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+21
-13
@@ -1,24 +1,32 @@
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Component, Node, SkeletalAnimation } from 'cc';
|
||||
import { Ragdoll } from '../Ragdoll/Ragdoll';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('Test')
|
||||
export class Test extends Component {
|
||||
@property(Node)
|
||||
target: Node = null;
|
||||
|
||||
@property(SkeletalAnimation)
|
||||
skeletalAnimation: SkeletalAnimation = null;
|
||||
|
||||
onTouchEnd() {
|
||||
let ragdoll = this.target.getComponent(Ragdoll)
|
||||
let isEnabled = ragdoll.getEnabled();
|
||||
|
||||
// 开启布娃娃之后动作会被覆盖,强烈建议停止动画
|
||||
let name = this.skeletalAnimation?.defaultClip.name;
|
||||
isEnabled ? this.skeletalAnimation?.crossFade(name, 0) : this.skeletalAnimation?.stop();
|
||||
ragdoll.setEnabled(!isEnabled);
|
||||
onTouchEnd(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const ragdoll = (this["target"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](Ragdoll);
|
||||
const enabled = ragdoll["getEnabled"]();
|
||||
const animationActions = [
|
||||
() => (this["skeletalAnimation"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)?.["stop"](),
|
||||
() => (this["skeletalAnimation"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)?.["crossFade"](((this["skeletalAnimation"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["defaultClip"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["name"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 0),
|
||||
];
|
||||
void (animationActions[Number(enabled)]());
|
||||
void (ragdoll["setEnabled"](!enabled));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+46
-43
@@ -1,49 +1,52 @@
|
||||
import { _decorator, Component, Node, ResolutionPolicy, screen, Screen, view } from 'cc';
|
||||
import { WINDOWS } from 'cc/env';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Component, screen, view } from 'cc';
|
||||
import { resolveDesignResolution } from './framework/ui/DesignResolutionPolicy';
|
||||
const { ccclass } = _decorator;
|
||||
@ccclass('UIAdapt')
|
||||
export class UIAdapt extends Component {
|
||||
start() {
|
||||
screen.on('window-resize', this.adaptScreenSize, this);
|
||||
this.adaptScreenSize()
|
||||
let self = this
|
||||
this.scheduleOnce(() => {
|
||||
self.adaptScreenSize()
|
||||
}, 0.1)
|
||||
protected start(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (screen["on"]('window-resize', this["adaptScreenSize"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this));
|
||||
void (this["adaptScreenSize"]());
|
||||
void (this["scheduleOnce"](() => this["adaptScreenSize"](), 0.1));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
adaptScreenSize() {
|
||||
let screenWidth = view.getViewportRect().width
|
||||
let screenHeight = view.getViewportRect().height
|
||||
// let screenWidth = view.getVisibleSize().width;
|
||||
// let screenHeight = view.getVisibleSize().height;
|
||||
let screenRatio = screenHeight / screenWidth;
|
||||
|
||||
console.log("修改屏幕分辨率", screenRatio, view.getViewportRect(), view)
|
||||
|
||||
if (screenRatio > 18 / 9) {
|
||||
// 适配屏幕高度
|
||||
console.log("修改屏幕分辨率", "适配高度")
|
||||
|
||||
|
||||
let designWidth = 1080;
|
||||
let designHeight = screenHeight * (designWidth / screenWidth);
|
||||
|
||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.FIXED_WIDTH);
|
||||
} else if (screenRatio > 16 / 9) {
|
||||
// 适配屏幕宽度
|
||||
console.log("修改屏幕分辨率", "适配屏幕宽度")
|
||||
let designHeight = 1920;
|
||||
let designWidth = screenWidth * (designHeight / screenHeight);
|
||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.FIXED_HEIGHT);
|
||||
} else {
|
||||
console.log("修改屏幕分辨率", "适配屏幕宽高")
|
||||
let designWidth = 1080;
|
||||
let designHeight = screenHeight * (designWidth / screenWidth);
|
||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.EXACT_FIT);
|
||||
protected onDestroy(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (screen["off"]('window-resize', this["adaptScreenSize"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
adaptScreenSize(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const viewport = view["getViewportRect"]();
|
||||
const resolution = resolveDesignResolution(viewport["width"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, viewport["height"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
void (view["setDesignResolutionSize"](resolution["width"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, resolution["height"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, resolution["policy"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
// @structural-rewrite-v1
|
||||
// This file is auto-generated. Do not modify manually.
|
||||
|
||||
import { js } from "cc";
|
||||
|
||||
import { js } from 'cc';
|
||||
export class LevelConfig {
|
||||
id: number;
|
||||
env: string;
|
||||
enemy: string;
|
||||
aimFov: number;
|
||||
}
|
||||
|
||||
export class Weapon {
|
||||
id: number;
|
||||
prefab: string;
|
||||
@@ -17,14 +15,19 @@ export class Weapon {
|
||||
gunName: string;
|
||||
spriteName: string;
|
||||
}
|
||||
|
||||
|
||||
export function setClassName() {
|
||||
js.setClassName("LevelConfig", LevelConfig);
|
||||
js.setClassName("Weapon", Weapon);
|
||||
const configTypes: Record<string, new () => unknown> = { LevelConfig, Weapon };
|
||||
export function setClassName(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (Object["keys"](configTypes)["forEach"]((name) => js["setClassName"](name, configTypes[name])));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
(window as any).ConfigData = (window as any).ConfigData || {};
|
||||
(window as any).ConfigData['LevelConfig'] = LevelConfig;
|
||||
(window as any).ConfigData['Weapon'] = Weapon;
|
||||
const configNamespace = (window as any)["ConfigData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown ?? ((window as any)["ConfigData"] = {});
|
||||
void (Object["assign"](configNamespace, configTypes));
|
||||
|
||||
@@ -1,8 +1,17 @@
|
||||
|
||||
|
||||
export class Config {
|
||||
//最大体力上线
|
||||
static maxHp: number = 5
|
||||
//体力恢复的cd
|
||||
static powerCD = 60
|
||||
// @structural-rewrite-v1
|
||||
export interface GameplayLimits {
|
||||
readonly maximumPower: number;
|
||||
readonly powerRecoverySeconds: number;
|
||||
}
|
||||
const DEFAULT_GAMEPLAY_LIMITS: GameplayLimits = Object["freeze"]({
|
||||
"maximumPower": 5,
|
||||
"powerRecoverySeconds": 60,
|
||||
});
|
||||
/**
|
||||
* Compatibility facade for the rule names already used by saved-data code.
|
||||
* Values are sourced from one immutable rule object so future additions stay explicit.
|
||||
*/
|
||||
export class Config {
|
||||
static readonly maxHp = DEFAULT_GAMEPLAY_LIMITS["maximumPower"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
static readonly powerCD = DEFAULT_GAMEPLAY_LIMITS["powerRecoverySeconds"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
const { ccclass } = _decorator;
|
||||
@ccclass('SingletonBase')
|
||||
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 {
|
||||
if ((this as any)._instance === null) {
|
||||
return null
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return ((this as unknown) as typeof SingletonBase)["_instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown as T;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
return (this as any)._instance;
|
||||
}
|
||||
|
||||
protected onLoad(): void {
|
||||
if ((this.constructor as any)._instance) {
|
||||
this.node.destroy();
|
||||
return;
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const singletonType = this["constructor"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown as typeof SingletonBase;
|
||||
if (singletonType["_instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) {
|
||||
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["destroy"]());
|
||||
return;
|
||||
}
|
||||
void (singletonType["_instance"] = this);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
(this.constructor as any)._instance = this;
|
||||
}
|
||||
|
||||
protected onDestroy(): void {
|
||||
if ((this.constructor as any)._instance === this) {
|
||||
(this.constructor as any)._instance = null;
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const singletonType = this["constructor"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown as typeof SingletonBase;
|
||||
if (singletonType["_instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === this)
|
||||
void (singletonType["_instance"] = null);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@ccclass('MoveComponent')
|
||||
export class MoveComponent extends Component {
|
||||
|
||||
|
||||
@property
|
||||
startPos: Vec3 = new Vec3(0, 0, 0);
|
||||
|
||||
@property
|
||||
endPos: Vec3 = new Vec3(0, 0, 0);
|
||||
|
||||
@property
|
||||
delay: number = 0;
|
||||
|
||||
|
||||
delay = 0;
|
||||
@property
|
||||
moveTimer: number = 0;
|
||||
|
||||
|
||||
@property({ displayName: "线性" })
|
||||
line: boolean = true;
|
||||
|
||||
@property({ displayName: "先慢后快" })
|
||||
sineIn: boolean = true;
|
||||
|
||||
@property({ displayName: "先快后慢" })
|
||||
sineOut: boolean = true;
|
||||
|
||||
@property({ displayName: "设置为初始值" })
|
||||
setToStart: boolean = false;
|
||||
|
||||
|
||||
moveTimer = 0;
|
||||
@property({ "displayName": '线性' })
|
||||
line = true;
|
||||
@property({ "displayName": '先慢后快' })
|
||||
sineIn = true;
|
||||
@property({ "displayName": '先快后慢' })
|
||||
sineOut = true;
|
||||
@property({ "displayName": '设置为初始值' })
|
||||
setToStart = false;
|
||||
protected onEnable(): void {
|
||||
console.log("触发动画z")
|
||||
let easeFunc = easing.linear;
|
||||
|
||||
if (this.sineIn) {
|
||||
easeFunc = easing.sineIn
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runNodeTransition(this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 'position', this["startPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["endPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["delay"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["moveTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["setToStart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, selectAnimationEasing(this["sineOut"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["sineIn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
|
||||
if (this.sineOut) {
|
||||
easeFunc = easing.sineOut
|
||||
finally {
|
||||
}
|
||||
|
||||
if (this.setToStart) {
|
||||
this.node.setPosition(this.startPos)
|
||||
}
|
||||
|
||||
|
||||
tween(this.node)
|
||||
.delay(this.delay)
|
||||
.call(() => {
|
||||
this.node.setPosition(this.startPos)
|
||||
})
|
||||
.to(this.moveTimer, { position: this.endPos }, { easing: easeFunc })
|
||||
.start()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,63 +1,36 @@
|
||||
import { _decorator, Component, easing, Node, tween, Vec2, Vec3 } from 'cc';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Component, Vec3 } from 'cc';
|
||||
import { runNodeTransition, selectAnimationEasing } from './EasingSelector';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('ScaleComponent')
|
||||
export class ScaleComponent extends Component {
|
||||
|
||||
@property
|
||||
startPos: Vec3 = new Vec3(0, 0, 0);
|
||||
|
||||
@property
|
||||
endPos: Vec3 = new Vec3(1, 1, 1);
|
||||
|
||||
@property
|
||||
delay: number = 0;
|
||||
|
||||
delay = 0;
|
||||
@property
|
||||
moveTimer: number = 0.1;
|
||||
|
||||
@property({ displayName: "线性" })
|
||||
line: boolean = true;
|
||||
|
||||
@property({ displayName: "先慢后快" })
|
||||
sineIn: boolean = true;
|
||||
|
||||
@property({ displayName: "先快后慢" })
|
||||
sineOut: boolean = true;
|
||||
|
||||
|
||||
@property({ displayName: "设置为初始值" })
|
||||
setToStart: boolean = false;
|
||||
|
||||
|
||||
moveTimer = 0.1;
|
||||
@property({ "displayName": '线性' })
|
||||
line = true;
|
||||
@property({ "displayName": '先慢后快' })
|
||||
sineIn = true;
|
||||
@property({ "displayName": '先快后慢' })
|
||||
sineOut = true;
|
||||
@property({ "displayName": '设置为初始值' })
|
||||
setToStart = false;
|
||||
protected onEnable(): void {
|
||||
|
||||
|
||||
let easeFunc = easing.linear;
|
||||
|
||||
if (this.sineIn) {
|
||||
easeFunc = easing.sineIn
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runNodeTransition(this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 'scale', this["startPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["endPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["delay"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["moveTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["setToStart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, selectAnimationEasing(this["sineOut"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["sineIn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
|
||||
if (this.sineOut) {
|
||||
easeFunc = easing.sineOut
|
||||
finally {
|
||||
}
|
||||
|
||||
if (this.setToStart) {
|
||||
this.node.setScale(this.startPos)
|
||||
}
|
||||
|
||||
|
||||
tween(this.node)
|
||||
.delay(this.delay)
|
||||
.call(() => {
|
||||
this.node.setScale(this.startPos)
|
||||
})
|
||||
.to(this.moveTimer, { scale: this.endPos }, { easing: easeFunc })
|
||||
.start()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,139 +1,290 @@
|
||||
//AudioMgr.ts
|
||||
import { Node, AudioSource, AudioClip, resources, director } from 'cc';
|
||||
/**
|
||||
* @en
|
||||
* this is a sington class for audio play, can be easily called from anywhere in you project.
|
||||
* @zh
|
||||
* 这是一个用于播放音频的单件类,可以很方便地在项目的任何地方调用。
|
||||
*/
|
||||
// @structural-rewrite-v1
|
||||
import { AudioClip, AudioSource, director, Node, resources } from 'cc';
|
||||
export class AudioMgr {
|
||||
private static _inst: AudioMgr;
|
||||
public static get inst(): AudioMgr {
|
||||
if (this._inst == null) {
|
||||
this._inst = new AudioMgr();
|
||||
}
|
||||
return this._inst;
|
||||
}
|
||||
|
||||
private _soundAudioSource: AudioSource;
|
||||
private _musicAudioSource: AudioSource;
|
||||
// private _soundaudioSource: AudioSource;
|
||||
constructor() {
|
||||
//@en create a node as audioMgr
|
||||
//@zh 创建一个节点作为 audioMgr
|
||||
let audioMgr = new Node();
|
||||
audioMgr.name = '__audioMgr__';
|
||||
|
||||
//@en add to the scene.
|
||||
//@zh 添加节点到场景
|
||||
director.getScene().addChild(audioMgr);
|
||||
|
||||
//@en make it as a persistent node, so it won't be destroied when scene change.
|
||||
//@zh 标记为常驻节点,这样场景切换的时候就不会被销毁了
|
||||
director.addPersistRootNode(audioMgr);
|
||||
|
||||
//@en add AudioSource componrnt to play audios.
|
||||
//@zh 添加 AudioSource 组件,用于播放音频。
|
||||
this._soundAudioSource = audioMgr.addComponent(AudioSource);
|
||||
this._musicAudioSource = audioMgr.addComponent(AudioSource);
|
||||
}
|
||||
|
||||
public get soundAudioSource() {
|
||||
return this._soundAudioSource;
|
||||
}
|
||||
|
||||
public get musicAudioSource() {
|
||||
return this._musicAudioSource;
|
||||
}
|
||||
|
||||
/**
|
||||
* @en
|
||||
* play short audio, such as strikes,explosions
|
||||
* @zh
|
||||
* 播放短音频,比如 打击音效,爆炸音效等
|
||||
* @param sound clip or url for the audio
|
||||
* @param volume
|
||||
*/
|
||||
playOneShot(sound: AudioClip | string, volume: number = 1.0) {
|
||||
if (sound instanceof AudioClip) {
|
||||
this._soundAudioSource.playOneShot(sound, (this.muteSound ? 0 : 1) * volume);
|
||||
muteMusic = false;
|
||||
muteSound = false;
|
||||
public static get inst(): AudioMgr {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
if (!(this["_inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
|
||||
void (this["_inst"] = new AudioMgr());
|
||||
return this["_inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
else {
|
||||
resources.load(sound, (err, clip: AudioClip) => {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
}
|
||||
else {
|
||||
this._soundAudioSource.playOneShot(clip, (this.muteSound ? 0 : 1) * volume);
|
||||
}
|
||||
});
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @en
|
||||
* play long audio, such as the bg music
|
||||
* @zh
|
||||
* 播放长音频,比如 背景音乐
|
||||
* @param sound clip or url for the sound
|
||||
* @param volume
|
||||
*/
|
||||
play(sound: AudioClip, isLoop: boolean = true, volume: number = 1.0) {
|
||||
if (sound instanceof AudioClip) {
|
||||
this.musicAudioSource.stop();
|
||||
this.musicAudioSource.clip = sound;
|
||||
this.musicAudioSource.loop = isLoop
|
||||
this.musicAudioSource.play();
|
||||
this.musicAudioSource.volume = (this.muteMusic ? 0 : 1) * volume;
|
||||
public get soundAudioSource(): AudioSource {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return this["_soundAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
else {
|
||||
resources.load(sound, (err, clip: AudioClip) => {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
}
|
||||
else {
|
||||
this.musicAudioSource.clip = clip;
|
||||
this.musicAudioSource.play();
|
||||
this.musicAudioSource.volume = (this.muteMusic ? 0 : 1) * volume;
|
||||
}
|
||||
});
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
muteMusic: boolean = false
|
||||
muteSound: boolean = false
|
||||
|
||||
activeMusic(active: boolean) {
|
||||
this.musicAudioSource.volume = active ? 1 : 0
|
||||
this.muteMusic = !active
|
||||
public get musicAudioSource(): AudioSource {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
activeSound(active: boolean) {
|
||||
this.soundAudioSource.volume = active ? 1 : 0
|
||||
this.muteSound = !active
|
||||
private constructor() {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const audioRoot = new Node('__audioMgr__');
|
||||
void (director["getScene"]()["addChild"](audioRoot));
|
||||
void (director["addPersistRootNode"](audioRoot));
|
||||
void (this["_soundAudioSource"] = audioRoot["addComponent"](AudioSource));
|
||||
void (this["_musicAudioSource"] = audioRoot["addComponent"](AudioSource));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* stop the audio play
|
||||
*/
|
||||
stop() {
|
||||
this._soundAudioSource.stop();
|
||||
this._musicAudioSource.stop();
|
||||
playOneShot(sound: AudioClip | string, volume = 1): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["resolveClip"](sound, (clip) => (this["_soundAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"](clip, this["getSoundVolume"](volume))));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* pause the audio play
|
||||
*/
|
||||
pause() {
|
||||
this._soundAudioSource.pause();
|
||||
this._musicAudioSource.pause();
|
||||
play(sound: AudioClip | string, isLoop = true, volume = 1): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
if (sound instanceof AudioClip) {
|
||||
void (this["startMusic"](sound, volume, { "stopCurrent": true, "loop": isLoop }));
|
||||
return;
|
||||
}
|
||||
void (this["resolveClip"](sound, (clip) => this["startMusic"](clip, volume)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* resume the audio play
|
||||
*/
|
||||
resume() {
|
||||
this._soundAudioSource.play();
|
||||
this._musicAudioSource.play();
|
||||
activeMusic(active: boolean): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["setChannelActive"]('muteMusic', this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, active));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
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';
|
||||
import { SingletonBase } from '../SingletonBase';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, js, JsonAsset, resources } from 'cc';
|
||||
import { setClassName } from '../../data/ConfigData';
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
import { SingletonBase } from '../SingletonBase';
|
||||
const { ccclass } = _decorator;
|
||||
interface ConfigRecord {
|
||||
id: number;
|
||||
}
|
||||
type ConfigConstructor<T> = new () => T;
|
||||
@ccclass('DataMgr')
|
||||
export class DataMgr extends SingletonBase<DataMgr> {
|
||||
|
||||
datas: Map<string, any[]> = new Map();
|
||||
protected start(): void {
|
||||
setClassName()
|
||||
this.initAllConfig()
|
||||
}
|
||||
|
||||
datas: Map<string, Array<any>> = new Map();
|
||||
|
||||
|
||||
createInstance(className: string): any {
|
||||
const Constructor = (window as any).ConfigData[className];
|
||||
|
||||
if (typeof Constructor === 'function') {
|
||||
return new Constructor();
|
||||
} else {
|
||||
console.error(`Class ${className} is not a constructor`);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
initAllConfig() {
|
||||
resources.loadDir(`data`, null, null, (err, assets) => {
|
||||
for (let i = 0; i < assets.length; i++) {
|
||||
let jsonAsset = assets[i] as JsonAsset
|
||||
let className = jsonAsset.name
|
||||
let array = new Array<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)
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (setClassName());
|
||||
void (this["initAllConfig"]());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
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]
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
initDataItem(obj, record: Record<string, any>) {
|
||||
for (const key in record) {
|
||||
if (record.hasOwnProperty(key) && obj.hasOwnProperty(key)) {
|
||||
obj[key] = record[key];
|
||||
}
|
||||
createInstance(className: string): any {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return this["withConstructor"](className, `Class ${className} is not a constructor`, (Constructor) => new Constructor());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
public GetDatas<T>(dataClass: new () => T): Array<T> {
|
||||
let name = js.getClassName(dataClass)
|
||||
console.log(this.datas.get(name))
|
||||
console.log(dataClass)
|
||||
console.log(name)
|
||||
console.log(this.datas)
|
||||
return this.datas.get(name) as Array<T>
|
||||
initAllConfig(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (resources["loadDir"]('data', null, null, (error, assets) => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
if (error) {
|
||||
void (console["error"]('Failed to load config data', error));
|
||||
return;
|
||||
}
|
||||
void (assets["forEach"]((asset) => this["registerJsonAsset"](asset as JsonAsset)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
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 { AudioMgr } from '../audio/AudioMgr';
|
||||
import { Config } from '../../data/GameConfig';
|
||||
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
const eventTarget = new EventTarget();
|
||||
const { ccclass } = _decorator;
|
||||
const PLAYER_DATA_KEY = 'playerData';
|
||||
@ccclass('LocalSaveMgr')
|
||||
export class LocalSaveMgr extends Component {
|
||||
static instance: LocalSaveMgr;
|
||||
playerData: PlayerData = null
|
||||
|
||||
playerData: PlayerData = null;
|
||||
protected onLoad(): void {
|
||||
LocalSaveMgr.instance = this
|
||||
let value = localStorage.getItem("playerData")
|
||||
|
||||
if (value != null || value != "") {
|
||||
|
||||
this.playerData = new PlayerData()
|
||||
try {
|
||||
this.playerData.jsonDataInit(JSON.parse(value))
|
||||
} catch (err) {
|
||||
//…
|
||||
}
|
||||
} else {
|
||||
this.playerData = new PlayerData()
|
||||
}
|
||||
this.initSound()
|
||||
}
|
||||
|
||||
passLevel() {
|
||||
this.playerData.levelIndex += 1
|
||||
this.save()
|
||||
}
|
||||
|
||||
addCoin(count: number) {
|
||||
console.log("addCoin", count)
|
||||
this.playerData.coin += count
|
||||
EventCenter.coinCountChange.emit("coinCountChange")
|
||||
this.save()
|
||||
}
|
||||
|
||||
|
||||
save() {
|
||||
localStorage.setItem("playerData", JSON.stringify(this.playerData))
|
||||
}
|
||||
|
||||
clearData() {
|
||||
localStorage.clear()
|
||||
}
|
||||
|
||||
initSound() {
|
||||
AudioMgr.inst.activeSound(!this.playerData.muteSound)
|
||||
AudioMgr.inst.activeMusic(!this.playerData.muteMusic)
|
||||
}
|
||||
|
||||
activeSound(active: boolean) {
|
||||
this.playerData.muteSound = !active
|
||||
AudioMgr.inst.activeSound(active)
|
||||
this.save()
|
||||
|
||||
}
|
||||
activeMusic(active: boolean) {
|
||||
this.playerData.muteMusic = !active
|
||||
AudioMgr.inst.activeMusic(active)
|
||||
this.save()
|
||||
}
|
||||
|
||||
equipWeapon(index: number) {
|
||||
this.playerData.equipedWeapon = index
|
||||
this.save()
|
||||
}
|
||||
|
||||
buyWeapon(index: number) {
|
||||
this.playerData.ownWeapon.push(index)
|
||||
console.log("购买武器", index, this.playerData.ownWeapon[this.playerData.ownWeapon.length - 1])
|
||||
this.save()
|
||||
}
|
||||
|
||||
timerAddPower(count: number) {
|
||||
this.playerData.power += count
|
||||
if (this.playerData.power > Config.maxHp) {
|
||||
this.playerData.power = Config.maxHp
|
||||
}
|
||||
EventCenter.powerChange.emit("powerChange")
|
||||
this.save()
|
||||
}
|
||||
|
||||
usePower() {
|
||||
this.playerData.power -= 1
|
||||
EventCenter.powerChange.emit("powerChange")
|
||||
this.save()
|
||||
}
|
||||
|
||||
adsAddPower() {
|
||||
this.playerData.power += 3
|
||||
EventCenter.powerChange.emit("powerChange")
|
||||
this.save()
|
||||
}
|
||||
|
||||
completeTutorial() {
|
||||
this.playerData.haveTutorial = true
|
||||
this.save()
|
||||
}
|
||||
|
||||
getPowerCD() {
|
||||
const lastAddPowerTimer = this.playerData.lastAddPowerTimer
|
||||
if (!Number.isFinite(lastAddPowerTimer) || lastAddPowerTimer <= 0) {
|
||||
return Config.powerCD
|
||||
}
|
||||
|
||||
const passTime = Math.max(0, (Date.now() - lastAddPowerTimer) / 1000)
|
||||
return Math.max(0, Config.powerCD - passTime)
|
||||
}
|
||||
|
||||
protected update(dt: number): void {
|
||||
if (this.playerData.power < Config.maxHp) {
|
||||
if (this.playerData.isOnTimerRun == false) {
|
||||
this.playerData.isOnTimerRun = true
|
||||
this.playerData.lastAddPowerTimer = Date.now()
|
||||
this.save()
|
||||
}
|
||||
|
||||
if (this.playerData.isOnTimerRun) {
|
||||
let passTime = (Date.now() - this.playerData.lastAddPowerTimer) / 1000
|
||||
// console.log(passTime)
|
||||
if ((passTime > Config.powerCD)) {
|
||||
console.log("倒计时足够")
|
||||
this.playerData.lastAddPowerTimer = Date.now()
|
||||
this.timerAddPower(Math.floor(passTime / Config.powerCD))
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (LocalSaveMgr["instance"] = this);
|
||||
void (this["playerData"] = this["readPlayerData"]());
|
||||
void (this["initSound"]());
|
||||
}
|
||||
|
||||
if (this.playerData.power >= Config.maxHp) {
|
||||
console.log("体力超过上线")
|
||||
this.playerData.isOnTimerRun = false
|
||||
this.save()
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
passLevel(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["change"]('levelIndex', (value) => value + 1));
|
||||
}
|
||||
}
|
||||
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
addCoin(count: number): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["change"]('coin', (value) => value + count, () => (EventCenter["coinCountChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["emit"]('coinCountChange')));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
save(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (localStorage["setItem"](PLAYER_DATA_KEY, JSON["stringify"](this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
clearData(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (localStorage["clear"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
initSound(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeSound"](!((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["muteSound"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
|
||||
void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeMusic"](!((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["muteMusic"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
activeSound(active: boolean): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["change"]('muteSound', () => !active, () => (AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeSound"](active)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
activeMusic(active: boolean): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["change"]('muteMusic', () => !active, () => (AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeMusic"](active)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
equipWeapon(index: number): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["change"]('equipedWeapon', () => index));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
buyWeapon(index: number): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["change"]('ownWeapon', (weapons) => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (weapons["push"](index));
|
||||
return weapons;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
timerAddPower(count: number): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["change"]('power', (value) => Math["min"](Config["maxHp"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, value + count), () => (EventCenter["powerChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["emit"]('powerChange')));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
usePower(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["change"]('power', (value) => value - 1, () => (EventCenter["powerChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["emit"]('powerChange')));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
adsAddPower(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["change"]('power', (value) => value + 3, () => (EventCenter["powerChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["emit"]('powerChange')));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
completeTutorial(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["change"]('haveTutorial', () => true));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
getPowerCD(): number {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const lastTimer = (this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["lastAddPowerTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
if (!Number["isFinite"](lastTimer) || lastTimer <= 0)
|
||||
return Config["powerCD"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
const elapsed = Math["max"](0, (Date["now"]() - lastTimer) / 1000);
|
||||
return Math["max"](0, (Config["powerCD"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - elapsed);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
protected update(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
if ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown >= (Config["maxHp"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
|
||||
return;
|
||||
void (this["startPowerTimerIfNeeded"]());
|
||||
const elapsed = (Date["now"]() - ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["lastAddPowerTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) / 1000;
|
||||
if (elapsed <= (Config["powerCD"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
|
||||
return;
|
||||
void ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["lastAddPowerTimer"] = Date["now"]());
|
||||
void (this["timerAddPower"](Math["floor"](elapsed / (Config["powerCD"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))));
|
||||
if ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown >= (Config["maxHp"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) {
|
||||
void ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["isOnTimerRun"] = false);
|
||||
void (this["save"]());
|
||||
}
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private readPlayerData(): PlayerData {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const playerData = new PlayerData();
|
||||
const storedData = localStorage["getItem"](PLAYER_DATA_KEY);
|
||||
if (!storedData)
|
||||
return playerData;
|
||||
try {
|
||||
void (playerData["jsonDataInit"](JSON["parse"](storedData)));
|
||||
}
|
||||
catch (error) {
|
||||
void (console["warn"]('Unable to restore player data', error));
|
||||
}
|
||||
return playerData;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private startPowerTimerIfNeeded(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
if ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["isOnTimerRun"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)
|
||||
return;
|
||||
void ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["isOnTimerRun"] = true);
|
||||
void ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["lastAddPowerTimer"] = Date["now"]());
|
||||
void (this["save"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private change<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 {
|
||||
muteMusic: boolean = false
|
||||
muteSound: boolean = false
|
||||
levelIndex: number = 1
|
||||
equipedWeapon: number = 1
|
||||
power: number = Config.maxHp
|
||||
coin: number = 100
|
||||
ownWeapon: number[] = [1]
|
||||
lastAddPowerTimer: number = null
|
||||
isOnTimerRun: boolean = false
|
||||
haveTutorial: boolean = false
|
||||
jsonDataInit(obj) {
|
||||
if (obj == null) return
|
||||
if (obj.muteMusic != null)
|
||||
this.muteMusic = obj.muteMusic
|
||||
if (obj.muteSound != null)
|
||||
this.muteSound = obj.muteSound
|
||||
if (obj.levelIndex != null)
|
||||
this.levelIndex = obj.levelIndex
|
||||
if (obj.equipedWeapon != null)
|
||||
this.equipedWeapon = obj.equipedWeapon
|
||||
if (obj.ownWeapon != null)
|
||||
this.ownWeapon = obj.ownWeapon
|
||||
if (obj.coin != null)
|
||||
this.coin = obj.coin
|
||||
if (obj.lastAddPowerTimer != null)
|
||||
this.lastAddPowerTimer = obj.lastAddPowerTimer
|
||||
if (obj.power != null)
|
||||
this.power = obj.power
|
||||
if (obj.isOnTimerRun != null)
|
||||
this.isOnTimerRun = obj.isOnTimerRun
|
||||
if (obj.haveTutorial != null)
|
||||
this.haveTutorial = obj.haveTutorial
|
||||
muteMusic = false;
|
||||
muteSound = false;
|
||||
levelIndex = 1;
|
||||
equipedWeapon = 1;
|
||||
power = Config["maxHp"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
coin = 100;
|
||||
ownWeapon: number[] = [1];
|
||||
lastAddPowerTimer: number = null;
|
||||
isOnTimerRun = false;
|
||||
haveTutorial = false;
|
||||
jsonDataInit(obj: Partial<PlayerData>): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
if (!obj)
|
||||
return;
|
||||
void ((Object["keys"](this) as Array<keyof PlayerData>)["forEach"]((property) => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: if (obj[property] != null)
|
||||
void ((this as any)[property] = obj[property]);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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';
|
||||
|
||||
const { ccclass } = _decorator;
|
||||
|
||||
/**
|
||||
* Integration seam for a future rewarded-placement provider.
|
||||
* The project currently ships without any advertising or platform SDK.
|
||||
*/
|
||||
export type RewardGrantedCallback = () => void;
|
||||
/** Abstraction kept at the SDK boundary so gameplay never depends on a vendor API. */
|
||||
export interface RewardProvider {
|
||||
requestReward(onGranted: () => void): void;
|
||||
requestReward(onGranted: RewardGrantedCallback): void;
|
||||
}
|
||||
|
||||
const immediateRewardProvider: RewardProvider = Object["freeze"]({
|
||||
requestReward(onGranted: RewardGrantedCallback): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (onGranted());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
},
|
||||
});
|
||||
const ignoreReward = (): void => undefined;
|
||||
@ccclass('SdkMgr')
|
||||
export class SdkMgr extends Component implements RewardProvider {
|
||||
static instance: SdkMgr;
|
||||
|
||||
static instance: SdkMgr = null;
|
||||
private rewardProvider: RewardProvider = immediateRewardProvider;
|
||||
protected onLoad(): void {
|
||||
SdkMgr.instance = this;
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (SdkMgr["instance"] = this);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* SDK-free default: grant the gameplay reward immediately.
|
||||
* Replace this method body with a provider call when an SDK is added later.
|
||||
*/
|
||||
public requestReward(onGranted?: () => void): void {
|
||||
onGranted?.();
|
||||
protected onDestroy(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: if (SdkMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === this) {
|
||||
void (SdkMgr["instance"] = null);
|
||||
}
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
/** Allows a platform adapter to be injected without changing panel code. */
|
||||
public useRewardProvider(provider: RewardProvider): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["rewardProvider"] = provider || immediateRewardProvider);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
/** SDK-free builds preserve the existing behaviour by granting immediately. */
|
||||
public requestReward(onGranted: RewardGrantedCallback = ignoreReward): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void ((this["rewardProvider"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["requestReward"](onGranted));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Component, instantiate, js, Label, Node } from 'cc';
|
||||
import { FramePoller } from '../runtime/FramePoller';
|
||||
import { RuntimeAssetLoader } from '../runtime/RuntimeAssetLoader';
|
||||
const { ccclass } = _decorator;
|
||||
@ccclass('PanelBase')
|
||||
export class PanelBase extends Component {
|
||||
protected isOpen: boolean = false;
|
||||
|
||||
protected isOpen = false;
|
||||
public async open(): Promise<void> {
|
||||
if (this.isOpen) return;
|
||||
this.node.active = true
|
||||
this.isOpen = true;
|
||||
this.onOpen();
|
||||
}
|
||||
|
||||
static async LoadPanel(prefabPath: string, parentNode: Node) {
|
||||
|
||||
let panelNode: Node = null
|
||||
resources.load(prefabPath, Prefab, (err, prefabAsset) => {
|
||||
if (prefabAsset) {
|
||||
const node = instantiate(prefabAsset);
|
||||
node.parent = parentNode;
|
||||
node.getComponent(PanelBase).open()
|
||||
panelNode = node
|
||||
} else {
|
||||
console.error(`Failed to load UI prefab: ${prefabPath}`);
|
||||
}
|
||||
});
|
||||
|
||||
await this.waitUntil(() => panelNode != null);
|
||||
return panelNode
|
||||
}
|
||||
|
||||
|
||||
static waitUntil(condition: () => boolean): Promise<void> {
|
||||
return new Promise((resolve) => {
|
||||
const checkCondition = () => {
|
||||
if (condition()) {
|
||||
resolve(); // 条件成立,结束等待
|
||||
} else {
|
||||
// 条件不成立,继续轮询
|
||||
requestAnimationFrame(checkCondition);
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
if (this["isOpen"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)
|
||||
return;
|
||||
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = true);
|
||||
void (this["isOpen"] = true);
|
||||
void (this["onOpen"]());
|
||||
}
|
||||
};
|
||||
checkCondition(); // 开始检查条件
|
||||
});
|
||||
}
|
||||
|
||||
public close(): void {
|
||||
console.log("close panel", this.node.name)
|
||||
if (!this.isOpen) return;
|
||||
if (!this.isValid) return;
|
||||
|
||||
if (this.node && this.node.parent) {
|
||||
this.node.removeFromParent();
|
||||
this.node.destroy();
|
||||
this.isOpen = false;
|
||||
this.onClose();
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
public close(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
if (!(this["isOpen"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) || !(this["isValid"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
|
||||
return;
|
||||
void (this["isOpen"] = false);
|
||||
void (this["onClose"]());
|
||||
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["removeFromParent"]());
|
||||
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["destroy"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
static async LoadPanel(prefabPath: string, parentNode: Node): Promise<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 {
|
||||
let panelName = js.getClassName(this)
|
||||
return `ui/${panelName}`; // 生成预制件路径
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return `ui/${js["getClassName"](this)}`;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
protected formatTime(totalSeconds: number): string {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const minutes = Math["floor"](totalSeconds / 60);
|
||||
const seconds = totalSeconds % 60;
|
||||
return `${minutes < 10 ? `0${minutes}` : minutes}:${seconds < 10 ? `0${seconds}` : seconds}`;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
protected setNodesActive(states: ReadonlyArray<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 {
|
||||
// 子类可以重写此方法以执行打开后的操作
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
protected onClose(): void {
|
||||
// 子类可以重写此方法以执行关闭后的操作
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
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';
|
||||
import { WINDOWS } from 'cc/env';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Component, screen, view } from 'cc';
|
||||
import { resolveDesignResolution } from './DesignResolutionPolicy';
|
||||
const { ccclass } = _decorator;
|
||||
@ccclass('UIAdapt')
|
||||
export class UIAdapt extends Component {
|
||||
start() {
|
||||
screen.on('window-resize', this.adaptScreenSize, this);
|
||||
this.adaptScreenSize()
|
||||
let self = this
|
||||
this.scheduleOnce(() => {
|
||||
self.adaptScreenSize()
|
||||
}, 0.1)
|
||||
protected start(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["applyAndListen"]());
|
||||
void (this["scheduleOnce"](() => this["adaptScreenSize"](), 0.1));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
adaptScreenSize() {
|
||||
let screenWidth = view.getViewportRect().width
|
||||
let screenHeight = view.getViewportRect().height
|
||||
// let screenWidth = view.getVisibleSize().width;
|
||||
// let screenHeight = view.getVisibleSize().height;
|
||||
let screenRatio = screenHeight / screenWidth;
|
||||
|
||||
console.log("修改屏幕分辨率", screenRatio, view.getViewportRect(), view)
|
||||
|
||||
if (screenRatio > 18 / 9) {
|
||||
// 适配屏幕高度
|
||||
console.log("修改屏幕分辨率", "适配高度")
|
||||
|
||||
|
||||
let designWidth = 1080;
|
||||
let designHeight = screenHeight * (designWidth / screenWidth);
|
||||
|
||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.FIXED_WIDTH);
|
||||
} else if (screenRatio > 16 / 9) {
|
||||
// 适配屏幕宽度
|
||||
console.log("修改屏幕分辨率", "适配屏幕宽度")
|
||||
let designHeight = 1920;
|
||||
let designWidth = screenWidth * (designHeight / screenHeight);
|
||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.FIXED_HEIGHT);
|
||||
} else {
|
||||
console.log("修改屏幕分辨率", "适配屏幕宽高")
|
||||
let designWidth = 1080;
|
||||
let designHeight = screenHeight * (designWidth / screenWidth);
|
||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.EXACT_FIT);
|
||||
protected onDestroy(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (screen["off"]('window-resize', this["adaptScreenSize"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
adaptScreenSize(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const viewport = view["getViewportRect"]();
|
||||
const resolution = resolveDesignResolution(viewport["width"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, viewport["height"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
void (view["setDesignResolutionSize"](resolution["width"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, resolution["height"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, resolution["policy"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private applyAndListen(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (screen["on"]('window-resize', this["adaptScreenSize"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this));
|
||||
void (this["adaptScreenSize"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,57 +1,114 @@
|
||||
import { _decorator, Node, director, resources, instantiate, Canvas, Component, js } from 'cc';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Component, js, Node } from 'cc';
|
||||
import { PanelBase } from './PanelBase';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('UIManager')
|
||||
export class UIManager extends Component {
|
||||
static instance: UIManager
|
||||
|
||||
|
||||
|
||||
private panels: Map<string, PanelBase> = new Map();
|
||||
|
||||
@property({ type: Node })
|
||||
static instance: UIManager;
|
||||
@property({ "type": Node })
|
||||
uiRoot: Node = null;
|
||||
|
||||
onLoad() {
|
||||
UIManager.instance = this;
|
||||
private readonly panels = new Map<string, PanelBase>();
|
||||
private readonly loadingPanels = new Map<string, Promise<PanelBase>>();
|
||||
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> {
|
||||
const panelName = js.getClassName(panelClass);
|
||||
|
||||
if (!this.panels.has(panelName)) {
|
||||
let panelNode = PanelBase.LoadPanel(`ui/${js.getClassName(panelClass)}`, this.uiRoot)
|
||||
let newPanel = (await panelNode).getComponent(PanelBase)
|
||||
this.panels.set(panelName, newPanel);
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const panelName = js["getClassName"](panelClass);
|
||||
return ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](panelName)
|
||||
?? await ((this["loadingPanels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](panelName) ?? this["createPanel"](panelName))) as T;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
const existingPanel = this.panels.get(panelName);
|
||||
if (existingPanel) {
|
||||
existingPanel.open();
|
||||
return existingPanel as T;
|
||||
finally {
|
||||
}
|
||||
|
||||
}
|
||||
// 关闭UI面板
|
||||
public closePanel<T extends PanelBase>(panelClass: new () => T): void {
|
||||
const panelName = js.getClassName(panelClass);
|
||||
if (this.panels.has(panelName)) {
|
||||
const panel = this.panels.get(panelName);
|
||||
if (panel) {
|
||||
panel.close();
|
||||
this.panels.delete(panelName);
|
||||
}
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const panelName = js["getClassName"](panelClass);
|
||||
const panel = (this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](panelName);
|
||||
if (!panel)
|
||||
return;
|
||||
void ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["delete"](panelName));
|
||||
void (panel["close"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
// 关闭所有面板
|
||||
public closeAllPanels(): void {
|
||||
this.panels.forEach(panel => {
|
||||
console.log("关闭页面", panel.node.name)
|
||||
panel.close();
|
||||
});
|
||||
this.panels.clear();
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const openedPanels = Array["from"]((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["values"]());
|
||||
void ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["clear"]());
|
||||
void (openedPanels["forEach"]((panel) => panel["close"]()));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
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';
|
||||
import { AudioMgr } from '../audio/AudioMgr';
|
||||
import { AssetController } from '../../AssetController';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Button, Component, Sprite, SpriteFrame } from 'cc';
|
||||
import { runPanelAction } from './PanelInteraction';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('UISwitcher')
|
||||
export class UISwitcher extends Component {
|
||||
toggle: Button
|
||||
value: boolean
|
||||
sprite: Sprite;
|
||||
|
||||
@property({ type: SpriteFrame })
|
||||
@property({ "type": SpriteFrame })
|
||||
onSelect: SpriteFrame = null;
|
||||
|
||||
@property({ type: SpriteFrame })
|
||||
@property({ "type": SpriteFrame })
|
||||
onNoSelect: SpriteFrame = null;
|
||||
|
||||
|
||||
toggle: Button;
|
||||
value: boolean;
|
||||
sprite: Sprite;
|
||||
onSwitchCallBack: (value: boolean) => void;
|
||||
protected onLoad(): void {
|
||||
this.toggle = this.getComponent(Button)
|
||||
this.sprite = this.getComponent(Sprite)
|
||||
}
|
||||
|
||||
start() {
|
||||
|
||||
this.toggle.node.on(Button.EventType.CLICK, this.onClickToggleBtn, this);
|
||||
}
|
||||
|
||||
onSwitchCallBack
|
||||
|
||||
addCallBack(callBack) {
|
||||
this.onSwitchCallBack = callBack
|
||||
}
|
||||
|
||||
SetValue(v: boolean) {
|
||||
this.value = v
|
||||
this.switchSprite(this.value)
|
||||
}
|
||||
|
||||
switchSprite(v: boolean) {
|
||||
if (v) {
|
||||
this.sprite.spriteFrame = this.onSelect
|
||||
} else {
|
||||
this.sprite.spriteFrame = this.onNoSelect
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["toggle"] = this["getComponent"](Button));
|
||||
void (this["sprite"] = this["getComponent"](Sprite));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
onClickToggleBtn() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
// AudioMgr.inst.playOneShot(AssetController.instance.buttonClip)
|
||||
this.value = !this.value
|
||||
|
||||
this.switchSprite(this.value)
|
||||
|
||||
if (this.onSwitchCallBack != null) {
|
||||
this.onSwitchCallBack(this.value)
|
||||
protected start(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (((this["toggle"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["on"]((Button["EventType"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["CLICK"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickToggleBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
protected onDestroy(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (((this["toggle"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)?.["node"])["off"]((Button["EventType"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["CLICK"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickToggleBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
addCallBack(callBack: (value: boolean) => void): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["onSwitchCallBack"] = callBack);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
SetValue(value: boolean): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["value"] = value);
|
||||
void (this["switchSprite"](value));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
switchSprite(value: boolean): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void ((this["sprite"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["spriteFrame"] = [this["onNoSelect"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onSelect"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown][Number(value)]);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
onClickToggleBtn(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["SetValue"](!(this["value"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
|
||||
void (this["onSwitchCallBack"]?.(this["value"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,48 +1,86 @@
|
||||
|
||||
import { _decorator, Button, Component, Label, Node, Tween, tween, Vec3 } from 'cc';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Button } from 'cc';
|
||||
import { LocalSaveMgr } from '../framework/data/LocalSaveMgr';
|
||||
import { UIManager } from '../framework/ui/UIManager';
|
||||
import { UISwitcher } from '../framework/ui/UISwitcher';
|
||||
import { AudioMgr } from '../framework/audio/AudioMgr';
|
||||
import { PanelBase } from '../framework/ui/PanelBase';
|
||||
import { AssetController } from '../AssetController';
|
||||
import { GameController } from '../GameController';
|
||||
import { SdkMgr } from '../framework/sdk/SdkMgr';
|
||||
|
||||
import { connectPanelButtons, runPanelAction, runRewardedPanelAction } from '../framework/ui/PanelInteraction';
|
||||
import { UIManager } from '../framework/ui/UIManager';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('AddHeartPanel')
|
||||
export class AddHeartPanel extends PanelBase {
|
||||
|
||||
static instance: AddHeartPanel;
|
||||
|
||||
@property({ type: Button })
|
||||
@property({ "type": Button })
|
||||
addPower: Button = null;
|
||||
|
||||
@property({ type: Button })
|
||||
@property({ "type": Button })
|
||||
closeBtn: Button = null;
|
||||
|
||||
onLoad() {
|
||||
AddHeartPanel.instance = this;
|
||||
this.closeBtn.node.on(Button.EventType.CLICK, this.closeBtnCallBack, this);
|
||||
this.addPower.node.on(Button.EventType.CLICK, this.addPowerCallBack, this);
|
||||
protected onLoad(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (AddHeartPanel["instance"] = this);
|
||||
void (connectPanelButtons(this, [
|
||||
[this["closeBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["closeBtnCallBack"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["addPower"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["addPowerCallBack"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
]));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
addPowerCallBack() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
SdkMgr.instance.requestReward(() => {
|
||||
LocalSaveMgr.instance.adsAddPower()
|
||||
UIManager.instance.closePanel(AddHeartPanel)
|
||||
})
|
||||
addPowerCallBack(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runRewardedPanelAction(() => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["adsAddPower"]());
|
||||
void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closePanel"](AddHeartPanel));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
closeBtnCallBack(button: Button) {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
UIManager.instance.closePanel(AddHeartPanel)
|
||||
closeBtnCallBack(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => (UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closePanel"](AddHeartPanel)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
start() {
|
||||
|
||||
protected start(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,71 +1,158 @@
|
||||
|
||||
import { _decorator, Button, Component, Label, Node, Sprite, Tween, tween, Vec3 } from 'cc';
|
||||
import { LocalSaveMgr } from '../framework/data/LocalSaveMgr';
|
||||
import { UIManager } from '../framework/ui/UIManager';
|
||||
import { UISwitcher } from '../framework/ui/UISwitcher';
|
||||
import { AudioMgr } from '../framework/audio/AudioMgr';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Sprite } from 'cc';
|
||||
import { PanelBase } from '../framework/ui/PanelBase';
|
||||
import { AssetController } from '../AssetController';
|
||||
import { GameController } from '../GameController';
|
||||
|
||||
import { UIManager } from '../framework/ui/UIManager';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('LoadingPanel')
|
||||
export class LoadingPanel extends PanelBase {
|
||||
|
||||
static instance: LoadingPanel;
|
||||
|
||||
@property({ type: Sprite })
|
||||
@property({ "type": Sprite })
|
||||
loadingSprite: Sprite = null;
|
||||
|
||||
|
||||
@property
|
||||
fillDuration: number = 5; // 填充持续时间,单位为秒
|
||||
|
||||
private fillAmount: number = 0; // 当前填充量
|
||||
|
||||
startFill() {
|
||||
this.schedule(this.updateFill, 0.01); // 每0.01秒更新一次填充量
|
||||
fillDuration = 5;
|
||||
loadingComplete = false;
|
||||
completeCallback: () => void = null;
|
||||
private fillAmount = 0;
|
||||
protected onLoad(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (LoadingPanel["instance"] = this);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
protected onOpen(): void {
|
||||
LoadingPanel.instance.startFill()
|
||||
}
|
||||
loadingComplete: boolean = false
|
||||
completeCallback = null
|
||||
onLoadingComplete(callBack) {
|
||||
this.completeCallback = callBack
|
||||
this.loadingComplete = true
|
||||
if (this.fillAmount < 1) {
|
||||
this.fillDuration = 1
|
||||
} else {
|
||||
UIManager.instance.closePanel(LoadingPanel)
|
||||
callBack()
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["startFill"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
protected onDestroy(): void {
|
||||
this.unschedule(this.updateFill);
|
||||
}
|
||||
|
||||
updateFill() {
|
||||
if (this.fillAmount < 1) {
|
||||
this.fillAmount += 0.01 / this.fillDuration; // 根据持续时间逐步增加填充量
|
||||
this.loadingSprite.fillRange = this.fillAmount; // 更新 Sprite 的填充量
|
||||
} else {
|
||||
this.unschedule(this.updateFill); // 填充完成后停止更新
|
||||
if (this.loadingComplete) {
|
||||
UIManager.instance.closePanel(LoadingPanel)
|
||||
this.completeCallback()
|
||||
}
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["unschedule"](this["updateFill"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
onLoad() {
|
||||
LoadingPanel.instance = this;
|
||||
startFill(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["schedule"](this["updateFill"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 0.01));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
onLoadingComplete(callBack: () => void): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["completeCallback"] = callBack);
|
||||
void (this["loadingComplete"] = true);
|
||||
void ((this["isFilled"]()
|
||||
? () => this["finishLoading"]()
|
||||
: () => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["fillDuration"] = 1);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
})());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
updateFill(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void ((this["isFilled"]() ? this["finishLoading"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown : this["advanceFill"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["call"](this));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private advanceFill(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["fillAmount"] += 0.01 / (this["fillDuration"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void ((this["loadingSprite"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["fillRange"] = this["fillAmount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private isFilled(): boolean {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return this["fillAmount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown >= 1;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private finishLoading(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["unschedule"](this["updateFill"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
if (!(this["loadingComplete"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
|
||||
return;
|
||||
const callback = this["completeCallback"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closePanel"](LoadingPanel));
|
||||
void (callback?.());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,61 +1,106 @@
|
||||
import { _decorator, Button, Component, EventTouch, Input, input, instantiate, Label, Node, Prefab } from 'cc';
|
||||
import { PanelBase } from '../framework/ui/PanelBase';
|
||||
import { FPSCameraController } from '../FPSCameraController';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Button, Label } from 'cc';
|
||||
import { GameController } from '../GameController';
|
||||
import { TargetIconItem } from './TargetIconItem';
|
||||
import { EventCenter } from '../EventCenter';
|
||||
import { PanelBase } from '../framework/ui/PanelBase';
|
||||
import { connectPanelButtons, runPanelAction, runRewardedPanelAction } from '../framework/ui/PanelInteraction';
|
||||
import { UIManager } from '../framework/ui/UIManager';
|
||||
import { SdkMgr } from '../framework/sdk/SdkMgr';
|
||||
import { AudioMgr } from '../framework/audio/AudioMgr';
|
||||
import { AssetController } from '../AssetController';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('LosePanel')
|
||||
export class LosePanel extends PanelBase {
|
||||
|
||||
static instance: LosePanel = null
|
||||
|
||||
static instance: LosePanel = null;
|
||||
@property(Button)
|
||||
closeBtn: Button = null;
|
||||
|
||||
@property(Button)
|
||||
replayBtn: Button = null;
|
||||
|
||||
@property(Button)
|
||||
addTimeBtn: Button = null;
|
||||
|
||||
@property(Label)
|
||||
remainLabel: Label = null;
|
||||
|
||||
onLoad() {
|
||||
LosePanel.instance = this
|
||||
this.closeBtn.node.on(Button.EventType.CLICK, this.onClickClose, this);
|
||||
this.replayBtn.node.on(Button.EventType.CLICK, this.onClickReplay, this);
|
||||
this.addTimeBtn.node.on(Button.EventType.CLICK, this.onClickAddTime, this);
|
||||
protected onLoad(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (LosePanel["instance"] = this);
|
||||
void (connectPanelButtons(this, [
|
||||
[this["closeBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickClose"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["replayBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickReplay"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["addTimeBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickAddTime"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
]));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
onClickClose() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
GameController.getInstance().backMain()
|
||||
}
|
||||
|
||||
onClickReplay() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
GameController.getInstance().gameRestart()
|
||||
}
|
||||
|
||||
onClickAddTime() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
SdkMgr.instance.requestReward(() => {
|
||||
GameController.getInstance().curLevel.addTimer()
|
||||
GameController.getInstance().curLevel.ContinueRun()
|
||||
UIManager.instance.closePanel(LosePanel)
|
||||
})
|
||||
}
|
||||
|
||||
protected onOpen(): void {
|
||||
LosePanel.instance.remainLabel.string = "剩余: " + GameController.getInstance().curLevel.getAliveEnemeyCount().toString()
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void ((this["remainLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["string"] = `剩余: ${(GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getAliveEnemeyCount"]()}`);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
onClickClose(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => GameController["getInstance"]()["backMain"]()));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
onClickReplay(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => GameController["getInstance"]()["gameRestart"]()));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
onClickAddTime(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runRewardedPanelAction(() => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const level = GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
void (level["addTimer"]());
|
||||
void (level["ContinueRun"]());
|
||||
void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closePanel"](LosePanel));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
+470
-302
@@ -1,343 +1,511 @@
|
||||
|
||||
import { _decorator, Asset, Button, Component, debug, instantiate, Label, Node, Prefab, randomRange, Sprite, Tween, tween, Vec3 } from 'cc';
|
||||
import { LocalSaveMgr } from '../framework/data/LocalSaveMgr';
|
||||
import { UIManager } from '../framework/ui/UIManager';
|
||||
import { UISwitcher } from '../framework/ui/UISwitcher';
|
||||
import { AudioMgr } from '../framework/audio/AudioMgr';
|
||||
import { PanelBase } from '../framework/ui/PanelBase';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Button, instantiate, Label, Node, Prefab, Sprite, tween, Vec3 } from 'cc';
|
||||
import { AssetController } from '../AssetController';
|
||||
import { GameController } from '../GameController';
|
||||
import { DataMgr } from '../framework/data/DataMgr';
|
||||
import { Weapon } from '../data/ConfigData';
|
||||
import { LocalSaveMgr } from '../framework/data/LocalSaveMgr';
|
||||
import { PanelBase } from '../framework/ui/PanelBase';
|
||||
import { connectPanelButtons, playPanelClick, runPanelAction, runRewardedPanelAction } from '../framework/ui/PanelInteraction';
|
||||
import { UIManager } from '../framework/ui/UIManager';
|
||||
import { RewardFlight } from '../framework/ui/RewardFlight';
|
||||
import { AudioMgr } from '../framework/audio/AudioMgr';
|
||||
import { AddHeartPanel } from './AddHeartPanel';
|
||||
import { SdkMgr } from '../framework/sdk/SdkMgr';
|
||||
import { GameController } from '../GameController';
|
||||
import { Weapon } from '../data/ConfigData';
|
||||
import { EventCenter } from '../EventCenter';
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('MainPanel')
|
||||
export class MainPanel extends PanelBase {
|
||||
|
||||
static instance: MainPanel;
|
||||
|
||||
@property({ type: Button })
|
||||
@property({ "type": Button })
|
||||
startBtn: Button = null;
|
||||
|
||||
@property({ type: Button })
|
||||
@property({ "type": Button })
|
||||
leftBtn: Button = null;
|
||||
|
||||
@property({ type: Button })
|
||||
@property({ "type": Button })
|
||||
right: Button = null;
|
||||
|
||||
@property({ type: Button })
|
||||
@property({ "type": Button })
|
||||
equip: Button = null;
|
||||
|
||||
@property({ type: Button })
|
||||
@property({ "type": Button })
|
||||
clear: Button = null;
|
||||
|
||||
@property({ type: Button })
|
||||
@property({ "type": Button })
|
||||
addMoneyBtn: Button = null;
|
||||
|
||||
@property({ type: Button })
|
||||
@property({ "type": Button })
|
||||
buy: Button = null;
|
||||
|
||||
@property({ type: Node })
|
||||
@property({ "type": Node })
|
||||
equiped: Node = null;
|
||||
|
||||
@property({ type: Label })
|
||||
@property({ "type": Label })
|
||||
weaponName: Label = null;
|
||||
|
||||
@property({ type: Label })
|
||||
@property({ "type": Label })
|
||||
gunPrice: Label = null;
|
||||
|
||||
@property({ type: Label })
|
||||
@property({ "type": Label })
|
||||
heart: Label = null;
|
||||
|
||||
@property({ type: Label })
|
||||
@property({ "type": Label })
|
||||
heartTimer: Label = null;
|
||||
|
||||
@property({ type: Label })
|
||||
@property({ "type": Label })
|
||||
coin: Label = null;
|
||||
|
||||
@property({ type: Button })
|
||||
@property({ "type": Button })
|
||||
addHeartBtn: Button = null;
|
||||
|
||||
@property({ type: Prefab })
|
||||
@property({ "type": Prefab })
|
||||
weaponSelectPrefab: Prefab = null;
|
||||
|
||||
@property(Prefab)
|
||||
flyMoneyPrefab: Prefab = null;
|
||||
|
||||
@property(Node)
|
||||
flyMoneyContent: Node = null;
|
||||
|
||||
@property(Node)
|
||||
fingerNode: Node = null;
|
||||
|
||||
weaponDatas: Array<Weapon> = []
|
||||
|
||||
private weaponOffset: number = 1000
|
||||
private curSelectIndex: number = 0
|
||||
|
||||
@property({ type: Node })
|
||||
@property({ "type": Node })
|
||||
weaponContent: Node = null;
|
||||
|
||||
weaponDatas: Weapon[] = [];
|
||||
private weaponOffset = 1000;
|
||||
private curSelectIndex = 0;
|
||||
protected onLoad(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (MainPanel["instance"] = this);
|
||||
void (this["bindButtons"]());
|
||||
void ((EventCenter["coinCountChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["on"]('coinCountChange', this["onCoinCountChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
protected onOpen(): void {
|
||||
MainPanel.instance.refresh()
|
||||
}
|
||||
|
||||
refresh() {
|
||||
var weapons = DataMgr.getInstance().GetDatas(Weapon)
|
||||
this.weaponDatas = weapons
|
||||
let equipedIndex: number = 0
|
||||
for (let index = 0; index < weapons.length; index++) {
|
||||
let data = weapons[index]
|
||||
var item = instantiate(this.weaponSelectPrefab)
|
||||
item.setParent(this.weaponContent)
|
||||
let sprite = item.getChildByPath("Sprite").getComponent(Sprite)
|
||||
AssetController.instance.loadSetSprite(`weaponSprite/${data.spriteName}`, sprite);
|
||||
item.getChildByPath("Label").getComponent(Label).string = data.gunName
|
||||
if (data.id == LocalSaveMgr.instance.playerData.equipedWeapon) {
|
||||
equipedIndex = index
|
||||
}
|
||||
}
|
||||
|
||||
this.fingerNode.active = !LocalSaveMgr.instance.playerData.haveTutorial
|
||||
|
||||
|
||||
|
||||
this.heart.string = LocalSaveMgr.instance.playerData.power.toString()
|
||||
this.coin.string = LocalSaveMgr.instance.playerData.coin.toString()
|
||||
this.setToIndex(equipedIndex, false)
|
||||
}
|
||||
|
||||
protected update(dt: number): void {
|
||||
if (LocalSaveMgr.instance.playerData.isOnTimerRun) {
|
||||
const totalSeconds = Math.max(0, Math.ceil(LocalSaveMgr.instance.getPowerCD()))
|
||||
let minutes = Math.floor(totalSeconds / 60);
|
||||
let seconds = totalSeconds % 60;
|
||||
|
||||
// 将分钟和秒格式化为两位数
|
||||
let formattedMinutes = minutes < 10 ? `0${minutes}` : `${minutes}`;
|
||||
let formattedSeconds = seconds < 10 ? `0${seconds}` : `${seconds}`;
|
||||
|
||||
// 组合成 00:00 的格式
|
||||
let formattedTime = `${formattedMinutes}:${formattedSeconds}`;
|
||||
this.heartTimer.string = formattedTime
|
||||
|
||||
} else {
|
||||
this.heartTimer.string = "已满"
|
||||
}
|
||||
this.heart.string = LocalSaveMgr.instance.playerData.power.toString()
|
||||
}
|
||||
|
||||
setToIndex(index: number, widthAim: boolean) {
|
||||
this.curSelectIndex = index
|
||||
if (!widthAim) {
|
||||
this.weaponContent.setPosition(-this.weaponOffset * index, 0, 0)
|
||||
} else {
|
||||
let newPos = new Vec3(-this.weaponOffset * index, 0, 0)
|
||||
tween(this.weaponContent)
|
||||
.to(0.3, { position: newPos })
|
||||
.start()
|
||||
}
|
||||
|
||||
this.refreshToIndex()
|
||||
}
|
||||
|
||||
refreshToIndex() {
|
||||
let ownedWeapons = LocalSaveMgr.instance.playerData.ownWeapon
|
||||
let owned: boolean = false
|
||||
for (let index = 0; index < ownedWeapons.length; index++) {
|
||||
let element = ownedWeapons[index];
|
||||
console.log("刷新", this.weaponDatas[this.curSelectIndex].id, element, ownedWeapons.length, index)
|
||||
if (element == this.weaponDatas[this.curSelectIndex].id) {
|
||||
owned = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
let equiped: boolean = LocalSaveMgr.instance.playerData.equipedWeapon == this.weaponDatas[this.curSelectIndex].id
|
||||
// this.weaponName.string = this.weaponDatas[this.curSelectIndex].gunName
|
||||
this.gunPrice.string = this.weaponDatas[this.curSelectIndex].coin.toString()
|
||||
this.equiped.active = false
|
||||
this.buy.node.active = false
|
||||
this.equip.node.active = false
|
||||
|
||||
if (equiped) {
|
||||
this.equiped.active = true
|
||||
} else if (owned) {
|
||||
this.equip.node.active = true
|
||||
} else {
|
||||
this.buy.node.active = true
|
||||
|
||||
if (LocalSaveMgr.instance.playerData.coin >= this.weaponDatas[this.curSelectIndex].coin) {
|
||||
this.buy.interactable = true;
|
||||
this.buy.getComponent(Sprite).grayscale = false
|
||||
} else {
|
||||
this.buy.interactable = false;
|
||||
this.buy.getComponent(Sprite).grayscale = true
|
||||
}
|
||||
}
|
||||
|
||||
if (this.curSelectIndex == 0) {
|
||||
this.leftBtn.node.active = false
|
||||
} else {
|
||||
this.leftBtn.node.active = true
|
||||
}
|
||||
|
||||
if (this.curSelectIndex == this.weaponDatas.length - 1) {
|
||||
this.right.node.active = false
|
||||
} else {
|
||||
this.right.node.active = true
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
clickLeft() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
if (this.curSelectIndex > 0) {
|
||||
this.setToIndex(this.curSelectIndex - 1, true)
|
||||
}
|
||||
}
|
||||
|
||||
clickRight() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
if (this.curSelectIndex < this.weaponDatas.length - 1) {
|
||||
this.setToIndex(this.curSelectIndex + 1, true)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
clickEquipBtn() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
LocalSaveMgr.instance.equipWeapon(this.weaponDatas[this.curSelectIndex].id)
|
||||
this.refreshToIndex()
|
||||
}
|
||||
|
||||
clickBuyBtn() {
|
||||
LocalSaveMgr.instance.addCoin(-this.weaponDatas[this.curSelectIndex].coin)
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
LocalSaveMgr.instance.buyWeapon(this.weaponDatas[this.curSelectIndex].id)
|
||||
this.refreshToIndex()
|
||||
}
|
||||
|
||||
clickClear() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
LocalSaveMgr.instance.clearData()
|
||||
}
|
||||
|
||||
clickAddHeartBtn() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
UIManager.instance.openPanel(AddHeartPanel)
|
||||
}
|
||||
|
||||
clickAddMoneyBtn() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
SdkMgr.instance.requestReward(() => {
|
||||
|
||||
let addPoint = 200
|
||||
let fromeMoney = LocalSaveMgr.instance.playerData.coin
|
||||
LocalSaveMgr.instance.addCoin(addPoint)
|
||||
let endMoney = LocalSaveMgr.instance.playerData.coin
|
||||
this.flyMoney(fromeMoney, endMoney)
|
||||
})
|
||||
}
|
||||
|
||||
flyRewardMoney(fromMoney: number, endMoney: number) {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.getCoin)
|
||||
for (let index = 0; index < 10; index++) {
|
||||
let item = instantiate(this.flyMoneyPrefab)
|
||||
item.setParent(this.flyMoneyContent)
|
||||
item.setPosition(new Vec3(0, 0, 0))
|
||||
let delay = index * 0.1
|
||||
|
||||
tween(item)
|
||||
.by(0.3, { position: new Vec3(randomRange(-150, 150), randomRange(-150, 150), 0) })
|
||||
.delay(delay)
|
||||
.to(0.6, { worldPosition: this.coin.node.getWorldPosition() })
|
||||
.call(() => {
|
||||
item.destroy()
|
||||
})
|
||||
.start()
|
||||
}
|
||||
|
||||
new Tween({ value: fromMoney })
|
||||
.delay(0.9)
|
||||
.to(1, { value: endMoney }, {
|
||||
onUpdate: (target, ratio) => {
|
||||
// 在每一帧更新时调用
|
||||
let currentValue = Math.floor(target.value);
|
||||
if (this.coin != null)
|
||||
this.coin.string = currentValue.toString();
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["refresh"]());
|
||||
}
|
||||
}).call(() => {
|
||||
if (this.addMoneyBtn != null)
|
||||
this.addMoneyBtn.interactable = true
|
||||
})
|
||||
.start();
|
||||
}
|
||||
|
||||
flyMoney(fromMoney: number, endMoney: number) {
|
||||
this.addMoneyBtn.interactable = false
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.getCoin)
|
||||
for (let index = 0; index < 10; index++) {
|
||||
let item = instantiate(this.flyMoneyPrefab)
|
||||
item.setParent(this.flyMoneyContent)
|
||||
item.setPosition(this.addMoneyBtn.node.getPosition())
|
||||
let delay = index * 0.1
|
||||
|
||||
tween(item)
|
||||
.by(0.3, { position: new Vec3(randomRange(-150, 150), randomRange(-150, 150), 0) })
|
||||
.delay(delay)
|
||||
.to(0.6, { worldPosition: this.coin.node.getWorldPosition() })
|
||||
.call(() => {
|
||||
item.destroy()
|
||||
})
|
||||
.start()
|
||||
} while (false);
|
||||
}
|
||||
|
||||
new Tween({ value: fromMoney })
|
||||
.delay(0.9)
|
||||
.to(1, { value: endMoney }, {
|
||||
onUpdate: (target, ratio) => {
|
||||
// 在每一帧更新时调用
|
||||
let currentValue = Math.floor(target.value);
|
||||
if (this.coin != null)
|
||||
this.coin.string = currentValue.toString();
|
||||
finally {
|
||||
}
|
||||
}
|
||||
refresh(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["weaponDatas"] = DataMgr["getInstance"]()["GetDatas"](Weapon));
|
||||
void (this["rebuildWeaponList"]());
|
||||
void ((this["fingerNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = !(((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["haveTutorial"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (this["refreshCurrency"]());
|
||||
void (this["setToIndex"](this["findEquippedWeaponIndex"](), false));
|
||||
}
|
||||
}).call(() => {
|
||||
if (this.addMoneyBtn != null)
|
||||
this.addMoneyBtn.interactable = true
|
||||
})
|
||||
.start();
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
onCoinCountChange() {
|
||||
MainPanel.instance.coin.string = LocalSaveMgr.instance.playerData.coin.toString()
|
||||
MainPanel.instance.refreshToIndex()
|
||||
protected update(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const playerData = (LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
void (this["setLabelStrings"]([
|
||||
[this["heart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, playerData["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["heartTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, playerData["isOnTimerRun"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown ? this["formatTime"](Math["max"](0, Math["ceil"]((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getPowerCD"]())))
|
||||
: '已满'],
|
||||
]));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
setToIndex(index: number, widthAim: boolean): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["curSelectIndex"] = index);
|
||||
const position = new Vec3(-(this["weaponOffset"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) * index, 0, 0);
|
||||
if (widthAim) {
|
||||
void (tween(this["weaponContent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["to"](0.3, { position })["start"]());
|
||||
}
|
||||
else {
|
||||
void ((this["weaponContent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setPosition"](position));
|
||||
}
|
||||
void (this["refreshToIndex"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
refreshToIndex(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const selectedWeapon = (this["weaponDatas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown];
|
||||
if (!selectedWeapon)
|
||||
return;
|
||||
const playerData = (LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
const isOwned = (playerData["ownWeapon"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["indexOf"](selectedWeapon["id"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) >= 0;
|
||||
const isEquipped = playerData["equipedWeapon"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === selectedWeapon["id"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
const canBuy = playerData["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown >= (selectedWeapon["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
void ((this["gunPrice"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["string"] = (selectedWeapon["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["toString"]());
|
||||
void (this["setNodesActive"]([
|
||||
[this["equiped"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, isEquipped],
|
||||
[(this["equip"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, !isEquipped && isOwned],
|
||||
[(this["buy"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, !isEquipped && !isOwned],
|
||||
[(this["leftBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown > 0],
|
||||
[(this["right"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown < ((this["weaponDatas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - 1],
|
||||
]));
|
||||
void ((this["buy"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["interactable"] = canBuy);
|
||||
void ((this["buy"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](Sprite)["grayscale"] = !canBuy);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
clickLeft(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: if (this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown > 0)
|
||||
void (this["setToIndex"]((this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - 1, true));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
clickRight(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: if (this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown < ((this["weaponDatas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - 1)
|
||||
void (this["setToIndex"]((this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + 1, true));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
clickEquipBtn(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["equipWeapon"]((this["weaponDatas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown]["id"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (this["refreshToIndex"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
clickBuyBtn(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const selectedWeapon = (this["weaponDatas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[this["curSelectIndex"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown];
|
||||
void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addCoin"](-(selectedWeapon["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
|
||||
void (playPanelClick());
|
||||
void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["buyWeapon"](selectedWeapon["id"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (this["refreshToIndex"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
clickClear(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => (LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["clearData"]()));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
clickAddHeartBtn(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => (UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["openPanel"](AddHeartPanel)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
clickAddMoneyBtn(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runRewardedPanelAction(() => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const fromMoney = ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addCoin"](200));
|
||||
void (this["flyMoney"](fromMoney, ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
flyRewardMoney(fromMoney: number, endMoney: number): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["playCoinReward"](new Vec3(), fromMoney, endMoney, true));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
flyMoney(fromMoney: number, endMoney: number): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void ((this["addMoneyBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["interactable"] = false);
|
||||
void (this["playCoinReward"](((this["addMoneyBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getPosition"](), fromMoney, endMoney, true));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
onCoinCountChange(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["refreshCurrency"]());
|
||||
void (this["refreshToIndex"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
startBtnCallBack(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (GameController["getInstance"]()["gameStart"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
protected onDestroy(): void {
|
||||
EventCenter.coinCountChange.off("coinCountChange", this.onCoinCountChange)
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void ((EventCenter["coinCountChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["off"]('coinCountChange', this["onCoinCountChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
onLoad() {
|
||||
MainPanel.instance = this;
|
||||
this.startBtn.node.on(Button.EventType.CLICK, this.startBtnCallBack, this);
|
||||
this.leftBtn.node.on(Button.EventType.CLICK, this.clickLeft, this);
|
||||
this.right.node.on(Button.EventType.CLICK, this.clickRight, this);
|
||||
this.equip.node.on(Button.EventType.CLICK, this.clickEquipBtn, this);
|
||||
this.buy.node.on(Button.EventType.CLICK, this.clickBuyBtn, this);
|
||||
this.clear.node.on(Button.EventType.CLICK, this.clickClear, this);
|
||||
this.addHeartBtn.node.on(Button.EventType.CLICK, this.clickAddHeartBtn, this);
|
||||
this.addMoneyBtn.node.on(Button.EventType.CLICK, this.clickAddMoneyBtn, this);
|
||||
EventCenter.coinCountChange.on("coinCountChange", this.onCoinCountChange).bind(this)
|
||||
private bindButtons(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (connectPanelButtons(this, [
|
||||
[this["startBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["startBtnCallBack"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["leftBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["clickLeft"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["right"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["clickRight"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["equip"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["clickEquipBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["buy"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["clickBuyBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["clear"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["clickClear"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["addHeartBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["clickAddHeartBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["addMoneyBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["clickAddMoneyBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
]));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
startBtnCallBack() {
|
||||
GameController.getInstance().gameStart()
|
||||
private rebuildWeaponList(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void ((this["weaponContent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["destroyAllChildren"]());
|
||||
void ((this["weaponDatas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((weapon) => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const item = instantiate(this["weaponSelectPrefab"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
void (item["parent"] = this["weaponContent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
void ((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["loadSetSprite"](`weaponSprite/${weapon["spriteName"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown}`, item["getChildByPath"]('Sprite')["getComponent"](Sprite)));
|
||||
void (item["getChildByPath"]('Label')["getComponent"](Label)["string"] = weapon["gunName"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private findEquippedWeaponIndex(): number {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const equippedWeapon = ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["equipedWeapon"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
return Math["max"](0, (this["weaponDatas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["findIndex"]((weapon) => weapon["id"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === equippedWeapon));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private refreshCurrency(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["setLabelStrings"]([
|
||||
[this["heart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
]));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private playCoinReward(startPosition: Vec3, fromMoney: number, endMoney: number, unlockButton: boolean): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (RewardFlight["launch"](this["flyMoneyPrefab"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["flyMoneyContent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, startPosition, (this["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (RewardFlight["count"](fromMoney, endMoney, (value) => (this["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["string"] = value["toString"](), () => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: if (unlockButton && this["addMoneyBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)
|
||||
void ((this["addMoneyBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["interactable"] = true);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}, 0.9));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+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';
|
||||
import { PanelBase } from '../framework/ui/PanelBase';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Button } from 'cc';
|
||||
import { FPSCameraController } from '../FPSCameraController';
|
||||
import { GameController } from '../GameController';
|
||||
import { TargetIconItem } from './TargetIconItem';
|
||||
import { EventCenter } from '../EventCenter';
|
||||
import { PanelBase } from '../framework/ui/PanelBase';
|
||||
import { connectPanelButtons, runPanelAction } from '../framework/ui/PanelInteraction';
|
||||
import { UIManager } from '../framework/ui/UIManager';
|
||||
import { AudioMgr } from '../framework/audio/AudioMgr';
|
||||
import { AssetController } from '../AssetController';
|
||||
import { PlayPanel } from './PlayPanel';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('QingBaoPanel')
|
||||
export class QingBaoPanel extends PanelBase {
|
||||
|
||||
static instance: QingBaoPanel = null
|
||||
|
||||
static instance: QingBaoPanel = null;
|
||||
@property(Button)
|
||||
closeBtn: Button = null;
|
||||
|
||||
onLoad() {
|
||||
QingBaoPanel.instance = this
|
||||
this.closeBtn.node.on(Button.EventType.CLICK, this.onClickClose, this);
|
||||
protected onLoad(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (QingBaoPanel["instance"] = this);
|
||||
void (connectPanelButtons(this, [[this["closeBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickClose"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown]]));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
onClickClose() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
UIManager.instance.closePanel(QingBaoPanel)
|
||||
}
|
||||
|
||||
protected onOpen(): void {
|
||||
FPSCameraController.getInstance().showQingBao()
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["setIntelCamera"](true));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
protected onClose(): void {
|
||||
FPSCameraController.getInstance().closeQingBao()
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["setIntelCamera"](false));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
onClickClose(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => (UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closePanel"](QingBaoPanel)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private setIntelCamera(visible: boolean): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const controller = FPSCameraController["getInstance"]();
|
||||
void (visible ? controller["showQingBao"]() : controller["closeQingBao"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,95 +1,160 @@
|
||||
|
||||
import { _decorator, Button, Component, Label, Node, Tween, tween, Vec3 } from 'cc';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Button, Node } from 'cc';
|
||||
import { GameController } from '../GameController';
|
||||
import { LocalSaveMgr } from '../framework/data/LocalSaveMgr';
|
||||
import { PanelBase } from '../framework/ui/PanelBase';
|
||||
import { connectPanelButtons, playPanelClick, runPanelAction } from '../framework/ui/PanelInteraction';
|
||||
import { UIManager } from '../framework/ui/UIManager';
|
||||
import { UISwitcher } from '../framework/ui/UISwitcher';
|
||||
import { AudioMgr } from '../framework/audio/AudioMgr';
|
||||
import { PanelBase } from '../framework/ui/PanelBase';
|
||||
import { AssetController } from '../AssetController';
|
||||
import { GameController } from '../GameController';
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('SettingPanel')
|
||||
export class SettingPanel extends PanelBase {
|
||||
|
||||
static instance: SettingPanel;
|
||||
|
||||
@property({ type: Button })
|
||||
@property({ "type": Button })
|
||||
restartBtn: Button = null;
|
||||
|
||||
@property({ type: Button })
|
||||
@property({ "type": Button })
|
||||
closeBtn: Button = null;
|
||||
|
||||
@property({ type: Button })
|
||||
@property({ "type": Button })
|
||||
toMainBtn: Button = null;
|
||||
|
||||
@property({ type: UISwitcher })
|
||||
@property({ "type": UISwitcher })
|
||||
soundSwitcher: UISwitcher = null;
|
||||
|
||||
@property({ type: UISwitcher })
|
||||
@property({ "type": UISwitcher })
|
||||
musicSwitcher: UISwitcher = null;
|
||||
|
||||
@property({ type: Node })
|
||||
@property({ "type": Node })
|
||||
music: Node = null;
|
||||
|
||||
@property({ type: Node })
|
||||
@property({ "type": Node })
|
||||
sound: Node = null;
|
||||
|
||||
|
||||
onLoad() {
|
||||
SettingPanel.instance = this;
|
||||
this.closeBtn.node.on(Button.EventType.CLICK, this.closeBtnCallBack, this);
|
||||
this.restartBtn.node.on(Button.EventType.CLICK, this.restartCallBack, this);
|
||||
this.toMainBtn.node.on(Button.EventType.CLICK, this.toMainCallBack, this);
|
||||
this.node.active = false;
|
||||
this.soundSwitcher.addCallBack(this.soundCallBack)
|
||||
this.musicSwitcher.addCallBack(this.musicCallBack)
|
||||
protected onLoad(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (SettingPanel["instance"] = this);
|
||||
void (connectPanelButtons(this, [
|
||||
[this["closeBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["closeBtnCallBack"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["restartBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["restartCallBack"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["toMainBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["toMainCallBack"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
]));
|
||||
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = false);
|
||||
void ((this["soundSwitcher"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addCallBack"](() => this["soundCallBack"]()));
|
||||
void ((this["musicSwitcher"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addCallBack"](() => this["musicCallBack"]()));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
restartCallBack() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
GameController.getInstance().gameRestart()
|
||||
}
|
||||
|
||||
toMainCallBack() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
GameController.getInstance().backMain()
|
||||
}
|
||||
|
||||
soundCallBack() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
LocalSaveMgr.instance.activeSound(SettingPanel.instance.soundSwitcher.value)
|
||||
}
|
||||
|
||||
musicCallBack() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
console.log("musicCallBack")
|
||||
LocalSaveMgr.instance.activeMusic(SettingPanel.instance.musicSwitcher.value)
|
||||
}
|
||||
|
||||
|
||||
refresh() {
|
||||
GameController.getInstance().curLevel.pause()
|
||||
}
|
||||
|
||||
protected onOpen(): void {
|
||||
SettingPanel.instance.refresh()
|
||||
SettingPanel.instance.soundSwitcher.SetValue(!LocalSaveMgr.instance.playerData.muteSound)
|
||||
SettingPanel.instance.musicSwitcher.SetValue(!LocalSaveMgr.instance.playerData.muteMusic)
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["refresh"]());
|
||||
const playerData = (LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
void ((this["soundSwitcher"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["SetValue"](!(playerData["muteSound"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
|
||||
void ((this["musicSwitcher"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["SetValue"](!(playerData["muteMusic"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
closeBtnCallBack(button: Button) {
|
||||
GameController.getInstance().curLevel.ContinueRun()
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
// AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
UIManager.instance.closePanel(SettingPanel)
|
||||
|
||||
restartCallBack(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => GameController["getInstance"]()["gameRestart"]()));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
start() {
|
||||
|
||||
toMainCallBack(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => GameController["getInstance"]()["backMain"]()));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
soundCallBack(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => (LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeSound"]((this["soundSwitcher"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["value"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
musicCallBack(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => (LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeMusic"]((this["musicSwitcher"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["value"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
refresh(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void ((GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["pause"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
closeBtnCallBack(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void ((GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["ContinueRun"]());
|
||||
void (playPanelClick());
|
||||
void ((UIManager["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["closePanel"](SettingPanel));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
protected start(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,26 +1,25 @@
|
||||
import { _decorator, color, Component, Node, Sprite, SpriteFrame } from 'cc';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Component, Sprite, SpriteFrame } from 'cc';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('TargetIconItem')
|
||||
export class TargetIconItem extends Component {
|
||||
|
||||
|
||||
@property(Sprite)
|
||||
sprite: Sprite = null;
|
||||
|
||||
@property(SpriteFrame)
|
||||
activeFrame: SpriteFrame = null;
|
||||
|
||||
@property(SpriteFrame)
|
||||
dieFrame: SpriteFrame = null;
|
||||
|
||||
switchActive(active: boolean) {
|
||||
if (active) {
|
||||
this.sprite.spriteFrame = this.activeFrame
|
||||
} else {
|
||||
this.sprite.spriteFrame = this.dieFrame
|
||||
switchActive(active: boolean): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void ((this["sprite"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["spriteFrame"] = active ? this["activeFrame"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown : this["dieFrame"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+243
-211
@@ -1,255 +1,287 @@
|
||||
|
||||
import { _decorator, Button, Component, instantiate, Label, math, Node, Prefab, randomRange, Sprite, Tween, tween, Vec3 } from 'cc';
|
||||
import { LocalSaveMgr } from '../framework/data/LocalSaveMgr';
|
||||
import { UIManager } from '../framework/ui/UIManager';
|
||||
import { UISwitcher } from '../framework/ui/UISwitcher';
|
||||
import { AudioMgr } from '../framework/audio/AudioMgr';
|
||||
import { PanelBase } from '../framework/ui/PanelBase';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Button, Label, Node, Prefab, Tween, Vec3 } from 'cc';
|
||||
import { AssetController } from '../AssetController';
|
||||
import { GameController } from '../GameController';
|
||||
import { BattleResult } from '../BattleLevel';
|
||||
import { RewardSettlementModel } from '../domain/RewardSettlementModel';
|
||||
import { GameController } from '../GameController';
|
||||
import { AudioMgr } from '../framework/audio/AudioMgr';
|
||||
import { LocalSaveMgr } from '../framework/data/LocalSaveMgr';
|
||||
import { SdkMgr } from '../framework/sdk/SdkMgr';
|
||||
|
||||
import { PanelBase } from '../framework/ui/PanelBase';
|
||||
import { connectPanelButtons, playPanelClick, runPanelAction } from '../framework/ui/PanelInteraction';
|
||||
import { RewardFlight } from '../framework/ui/RewardFlight';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('WinPanel')
|
||||
export class WinPanel extends PanelBase {
|
||||
|
||||
static instance: WinPanel;
|
||||
|
||||
|
||||
@property(Node)
|
||||
pointer: Node = null; // 指针节点
|
||||
|
||||
pointer: Node = null;
|
||||
@property
|
||||
amplitude: number = 450; // 运动幅度
|
||||
|
||||
amplitude = 450;
|
||||
@property
|
||||
speed: number = 2; // 运动速度
|
||||
|
||||
speed = 2;
|
||||
@property(Button)
|
||||
rewardBtn: Button = null;
|
||||
|
||||
@property(Button)
|
||||
continueBtn: Button = null;
|
||||
|
||||
@property(Label)
|
||||
remainTimer: Label = null;
|
||||
|
||||
@property(Label)
|
||||
killEnemyCount: Label = null;
|
||||
|
||||
@property(Prefab)
|
||||
flyMoneyPrefab: Prefab = null;
|
||||
|
||||
@property(Label)
|
||||
coinCount: Label = null;
|
||||
|
||||
@property(Label)
|
||||
rewardCoin: Label = null;
|
||||
|
||||
@property(Label)
|
||||
rewardTimerCoin: Label = null;
|
||||
|
||||
@property(Label)
|
||||
rewardKillCoin: Label = null;
|
||||
|
||||
@property(Node)
|
||||
flyMoneyContent: Node = null;
|
||||
|
||||
@property(Label)
|
||||
coinLabel: Label = null;
|
||||
|
||||
@property(Label)
|
||||
continueCoinLabel: Label = null;
|
||||
|
||||
|
||||
private time: number = 0;
|
||||
runingPoint: boolean = false;
|
||||
rewardDouble: number = 1;
|
||||
|
||||
onLoad() {
|
||||
WinPanel.instance = this;
|
||||
this.rewardBtn.node.on(Button.EventType.CLICK, this.onClickRewardBtn, this);
|
||||
this.continueBtn.node.on(Button.EventType.CLICK, this.onClickContinueBtn, this);
|
||||
}
|
||||
|
||||
onClickRewardBtn() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
|
||||
if (Math.abs(this.pointPos) < 50) {
|
||||
this.rewardDouble = 5
|
||||
} else if (Math.abs(this.pointPos) < 150) {
|
||||
this.rewardDouble = 4
|
||||
} else if (Math.abs(this.pointPos) < 250) {
|
||||
this.rewardDouble = 3
|
||||
} else if (Math.abs(this.pointPos) < 350) {
|
||||
this.rewardDouble = 2
|
||||
} else if (Math.abs(this.pointPos) < 450) {
|
||||
this.rewardDouble = 1
|
||||
}
|
||||
this.runingPoint = false
|
||||
SdkMgr.instance.requestReward(() => {
|
||||
let addPoint = Math.ceil((this.curResult.coinCount * this.rewardDouble))
|
||||
let fromeMoney = LocalSaveMgr.instance.playerData.coin
|
||||
LocalSaveMgr.instance.addCoin(addPoint)
|
||||
let endMoney = LocalSaveMgr.instance.playerData.coin
|
||||
this.flyMoney(fromeMoney, endMoney)
|
||||
})
|
||||
}
|
||||
|
||||
onClickContinueBtn() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
GameController.getInstance().backMain()
|
||||
}
|
||||
|
||||
backMain() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
GameController.getInstance().backMain()
|
||||
}
|
||||
start() {
|
||||
this.time = 0;
|
||||
}
|
||||
curResult: BattleResult;
|
||||
|
||||
winTween1 = null
|
||||
winTween2 = null
|
||||
winTween3 = null
|
||||
refresh() {
|
||||
let result = GameController.getInstance().curLevel.levelResult
|
||||
this.curResult = result
|
||||
LocalSaveMgr.instance.addCoin(result.coinCount)
|
||||
this.killEnemyCount.string = result.enemyCount.toString()
|
||||
this.remainTimer.string = result.timer.toString()
|
||||
|
||||
this.coinLabel.string = LocalSaveMgr.instance.playerData.coin.toString()
|
||||
|
||||
this.coinCount.string = "0"
|
||||
|
||||
let startValue = 0;
|
||||
let endValue = result.coinCount;
|
||||
let duration = 1; // 1秒
|
||||
|
||||
let startValue2 = 0;
|
||||
let endValue2 = result.timerCoin;
|
||||
|
||||
let startValue3 = 0;
|
||||
let endValue3 = result.enemyCoin;
|
||||
|
||||
this.continueCoinLabel.string = result.coinCount.toString()
|
||||
|
||||
this.winTween1 = new Tween({ value: startValue })
|
||||
.to(duration, { value: endValue }, {
|
||||
onUpdate: (target, ratio) => {
|
||||
// 在每一帧更新时调用
|
||||
let currentValue = Math.floor(target.value);
|
||||
this.coinCount.string = currentValue.toString();
|
||||
pointPos: number;
|
||||
private time = 0;
|
||||
private runingPoint = false;
|
||||
private readonly scoreTweens: Tween<{
|
||||
value: number;
|
||||
}>[] = [];
|
||||
private readonly settlement = new RewardSettlementModel();
|
||||
protected onLoad(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (WinPanel["instance"] = this);
|
||||
void (connectPanelButtons(this, [
|
||||
[this["rewardBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickRewardBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["continueBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickContinueBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
]));
|
||||
}
|
||||
})
|
||||
.start();
|
||||
|
||||
this.winTween2 = new Tween({ value: startValue2 })
|
||||
.to(duration, { value: endValue2 }, {
|
||||
onUpdate: (target, ratio) => {
|
||||
// 在每一帧更新时调用
|
||||
let currentValue = Math.floor(target.value);
|
||||
this.rewardTimerCoin.string = currentValue.toString();
|
||||
}
|
||||
})
|
||||
.start();
|
||||
|
||||
this.winTween3 = new Tween({ value: startValue3 })
|
||||
.to(duration, { value: endValue3 }, {
|
||||
onUpdate: (target, ratio) => {
|
||||
// 在每一帧更新时调用
|
||||
let currentValue = Math.floor(target.value);
|
||||
this.rewardKillCoin.string = currentValue.toString();
|
||||
}
|
||||
})
|
||||
.start();
|
||||
|
||||
this.runPoint()
|
||||
}
|
||||
|
||||
flyMoney(fromMoney: number, endMoney: number) {
|
||||
this.rewardBtn.interactable = false
|
||||
this.continueBtn.interactable = false
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.getCoin)
|
||||
for (let index = 0; index < 10; index++) {
|
||||
let item = instantiate(this.flyMoneyPrefab)
|
||||
item.setParent(this.flyMoneyContent)
|
||||
item.setPosition(this.rewardBtn.node.getPosition())
|
||||
let delay = index * 0.1
|
||||
|
||||
tween(item)
|
||||
.by(0.3, { position: new Vec3(randomRange(-150, 150), randomRange(-150, 150), 0) })
|
||||
.delay(delay)
|
||||
.to(0.6, { worldPosition: this.coinLabel.node.getWorldPosition() })
|
||||
.call(() => {
|
||||
item.destroy()
|
||||
})
|
||||
.start()
|
||||
} while (false);
|
||||
}
|
||||
|
||||
new Tween({ value: fromMoney })
|
||||
.delay(0.9)
|
||||
.to(1, { value: endMoney }, {
|
||||
onUpdate: (target, ratio) => {
|
||||
// 在每一帧更新时调用
|
||||
let currentValue = Math.floor(target.value);
|
||||
this.coinLabel.string = currentValue.toString();
|
||||
}
|
||||
}).call(() => {
|
||||
// this.rewardBtn.node.active = false
|
||||
// this.continueBtn.interactable = true
|
||||
this.backMain()
|
||||
})
|
||||
.start()
|
||||
|
||||
}
|
||||
|
||||
|
||||
runPoint() {
|
||||
this.runingPoint = true
|
||||
}
|
||||
|
||||
pointPos: number
|
||||
|
||||
update(dt: number) {
|
||||
if (!this.runingPoint) return
|
||||
// 更新时间
|
||||
this.time += dt * this.speed;
|
||||
|
||||
// 使用正弦函数计算指针的位置
|
||||
const x = this.amplitude * Math.sin(this.time);
|
||||
this.pointPos = x
|
||||
// 设置指针的位置
|
||||
this.pointer.setPosition(new Vec3(x, 65, 0))
|
||||
|
||||
if (Math.abs(x) < 93.079) {
|
||||
this.rewardDouble = 5
|
||||
} else if (Math.abs(x) < 224.786) {
|
||||
this.rewardDouble = 4
|
||||
} else if (Math.abs(x) < 341.818) {
|
||||
this.rewardDouble = 3
|
||||
} else if (Math.abs(x) < 430) {
|
||||
this.rewardDouble = 2
|
||||
finally {
|
||||
}
|
||||
}
|
||||
onClickRewardBtn(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (playPanelClick());
|
||||
const rewardCoin = (this["settlement"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["select"]('claim', Math["abs"](this["pointPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (this["runingPoint"] = false);
|
||||
void ((SdkMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["requestReward"](() => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const fromMoney = ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
||||
void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addCoin"](rewardCoin));
|
||||
void (this["flyMoney"](fromMoney, ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
onClickContinueBtn(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => GameController["getInstance"]()["backMain"]()));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
backMain(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => GameController["getInstance"]()["backMain"]()));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
protected start(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["time"] = 0);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
refresh(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["curResult"] = (GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["levelResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
void ((this["settlement"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["load"]((this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coinCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addCoin"]((this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coinCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (this["setLabelStrings"]([
|
||||
[this["killEnemyCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["enemyCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["remainTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["timer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["coinLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, ((LocalSaveMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["continueCoinLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coinCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown],
|
||||
[this["coinCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 0],
|
||||
]));
|
||||
void (this["stopScoreTweens"]());
|
||||
void (this["animateValue"](this["coinCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["coinCount"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (this["animateValue"](this["rewardTimerCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["timerCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (this["animateValue"](this["rewardKillCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["curResult"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["enemyCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (this["runPoint"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
flyMoney(fromMoney: number, endMoney: number): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void ((this["rewardBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["interactable"] = false);
|
||||
void ((this["continueBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["interactable"] = false);
|
||||
void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (RewardFlight["launch"](this["flyMoneyPrefab"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["flyMoneyContent"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, ((this["rewardBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getPosition"](), (this["coinLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (RewardFlight["count"](fromMoney, endMoney, (value) => (this["coinLabel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["string"] = value["toString"](), () => this["backMain"](), 0.9));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
runPoint(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["runingPoint"] = true);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
protected update(dt: number): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
if (!(this["runingPoint"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
|
||||
return;
|
||||
void (this["time"] += dt * (this["speed"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (this["pointPos"] = (this["amplitude"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) * Math["sin"](this["time"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void ((this["pointer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setPosition"](new Vec3(this["pointPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 65, 0)));
|
||||
void ((this["rewardCoin"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["string"] = (this["settlement"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["select"]('pointer', Math["abs"](this["pointPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))["toString"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
this.rewardCoin.string = Math.ceil((this.curResult.coinCount * this.rewardDouble)).toString()
|
||||
}
|
||||
|
||||
protected onDestroy(): void {
|
||||
this.winTween1.stop()
|
||||
this.winTween2.stop()
|
||||
this.winTween3.stop()
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["stopScoreTweens"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
protected onOpen(): void {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.win)
|
||||
WinPanel.instance.time = 0;
|
||||
WinPanel.instance.refresh()
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["win"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void (this["time"] = 0);
|
||||
void (this["refresh"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private animateValue(label: Label, endValue: number): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const scoreTween = new Tween<{
|
||||
value: number;
|
||||
}>({ "value": 0 })["to"](1, { "value": endValue }, {
|
||||
"onUpdate": (target) => label["string"] = Math["floor"]((target as {
|
||||
value: number;
|
||||
})["value"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["toString"](),
|
||||
})["start"]();
|
||||
void ((this["scoreTweens"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["push"](scoreTween));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private stopScoreTweens(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void ((this["scoreTweens"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((scoreTween) => scoreTween["stop"]()));
|
||||
void ((this["scoreTweens"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] = 0);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user