update
This commit is contained in:
@@ -4,9 +4,9 @@ const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('CommonEvent')
|
||||
export default class CommonEvent {
|
||||
public static Event_FrameUpdate: string = 'Event_FrameUpdate'
|
||||
public static Event_ConnectTimeOut: string = 'Event_ConnectTimeOut'
|
||||
public static Event_ResourceLoader: string = 'Event_ResourceLoader'
|
||||
public static Event_CheckUpdate: string = 'Event_CheckUpdate'
|
||||
public static Event_Scene_Switch: string = 'Event_Scene_Switch'
|
||||
public static Event_FrameUpdate: string = 'Event_FrameUpdate'
|
||||
public static Event_ConnectTimeOut: string = 'Event_ConnectTimeOut'
|
||||
public static Event_ResourceLoader: string = 'Event_ResourceLoader'
|
||||
public static Event_CheckUpdate: string = 'Event_CheckUpdate'
|
||||
public static Event_Scene_Switch: string = 'Event_Scene_Switch'
|
||||
}
|
||||
|
||||
@@ -1,37 +1,36 @@
|
||||
import DateUtil from '../utils/DateUtil'
|
||||
|
||||
import NetConfig from './NetConfig'
|
||||
|
||||
export default class ManifestConfig {
|
||||
public static packageUrl: string = ''
|
||||
public static remoteManifestUrl: string = ''
|
||||
public static remoteVersionUrl: string = ''
|
||||
public static version: string = '1.0.0' //更新包要更新这里
|
||||
public static assets: object = {}
|
||||
public static searchPaths: Array<any> = []
|
||||
public static getManifestStr(key: string) {
|
||||
let obj: Object = {}
|
||||
obj['packageUrl'] = `${NetConfig.hotupdateUrl}/hotupdate/${key}/`
|
||||
obj['remoteManifestUrl'] =
|
||||
NetConfig.hotupdateUrl +
|
||||
'/hotupdate/' +
|
||||
key +
|
||||
'/project.manifest?t=' +
|
||||
DateUtil.now()
|
||||
obj['remoteManifestUrl'] = `${
|
||||
NetConfig.hotupdateUrl
|
||||
}/hotupdate/${key}/project.manifest?t=${DateUtil.now()}`
|
||||
obj['remoteVersionUrl'] =
|
||||
NetConfig.hotupdateUrl +
|
||||
'/hotupdate/' +
|
||||
key +
|
||||
'/version.manifest?t=' +
|
||||
DateUtil.now()
|
||||
obj['remoteVersionUrl'] = `${
|
||||
NetConfig.hotupdateUrl
|
||||
}/hotupdate/${key}/version.manifest?t=${DateUtil.now()}`
|
||||
obj['version'] = ManifestConfig.version
|
||||
obj['assets'] = {}
|
||||
obj['searchPaths'] = []
|
||||
return JSON.stringify(obj)
|
||||
}
|
||||
public static packageUrl: string = ''
|
||||
public static remoteManifestUrl: string = ''
|
||||
public static remoteVersionUrl: string = ''
|
||||
public static version: string = '1.0.0' // 更新包要更新这里
|
||||
public static assets: object = {}
|
||||
public static searchPaths: Array<any> = []
|
||||
|
||||
public static getManifestStr(key: string) {
|
||||
const obj: {
|
||||
packageUrl?: string
|
||||
remoteManifestUrl?: string
|
||||
remoteVersionUrl?: string
|
||||
version?: string
|
||||
assets?: object
|
||||
searchPaths?: Array<any>
|
||||
} = {}
|
||||
obj.packageUrl = `${NetConfig.hotupdateUrl}/hotupdate/${key}/`
|
||||
obj.remoteManifestUrl = `${NetConfig.hotupdateUrl}/hotupdate/${key}/project.manifest?t=${DateUtil.now()}`
|
||||
obj.remoteManifestUrl = `${
|
||||
NetConfig.hotupdateUrl
|
||||
}/hotupdate/${key}/project.manifest?t=${DateUtil.now()}`
|
||||
obj.remoteVersionUrl = `${NetConfig.hotupdateUrl}/hotupdate/${key}/version.manifest?t=${DateUtil.now()}`
|
||||
obj.remoteVersionUrl = `${
|
||||
NetConfig.hotupdateUrl
|
||||
}/hotupdate/${key}/version.manifest?t=${DateUtil.now()}`
|
||||
obj.version = ManifestConfig.version
|
||||
obj.assets = {}
|
||||
obj.searchPaths = []
|
||||
return JSON.stringify(obj)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,64 +1,59 @@
|
||||
import { AudioClip } from 'cc'
|
||||
|
||||
import { GameConfig } from '../../game/config/GameConfig'
|
||||
|
||||
export default class MusicConfig {
|
||||
public static musicKey2Path: Map<string, string> = new Map<string, string>() //资源预加载路径
|
||||
public static musicKey2Path: Map<string, string> = new Map<string, string>() // 资源预加载路径
|
||||
|
||||
public static musicKey2Cache: Map<string, AudioClip> = new Map<
|
||||
string,
|
||||
AudioClip
|
||||
>() //资源加载后cache路径
|
||||
public static musicKey2Cache: Map<string, AudioClip> = new Map<string, AudioClip>() // 资源加载后cache路径
|
||||
|
||||
public static init() {
|
||||
if (
|
||||
typeof GameConfig.GameName === 'undefined' ||
|
||||
GameConfig.GameName === null
|
||||
) {
|
||||
console.error('GameConfig.GameName 未配置!')
|
||||
return
|
||||
}
|
||||
public static init() {
|
||||
if (typeof GameConfig.GameName === 'undefined' || GameConfig.GameName === null) {
|
||||
console.error('GameConfig.GameName 未配置!')
|
||||
return
|
||||
}
|
||||
|
||||
const musicConfig = {
|
||||
background_1: 'music/background_1',
|
||||
background_2: 'music/background_2',
|
||||
background_3: 'music/background_3',
|
||||
deadfish_1: 'music/deadfish_1',
|
||||
deadfish_2: 'music/deadfish_2',
|
||||
deadfish_3: 'music/deadfish_3',
|
||||
deadfish_4: 'music/deadfish_4',
|
||||
deadfish_5: 'music/deadfish_5',
|
||||
deadfish_6: 'music/deadfish_6',
|
||||
deadfish_7: 'music/deadfish_7',
|
||||
deadfish_8: 'music/deadfish_8',
|
||||
deadfish_9: 'music/deadfish_9',
|
||||
deadfish_10: 'music/deadfish_10',
|
||||
deadfish_11: 'music/deadfish_11',
|
||||
deadfish_12: 'music/deadfish_12',
|
||||
deadfish_13: 'music/deadfish_13',
|
||||
deadfish_14: 'music/deadfish_14',
|
||||
deadfish_15: 'music/deadfish_15',
|
||||
deadfish_16: 'music/deadfish_16',
|
||||
deadfish_17: 'music/deadfish_17',
|
||||
deadfish_18: 'music/deadfish_18',
|
||||
deadfish_19: 'music/deadfish_19',
|
||||
deadfish_20: 'music/deadfish_20',
|
||||
deadfish_21: 'music/deadfish_21',
|
||||
deadfish_22: 'music/deadfish_22',
|
||||
deadfish_23: 'music/deadfish_23',
|
||||
deadfish_24: 'music/deadfish_24',
|
||||
deadfish_25: 'music/deadfish_25',
|
||||
deadfish_26: 'music/deadfish_26',
|
||||
deadfish_27: 'music/deadfish_27',
|
||||
deadfish_28: 'music/deadfish_28',
|
||||
deadfish_29: 'music/deadfish_29',
|
||||
fire: 'music/fire',
|
||||
}
|
||||
// 音乐要预加载的配置
|
||||
for (const key in musicConfig) {
|
||||
if (musicConfig.hasOwnProperty(key)) {
|
||||
const path = `${GameConfig.GameName}/${musicConfig[key]}`
|
||||
MusicConfig.musicKey2Path.set(key, path)
|
||||
}
|
||||
}
|
||||
}
|
||||
const musicConfig = {
|
||||
background_1: 'music/background_1',
|
||||
background_2: 'music/background_2',
|
||||
background_3: 'music/background_3',
|
||||
deadfish_1: 'music/deadfish_1',
|
||||
deadfish_2: 'music/deadfish_2',
|
||||
deadfish_3: 'music/deadfish_3',
|
||||
deadfish_4: 'music/deadfish_4',
|
||||
deadfish_5: 'music/deadfish_5',
|
||||
deadfish_6: 'music/deadfish_6',
|
||||
deadfish_7: 'music/deadfish_7',
|
||||
deadfish_8: 'music/deadfish_8',
|
||||
deadfish_9: 'music/deadfish_9',
|
||||
deadfish_10: 'music/deadfish_10',
|
||||
deadfish_11: 'music/deadfish_11',
|
||||
deadfish_12: 'music/deadfish_12',
|
||||
deadfish_13: 'music/deadfish_13',
|
||||
deadfish_14: 'music/deadfish_14',
|
||||
deadfish_15: 'music/deadfish_15',
|
||||
deadfish_16: 'music/deadfish_16',
|
||||
deadfish_17: 'music/deadfish_17',
|
||||
deadfish_18: 'music/deadfish_18',
|
||||
deadfish_19: 'music/deadfish_19',
|
||||
deadfish_20: 'music/deadfish_20',
|
||||
deadfish_21: 'music/deadfish_21',
|
||||
deadfish_22: 'music/deadfish_22',
|
||||
deadfish_23: 'music/deadfish_23',
|
||||
deadfish_24: 'music/deadfish_24',
|
||||
deadfish_25: 'music/deadfish_25',
|
||||
deadfish_26: 'music/deadfish_26',
|
||||
deadfish_27: 'music/deadfish_27',
|
||||
deadfish_28: 'music/deadfish_28',
|
||||
deadfish_29: 'music/deadfish_29',
|
||||
fire: 'music/fire',
|
||||
}
|
||||
// 音乐要预加载的配置
|
||||
for (const key in musicConfig) {
|
||||
if (Object.prototype.hasOwnProperty.call(musicConfig, key)) {
|
||||
const path = `${GameConfig.GameName}/${musicConfig[key]}`
|
||||
MusicConfig.musicKey2Path.set(key, path)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
export default class NetConfig {
|
||||
public static hotupdateUrl: string = 'http://localhost:33/hotupdate'
|
||||
public static hotupdateUrl: string = 'http://localhost:33/hotupdate'
|
||||
}
|
||||
|
||||
@@ -1,50 +1,53 @@
|
||||
import { _decorator, Component, instantiate, Label, Node, tween, Vec3 } from 'cc'
|
||||
import PrefabLoader from '../utils/PrefabLoader'
|
||||
import { Component, Label, Node, Vec3, _decorator, instantiate, tween } from 'cc'
|
||||
|
||||
import { GameConfig } from '../../game/config/GameConfig'
|
||||
import PrefabLoader from '../utils/PrefabLoader'
|
||||
|
||||
import DialogBase from './DialogBase'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('CommonTips')
|
||||
export default class CommonTips extends Component {
|
||||
public static TipsZorderIndex: number = 999
|
||||
@property({ type: Label })
|
||||
txtContent: Label | null = null
|
||||
private tips: string = ''
|
||||
private static showingNameList: Array<string> = []
|
||||
onLoad() {}
|
||||
public static TipsZorderIndex: number = 999
|
||||
@property({ type: Label })
|
||||
txtContent: Label | null = null
|
||||
|
||||
start() {
|
||||
tween(this.node)
|
||||
.by(1.5, { position: new Vec3(0, 100, 0) })
|
||||
.to(0.2, { /* opacity: 0*/ scale: Vec3.ZERO })
|
||||
.call(() => {
|
||||
this.node.destroy()
|
||||
})
|
||||
.start()
|
||||
}
|
||||
private tips: string = ''
|
||||
private static showingNameList: Array<string> = []
|
||||
|
||||
onDestroy() {
|
||||
let index: number = CommonTips.showingNameList.indexOf(this.tips)
|
||||
CommonTips.showingNameList.splice(index, 1)
|
||||
this.unscheduleAllCallbacks()
|
||||
}
|
||||
onLoad() {}
|
||||
|
||||
public static showMsg(msg: string, parentNode: Node = null) {
|
||||
PrefabLoader.loadPrefab(
|
||||
`${GameConfig.GameName}/share/uicomponent/CommonTips`,
|
||||
(loadedResource) => {
|
||||
parentNode = parentNode || DialogBase.GetRootCanvas()
|
||||
if (CommonTips.showingNameList.indexOf(msg) === -1) {
|
||||
CommonTips.showingNameList.push(msg)
|
||||
}
|
||||
let dialogNode = instantiate(loadedResource)
|
||||
dialogNode.setPosition(0, 0)
|
||||
let dialogScript: CommonTips = dialogNode.getComponent(CommonTips)
|
||||
dialogScript.tips = msg
|
||||
dialogScript.txtContent.string = msg
|
||||
parentNode.insertChild(dialogNode, CommonTips.TipsZorderIndex)
|
||||
}
|
||||
)
|
||||
}
|
||||
start() {
|
||||
tween(this.node)
|
||||
.by(1.5, { position: new Vec3(0, 100, 0) })
|
||||
.to(0.2, { /* opacity: 0 */ scale: Vec3.ZERO })
|
||||
.call(() => {
|
||||
this.node.destroy()
|
||||
})
|
||||
.start()
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
const index: number = CommonTips.showingNameList.indexOf(this.tips)
|
||||
CommonTips.showingNameList.splice(index, 1)
|
||||
this.unscheduleAllCallbacks()
|
||||
}
|
||||
|
||||
public static showMsg(msg: string, parentNode: Node = null) {
|
||||
PrefabLoader.loadPrefab(
|
||||
`${GameConfig.GameName}/share/uicomponent/CommonTips`,
|
||||
(loadedResource) => {
|
||||
parentNode = parentNode || DialogBase.GetRootCanvas()
|
||||
if (!CommonTips.showingNameList.includes(msg)) CommonTips.showingNameList.push(msg)
|
||||
|
||||
const dialogNode = instantiate(loadedResource)
|
||||
dialogNode.setPosition(0, 0)
|
||||
const dialogScript: CommonTips = dialogNode.getComponent(CommonTips)
|
||||
dialogScript.tips = msg
|
||||
dialogScript.txtContent.string = msg
|
||||
parentNode.insertChild(dialogNode, CommonTips.TipsZorderIndex)
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,30 +1,36 @@
|
||||
import { _decorator, Component, instantiate, Node, Prefab, Widget } from 'cc'
|
||||
import PrefabLoader from '../utils/PrefabLoader'
|
||||
import { Component, Node, Prefab, Widget, _decorator, instantiate } from 'cc'
|
||||
|
||||
import { GameConfig } from '../../game/config/GameConfig'
|
||||
import PrefabLoader from '../utils/PrefabLoader'
|
||||
|
||||
import DialogBase from './DialogBase'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('DarkLayer')
|
||||
export default class DarkLayer extends Component {
|
||||
private static prefab: Prefab
|
||||
onLoad() {
|
||||
this.getComponent(Widget).target = DialogBase.GetRootCanvas()
|
||||
}
|
||||
start() {}
|
||||
public static preLoad(): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
PrefabLoader.loadPrefab(
|
||||
`${GameConfig.GameName}/share/uicomponent/DarkLayer`,
|
||||
(loadedResource) => {
|
||||
DarkLayer.prefab = loadedResource
|
||||
resolve()
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
public static getDarkLayer() {
|
||||
let dialogNode: Node = instantiate(DarkLayer.prefab)
|
||||
return dialogNode
|
||||
}
|
||||
private static prefab: Prefab
|
||||
|
||||
onLoad() {
|
||||
this.getComponent(Widget).target = DialogBase.GetRootCanvas()
|
||||
}
|
||||
|
||||
start() {}
|
||||
|
||||
public static preLoad(): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
PrefabLoader.loadPrefab(
|
||||
`${GameConfig.GameName}/share/uicomponent/DarkLayer`,
|
||||
(loadedResource) => {
|
||||
DarkLayer.prefab = loadedResource
|
||||
resolve()
|
||||
},
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
public static getDarkLayer() {
|
||||
const dialogNode: Node = instantiate(DarkLayer.prefab)
|
||||
return dialogNode
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,65 +1,65 @@
|
||||
import { _decorator, Component, Node, Widget } from 'cc'
|
||||
import DarkLayer from './DarkLayer'
|
||||
import { Component, Node, Widget, _decorator } from 'cc'
|
||||
|
||||
import { UIRoot } from '../../game/utils/UIRoot'
|
||||
|
||||
import DarkLayer from './DarkLayer'
|
||||
|
||||
const { ccclass } = _decorator
|
||||
|
||||
@ccclass('DialogBase')
|
||||
export default class DialogBase extends Component {
|
||||
private static LocalZOrder: number = 5
|
||||
private darkLayer: Node | null = null
|
||||
private static LocalZOrder: number = 5
|
||||
private darkLayer: Node | null = null
|
||||
|
||||
//private static _canvas: Node;
|
||||
public static GetRootCanvas(): Node {
|
||||
//if(DialogBase._canvas == null)
|
||||
// DialogBase._canvas = director.getScene().getChildByName('Canvas');
|
||||
//return DialogBase._canvas;
|
||||
return UIRoot.Instance.node
|
||||
}
|
||||
onLoad() {
|
||||
DialogBase.LocalZOrder += 1
|
||||
let closeLayer: Node = this.node.getChildByName('closeLayer')
|
||||
if (closeLayer) {
|
||||
let closeLayerWidget: Widget = closeLayer.getComponent(Widget)
|
||||
if (closeLayerWidget) {
|
||||
closeLayerWidget.target = DialogBase.GetRootCanvas()
|
||||
closeLayerWidget.left = 0
|
||||
closeLayerWidget.right = 0
|
||||
closeLayerWidget.top = 0
|
||||
closeLayerWidget.bottom = 0
|
||||
}
|
||||
}
|
||||
this.onLoadMe()
|
||||
}
|
||||
// private static _canvas: Node;
|
||||
public static GetRootCanvas(): Node {
|
||||
// if(DialogBase._canvas == null)
|
||||
// DialogBase._canvas = director.getScene().getChildByName('Canvas');
|
||||
// return DialogBase._canvas;
|
||||
return UIRoot.Instance.node
|
||||
}
|
||||
|
||||
onLoadMe() {}
|
||||
onLoad() {
|
||||
DialogBase.LocalZOrder += 1
|
||||
const closeLayer: Node = this.node.getChildByName('closeLayer')
|
||||
if (closeLayer) {
|
||||
const closeLayerWidget: Widget = closeLayer.getComponent(Widget)
|
||||
if (closeLayerWidget) {
|
||||
closeLayerWidget.target = DialogBase.GetRootCanvas()
|
||||
closeLayerWidget.left = 0
|
||||
closeLayerWidget.right = 0
|
||||
closeLayerWidget.top = 0
|
||||
closeLayerWidget.bottom = 0
|
||||
}
|
||||
}
|
||||
this.onLoadMe()
|
||||
}
|
||||
|
||||
start(isPlayMv: boolean = false) {
|
||||
this.darkLayer = DarkLayer.getDarkLayer()
|
||||
this.node.insertChild(this.darkLayer, 0) //this.node.addChild(this.darkLayer, -1);
|
||||
if (isPlayMv) {
|
||||
this.node.setScale(0, 0)
|
||||
} else {
|
||||
this.onStartMe()
|
||||
}
|
||||
}
|
||||
onLoadMe() {}
|
||||
|
||||
onStartMe() {}
|
||||
start(isPlayMv: boolean = false) {
|
||||
this.darkLayer = DarkLayer.getDarkLayer()
|
||||
this.node.insertChild(this.darkLayer, 0) // this.node.addChild(this.darkLayer, -1);
|
||||
if (isPlayMv) this.node.setScale(0, 0)
|
||||
else this.onStartMe()
|
||||
}
|
||||
|
||||
onClickClose() {
|
||||
this.node.destroy()
|
||||
}
|
||||
onStartMe() {}
|
||||
|
||||
update(dt) {
|
||||
this.onUpdateMe(dt)
|
||||
}
|
||||
onClickClose() {
|
||||
this.node.destroy()
|
||||
}
|
||||
|
||||
onUpdateMe(dt) {}
|
||||
update(dt) {
|
||||
this.onUpdateMe(dt)
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
DialogBase.LocalZOrder -= 1
|
||||
this.onDestroyMe()
|
||||
}
|
||||
onUpdateMe(dt) {}
|
||||
|
||||
onDestroyMe() {}
|
||||
onDestroy() {
|
||||
DialogBase.LocalZOrder -= 1
|
||||
this.onDestroyMe()
|
||||
}
|
||||
|
||||
onDestroyMe() {}
|
||||
}
|
||||
|
||||
@@ -1,78 +1,76 @@
|
||||
import { _decorator, Component, instantiate, Node, Prefab, Quat, Vec3 } from 'cc'
|
||||
import PrefabLoader from '../utils/PrefabLoader'
|
||||
import { Component, Node, Prefab, Quat, Vec3, _decorator, instantiate } from 'cc'
|
||||
|
||||
import { GameConfig } from '../../game/config/GameConfig'
|
||||
import PrefabLoader from '../utils/PrefabLoader'
|
||||
|
||||
import DialogBase from './DialogBase'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('LoadingPrefab')
|
||||
export default class LoadingPrefab extends Component {
|
||||
public static instance: Node
|
||||
private static prefab: Prefab
|
||||
public static LoadingZorderIndex: number = 99
|
||||
@property({ type: Node })
|
||||
loadingSp: Node | null = null
|
||||
public static instance: Node
|
||||
private static prefab: Prefab
|
||||
public static LoadingZorderIndex: number = 99
|
||||
@property({ type: Node })
|
||||
loadingSp: Node | null = null
|
||||
|
||||
private _quatCache: Quat
|
||||
private _vec3Cache: Vec3
|
||||
onLoad() {
|
||||
this._quatCache = new Quat()
|
||||
this._vec3Cache = new Vec3()
|
||||
}
|
||||
private _quatCache: Quat
|
||||
private _vec3Cache: Vec3
|
||||
|
||||
start() {}
|
||||
onLoad() {
|
||||
this._quatCache = new Quat()
|
||||
this._vec3Cache = new Vec3()
|
||||
}
|
||||
|
||||
public static close() {
|
||||
if (!LoadingPrefab.instance) {
|
||||
return
|
||||
}
|
||||
LoadingPrefab.instance.removeFromParent()
|
||||
LoadingPrefab.instance.destroy()
|
||||
LoadingPrefab.instance = null
|
||||
}
|
||||
start() {}
|
||||
|
||||
public static preLoad(): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
PrefabLoader.loadPrefab(
|
||||
GameConfig.GameName + '/' + 'share/uicomponent/LoadingPrefab',
|
||||
(loadedResource) => {
|
||||
LoadingPrefab.prefab = loadedResource
|
||||
resolve()
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
public static close() {
|
||||
if (!LoadingPrefab.instance) return
|
||||
|
||||
private static createLoadingPrefab(parentNode: Node = null) {
|
||||
let dialogNode: Node = instantiate(LoadingPrefab.prefab)
|
||||
LoadingPrefab.instance = dialogNode
|
||||
if (!parentNode) {
|
||||
parentNode = DialogBase.GetRootCanvas()
|
||||
}
|
||||
parentNode.insertChild(dialogNode, LoadingPrefab.LoadingZorderIndex)
|
||||
dialogNode.setPosition(0, 0)
|
||||
}
|
||||
LoadingPrefab.instance.removeFromParent()
|
||||
LoadingPrefab.instance.destroy()
|
||||
LoadingPrefab.instance = null
|
||||
}
|
||||
|
||||
public static async show(parentNode: Node = null) {
|
||||
if (LoadingPrefab.instance) return
|
||||
if (!LoadingPrefab.prefab) {
|
||||
await LoadingPrefab.preLoad()
|
||||
}
|
||||
this.createLoadingPrefab(parentNode)
|
||||
}
|
||||
public static preLoad(): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
PrefabLoader.loadPrefab(
|
||||
`${GameConfig.GameName}/share/uicomponent/LoadingPrefab`,
|
||||
(loadedResource) => {
|
||||
LoadingPrefab.prefab = loadedResource
|
||||
resolve()
|
||||
},
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
update(dt) {
|
||||
this.loadingSp.getRotation(this._quatCache)
|
||||
Quat.toEuler(this._vec3Cache, this._quatCache)
|
||||
this._vec3Cache.z += 10
|
||||
this.loadingSp.setRotationFromEuler(this._vec3Cache)
|
||||
if (this._vec3Cache.z >= 360) {
|
||||
this.loadingSp.getRotation(Quat.IDENTITY)
|
||||
}
|
||||
}
|
||||
private static createLoadingPrefab(parentNode: Node = null) {
|
||||
const dialogNode: Node = instantiate(LoadingPrefab.prefab)
|
||||
LoadingPrefab.instance = dialogNode
|
||||
if (!parentNode) parentNode = DialogBase.GetRootCanvas()
|
||||
|
||||
public static clear() {
|
||||
LoadingPrefab.instance = null
|
||||
LoadingPrefab.prefab = null
|
||||
}
|
||||
parentNode.insertChild(dialogNode, LoadingPrefab.LoadingZorderIndex)
|
||||
dialogNode.setPosition(0, 0)
|
||||
}
|
||||
|
||||
public static async show(parentNode: Node = null) {
|
||||
if (LoadingPrefab.instance) return
|
||||
if (!LoadingPrefab.prefab) await LoadingPrefab.preLoad()
|
||||
|
||||
this.createLoadingPrefab(parentNode)
|
||||
}
|
||||
|
||||
update(dt) {
|
||||
this.loadingSp.getRotation(this._quatCache)
|
||||
Quat.toEuler(this._vec3Cache, this._quatCache)
|
||||
this._vec3Cache.z += 10
|
||||
this.loadingSp.setRotationFromEuler(this._vec3Cache)
|
||||
if (this._vec3Cache.z >= 360) this.loadingSp.getRotation(Quat.IDENTITY)
|
||||
}
|
||||
|
||||
public static clear() {
|
||||
LoadingPrefab.instance = null
|
||||
LoadingPrefab.prefab = null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,90 +1,76 @@
|
||||
import { _decorator, Component, instantiate, Node, Prefab } from 'cc'
|
||||
import PrefabLoader from '../utils/PrefabLoader'
|
||||
import Progress from './Progress'
|
||||
import { Component, Node, Prefab, _decorator, instantiate } from 'cc'
|
||||
|
||||
import { GameConfig } from '../../game/config/GameConfig'
|
||||
import PrefabLoader from '../utils/PrefabLoader'
|
||||
|
||||
import DialogBase from './DialogBase'
|
||||
import Progress from './Progress'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('LoadingScenePrefab')
|
||||
export default class LoadingScenePrefab extends Component {
|
||||
public static instance: Node
|
||||
private static prefab: Prefab
|
||||
public static LoadingZorderIndex: number = 99
|
||||
@property({ type: Node })
|
||||
private progressNode: Node | null = null
|
||||
onLoad() {}
|
||||
public static instance: Node
|
||||
private static prefab: Prefab
|
||||
public static LoadingZorderIndex: number = 99
|
||||
@property({ type: Node })
|
||||
private progressNode: Node | null = null
|
||||
|
||||
start() {}
|
||||
onLoad() {}
|
||||
|
||||
public updateProgress(
|
||||
completedCount: number,
|
||||
totalCount: number,
|
||||
item: any = null
|
||||
) {
|
||||
this.progressNode
|
||||
.getComponent(Progress)
|
||||
.updateProgress(
|
||||
completedCount,
|
||||
totalCount,
|
||||
'消耗流量,预下载所有"鱼"类中,请耐心等待...'
|
||||
)
|
||||
}
|
||||
start() {}
|
||||
|
||||
public static updateLoading(
|
||||
completedCount: number,
|
||||
totalCount: number,
|
||||
item: any = null
|
||||
) {
|
||||
if (LoadingScenePrefab.instance) {
|
||||
let nodeTs: LoadingScenePrefab =
|
||||
LoadingScenePrefab.instance.getComponent(LoadingScenePrefab)
|
||||
if (nodeTs) {
|
||||
nodeTs.updateProgress(completedCount, totalCount, item)
|
||||
}
|
||||
}
|
||||
}
|
||||
public updateProgress(completedCount: number, totalCount: number, item: any = null) {
|
||||
this.progressNode
|
||||
.getComponent(Progress)
|
||||
.updateProgress(completedCount, totalCount, '消耗流量,预下载所有"鱼"类中,请耐心等待...')
|
||||
}
|
||||
|
||||
private static createPrefab(parentNode: Node = null) {
|
||||
let dialogNode: Node = instantiate(LoadingScenePrefab.prefab)
|
||||
LoadingScenePrefab.instance = dialogNode
|
||||
if (!parentNode) {
|
||||
parentNode = DialogBase.GetRootCanvas()
|
||||
}
|
||||
parentNode.insertChild(dialogNode, LoadingScenePrefab.LoadingZorderIndex)
|
||||
dialogNode.setPosition(0, 0)
|
||||
}
|
||||
public static updateLoading(completedCount: number, totalCount: number, item: any = null) {
|
||||
if (LoadingScenePrefab.instance) {
|
||||
const nodeTs: LoadingScenePrefab =
|
||||
LoadingScenePrefab.instance.getComponent(LoadingScenePrefab)
|
||||
if (nodeTs) nodeTs.updateProgress(completedCount, totalCount, item)
|
||||
}
|
||||
}
|
||||
|
||||
public static preLoad(): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
PrefabLoader.loadPrefab(
|
||||
GameConfig.GameName + '/' + 'share/uicomponent/LoadingScenePrefab',
|
||||
(loadedResource: Prefab) => {
|
||||
LoadingScenePrefab.prefab = loadedResource
|
||||
resolve()
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
private static createPrefab(parentNode: Node = null) {
|
||||
const dialogNode: Node = instantiate(LoadingScenePrefab.prefab)
|
||||
LoadingScenePrefab.instance = dialogNode
|
||||
if (!parentNode) parentNode = DialogBase.GetRootCanvas()
|
||||
|
||||
public static close() {
|
||||
if (!LoadingScenePrefab.instance) {
|
||||
return
|
||||
}
|
||||
LoadingScenePrefab.instance.destroy()
|
||||
LoadingScenePrefab.instance = null
|
||||
}
|
||||
parentNode.insertChild(dialogNode, LoadingScenePrefab.LoadingZorderIndex)
|
||||
dialogNode.setPosition(0, 0)
|
||||
}
|
||||
|
||||
public static async show(parentNode: Node = null) {
|
||||
if (LoadingScenePrefab.instance) return
|
||||
if (!LoadingScenePrefab.prefab) {
|
||||
await LoadingScenePrefab.preLoad()
|
||||
}
|
||||
this.createPrefab(parentNode)
|
||||
}
|
||||
public static preLoad(): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
PrefabLoader.loadPrefab(
|
||||
`${GameConfig.GameName}/share/uicomponent/LoadingScenePrefab`,
|
||||
(loadedResource: Prefab) => {
|
||||
LoadingScenePrefab.prefab = loadedResource
|
||||
resolve()
|
||||
},
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
public static clear() {
|
||||
LoadingScenePrefab.instance = null
|
||||
LoadingScenePrefab.prefab = null
|
||||
}
|
||||
public static close() {
|
||||
if (!LoadingScenePrefab.instance) return
|
||||
|
||||
LoadingScenePrefab.instance.destroy()
|
||||
LoadingScenePrefab.instance = null
|
||||
}
|
||||
|
||||
public static async show(parentNode: Node = null) {
|
||||
if (LoadingScenePrefab.instance) return
|
||||
if (!LoadingScenePrefab.prefab) await LoadingScenePrefab.preLoad()
|
||||
|
||||
this.createPrefab(parentNode)
|
||||
}
|
||||
|
||||
public static clear() {
|
||||
LoadingScenePrefab.instance = null
|
||||
LoadingScenePrefab.prefab = null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
import { _decorator, AssetManager, AudioClip, AudioSource, Component, instantiate, Prefab } from 'cc'
|
||||
import {
|
||||
AssetManager,
|
||||
AudioClip,
|
||||
AudioSource,
|
||||
Component,
|
||||
Prefab,
|
||||
_decorator,
|
||||
instantiate,
|
||||
} from 'cc'
|
||||
|
||||
import { GameConfig } from '../../game/config/GameConfig'
|
||||
import MusicConfig from '../config/MusicConfig'
|
||||
import LocalStorage from '../utils/LocalStorage'
|
||||
import { Logger } from '../utils/Logger'
|
||||
import PrefabLoader from '../utils/PrefabLoader'
|
||||
import LocalStorage from '../utils/LocalStorage'
|
||||
import MusicConfig from '../config/MusicConfig'
|
||||
import { GameConfig } from '../../game/config/GameConfig'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@@ -13,71 +22,59 @@ const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('MusicPrefab')
|
||||
export default class MusicPrefab extends Component {
|
||||
private static instance: MusicPrefab
|
||||
private static MUSIC_VOLUMN_KEY: string = 'musicVolumn'
|
||||
public static musicVolumn: number = 1
|
||||
public static play(key: string) {
|
||||
let url: string = MusicConfig.musicKey2Path.get(key)
|
||||
if (url) {
|
||||
AssetManager.instance.resources.load(
|
||||
url,
|
||||
AudioClip,
|
||||
(error: Error, clip: AudioClip) => {
|
||||
if (error) {
|
||||
Logger.warn(this, 'load music error===', error.message)
|
||||
} else {
|
||||
if (clip) {
|
||||
this.instance.node.getComponent(AudioSource).clip = clip
|
||||
this.instance.node.getComponent(AudioSource).volume =
|
||||
this.musicVolumn
|
||||
this.instance.node.getComponent(AudioSource).play()
|
||||
this.instance.node.getComponent(AudioSource).loop = true
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
} else {
|
||||
Logger.warn(this, '播放不存在的music=', key)
|
||||
}
|
||||
}
|
||||
private static instance: MusicPrefab
|
||||
private static MUSIC_VOLUMN_KEY: string = 'musicVolumn'
|
||||
public static musicVolumn: number = 1
|
||||
|
||||
public static changeVolumn(nowVolumn: number) {
|
||||
this.musicVolumn = nowVolumn
|
||||
this.instance.node.getComponent(AudioSource).volume = nowVolumn
|
||||
LocalStorage.setItem(
|
||||
MusicPrefab.MUSIC_VOLUMN_KEY,
|
||||
this.musicVolumn.toString()
|
||||
)
|
||||
}
|
||||
public static play(key: string) {
|
||||
const url: string = MusicConfig.musicKey2Path.get(key)
|
||||
if (url) {
|
||||
AssetManager.instance.resources.load(url, AudioClip, (error: Error, clip: AudioClip) => {
|
||||
if (error) {
|
||||
Logger.warn(this, 'load music error===', error.message)
|
||||
} else {
|
||||
if (clip) {
|
||||
this.instance.node.getComponent(AudioSource).clip = clip
|
||||
this.instance.node.getComponent(AudioSource).volume = this.musicVolumn
|
||||
this.instance.node.getComponent(AudioSource).play()
|
||||
this.instance.node.getComponent(AudioSource).loop = true
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
Logger.warn(this, '播放不存在的music=', key)
|
||||
}
|
||||
}
|
||||
|
||||
private static preInit() {
|
||||
this.musicVolumn = parseFloat(
|
||||
LocalStorage.getItem(MusicPrefab.MUSIC_VOLUMN_KEY)
|
||||
)
|
||||
if (isNaN(this.musicVolumn)) {
|
||||
this.musicVolumn = 1
|
||||
}
|
||||
}
|
||||
public static changeVolumn(nowVolumn: number) {
|
||||
this.musicVolumn = nowVolumn
|
||||
this.instance.node.getComponent(AudioSource).volume = nowVolumn
|
||||
LocalStorage.setItem(MusicPrefab.MUSIC_VOLUMN_KEY, this.musicVolumn.toString())
|
||||
}
|
||||
|
||||
public static preLoad(): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
PrefabLoader.loadPrefab(
|
||||
GameConfig.GameName + '/' + 'share/uicomponent/MusicPrefab',
|
||||
(loadedResource: Prefab) => {
|
||||
MusicPrefab.instance =
|
||||
instantiate(loadedResource).getComponent(MusicPrefab)
|
||||
this.preInit()
|
||||
resolve()
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
private static preInit() {
|
||||
this.musicVolumn = Number.parseFloat(LocalStorage.getItem(MusicPrefab.MUSIC_VOLUMN_KEY))
|
||||
if (Number.isNaN(this.musicVolumn)) this.musicVolumn = 1
|
||||
}
|
||||
|
||||
public static destory() {
|
||||
if (MusicPrefab.instance) {
|
||||
MusicPrefab.instance.getComponent(AudioSource).stop()
|
||||
MusicPrefab.instance.destroy()
|
||||
}
|
||||
MusicPrefab.instance = null
|
||||
}
|
||||
public static preLoad(): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
PrefabLoader.loadPrefab(
|
||||
`${GameConfig.GameName}/share/uicomponent/MusicPrefab`,
|
||||
(loadedResource: Prefab) => {
|
||||
MusicPrefab.instance = instantiate(loadedResource).getComponent(MusicPrefab)
|
||||
this.preInit()
|
||||
resolve()
|
||||
},
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
public static destory() {
|
||||
if (MusicPrefab.instance) {
|
||||
MusicPrefab.instance.getComponent(AudioSource).stop()
|
||||
MusicPrefab.instance.destroy()
|
||||
}
|
||||
MusicPrefab.instance = null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,56 +1,55 @@
|
||||
import { _decorator, Component, Label, ProgressBar } from 'cc'
|
||||
import { Component, Label, ProgressBar, _decorator } from 'cc'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('Progress')
|
||||
export default class Progress extends Component {
|
||||
@property(Label)
|
||||
public percentLable: Label
|
||||
@property(Label)
|
||||
public percentLable: Label
|
||||
|
||||
@property(ProgressBar)
|
||||
public bar: ProgressBar
|
||||
@property(ProgressBar)
|
||||
public bar: ProgressBar
|
||||
|
||||
onLoad() {
|
||||
this.bar.node.active = false
|
||||
this.bar.progress = 0
|
||||
}
|
||||
onLoad() {
|
||||
this.bar.node.active = false
|
||||
this.bar.progress = 0
|
||||
}
|
||||
|
||||
start() {}
|
||||
start() {}
|
||||
|
||||
updatePercent(current, filePercent) {
|
||||
//this.percentLable.string = filePercent.toFixed(2);
|
||||
}
|
||||
updatePercent(current, filePercent) {
|
||||
// this.percentLable.string = filePercent.toFixed(2);
|
||||
}
|
||||
|
||||
updatefileTotal(current, filePercent) {
|
||||
if (!this.bar.node.active) this.bar.node.active = true
|
||||
var nowPercent = Math.round((current / filePercent) * 100)
|
||||
var curMB = this.getMB(current)
|
||||
var totalMB = this.getMB(filePercent)
|
||||
// this.percentLable.string = "正在更新 " + nowPercent + "%" + " ( " + curMB + " / "+totalMB +" MB)";
|
||||
nowPercent = Math.min(nowPercent, 100)
|
||||
this.percentLable.string = '正在更新 ' + nowPercent + '%'
|
||||
var percent = current / filePercent
|
||||
this.bar.progress = percent
|
||||
}
|
||||
updatefileTotal(current: number, filePercent: number) {
|
||||
if (!this.bar.node.active) this.bar.node.active = true
|
||||
let nowPercent = Math.round((current / filePercent) * 100)
|
||||
const curMB = this.getMB(current)
|
||||
const totalMB = this.getMB(filePercent)
|
||||
// this.percentLable.string = "正在更新 " + nowPercent + "%" + " ( " + curMB + " / "+totalMB +" MB)";
|
||||
nowPercent = Math.min(nowPercent, 100)
|
||||
this.percentLable.string = `正在更新 ${nowPercent}%`
|
||||
this.bar.progress = current / filePercent
|
||||
}
|
||||
|
||||
public updateProgress(
|
||||
current,
|
||||
total,
|
||||
msg: string = '正在加载资源,此过程不消耗流量...'
|
||||
) {
|
||||
this.bar.node.active = true
|
||||
// this.setMsg(msg+ current + "/" + total);
|
||||
this.setMsg(msg)
|
||||
this.bar.progress = current / total
|
||||
}
|
||||
public updateProgress(
|
||||
current: number,
|
||||
total: number,
|
||||
msg: string = '正在加载资源,此过程不消耗流量...',
|
||||
) {
|
||||
this.bar.node.active = true
|
||||
// this.setMsg(msg+ current + "/" + total);
|
||||
this.setMsg(msg)
|
||||
this.bar.progress = current / total
|
||||
}
|
||||
|
||||
getMB(bytes) {
|
||||
bytes /= 1024
|
||||
bytes /= 1024
|
||||
return bytes.toFixed(2)
|
||||
}
|
||||
getMB(bytes: number) {
|
||||
bytes /= 1024
|
||||
bytes /= 1024
|
||||
return bytes.toFixed(2)
|
||||
}
|
||||
|
||||
public setMsg(msg: string = '游戏加载中,请稍后...') {
|
||||
this.percentLable.string = msg
|
||||
}
|
||||
public setMsg(msg: string = '游戏加载中,请稍后...') {
|
||||
this.percentLable.string = msg
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,22 @@
|
||||
import { _decorator, AssetManager, AudioClip, AudioSource, Component, instantiate, Node, NodePool, Prefab } from 'cc'
|
||||
import { Logger } from '../utils/Logger'
|
||||
import PrefabLoader from '../utils/PrefabLoader'
|
||||
import LocalStorage from '../utils/LocalStorage'
|
||||
import EventManager from '../utils/EventManager'
|
||||
import {
|
||||
AssetManager,
|
||||
AudioClip,
|
||||
AudioSource,
|
||||
Component,
|
||||
Node,
|
||||
NodePool,
|
||||
Prefab,
|
||||
_decorator,
|
||||
instantiate,
|
||||
} from 'cc'
|
||||
|
||||
import { GameConfig } from '../../game/config/GameConfig'
|
||||
import CommonEvent from '../config/CommonEvent'
|
||||
import MusicConfig from '../config/MusicConfig'
|
||||
import { GameConfig } from '../../game/config/GameConfig'
|
||||
import EventManager from '../utils/EventManager'
|
||||
import LocalStorage from '../utils/LocalStorage'
|
||||
import { Logger } from '../utils/Logger'
|
||||
import PrefabLoader from '../utils/PrefabLoader'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@@ -16,120 +27,102 @@ const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('SoundPrefab')
|
||||
export default class SoundPrefab extends Component {
|
||||
private static prefab: Prefab | null = null
|
||||
private static SOUND_VOLUMN_KEY: string = 'soundVolumn'
|
||||
public static soundVolumn: number = 1
|
||||
private static Pool_Init_Num: number = 30
|
||||
private static pool: NodePool = new NodePool()
|
||||
private static nowAudioNodeList: Array<Node> = []
|
||||
private audioName: string = ''
|
||||
private audioUrl: string = ''
|
||||
private static getAudioNode() {
|
||||
let node: Node = null
|
||||
// if (this.pool.size() > 0) {
|
||||
private static prefab: Prefab | null = null
|
||||
private static SOUND_VOLUMN_KEY: string = 'soundVolumn'
|
||||
public static soundVolumn: number = 1
|
||||
private static Pool_Init_Num: number = 30
|
||||
private static pool: NodePool = new NodePool()
|
||||
private static nowAudioNodeList: Array<Node> = []
|
||||
private audioName: string = ''
|
||||
private audioUrl: string = ''
|
||||
|
||||
// node = this.pool.get();
|
||||
// } else {
|
||||
node = instantiate(this.prefab)
|
||||
// }
|
||||
return node
|
||||
}
|
||||
private static getAudioNode() {
|
||||
let node: Node = null
|
||||
// if (this.pool.size() > 0) {
|
||||
|
||||
public static play(key: string) {
|
||||
let url: string = MusicConfig.musicKey2Path.get(key)
|
||||
if (url) {
|
||||
AssetManager.instance.resources.load(url, AudioClip, (error: Error, clip: AudioClip) => {
|
||||
if (error) {
|
||||
Logger.warn(this, 'load sound error===', error.message)
|
||||
} else {
|
||||
if (clip) {
|
||||
let audioNode: Node = this.getAudioNode()
|
||||
if (audioNode) {
|
||||
audioNode.getComponent(AudioSource).clip = clip
|
||||
audioNode.getComponent(AudioSource).volume =
|
||||
SoundPrefab.soundVolumn
|
||||
audioNode.getComponent(AudioSource).loop = false
|
||||
audioNode.getComponent(AudioSource).currentTime = 0 //rewind();
|
||||
audioNode.getComponent(AudioSource).play()
|
||||
audioNode.getComponent(SoundPrefab).audioName = key
|
||||
audioNode.getComponent(SoundPrefab).audioUrl = url
|
||||
this.nowAudioNodeList.push(audioNode)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
Logger.warn(this, '播放不存在的music=', key)
|
||||
}
|
||||
}
|
||||
// node = this.pool.get();
|
||||
// } else {
|
||||
node = instantiate(this.prefab)
|
||||
// }
|
||||
return node
|
||||
}
|
||||
|
||||
public static changeVolumn(nowVolumn: number) {
|
||||
this.soundVolumn = nowVolumn
|
||||
for (let i = 0; i < this.nowAudioNodeList.length; i++) {
|
||||
let audioNode: Node = this.nowAudioNodeList[i]
|
||||
let audioSource: AudioSource = audioNode.getComponent(AudioSource)
|
||||
if (audioSource.playing) {
|
||||
audioSource.volume = nowVolumn
|
||||
}
|
||||
}
|
||||
LocalStorage.setItem(
|
||||
SoundPrefab.SOUND_VOLUMN_KEY,
|
||||
SoundPrefab.soundVolumn.toString()
|
||||
)
|
||||
}
|
||||
public static play(key: string) {
|
||||
const url: string = MusicConfig.musicKey2Path.get(key)
|
||||
if (url) {
|
||||
AssetManager.instance.resources.load(url, AudioClip, (error: Error, clip: AudioClip) => {
|
||||
if (error) {
|
||||
Logger.warn(this, 'load sound error===', error.message)
|
||||
} else {
|
||||
if (clip) {
|
||||
const audioNode: Node = this.getAudioNode()
|
||||
if (audioNode) {
|
||||
audioNode.getComponent(AudioSource).clip = clip
|
||||
audioNode.getComponent(AudioSource).volume = SoundPrefab.soundVolumn
|
||||
audioNode.getComponent(AudioSource).loop = false
|
||||
audioNode.getComponent(AudioSource).currentTime = 0 // rewind();
|
||||
audioNode.getComponent(AudioSource).play()
|
||||
audioNode.getComponent(SoundPrefab).audioName = key
|
||||
audioNode.getComponent(SoundPrefab).audioUrl = url
|
||||
this.nowAudioNodeList.push(audioNode)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
Logger.warn(this, '播放不存在的music=', key)
|
||||
}
|
||||
}
|
||||
|
||||
private static preInit() {
|
||||
EventManager.instance.addListener(
|
||||
CommonEvent.Event_FrameUpdate,
|
||||
this.updateFrame,
|
||||
this
|
||||
)
|
||||
SoundPrefab.soundVolumn = parseFloat(
|
||||
LocalStorage.getItem(SoundPrefab.SOUND_VOLUMN_KEY)
|
||||
)
|
||||
if (isNaN(SoundPrefab.soundVolumn)) {
|
||||
SoundPrefab.soundVolumn = 1
|
||||
}
|
||||
}
|
||||
public static changeVolumn(nowVolumn: number) {
|
||||
this.soundVolumn = nowVolumn
|
||||
for (let i = 0; i < this.nowAudioNodeList.length; i++) {
|
||||
const audioNode: Node = this.nowAudioNodeList[i]
|
||||
const audioSource: AudioSource = audioNode.getComponent(AudioSource)
|
||||
if (audioSource.playing) audioSource.volume = nowVolumn
|
||||
}
|
||||
LocalStorage.setItem(SoundPrefab.SOUND_VOLUMN_KEY, SoundPrefab.soundVolumn.toString())
|
||||
}
|
||||
|
||||
private static updateFrame() {
|
||||
for (let i = 0; i < this.nowAudioNodeList.length; i++) {
|
||||
let audioNode: Node = this.nowAudioNodeList[i]
|
||||
let audioSource: AudioSource = audioNode.getComponent(AudioSource)
|
||||
if (!audioSource.playing) {
|
||||
SoundPrefab.nowAudioNodeList.splice(i, 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
private static preInit() {
|
||||
EventManager.instance.addListener(CommonEvent.Event_FrameUpdate, this.updateFrame, this)
|
||||
SoundPrefab.soundVolumn = Number.parseFloat(LocalStorage.getItem(SoundPrefab.SOUND_VOLUMN_KEY))
|
||||
if (Number.isNaN(SoundPrefab.soundVolumn)) SoundPrefab.soundVolumn = 1
|
||||
}
|
||||
|
||||
public static preLoad(): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
PrefabLoader.loadPrefab(
|
||||
GameConfig.GameName + '/' + 'share/uicomponent/SoundPrefab',
|
||||
(loadedResource: Prefab) => {
|
||||
SoundPrefab.prefab = loadedResource
|
||||
this.preInit()
|
||||
// for (let i = 0; i < this.Pool_Init_Num; i++) {
|
||||
// let tempNode: cc.Node = cc.instantiate(loadedResource);
|
||||
// this.pool.put(tempNode);
|
||||
// }
|
||||
resolve()
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
private static updateFrame() {
|
||||
for (let i = 0; i < this.nowAudioNodeList.length; i++) {
|
||||
const audioNode: Node = this.nowAudioNodeList[i]
|
||||
const audioSource: AudioSource = audioNode.getComponent(AudioSource)
|
||||
if (!audioSource.playing) SoundPrefab.nowAudioNodeList.splice(i, 1)
|
||||
}
|
||||
}
|
||||
|
||||
public static destory() {
|
||||
EventManager.instance.removeListener(
|
||||
CommonEvent.Event_FrameUpdate,
|
||||
this.updateFrame
|
||||
)
|
||||
for (let i = 0; i < this.nowAudioNodeList.length; i++) {
|
||||
let audioNode: Node = this.nowAudioNodeList[i]
|
||||
audioNode.getComponent(AudioSource).stop()
|
||||
audioNode.getComponent(AudioSource).destroy()
|
||||
}
|
||||
this.nowAudioNodeList = []
|
||||
this.pool.clear()
|
||||
}
|
||||
public static preLoad(): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
PrefabLoader.loadPrefab(
|
||||
`${GameConfig.GameName}/share/uicomponent/SoundPrefab`,
|
||||
(loadedResource: Prefab) => {
|
||||
SoundPrefab.prefab = loadedResource
|
||||
this.preInit()
|
||||
// for (let i = 0; i < this.Pool_Init_Num; i++) {
|
||||
// let tempNode: cc.Node = cc.instantiate(loadedResource);
|
||||
// this.pool.put(tempNode);
|
||||
// }
|
||||
resolve()
|
||||
},
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
public static destory() {
|
||||
EventManager.instance.removeListener(CommonEvent.Event_FrameUpdate, this.updateFrame)
|
||||
for (let i = 0; i < this.nowAudioNodeList.length; i++) {
|
||||
const audioNode: Node = this.nowAudioNodeList[i]
|
||||
audioNode.getComponent(AudioSource).stop()
|
||||
audioNode.getComponent(AudioSource).destroy()
|
||||
}
|
||||
this.nowAudioNodeList = []
|
||||
this.pool.clear()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,25 @@
|
||||
import { _decorator, Component, SpriteFrame } from 'cc'
|
||||
import { Component, SpriteFrame, _decorator } from 'cc'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('TextureMgr')
|
||||
export default class TextureMgr extends Component {
|
||||
@property({ type: [SpriteFrame] })
|
||||
public Spriteset: SpriteFrame[] = []
|
||||
@property({ type: [SpriteFrame] })
|
||||
public Spriteset1: SpriteFrame[] = []
|
||||
@property({ type: [SpriteFrame] })
|
||||
public Spriteset2: SpriteFrame[] = []
|
||||
@property({ type: [SpriteFrame] })
|
||||
public Spriteset3: SpriteFrame[] = []
|
||||
@property({ type: [SpriteFrame] })
|
||||
public Spriteset4: SpriteFrame[] = []
|
||||
@property({ type: [SpriteFrame] })
|
||||
public Spriteset: SpriteFrame[] = []
|
||||
|
||||
onLoad() {
|
||||
// // init logic
|
||||
}
|
||||
@property({ type: [SpriteFrame] })
|
||||
public Spriteset1: SpriteFrame[] = []
|
||||
|
||||
@property({ type: [SpriteFrame] })
|
||||
public Spriteset2: SpriteFrame[] = []
|
||||
|
||||
@property({ type: [SpriteFrame] })
|
||||
public Spriteset3: SpriteFrame[] = []
|
||||
|
||||
@property({ type: [SpriteFrame] })
|
||||
public Spriteset4: SpriteFrame[] = []
|
||||
|
||||
onLoad() {
|
||||
// init logic
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,29 +10,25 @@ export default class AdapterHelper {
|
||||
|
||||
public static fixApdater() {
|
||||
log('v3.6没找到接口修改 fitHeight、fitWidth, 先在项目里写死fitHeight=true')
|
||||
return
|
||||
let framesize = view.getFrameSize()
|
||||
if (!this.winSizeWidth) {
|
||||
this.winSizeWidth = screen.width
|
||||
this.winSizeHeiht = screen.height
|
||||
}
|
||||
let designsize = view.getDesignResolutionSize()
|
||||
let canvas: Canvas = DialogBase.GetRootCanvas().getComponent(Canvas)
|
||||
|
||||
let ratio: number = framesize.height / framesize.width
|
||||
let designRatio: number = designsize.height / designsize.width
|
||||
if (ratio > designRatio) {
|
||||
//canvas.fitHeight = false;
|
||||
//canvas.fitWidth = true;
|
||||
error(
|
||||
'v3.6没找到接口修改 fitHeight、fitWidth, 先在项目里写死fitHeight=true'
|
||||
)
|
||||
} else {
|
||||
//canvas.fitHeight = true;
|
||||
//canvas.fitWidth = false;
|
||||
error(
|
||||
'v3.6没找到接口修改 fitHeight、fitWidth, 先在项目里写死fitHeight=true'
|
||||
)
|
||||
}
|
||||
// return
|
||||
// const framesize = view.getFrameSize()
|
||||
// if (!this.winSizeWidth) {
|
||||
// this.winSizeWidth = screen.width
|
||||
// this.winSizeHeiht = screen.height
|
||||
// }
|
||||
// const designsize = view.getDesignResolutionSize()
|
||||
// const canvas: Canvas = DialogBase.GetRootCanvas().getComponent(Canvas)
|
||||
|
||||
// const ratio: number = framesize.height / framesize.width
|
||||
// const designRatio: number = designsize.height / designsize.width
|
||||
// if (ratio > designRatio) {
|
||||
// canvas.fitHeight = false;
|
||||
// canvas.fitWidth = true;
|
||||
// error('v3.6没找到接口修改 fitHeight、fitWidth, 先在项目里写死fitHeight=true')
|
||||
// } else {
|
||||
// // canvas.fitHeight = true;
|
||||
// // canvas.fitWidth = false;
|
||||
// error('v3.6没找到接口修改 fitHeight、fitWidth, 先在项目里写死fitHeight=true')
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,45 +4,39 @@ const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('BitUtil')
|
||||
export default class BitUtil {
|
||||
//index是二进制从右到左
|
||||
// index是二进制从右到左
|
||||
public static isBitSet(value: number, index: number): boolean {
|
||||
let str: string = value.toString(2)
|
||||
return parseInt(str[str.length - 1 - index]) == 1
|
||||
const str: string = value.toString(2)
|
||||
return Number.parseInt(str[str.length - 1 - index]) === 1
|
||||
}
|
||||
|
||||
//从右到左计算
|
||||
// 从右到左计算
|
||||
public static setBitValue(value: number, index: number): number {
|
||||
let newValue: number = value
|
||||
let str: string = value.toString(2)
|
||||
const str: string = value.toString(2)
|
||||
let newStr: string = ''
|
||||
let maxIndex = Math.max(str.length - 1, index)
|
||||
const maxIndex = Math.max(str.length - 1, index)
|
||||
for (let i = 0; i <= maxIndex; i++) {
|
||||
if (index == i) {
|
||||
newStr = '1' + newStr
|
||||
if (index === i) {
|
||||
newStr = `1${newStr}`
|
||||
} else {
|
||||
if (str[i] == undefined) {
|
||||
newStr = '0' + newStr
|
||||
} else {
|
||||
newStr = str[i] + newStr
|
||||
}
|
||||
if (str[i] === undefined) newStr = `0${newStr}`
|
||||
else newStr = str[i] + newStr
|
||||
}
|
||||
}
|
||||
newValue = parseInt(newStr, 2)
|
||||
newValue = Number.parseInt(newStr, 2)
|
||||
return newValue
|
||||
}
|
||||
|
||||
public static clearBitValue(value: number, index: number) {
|
||||
let newValue: number = value
|
||||
let str: string = value.toString(2)
|
||||
const str: string = value.toString(2)
|
||||
let newStr: string = ''
|
||||
for (let i = str.length - 1; i >= 0; i--) {
|
||||
if (index == str.length - 1 - i) {
|
||||
newStr = '0' + newStr
|
||||
} else {
|
||||
newStr = str[i] + newStr
|
||||
}
|
||||
if (index === str.length - 1 - i) newStr = `0${newStr}`
|
||||
else newStr = str[i] + newStr
|
||||
}
|
||||
newValue = parseInt(newStr, 2)
|
||||
newValue = Number.parseInt(newStr, 2)
|
||||
return newValue
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { _decorator, Color } from 'cc'
|
||||
import { Color, _decorator } from 'cc'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('ColorHelper')
|
||||
export default class ColorHelper {
|
||||
public static getColor(hexStr: string): Color {
|
||||
let color: Color = Color.BLACK
|
||||
const color: Color = Color.BLACK
|
||||
return color.fromHEX(hexStr)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,136 +1,83 @@
|
||||
export default class DateUtil {
|
||||
public static formatNumStr(num: number) {
|
||||
let str = '' + num
|
||||
if (num < 10) {
|
||||
str = '0' + num
|
||||
}
|
||||
let str = `${num}`
|
||||
if (num < 10) str = `0${num}`
|
||||
return str
|
||||
}
|
||||
|
||||
public static formateYearMonthDayStr(timestamp: number) {
|
||||
let date: Date = new Date(timestamp)
|
||||
return (
|
||||
date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()
|
||||
)
|
||||
const date: Date = new Date(timestamp)
|
||||
return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`
|
||||
}
|
||||
|
||||
public static formateMonthDayStr(timestamp: number) {
|
||||
let date: Date = new Date(timestamp)
|
||||
return date.getMonth() + 1 + '月' + date.getDate() + '日'
|
||||
const date: Date = new Date(timestamp)
|
||||
return `${date.getMonth() + 1}月${date.getDate()}日`
|
||||
}
|
||||
|
||||
// timestamp:1453094034000 2018-1-31 19:53:44
|
||||
//根据时间戳返回 2018-1-31 19:53:44
|
||||
// 根据时间戳返回 2018-1-31 19:53:44
|
||||
public static formatDateStr(timestamp: number) {
|
||||
let date: Date = new Date(timestamp)
|
||||
return (
|
||||
date.getFullYear() +
|
||||
'-' +
|
||||
(date.getMonth() + 1) +
|
||||
'-' +
|
||||
date.getDate() +
|
||||
' ' +
|
||||
this.formatNumStr(date.getHours()) +
|
||||
':' +
|
||||
this.formatNumStr(date.getMinutes()) +
|
||||
':' +
|
||||
this.formatNumStr(date.getSeconds())
|
||||
)
|
||||
const date: Date = new Date(timestamp)
|
||||
return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${this.formatNumStr(
|
||||
date.getHours(),
|
||||
)}:${this.formatNumStr(date.getMinutes())}:${this.formatNumStr(date.getSeconds())}`
|
||||
}
|
||||
|
||||
// timestamp:1453094034000 2018-1-31-19-53-44
|
||||
//根据时间戳返回 2018-1-31-19-53-44
|
||||
// 根据时间戳返回 2018-1-31-19-53-44
|
||||
public static formatDateStr2(timestamp: number) {
|
||||
let date: Date = new Date(timestamp)
|
||||
return (
|
||||
date.getFullYear() +
|
||||
'-' +
|
||||
(date.getMonth() + 1) +
|
||||
'-' +
|
||||
date.getDate() +
|
||||
'-' +
|
||||
this.formatNumStr(date.getHours()) +
|
||||
'-' +
|
||||
this.formatNumStr(date.getMinutes()) +
|
||||
'-' +
|
||||
this.formatNumStr(date.getSeconds())
|
||||
)
|
||||
const date: Date = new Date(timestamp)
|
||||
return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}-${this.formatNumStr(date.getHours())}-${this.formatNumStr(date.getMinutes())}-${this.formatNumStr(date.getSeconds())}`
|
||||
}
|
||||
|
||||
// timestamp:1453094034000 2018-1-31
|
||||
//根据时间戳返回 2018-1-31
|
||||
// 根据时间戳返回 2018-1-31
|
||||
public static formatDateStr3(timestamp: number) {
|
||||
let date: Date = new Date(timestamp)
|
||||
return (
|
||||
date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()
|
||||
)
|
||||
const date: Date = new Date(timestamp)
|
||||
return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`
|
||||
}
|
||||
|
||||
// timestamp:1453094034000
|
||||
//根据时间戳返回 19:53
|
||||
// 根据时间戳返回 19:53
|
||||
public static formatHourMinStr(timestamp: number) {
|
||||
let date: Date = new Date(timestamp)
|
||||
return (
|
||||
this.formatNumStr(date.getHours()) +
|
||||
':' +
|
||||
this.formatNumStr(date.getMinutes())
|
||||
)
|
||||
const date: Date = new Date(timestamp)
|
||||
return `${this.formatNumStr(date.getHours())}:${this.formatNumStr(date.getMinutes())}`
|
||||
}
|
||||
|
||||
// timestamp:1453094034000
|
||||
//根据时间戳返回 19:53:11
|
||||
// 根据时间戳返回 19:53:11
|
||||
public static formatHourMinSecondStr(timestamp: number) {
|
||||
let date: Date = new Date(timestamp)
|
||||
return (
|
||||
this.formatNumStr(date.getHours()) +
|
||||
':' +
|
||||
this.formatNumStr(date.getMinutes()) +
|
||||
':' +
|
||||
this.formatNumStr(date.getSeconds())
|
||||
)
|
||||
const date: Date = new Date(timestamp)
|
||||
return `${this.formatNumStr(date.getHours())}:${this.formatNumStr(date.getMinutes())}:${this.formatNumStr(date.getSeconds())}`
|
||||
}
|
||||
|
||||
public static now(): number {
|
||||
let date: Date = new Date()
|
||||
const date: Date = new Date()
|
||||
return date.getTime()
|
||||
}
|
||||
|
||||
public static betweenTime(startTime: number, endTime: number) {
|
||||
let date: Date = new Date()
|
||||
if (date.getTime() >= startTime && date.getTime() <= endTime) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
const date: Date = new Date()
|
||||
return date.getTime() >= startTime && date.getTime() <= endTime
|
||||
}
|
||||
|
||||
//根据时间戳返回 1天19:53:11
|
||||
// 根据时间戳返回 1天19:53:11
|
||||
public static formatLeftTime(timestamp: number) {
|
||||
let result: string = ''
|
||||
let day: number = Math.floor(timestamp / (1000 * 60 * 60 * 24))
|
||||
let hour: number = Math.floor(timestamp / (1000 * 60 * 60)) % 24
|
||||
let min: number = Math.floor(timestamp / (1000 * 60)) % 60
|
||||
let second: number = Math.floor(timestamp / 1000) % 60
|
||||
result =
|
||||
day +
|
||||
'天' +
|
||||
this.formatNumStr(hour) +
|
||||
':' +
|
||||
this.formatNumStr(min) +
|
||||
':' +
|
||||
this.formatNumStr(second)
|
||||
return result
|
||||
const day: number = Math.floor(timestamp / (1000 * 60 * 60 * 24))
|
||||
const hour: number = Math.floor(timestamp / (1000 * 60 * 60)) % 24
|
||||
const min: number = Math.floor(timestamp / (1000 * 60)) % 60
|
||||
const second: number = Math.floor(timestamp / 1000) % 60
|
||||
return `${day}天${this.formatNumStr(hour)}:${this.formatNumStr(min)}:${this.formatNumStr(second)}`
|
||||
}
|
||||
|
||||
public static isToday(dateTime: number): boolean {
|
||||
let nowDate: Date = new Date()
|
||||
let checkDate: Date = new Date(dateTime)
|
||||
if (
|
||||
checkDate.getFullYear() == nowDate.getFullYear() &&
|
||||
checkDate.getMonth() == nowDate.getMonth() &&
|
||||
checkDate.getDate() == nowDate.getDate()
|
||||
) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
const nowDate: Date = new Date()
|
||||
const checkDate: Date = new Date(dateTime)
|
||||
return (
|
||||
checkDate.getFullYear() === nowDate.getFullYear() &&
|
||||
checkDate.getMonth() === nowDate.getMonth() &&
|
||||
checkDate.getDate() === nowDate.getDate()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { Button, Color, Component, Node, Slider } from 'cc'
|
||||
|
||||
import ColorHelper from './ColorHelper'
|
||||
|
||||
export class HaoEvent {
|
||||
@@ -18,20 +19,17 @@ export default class EventManager {
|
||||
|
||||
private callbackList = {}
|
||||
|
||||
public constructor() {
|
||||
}
|
||||
public constructor() {}
|
||||
|
||||
//注册事件
|
||||
// 注册事件
|
||||
public addListener(eventName: string, callback: Function, caller: any) {
|
||||
if (this.callbackList[eventName]) {
|
||||
let eventList: Array<HaoEvent> = this.callbackList[eventName]
|
||||
//不同元件才放入,相同元件覆蓋
|
||||
const eventList: Array<HaoEvent> = this.callbackList[eventName]
|
||||
// 不同元件才放入,相同元件覆蓋
|
||||
let add: boolean = true
|
||||
for (let i = 0; i < eventList.length; i++) {
|
||||
let event: HaoEvent = eventList[i]
|
||||
if (caller === event.caller) {
|
||||
add = false
|
||||
}
|
||||
const event: HaoEvent = eventList[i]
|
||||
if (caller === event.caller) add = false
|
||||
}
|
||||
if (add) {
|
||||
eventList.push(new HaoEvent(callback, caller))
|
||||
@@ -46,7 +44,7 @@ export default class EventManager {
|
||||
public removeListener(eventName: string, callback: Function) {
|
||||
if (this.callbackList[eventName]) {
|
||||
for (let i = this.callbackList[eventName].length - 1; i >= 0; i--) {
|
||||
let event: HaoEvent = this.callbackList[eventName][i]
|
||||
const event: HaoEvent = this.callbackList[eventName][i]
|
||||
if (event.callback == callback) {
|
||||
this.callbackList[eventName].splice(i, 1)
|
||||
break
|
||||
@@ -56,17 +54,15 @@ export default class EventManager {
|
||||
}
|
||||
|
||||
public dispatchEvent(eventName, parameter?: any, ...restOfName: any[]) {
|
||||
let eventList: Array<HaoEvent> = this.callbackList[eventName]
|
||||
const eventList: Array<HaoEvent> = this.callbackList[eventName]
|
||||
if (eventList) {
|
||||
for (let i = eventList.length - 1; i >= 0; i--) {
|
||||
let event: HaoEvent = eventList[i]
|
||||
const event: HaoEvent = eventList[i]
|
||||
event.callback.call(event.caller, event, parameter, ...restOfName)
|
||||
if (event.isStop) {
|
||||
break
|
||||
}
|
||||
if (event.isStop) break
|
||||
}
|
||||
for (let i = eventList.length - 1; i >= 0; i--) {
|
||||
let event: HaoEvent = eventList[i]
|
||||
const event: HaoEvent = eventList[i]
|
||||
event.isStop = false
|
||||
}
|
||||
}
|
||||
@@ -77,12 +73,12 @@ export default class EventManager {
|
||||
objectNode: Node,
|
||||
scriptName: string,
|
||||
eventName: string,
|
||||
data: any = null
|
||||
data: any = null,
|
||||
) {
|
||||
var btn: Button = objectNode.addComponent(Button)
|
||||
var clickEventHandler = new Component.EventHandler()
|
||||
clickEventHandler.target = parentNode //这个 node 节点是你的事件处理代码组件所属的节点
|
||||
clickEventHandler.component = scriptName //这个是代码文件名
|
||||
const btn: Button = objectNode.addComponent(Button)
|
||||
const clickEventHandler = new Component.EventHandler()
|
||||
clickEventHandler.target = parentNode // 这个 node 节点是你的事件处理代码组件所属的节点
|
||||
clickEventHandler.component = scriptName // 这个是代码文件名
|
||||
clickEventHandler.handler = eventName
|
||||
clickEventHandler.customEventData = data
|
||||
btn.clickEvents.push(clickEventHandler)
|
||||
@@ -94,12 +90,12 @@ export default class EventManager {
|
||||
}
|
||||
|
||||
public removeBtnEffect(objectNode: Node) {
|
||||
var b = objectNode.getComponent(Button)
|
||||
const b = objectNode.getComponent(Button)
|
||||
b.transition = Button.Transition.NONE
|
||||
}
|
||||
|
||||
public addBtnEffect(objectNode: Node, scale: number = 1.1) {
|
||||
var b = objectNode.getComponent(Button)
|
||||
const b = objectNode.getComponent(Button)
|
||||
b.transition = Button.Transition.SCALE
|
||||
b.zoomScale = scale
|
||||
}
|
||||
@@ -107,24 +103,19 @@ export default class EventManager {
|
||||
public addBtnEffect_color(
|
||||
objectNode: Node,
|
||||
normalC: Color = ColorHelper.getColor('#FFFFFF'),
|
||||
pressC: Color = ColorHelper.getColor('#C0C0C0')
|
||||
pressC: Color = ColorHelper.getColor('#C0C0C0'),
|
||||
) {
|
||||
var b = objectNode.getComponent(Button)
|
||||
const b = objectNode.getComponent(Button)
|
||||
b.transition = Button.Transition.COLOR
|
||||
b.normalColor = normalC
|
||||
b.pressedColor = pressC
|
||||
}
|
||||
|
||||
public addSliderEvent(
|
||||
parentNode: Node,
|
||||
objectNode: Node,
|
||||
EventName: string,
|
||||
data: any
|
||||
) {
|
||||
var b = objectNode.getComponent(Slider)
|
||||
var clickEventHandler = new Component.EventHandler()
|
||||
clickEventHandler.target = parentNode //这个 node 节点是你的事件处理代码组件所属的节点
|
||||
clickEventHandler.component = parentNode.name //这个是代码文件名
|
||||
public addSliderEvent(parentNode: Node, objectNode: Node, EventName: string, data: any) {
|
||||
const b = objectNode.getComponent(Slider)
|
||||
const clickEventHandler = new Component.EventHandler()
|
||||
clickEventHandler.target = parentNode // 这个 node 节点是你的事件处理代码组件所属的节点
|
||||
clickEventHandler.component = parentNode.name // 这个是代码文件名
|
||||
clickEventHandler.handler = EventName
|
||||
clickEventHandler.customEventData = data
|
||||
b.slideEvents.push(clickEventHandler)
|
||||
|
||||
@@ -2,13 +2,11 @@ export default class HaoEncrypt {
|
||||
public static encode(str: string) {
|
||||
let result: string = ''
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
//遍历字符串
|
||||
// 遍历字符串
|
||||
let code: number = str.charCodeAt(i) // //逐个提取每个字符,并获取Unicode编码值
|
||||
if (i % 2 == 0) {
|
||||
code += 2
|
||||
} else {
|
||||
code += 1
|
||||
}
|
||||
if (i % 2 === 0) code += 2
|
||||
else code += 1
|
||||
|
||||
result += String.fromCharCode(code)
|
||||
}
|
||||
return result
|
||||
@@ -17,13 +15,10 @@ export default class HaoEncrypt {
|
||||
public static decode(str: string) {
|
||||
let result: string = ''
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
//遍历字符串
|
||||
// 遍历字符串
|
||||
let code: number = str.charCodeAt(i) // //逐个提取每个字符,并获取Unicode编码值
|
||||
if (i % 2 == 0) {
|
||||
code -= 2
|
||||
} else {
|
||||
code -= 1
|
||||
}
|
||||
if (i % 2 === 0) code -= 2
|
||||
else code -= 1
|
||||
result += String.fromCharCode(code)
|
||||
}
|
||||
return result
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
import { native, sys } from 'cc'
|
||||
import { Logger } from './Logger'
|
||||
import EventManager from './EventManager'
|
||||
import VersionManager from './VersionManager'
|
||||
|
||||
import ManifestConfig from '../config/ManifestConfig'
|
||||
import ResourcePreload from '../../game/utils/ResourcePreload'
|
||||
|
||||
import CommonTips from '../uicomponent/CommonTips'
|
||||
|
||||
import EventManager from './EventManager'
|
||||
import { Logger } from './Logger'
|
||||
import VersionManager from './VersionManager'
|
||||
|
||||
export default class HotUpdate {
|
||||
public static Event_CheckUpdate: string = 'Event_CheckUpdate'
|
||||
public static Event_On_Progress: string = 'HotUpdate_Event_On_Progress'
|
||||
public static Event_On_NeedUpdate: string = 'HotUpdate_Event_On_NeedUpdate'
|
||||
public static Event_Finish_Update: string = 'HotUpdate_Event_Finish'
|
||||
public static Event_On_ALREADY_UP_TO_DATE: string =
|
||||
'HotUpdate_Event_On_ALREADY_UP_TO_DATE'
|
||||
public static Event_On_ALREADY_UP_TO_DATE: string = 'HotUpdate_Event_On_ALREADY_UP_TO_DATE'
|
||||
public static Event_On_Fail_Update: string = 'HotUpdate_Event_On_Fail_Update'
|
||||
private _am: any
|
||||
private _checkListener: null
|
||||
@@ -27,21 +28,16 @@ export default class HotUpdate {
|
||||
private key: string
|
||||
private hotupdateIndex: number
|
||||
|
||||
constructor() {
|
||||
}
|
||||
constructor() {}
|
||||
|
||||
public init(
|
||||
index: number,
|
||||
key: string = 'Code-remote-asset',
|
||||
manifestUrl: string
|
||||
) {
|
||||
public init(index: number, key: string = 'Code-remote-asset', manifestUrl: string) {
|
||||
if (sys.isNative) {
|
||||
this.hotupdateIndex = index
|
||||
this.key = key
|
||||
this.manifestUrl = manifestUrl
|
||||
this.storagePath = '获取this.storagePath报错了'
|
||||
|
||||
Logger.log(this, 'init removeDirectory=', this.storagePath + '_temp')
|
||||
Logger.log(this, 'init removeDirectory=', `${this.storagePath}_temp`)
|
||||
}
|
||||
this.needUpdate = false
|
||||
this.isUpdating = false
|
||||
@@ -52,38 +48,25 @@ export default class HotUpdate {
|
||||
private jumpToPack() {
|
||||
let url: string
|
||||
if (sys.isNative) {
|
||||
if (sys.os == sys.OS.ANDROID) {
|
||||
url = VersionManager.instance.apkStoreUrl
|
||||
} else if (sys.os == sys.OS.IOS) {
|
||||
url = VersionManager.instance.iosStoreUrl
|
||||
}
|
||||
if (sys.os === sys.OS.ANDROID) url = VersionManager.instance.apkStoreUrl
|
||||
else if (sys.os === sys.OS.IOS) url = VersionManager.instance.iosStoreUrl
|
||||
}
|
||||
Logger.info(
|
||||
this,
|
||||
'jumpToPack==androidurl===',
|
||||
VersionManager.instance.apkStoreUrl
|
||||
)
|
||||
Logger.info(
|
||||
this,
|
||||
'jumpToPack==iosStoreUrl===',
|
||||
VersionManager.instance.iosStoreUrl
|
||||
)
|
||||
Logger.info(this, 'jumpToPack==androidurl===', VersionManager.instance.apkStoreUrl)
|
||||
Logger.info(this, 'jumpToPack==iosStoreUrl===', VersionManager.instance.iosStoreUrl)
|
||||
Logger.info(this, 'jumpToPack=====', url)
|
||||
sys.openURL(url)
|
||||
// cc.game.end();
|
||||
}
|
||||
|
||||
//显示强制更新,即更细包面板
|
||||
// 显示强制更新,即更细包面板
|
||||
private showPackUpdateDialog() {
|
||||
CommonTips.showMsg(
|
||||
'有新的版本需要更新,下载后请先卸载,以前的版本,再安装!'
|
||||
)
|
||||
CommonTips.showMsg('有新的版本需要更新,下载后请先卸载,以前的版本,再安装!')
|
||||
this.jumpToPack()
|
||||
this.showPackUpdateDialog()
|
||||
}
|
||||
|
||||
private checkCb(event: any) {
|
||||
Logger.log(this, 'checkCb Code: =================' + event.getEventCode())
|
||||
Logger.log(this, `checkCb Code: =================${event.getEventCode()}`)
|
||||
switch (event.getEventCode()) {
|
||||
case native.EventAssetsManager.ERROR_NO_LOCAL_MANIFEST:
|
||||
Logger.info(this, 'No local manifest file found, hot update skipped.')
|
||||
@@ -103,18 +86,18 @@ export default class HotUpdate {
|
||||
this,
|
||||
'new version found, please try to update.',
|
||||
this.localBigVersion,
|
||||
this.remoteBigVersion
|
||||
this.remoteBigVersion,
|
||||
)
|
||||
if (
|
||||
this.key == VersionManager.Config_Key[0] &&
|
||||
this.key === VersionManager.Config_Key[0] &&
|
||||
this.localBigVersion < this.remoteBigVersion
|
||||
) {
|
||||
//更新大版本
|
||||
// 更新大版本
|
||||
Logger.info(
|
||||
this,
|
||||
'new version found, please try to update======packupdate=',
|
||||
this.localBigVersion,
|
||||
this.remoteBigVersion
|
||||
this.remoteBigVersion,
|
||||
)
|
||||
this.showPackUpdateDialog()
|
||||
} else {
|
||||
@@ -122,14 +105,11 @@ export default class HotUpdate {
|
||||
this,
|
||||
'new version found, please try to update======hotupdate=',
|
||||
this.localBigVersion,
|
||||
this.remoteBigVersion
|
||||
this.remoteBigVersion,
|
||||
)
|
||||
// this._am.update();
|
||||
this.needUpdate = true
|
||||
EventManager.instance.dispatchEvent(
|
||||
HotUpdate.Event_On_NeedUpdate,
|
||||
this.key
|
||||
)
|
||||
EventManager.instance.dispatchEvent(HotUpdate.Event_On_NeedUpdate, this.key)
|
||||
}
|
||||
break
|
||||
case native.EventAssetsManager.UPDATE_PROGRESSION:
|
||||
@@ -142,14 +122,14 @@ export default class HotUpdate {
|
||||
'UPDATE_PROGRESSION2222==========',
|
||||
this.key,
|
||||
event.getDownloadedBytes(),
|
||||
event.getTotalBytes()
|
||||
event.getTotalBytes(),
|
||||
)
|
||||
if (event.getTotalBytes() > 0) {
|
||||
EventManager.instance.dispatchEvent(
|
||||
HotUpdate.Event_On_Progress,
|
||||
event.getDownloadedBytes(),
|
||||
event.getTotalBytes(),
|
||||
this.key
|
||||
this.key,
|
||||
)
|
||||
}
|
||||
break
|
||||
@@ -162,23 +142,16 @@ export default class HotUpdate {
|
||||
this.failUpdate()
|
||||
break
|
||||
case native.EventAssetsManager.ERROR_UPDATING:
|
||||
let fullFilePath: string = this.storagePath + '/' + event.getAssetId()
|
||||
let tempFilePath: string =
|
||||
this.storagePath + '_temp/' + event.getAssetId()
|
||||
const fullFilePath: string = `${this.storagePath}/${event.getAssetId()}`
|
||||
const tempFilePath: string = `${this.storagePath}_temp/${event.getAssetId()}`
|
||||
Logger.warn(this, 'fullFilePath====', fullFilePath)
|
||||
Logger.warn(this, 'tempFilePath====', tempFilePath)
|
||||
// jsb.fileUtils.removeFile(tempFilePath);
|
||||
Logger.warn(
|
||||
this,
|
||||
'ERROR_UPDATING=============',
|
||||
event.getAssetId(),
|
||||
event.getMessage()
|
||||
)
|
||||
Logger.warn(this, 'ERROR_UPDATING=============', event.getAssetId(), event.getMessage())
|
||||
this.failUpdate()
|
||||
break
|
||||
default:
|
||||
// this.failUpdate();
|
||||
return
|
||||
// this.failUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,21 +160,20 @@ export default class HotUpdate {
|
||||
Logger.log(this, 'Checking or updating ...')
|
||||
return
|
||||
}
|
||||
let hotupdateUrlKey: string =
|
||||
VersionManager.Config_Url_Key[this.hotupdateIndex]
|
||||
const hotupdateUrlKey: string = VersionManager.Config_Url_Key[this.hotupdateIndex]
|
||||
Logger.log(this, 'checkoutUpdate=====', this.manifestUrl, hotupdateUrlKey)
|
||||
if (!this._am) {
|
||||
this._am = new native.AssetsManager(
|
||||
'',
|
||||
this.storagePath,
|
||||
this.versionCompareHandle.bind(this)
|
||||
this.versionCompareHandle.bind(this),
|
||||
)
|
||||
}
|
||||
// this._am.setMaxConcurrentTask(1);
|
||||
let manifestStr: string = ManifestConfig.getManifestStr(hotupdateUrlKey)
|
||||
const manifestStr: string = ManifestConfig.getManifestStr(hotupdateUrlKey)
|
||||
Logger.log(this, 'checkUpdate=======manifestStr=======', manifestStr)
|
||||
let manifest = new native.Manifest(manifestStr, this.storagePath)
|
||||
this._am.setVerifyCallback(function(filePath, asset) {
|
||||
const manifest = new native.Manifest(manifestStr, this.storagePath)
|
||||
this._am.setVerifyCallback((filePath, asset) => {
|
||||
return true
|
||||
// var md5 = calculateMD5(filePath);
|
||||
// if (md5 === asset.md5)
|
||||
@@ -223,46 +195,33 @@ export default class HotUpdate {
|
||||
private versionCompareHandle(versionA: string, versionB: string) {
|
||||
const vA = versionA.split('.')
|
||||
const vB = versionB.split('.')
|
||||
Logger.log(
|
||||
this,
|
||||
'versionCompareHandle======',
|
||||
this.key,
|
||||
VersionManager.Config_Key[0]
|
||||
)
|
||||
if (this.key == VersionManager.Config_Key[0]) {
|
||||
Logger.log(this, 'versionCompareHandle======', this.key, VersionManager.Config_Key[0])
|
||||
if (this.key === VersionManager.Config_Key[0]) {
|
||||
Logger.log(this, 'versionCompareHandle22===', versionA, versionB)
|
||||
VersionManager.instance.nowVersion = versionA
|
||||
VersionManager.instance.targetVersion = versionB
|
||||
}
|
||||
this.localBigVersion = parseInt(vA[0])
|
||||
this.remoteBigVersion = parseInt(vB[0])
|
||||
this.localBigVersion = Number.parseInt(vA[0])
|
||||
this.remoteBigVersion = Number.parseInt(vB[0])
|
||||
for (let i = 0; i < vA.length; ++i) {
|
||||
const a = parseInt(vA[i])
|
||||
const b = parseInt(vB[i] || '0')
|
||||
const a = Number.parseInt(vA[i])
|
||||
const b = Number.parseInt(vB[i] || '0')
|
||||
if (a !== b) return a - b
|
||||
}
|
||||
if (vB.length > vA.length) {
|
||||
return -1
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
if (vB.length > vA.length) return -1
|
||||
else return 0
|
||||
}
|
||||
|
||||
public startUpdate() {
|
||||
if (this.isUpdating) return
|
||||
let localManifest = this._am.getLocalManifest()
|
||||
let remoteManifest = this._am.getRemoteManifest()
|
||||
const localManifest = this._am.getLocalManifest()
|
||||
const remoteManifest = this._am.getRemoteManifest()
|
||||
Logger.log(this, 'startUpdate111===', localManifest.getVersionFileUrl())
|
||||
Logger.log(this, 'startUpdate2222===', localManifest.getManifestFileUrl())
|
||||
Logger.log(this, 'startUpdate3333===', remoteManifest.getVersionFileUrl())
|
||||
Logger.log(this, 'startUpdate4444===', remoteManifest.getManifestFileUrl())
|
||||
this.isUpdating = true
|
||||
EventManager.instance.dispatchEvent(
|
||||
HotUpdate.Event_On_Progress,
|
||||
0,
|
||||
100,
|
||||
this.key
|
||||
)
|
||||
EventManager.instance.dispatchEvent(HotUpdate.Event_On_Progress, 0, 100, this.key)
|
||||
this._am.update()
|
||||
}
|
||||
|
||||
@@ -280,42 +239,19 @@ export default class HotUpdate {
|
||||
private failUpdate() {
|
||||
this.disposeUpdate()
|
||||
this.isCheck = false
|
||||
EventManager.instance.dispatchEvent(
|
||||
HotUpdate.Event_On_Fail_Update,
|
||||
this.key
|
||||
)
|
||||
EventManager.instance.dispatchEvent(HotUpdate.Event_On_Fail_Update, this.key)
|
||||
}
|
||||
|
||||
private alreadyUpToDate() {
|
||||
this.disposeUpdate()
|
||||
this.isFinishUpdate = true
|
||||
EventManager.instance.dispatchEvent(
|
||||
HotUpdate.Event_On_ALREADY_UP_TO_DATE,
|
||||
this.key
|
||||
)
|
||||
EventManager.instance.dispatchEvent(HotUpdate.Event_On_ALREADY_UP_TO_DATE, this.key)
|
||||
}
|
||||
|
||||
private finishUpdate(needRestart: boolean) {
|
||||
Logger.info(this, '更新完成=====', needRestart)
|
||||
this.disposeUpdate()
|
||||
this.isFinishUpdate = true
|
||||
EventManager.instance.dispatchEvent(
|
||||
HotUpdate.Event_Finish_Update,
|
||||
this.key,
|
||||
needRestart
|
||||
)
|
||||
if (false && needRestart) {
|
||||
//暂时不想修 fileUtils 这个报错
|
||||
var searchPaths = '' //jsb.fileUtils.getSearchPaths();暂时注释
|
||||
Logger.info(this, '更新完成====searchPaths======', searchPaths)
|
||||
sys.localStorage.setItem(
|
||||
'HotUpdateSearchPaths',
|
||||
JSON.stringify(searchPaths)
|
||||
)
|
||||
//jsb.fileUtils.setSearchPaths(searchPaths);暂时注释
|
||||
if (this.key == VersionManager.Config_Key[0]) {
|
||||
ResourcePreload.instance.restartGame()
|
||||
}
|
||||
}
|
||||
EventManager.instance.dispatchEvent(HotUpdate.Event_Finish_Update, this.key, needRestart)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
import { _decorator } from 'cc'
|
||||
|
||||
import { Logger } from './Logger'
|
||||
|
||||
const { ccclass } = _decorator
|
||||
|
||||
@ccclass('HttpClient')
|
||||
export default class HttpClient {
|
||||
public static instance: HttpClient //= new HttpClient();
|
||||
public static instance: HttpClient // = new HttpClient();
|
||||
|
||||
//example
|
||||
// example
|
||||
// HttpClient.instance.request("http://localhost:8080/haohttp/test", ()=>{
|
||||
// console.log("http 请求 end=============");
|
||||
// }, {"nickName":"jhao", "hh":1, "id":9527});
|
||||
@@ -27,12 +28,10 @@ export default class HttpClient {
|
||||
let resParams = ''
|
||||
let nowIndex = 1
|
||||
for (const key in paramsObj) {
|
||||
if (paramsObj.hasOwnProperty(key)) {
|
||||
if (nowIndex == 1) {
|
||||
resParams += key + '=' + paramsObj[key]
|
||||
} else {
|
||||
resParams += '&' + key + '=' + paramsObj[key]
|
||||
}
|
||||
if (Object.prototype.hasOwnProperty.call(paramsObj, key)) {
|
||||
if (nowIndex === 1) resParams += `${key}=${paramsObj[key]}`
|
||||
else resParams += `&${key}=${paramsObj[key]}`
|
||||
|
||||
nowIndex += 1
|
||||
}
|
||||
}
|
||||
@@ -44,41 +43,29 @@ export default class HttpClient {
|
||||
this.responseType = responseType
|
||||
}
|
||||
|
||||
public setContentType() {
|
||||
}
|
||||
public setContentType() {}
|
||||
|
||||
public request(
|
||||
url: string,
|
||||
callback: Function,
|
||||
params: any = null,
|
||||
timeOut: number = 5 * 1000
|
||||
) {
|
||||
if (params && this.methodType == 'GET') {
|
||||
public request(url: string, callback: Function, params: any = null, timeOut: number = 5 * 1000) {
|
||||
if (params && this.methodType === 'GET') {
|
||||
let getParams: string = this.setParams(params)
|
||||
// getParams = StringUtil:encodeURI(params)
|
||||
getParams = encodeURI(getParams)
|
||||
url += '?' + getParams
|
||||
url += `?${getParams}`
|
||||
}
|
||||
this.xhr = new XMLHttpRequest() // http请求 fget
|
||||
//this.xhr = cc.loader.getXMLHttpRequest();
|
||||
let xhr: XMLHttpRequest = this.xhr
|
||||
// this.xhr = cc.loader.getXMLHttpRequest();
|
||||
const xhr: XMLHttpRequest = this.xhr
|
||||
xhr.responseType = this.responseType
|
||||
xhr.timeout = timeOut
|
||||
// xhr.setRequestHeader("Content-Type", "text/plain");
|
||||
xhr.onreadystatechange = () => {
|
||||
Logger.log(
|
||||
this,
|
||||
'status======',
|
||||
xhr.status,
|
||||
xhr.readyState,
|
||||
xhr.statusText
|
||||
)
|
||||
Logger.log(this, 'status======', xhr.status, xhr.readyState, xhr.statusText)
|
||||
// if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 400)) {
|
||||
if (xhr.readyState == 4 && xhr.status == 200) {
|
||||
let response = xhr.response
|
||||
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||
const response = xhr.response
|
||||
Logger.log(this, 'http response1============', xhr)
|
||||
try {
|
||||
let testJson = JSON.stringify(response)
|
||||
const testJson = JSON.stringify(response)
|
||||
Logger.log(this, 'http response json============', testJson)
|
||||
if (callback) {
|
||||
callback(true, response)
|
||||
@@ -91,31 +78,21 @@ export default class HttpClient {
|
||||
callback = null
|
||||
}
|
||||
}
|
||||
} else if (xhr.readyState == 4 && xhr.status == 301) {
|
||||
//域名转移
|
||||
Logger.log(
|
||||
this,
|
||||
'http response222============',
|
||||
xhr.getResponseHeader('Location')
|
||||
)
|
||||
} else if (xhr.readyState === 4 && xhr.status === 301) {
|
||||
// 域名转移
|
||||
Logger.log(this, 'http response222============', xhr.getResponseHeader('Location'))
|
||||
// console.log("http response333============", xhr.getAllResponseHeaders());
|
||||
if (HttpClient.instance == null) HttpClient.instance = new HttpClient()
|
||||
HttpClient.instance.request(xhr.getResponseHeader('Location'), callback)
|
||||
} else if (xhr.readyState == 4 && xhr.status == 404) {
|
||||
} else if (xhr.readyState === 4 && xhr.status === 404) {
|
||||
Logger.log(this, 'http onError============')
|
||||
if (callback) {
|
||||
callback(false)
|
||||
callback = null
|
||||
}
|
||||
} else {
|
||||
Logger.log(
|
||||
this,
|
||||
'onreadystatechange else====',
|
||||
xhr.status,
|
||||
xhr.readyState,
|
||||
xhr.response
|
||||
)
|
||||
if (xhr.readyState == 4) {
|
||||
Logger.log(this, 'onreadystatechange else====', xhr.status, xhr.readyState, xhr.response)
|
||||
if (xhr.readyState === 4) {
|
||||
Logger.log(this, 'http onError else============')
|
||||
if (callback) {
|
||||
callback(false)
|
||||
@@ -125,13 +102,7 @@ export default class HttpClient {
|
||||
}
|
||||
}
|
||||
xhr.onprogress = () => {
|
||||
Logger.log(
|
||||
this,
|
||||
'http onprogress===',
|
||||
xhr.status,
|
||||
xhr.readyState,
|
||||
xhr.response
|
||||
)
|
||||
Logger.log(this, 'http onprogress===', xhr.status, xhr.readyState, xhr.response)
|
||||
}
|
||||
xhr.onerror = () => {
|
||||
Logger.log(this, 'http onError============')
|
||||
@@ -155,6 +126,5 @@ export default class HttpClient {
|
||||
xhr.send(params)
|
||||
}
|
||||
|
||||
public getInfo(callback: Function = null) {
|
||||
}
|
||||
public getInfo(callback: Function = null) {}
|
||||
}
|
||||
|
||||
@@ -16,11 +16,10 @@ export default class LocalStorage {
|
||||
}
|
||||
|
||||
public static getInt(key: string): number {
|
||||
let tempValue: string = LocalStorage.getItem(key)
|
||||
const tempValue: string = LocalStorage.getItem(key)
|
||||
let result: number = 0
|
||||
if (tempValue) {
|
||||
result = parseInt(tempValue)
|
||||
}
|
||||
if (tempValue) result = Number.parseInt(tempValue)
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -29,11 +28,10 @@ export default class LocalStorage {
|
||||
}
|
||||
|
||||
public static getFloat(key: string): number {
|
||||
let tempValue: string = LocalStorage.getItem(key)
|
||||
const tempValue: string = LocalStorage.getItem(key)
|
||||
let result: number = 0
|
||||
if (tempValue) {
|
||||
result = parseFloat(tempValue)
|
||||
}
|
||||
if (tempValue) result = Number.parseFloat(tempValue)
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -42,19 +40,13 @@ export default class LocalStorage {
|
||||
}
|
||||
|
||||
public static getBoolean(key: string): boolean {
|
||||
let temp: number = LocalStorage.getInt(key)
|
||||
if (temp == 1) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
const temp: number = LocalStorage.getInt(key)
|
||||
return temp === 1
|
||||
}
|
||||
|
||||
public static setBoolean(key: string, value: boolean) {
|
||||
if (value) {
|
||||
LocalStorage.setInt(key, 1)
|
||||
} else {
|
||||
LocalStorage.setInt(key, 0)
|
||||
}
|
||||
if (value) LocalStorage.setInt(key, 1)
|
||||
else LocalStorage.setInt(key, 0)
|
||||
}
|
||||
|
||||
public static clear() {
|
||||
|
||||
@@ -9,130 +9,78 @@ class LOG_LEVEL_TYPES {
|
||||
const Log_Level_Names: Array<string> = ['debug', 'log', 'info', 'warn', 'error']
|
||||
|
||||
export class Logger {
|
||||
public static tag: string = '[HaoJslog]' //可以设置当前游戏的前缀
|
||||
public static LEVEL: number = LOG_LEVEL_TYPES.WARN //当前Logger等级
|
||||
public static tag: string = '[HaoJslog]' // 可以设置当前游戏的前缀
|
||||
public static LEVEL: number = LOG_LEVEL_TYPES.WARN // 当前Logger等级
|
||||
public static Log_Color_Config: Array<string> = [
|
||||
'color:#890;font-size:10px;',
|
||||
'color:#000;font-size:11px;',
|
||||
'color:#09f;font-size:12px;',
|
||||
'color:#f90;font-size:13px;',
|
||||
'color:#f00;font-size:15px;'
|
||||
'color:#f00;font-size:15px;',
|
||||
]
|
||||
|
||||
private static Terminal_Log: boolean = false
|
||||
|
||||
public static formatNow() {
|
||||
let date: Date = new Date() //后端返回的时间戳是秒
|
||||
return (
|
||||
date.getFullYear() +
|
||||
'-' +
|
||||
(date.getMonth() + 1) +
|
||||
'-' +
|
||||
date.getDate() +
|
||||
' ' +
|
||||
date.getHours() +
|
||||
':' +
|
||||
date.getMinutes() +
|
||||
':' +
|
||||
date.getSeconds() +
|
||||
':' +
|
||||
date.getMilliseconds()
|
||||
)
|
||||
const date: Date = new Date() // 后端返回的时间戳是秒
|
||||
return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}:${date.getMilliseconds()}`
|
||||
}
|
||||
|
||||
private static getLogPreKey(nowLevel: number): string {
|
||||
return '[' +
|
||||
Logger.formatNow() +
|
||||
'] ' +
|
||||
Logger.tag +
|
||||
' [' +
|
||||
Log_Level_Names[nowLevel] +
|
||||
'] '
|
||||
return `[${Logger.formatNow()}] ${Logger.tag} [${Log_Level_Names[nowLevel]}] `
|
||||
}
|
||||
|
||||
public static debug(...params: any) {
|
||||
if (Logger.LEVEL > LOG_LEVEL_TYPES.DEBUG) {
|
||||
if (Logger.LEVEL > LOG_LEVEL_TYPES.DEBUG)
|
||||
return
|
||||
}
|
||||
let str: string = this.getLogPreKey(LOG_LEVEL_TYPES.DEBUG)
|
||||
let fileStr: string = str + params.join(' ')
|
||||
|
||||
const str: string = this.getLogPreKey(LOG_LEVEL_TYPES.DEBUG)
|
||||
const fileStr: string = str + params.join(' ')
|
||||
// LogErrorFileUtil.debug(fileStr);
|
||||
if (this.Terminal_Log) {
|
||||
console.log(
|
||||
'%c' + str,
|
||||
this.Log_Color_Config[LOG_LEVEL_TYPES.DEBUG],
|
||||
...params
|
||||
)
|
||||
} else {
|
||||
console.info(fileStr)
|
||||
}
|
||||
if (this.Terminal_Log)
|
||||
console.log(`%c${str}`, this.Log_Color_Config[LOG_LEVEL_TYPES.DEBUG], ...params)
|
||||
else console.info(fileStr)
|
||||
}
|
||||
|
||||
public static log(...params: any) {
|
||||
if (Logger.LEVEL > LOG_LEVEL_TYPES.LOG) {
|
||||
if (Logger.LEVEL > LOG_LEVEL_TYPES.LOG)
|
||||
return
|
||||
}
|
||||
let str: string = this.getLogPreKey(LOG_LEVEL_TYPES.LOG)
|
||||
let fileStr: string = str + params.join(' ')
|
||||
|
||||
const str: string = this.getLogPreKey(LOG_LEVEL_TYPES.LOG)
|
||||
const fileStr: string = str + params.join(' ')
|
||||
// LogErrorFileUtil.log(fileStr);
|
||||
if (this.Terminal_Log) {
|
||||
console.log(
|
||||
'%c' + str,
|
||||
this.Log_Color_Config[LOG_LEVEL_TYPES.DEBUG],
|
||||
...params
|
||||
)
|
||||
} else {
|
||||
console.info(fileStr) //console.log(str, ...params)
|
||||
}
|
||||
if (this.Terminal_Log)
|
||||
console.log(`%c${str}`, this.Log_Color_Config[LOG_LEVEL_TYPES.DEBUG], ...params)
|
||||
else console.info(fileStr) // console.log(str, ...params)
|
||||
}
|
||||
|
||||
public static info(...params: any) {
|
||||
if (Logger.LEVEL > LOG_LEVEL_TYPES.INFO) {
|
||||
return
|
||||
}
|
||||
let str: string = this.getLogPreKey(LOG_LEVEL_TYPES.INFO)
|
||||
let fileStr: string = str + params.join(' ')
|
||||
if (this.Terminal_Log) {
|
||||
console.info(
|
||||
'%c' + str,
|
||||
this.Log_Color_Config[LOG_LEVEL_TYPES.DEBUG],
|
||||
...params
|
||||
)
|
||||
} else {
|
||||
console.info(fileStr)
|
||||
}
|
||||
if (Logger.LEVEL > LOG_LEVEL_TYPES.INFO) return
|
||||
const str: string = this.getLogPreKey(LOG_LEVEL_TYPES.INFO)
|
||||
const fileStr: string = str + params.join(' ')
|
||||
if (this.Terminal_Log)
|
||||
console.info(`%c${str}`, this.Log_Color_Config[LOG_LEVEL_TYPES.DEBUG], ...params)
|
||||
else console.info(fileStr)
|
||||
}
|
||||
|
||||
public static warn(...params: any) {
|
||||
if (Logger.LEVEL > LOG_LEVEL_TYPES.WARN) {
|
||||
if (Logger.LEVEL > LOG_LEVEL_TYPES.WARN)
|
||||
return
|
||||
}
|
||||
let str: string = this.getLogPreKey(LOG_LEVEL_TYPES.WARN)
|
||||
let fileStr: string = str + params.join(' ')
|
||||
if (this.Terminal_Log) {
|
||||
console.warn(
|
||||
'%c' + str,
|
||||
this.Log_Color_Config[LOG_LEVEL_TYPES.DEBUG],
|
||||
...params
|
||||
)
|
||||
} else {
|
||||
console.warn(fileStr)
|
||||
}
|
||||
|
||||
const str: string = this.getLogPreKey(LOG_LEVEL_TYPES.WARN)
|
||||
const fileStr: string = str + params.join(' ')
|
||||
if (this.Terminal_Log)
|
||||
console.warn(`%c${str}`, this.Log_Color_Config[LOG_LEVEL_TYPES.DEBUG], ...params)
|
||||
else console.warn(fileStr)
|
||||
}
|
||||
|
||||
public static error(...params: any) {
|
||||
if (Logger.LEVEL > LOG_LEVEL_TYPES.ERROR) {
|
||||
return
|
||||
}
|
||||
let str: string = this.getLogPreKey(LOG_LEVEL_TYPES.ERROR)
|
||||
let fileStr: string = str + params.join(' ')
|
||||
if (this.Terminal_Log) {
|
||||
console.error(
|
||||
'%c' + str,
|
||||
this.Log_Color_Config[LOG_LEVEL_TYPES.DEBUG],
|
||||
...params
|
||||
)
|
||||
} else {
|
||||
console.error(fileStr)
|
||||
}
|
||||
if (Logger.LEVEL > LOG_LEVEL_TYPES.ERROR) return
|
||||
|
||||
const str: string = this.getLogPreKey(LOG_LEVEL_TYPES.ERROR)
|
||||
const fileStr: string = str + params.join(' ')
|
||||
if (this.Terminal_Log)
|
||||
console.error(`%c${str}`, this.Log_Color_Config[LOG_LEVEL_TYPES.DEBUG], ...params)
|
||||
else console.error(fileStr)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ export default class MathUtils {
|
||||
public static distance(x1: number, y1: number, x2: number, y2: number) {
|
||||
// 设两点A(X1,Y1),B(X2,Y2)
|
||||
// 距离D=(X2-X1)的平方+(Y2-Y1)平方的和开平方
|
||||
return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2))
|
||||
return Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -45,7 +45,7 @@ export default class MathUtils {
|
||||
* @param endP
|
||||
*/
|
||||
public static p2pRad(startP: Vec2, endP: Vec2) {
|
||||
let rad: number = Math.atan2(endP.y - startP.y, endP.x - startP.x)
|
||||
const rad: number = Math.atan2(endP.y - startP.y, endP.x - startP.x)
|
||||
return rad
|
||||
}
|
||||
|
||||
@@ -54,11 +54,8 @@ export default class MathUtils {
|
||||
* @param rot
|
||||
*/
|
||||
public static rotation2Fish(rot: number) {
|
||||
if (rot >= 0 && rot <= 180) {
|
||||
rot = 180 - rot
|
||||
} else {
|
||||
rot = -180 - rot
|
||||
}
|
||||
if (rot >= 0 && rot <= 180) rot = 180 - rot
|
||||
else rot = -180 - rot
|
||||
return rot
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { Node, Vec2, Vec3 } from 'cc'
|
||||
|
||||
import MathUtils from './MathUtils'
|
||||
|
||||
export class MoveHelper {
|
||||
@@ -11,7 +12,7 @@ export class MoveHelper {
|
||||
speed: number,
|
||||
tx: number,
|
||||
ty: number,
|
||||
minSpeed: number = 0.01
|
||||
minSpeed: number = 0.01,
|
||||
) {
|
||||
let isMoving: boolean = false
|
||||
let times: number = 0
|
||||
@@ -20,9 +21,9 @@ export class MoveHelper {
|
||||
MoveHelper._vec2_0.y = MoveHelper._vec3.y
|
||||
MoveHelper._vec2_1.x = tx
|
||||
MoveHelper._vec2_1.y = ty
|
||||
let rad: number = MathUtils.p2pRad(MoveHelper._vec2_0, MoveHelper._vec2_1)
|
||||
let speedX: number = speed * Math.cos(rad)
|
||||
let speedY: number = speed * Math.sin(rad)
|
||||
const rad: number = MathUtils.p2pRad(MoveHelper._vec2_0, MoveHelper._vec2_1)
|
||||
const speedX: number = speed * Math.cos(rad)
|
||||
const speedY: number = speed * Math.sin(rad)
|
||||
if (Math.abs(MoveHelper._vec3.x - tx) > minSpeed) {
|
||||
times = Math.floor(Math.abs(speedX / minSpeed))
|
||||
for (let i = 0; i < times; i++) {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { _decorator, AssetManager, Prefab } from 'cc'
|
||||
import { AssetManager, Prefab, _decorator } from 'cc'
|
||||
|
||||
import { Logger } from './Logger'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
@@ -10,21 +11,17 @@ export default class PrefabLoader {
|
||||
public static loadPrefab(url: string, callback: Function) {
|
||||
if (this.isLoading) return
|
||||
this.isLoading = true
|
||||
AssetManager.instance.resources.load(
|
||||
url,
|
||||
Prefab,
|
||||
(error: Error, loadedResource) => {
|
||||
if (error) {
|
||||
Logger.warn(this, '载入Prefab失败, 原因:', url, error.message)
|
||||
return
|
||||
}
|
||||
if (!(loadedResource instanceof Prefab)) {
|
||||
Logger.warn(this, '你载入的不是Prefab, 你做了什么事?')
|
||||
return
|
||||
}
|
||||
callback(loadedResource)
|
||||
this.isLoading = false
|
||||
AssetManager.instance.resources.load(url, Prefab, (error: Error, loadedResource) => {
|
||||
if (error) {
|
||||
Logger.warn(this, '载入Prefab失败, 原因:', url, error.message)
|
||||
return
|
||||
}
|
||||
)
|
||||
if (!(loadedResource instanceof Prefab)) {
|
||||
Logger.warn(this, '你载入的不是Prefab, 你做了什么事?')
|
||||
return
|
||||
}
|
||||
callback(loadedResource)
|
||||
this.isLoading = false
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Vec2 } from 'cc'
|
||||
|
||||
export default class RandomUtil {
|
||||
//随机minNum到maxNum的数字 (包含maxNum)
|
||||
// 随机minNum到maxNum的数字 (包含maxNum)
|
||||
public static nextInt(minNum: number, maxNum: number) {
|
||||
return Math.floor(Math.random() * (maxNum - minNum + 1) + minNum)
|
||||
}
|
||||
@@ -11,27 +11,24 @@ export default class RandomUtil {
|
||||
}
|
||||
|
||||
public static nextSign() {
|
||||
let temp = Math.random()
|
||||
if (temp < 0.5) {
|
||||
return 1
|
||||
}
|
||||
const temp = Math.random()
|
||||
if (temp < 0.5) return 1
|
||||
|
||||
return -1
|
||||
}
|
||||
|
||||
public static nextBoolean() {
|
||||
let temp = Math.random()
|
||||
return temp < 0.5;
|
||||
|
||||
const temp = Math.random()
|
||||
return temp < 0.5
|
||||
}
|
||||
|
||||
public static randomArr(nowArr: Array<any>, needNum: number) {
|
||||
let tempArr: Array<any> = nowArr.concat()
|
||||
let resultArr: Array<any> = []
|
||||
const tempArr: Array<any> = nowArr.concat()
|
||||
const resultArr: Array<any> = []
|
||||
for (let index = 0; index < needNum; index++) {
|
||||
if (tempArr.length <= 0) {
|
||||
break
|
||||
}
|
||||
let randomIndex: number = RandomUtil.nextInt(0, tempArr.length - 1)
|
||||
if (tempArr.length <= 0) break
|
||||
|
||||
const randomIndex: number = RandomUtil.nextInt(0, tempArr.length - 1)
|
||||
resultArr.push(tempArr.splice(randomIndex, 1)[0])
|
||||
}
|
||||
return resultArr
|
||||
@@ -42,8 +39,8 @@ export default class RandomUtil {
|
||||
}
|
||||
|
||||
public static randomP(left: number, right: number, up: number, down: number) {
|
||||
let randomX: number = RandomUtil.nextNumber(left, right)
|
||||
let randomY: number = RandomUtil.nextNumber(up, down)
|
||||
const randomX: number = RandomUtil.nextNumber(left, right)
|
||||
const randomY: number = RandomUtil.nextNumber(up, down)
|
||||
return new Vec2(randomX, randomY)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { Color, Material, Node, UIRenderer, UITransform, Vec2 } from 'cc'
|
||||
|
||||
import ShaderMaterialPrefab from '../../game/prefab/ShaderMaterialPrefab'
|
||||
|
||||
export default class ShaderHelper {
|
||||
@@ -9,21 +10,15 @@ export default class ShaderHelper {
|
||||
*/
|
||||
public static clearAllEffect(
|
||||
showNode: Node,
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(
|
||||
ShaderMaterialPrefab
|
||||
).default
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(ShaderMaterialPrefab).default,
|
||||
) {
|
||||
showNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
showNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -36,23 +31,18 @@ export default class ShaderHelper {
|
||||
public static setGrayEffect(
|
||||
showNode: Node,
|
||||
grayLevel: number = 1,
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(
|
||||
ShaderMaterialPrefab
|
||||
).grayMaterial
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(ShaderMaterialPrefab)
|
||||
.grayMaterial,
|
||||
) {
|
||||
showNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
material.setProperty('grayLevel', grayLevel)
|
||||
renderComponent.setMaterial(material, 0)
|
||||
})
|
||||
showNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
material.setProperty('grayLevel', grayLevel)
|
||||
renderComponent.setMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
material.setProperty('grayLevel', grayLevel)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
childNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
material.setProperty('grayLevel', grayLevel)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -61,15 +51,13 @@ export default class ShaderHelper {
|
||||
*/
|
||||
public static showGrayMv(showNode: Node) {
|
||||
let grayValue: number = 0.5
|
||||
let intervalId = setInterval(() => {
|
||||
const intervalId = setInterval(() => {
|
||||
grayValue += 0.01
|
||||
if (grayValue >= 1) {
|
||||
grayValue = 1
|
||||
clearInterval(intervalId)
|
||||
}
|
||||
if (showNode) {
|
||||
ShaderHelper.setGrayEffect(showNode, grayValue)
|
||||
}
|
||||
if (showNode) ShaderHelper.setGrayEffect(showNode, grayValue)
|
||||
}, 1)
|
||||
}
|
||||
|
||||
@@ -82,23 +70,17 @@ export default class ShaderHelper {
|
||||
public static setOldPhotoEffect(
|
||||
showNode: Node,
|
||||
grayLevel: number = 1,
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(
|
||||
ShaderMaterialPrefab
|
||||
).oldPhoto
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(ShaderMaterialPrefab).oldPhoto,
|
||||
) {
|
||||
showNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
showNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
material.setProperty('oldLevel', grayLevel)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
material.setProperty('oldLevel', grayLevel)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
material.setProperty('oldLevel', grayLevel)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -107,15 +89,13 @@ export default class ShaderHelper {
|
||||
*/
|
||||
public static showOldPhotoMv(showNode: Node) {
|
||||
let grayValue: number = 0
|
||||
let intervalId = setInterval(() => {
|
||||
const intervalId = setInterval(() => {
|
||||
grayValue += 0.01
|
||||
if (grayValue >= 1) {
|
||||
grayValue = 1
|
||||
clearInterval(intervalId)
|
||||
}
|
||||
if (showNode) {
|
||||
ShaderHelper.setOldPhotoEffect(showNode, grayValue)
|
||||
}
|
||||
if (showNode) ShaderHelper.setOldPhotoEffect(showNode, grayValue)
|
||||
}, 1)
|
||||
}
|
||||
|
||||
@@ -131,27 +111,21 @@ export default class ShaderHelper {
|
||||
public static setGlowInner(
|
||||
showNode: Node,
|
||||
materialParam: any,
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(
|
||||
ShaderMaterialPrefab
|
||||
).glowInner
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(ShaderMaterialPrefab).glowInner,
|
||||
) {
|
||||
showNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
showNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
material.setProperty('glowColor', materialParam.glowColor)
|
||||
material.setProperty('glowColorSize', materialParam.glowColorSize)
|
||||
material.setProperty('glowThreshold', materialParam.glowThreshold)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
material.setProperty('glowColor', materialParam.glowColor)
|
||||
material.setProperty('glowColorSize', materialParam.glowColorSize)
|
||||
material.setProperty('glowThreshold', materialParam.glowThreshold)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
renderComponent.setMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
material.setProperty('glowColor', materialParam.glowColor)
|
||||
material.setProperty('glowColorSize', materialParam.glowColorSize)
|
||||
material.setProperty('glowThreshold', materialParam.glowThreshold)
|
||||
renderComponent.setMaterial(material, 0)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -164,7 +138,7 @@ export default class ShaderHelper {
|
||||
this.setGlowInner(showNode, {
|
||||
glowColor: color,
|
||||
glowColorSize: 0.015,
|
||||
glowThreshold: 0.1
|
||||
glowThreshold: 0.1,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -173,29 +147,27 @@ export default class ShaderHelper {
|
||||
*/
|
||||
public static showFlash(showNode: Node, totalFlashTimes: number = 1) {
|
||||
let timeCount: number = 0
|
||||
let color: Color = Color.WHITE
|
||||
const color: Color = Color.WHITE
|
||||
let flashTimes: number = 0
|
||||
let intervalId = setInterval(() => {
|
||||
const intervalId = setInterval(() => {
|
||||
timeCount += 1
|
||||
if (timeCount % 50 == 0) {
|
||||
let tempCount: number = timeCount / 50
|
||||
if (tempCount % 2 == 0) {
|
||||
if (timeCount % 50 === 0) {
|
||||
const tempCount: number = timeCount / 50
|
||||
if (tempCount % 2 === 0) {
|
||||
color.a = 100
|
||||
this.setGlowInner(showNode, {
|
||||
glowColor: color,
|
||||
glowColorSize: 0.1,
|
||||
glowThreshold: 0
|
||||
glowThreshold: 0,
|
||||
})
|
||||
} else {
|
||||
flashTimes++
|
||||
this.setGlowInner(showNode, {
|
||||
glowColor: color,
|
||||
glowColorSize: 0,
|
||||
glowThreshold: 0
|
||||
glowThreshold: 0,
|
||||
})
|
||||
if (flashTimes > totalFlashTimes) {
|
||||
clearInterval(intervalId)
|
||||
}
|
||||
if (flashTimes > totalFlashTimes) clearInterval(intervalId)
|
||||
}
|
||||
}
|
||||
}, 1)
|
||||
@@ -210,25 +182,19 @@ export default class ShaderHelper {
|
||||
public static setMosaic(
|
||||
showNode: Node,
|
||||
materialParam: any,
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(
|
||||
ShaderMaterialPrefab
|
||||
).mosaic
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(ShaderMaterialPrefab).mosaic,
|
||||
) {
|
||||
showNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
showNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
material.setProperty('xBlockCount', materialParam.xBlockCount)
|
||||
material.setProperty('yBlockCount', materialParam.yBlockCount)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
material.setProperty('xBlockCount', materialParam.xBlockCount)
|
||||
material.setProperty('yBlockCount', materialParam.yBlockCount)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
material.setProperty('xBlockCount', materialParam.xBlockCount)
|
||||
material.setProperty('yBlockCount', materialParam.yBlockCount)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -237,17 +203,15 @@ export default class ShaderHelper {
|
||||
*/
|
||||
public static showMosaicMv(showNode: Node, callback: Function = null) {
|
||||
let masaicTimes: number = 500
|
||||
let intervalId = setInterval(() => {
|
||||
const intervalId = setInterval(() => {
|
||||
masaicTimes -= 2
|
||||
this.setMosaic(showNode, {
|
||||
xBlockCount: masaicTimes,
|
||||
yBlockCount: masaicTimes
|
||||
yBlockCount: masaicTimes,
|
||||
})
|
||||
if (masaicTimes <= 30) {
|
||||
clearInterval(intervalId)
|
||||
if (callback) {
|
||||
callback()
|
||||
}
|
||||
if (callback) callback()
|
||||
}
|
||||
}, 1)
|
||||
}
|
||||
@@ -261,27 +225,22 @@ export default class ShaderHelper {
|
||||
public static setRoundCornerCrop(
|
||||
showNode: Node,
|
||||
roundCornerRadius: number = 0.1,
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(
|
||||
ShaderMaterialPrefab
|
||||
).roundCornerCrop
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(ShaderMaterialPrefab)
|
||||
.roundCornerCrop,
|
||||
) {
|
||||
showNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
showNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
// material.setProperty("roundCornerRadius", roundCornerRadius);
|
||||
material.setProperty('xRadius', roundCornerRadius)
|
||||
material.setProperty('yRadius', roundCornerRadius)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
// material.setProperty("roundCornerRadius", roundCornerRadius);
|
||||
material.setProperty('xRadius', roundCornerRadius)
|
||||
material.setProperty('yRadius', roundCornerRadius)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
// material.setProperty("roundCornerRadius", roundCornerRadius);
|
||||
material.setProperty('xRadius', roundCornerRadius)
|
||||
material.setProperty('yRadius', roundCornerRadius)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -304,33 +263,49 @@ export default class ShaderHelper {
|
||||
enableGradient: boolean = true,
|
||||
cropAlpha: boolean = true,
|
||||
enableFog: boolean = false,
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(
|
||||
ShaderMaterialPrefab
|
||||
).flashLight
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(ShaderMaterialPrefab)
|
||||
.flashLight,
|
||||
) {
|
||||
showNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
// showNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
// material.setProperty('lightColor', lightColor)
|
||||
// material.setProperty('lightWidth', lightWidth)
|
||||
// material.setProperty('lightAngle', lightAngle)
|
||||
// material.setProperty('enableGradient', enableGradient ? 1 : 0)
|
||||
// material.setProperty('cropAlpha', cropAlpha ? 1 : 0)
|
||||
// material.setProperty('enableFog', enableFog ? 1 : 0)
|
||||
// renderComponent.setSharedMaterial(material, 0)
|
||||
// })
|
||||
// showNode.children.forEach((childNode) => {
|
||||
// childNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
// material.setProperty('lightColor', lightColor)
|
||||
// material.setProperty('lightWidth', lightWidth)
|
||||
// material.setProperty('lightAngle', lightAngle)
|
||||
// material.setProperty('enableGradient', enableGradient ? 1 : 0)
|
||||
// material.setProperty('cropAlpha', cropAlpha ? 1 : 0)
|
||||
// material.setProperty('enableFog', enableFog ? 1 : 0)
|
||||
// renderComponent.setSharedMaterial(material, 0)
|
||||
// })
|
||||
// })
|
||||
const setMaterialProperties = (renderer: UIRenderer) => {
|
||||
try {
|
||||
material.setProperty('lightColor', lightColor)
|
||||
material.setProperty('lightWidth', lightWidth)
|
||||
material.setProperty('lightAngle', lightAngle)
|
||||
material.setProperty('enableGradient', enableGradient ? 1 : 0)
|
||||
material.setProperty('cropAlpha', cropAlpha ? 1 : 0)
|
||||
material.setProperty('enableFog', enableFog ? 1 : 0)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
material.setProperty('lightColor', lightColor)
|
||||
material.setProperty('lightWidth', lightWidth)
|
||||
material.setProperty('lightAngle', lightAngle)
|
||||
material.setProperty('enableGradient', enableGradient ? 1 : 0)
|
||||
material.setProperty('cropAlpha', cropAlpha ? 1 : 0)
|
||||
material.setProperty('enableFog', enableFog ? 1 : 0)
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
renderer.setSharedMaterial(material, 0)
|
||||
} catch (error) {
|
||||
console.error('Error setting material properties:', error)
|
||||
}
|
||||
}
|
||||
const renderComponents = [
|
||||
...showNode.getComponents(UIRenderer),
|
||||
...showNode.children.flatMap(childNode => childNode.getComponents(UIRenderer)),
|
||||
]
|
||||
|
||||
renderComponents.forEach((renderComponent: UIRenderer) => {
|
||||
setMaterialProperties(renderComponent)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -340,28 +315,23 @@ export default class ShaderHelper {
|
||||
* @param callback
|
||||
*/
|
||||
public static showFlashLightMv(showNode: Node, callback: Function = null) {
|
||||
let nowClor: Color = new Color(0, 0, 0, 255)
|
||||
const nowClor: Color = new Color(0, 0, 0, 255)
|
||||
let colorIndex: number = 0
|
||||
let lightAngle: number = 0
|
||||
let intervalId = setInterval(() => {
|
||||
if (colorIndex == 0) {
|
||||
const intervalId = setInterval(() => {
|
||||
if (colorIndex === 0) {
|
||||
nowClor.r = nowClor.r + 2
|
||||
if (nowClor.r >= 255) {
|
||||
colorIndex += 1
|
||||
}
|
||||
} else if (colorIndex == 1) {
|
||||
if (nowClor.r >= 255) colorIndex += 1
|
||||
} else if (colorIndex === 1) {
|
||||
nowClor.g = nowClor.g + 2
|
||||
if (nowClor.g >= 255) {
|
||||
colorIndex += 1
|
||||
}
|
||||
if (nowClor.g >= 255) colorIndex += 1
|
||||
} else {
|
||||
nowClor.b = nowClor.b + 2
|
||||
if (nowClor.b >= 255) {
|
||||
clearInterval(intervalId)
|
||||
ShaderHelper.clearAllEffect(showNode)
|
||||
if (callback) {
|
||||
callback()
|
||||
}
|
||||
if (callback) callback()
|
||||
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -372,21 +342,15 @@ export default class ShaderHelper {
|
||||
|
||||
public static setFlag(
|
||||
showNode: Node,
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(
|
||||
ShaderMaterialPrefab
|
||||
).flag
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(ShaderMaterialPrefab).flag,
|
||||
) {
|
||||
showNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
showNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -397,32 +361,23 @@ export default class ShaderHelper {
|
||||
*/
|
||||
public static setGaussian(
|
||||
showNode: Node,
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(
|
||||
ShaderMaterialPrefab
|
||||
).gaussian
|
||||
material: Material = ShaderMaterialPrefab.instance.getComponent(ShaderMaterialPrefab).gaussian,
|
||||
) {
|
||||
showNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
let tran = renderComponent.node.getComponent(UITransform)
|
||||
showNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
const tran = renderComponent.node.getComponent(UITransform)
|
||||
material.setProperty('textureSize', new Vec2(tran.contentSize.width, tran.contentSize.height))
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode.getComponents(UIRenderer).forEach((renderComponent: UIRenderer) => {
|
||||
const tran = renderComponent.node.getComponent(UITransform)
|
||||
material.setProperty(
|
||||
'textureSize',
|
||||
new Vec2(tran.contentSize.width, tran.contentSize.height)
|
||||
new Vec2(tran.contentSize.width, tran.contentSize.height),
|
||||
)
|
||||
renderComponent.setMaterial(material, 0)
|
||||
// material.setProperty("textureSize", cc.v2(showNode.width, showNode.height));
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
showNode.children.forEach((childNode) => {
|
||||
childNode
|
||||
.getComponents(UIRenderer)
|
||||
.forEach((renderComponent: UIRenderer) => {
|
||||
let tran = renderComponent.node.getComponent(UITransform)
|
||||
material.setProperty(
|
||||
'textureSize',
|
||||
new Vec2(tran.contentSize.width, tran.contentSize.height)
|
||||
)
|
||||
// material.setProperty("textureSize", cc.v2(showNode.width, showNode.height));
|
||||
renderComponent.setSharedMaterial(material, 0)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import { sys } from 'cc'
|
||||
|
||||
import ManifestConfig from '../config/ManifestConfig'
|
||||
|
||||
import EventManager from './EventManager'
|
||||
import HotUpdate from './HotUpdate'
|
||||
|
||||
@@ -8,7 +10,7 @@ export default class VersionManager {
|
||||
|
||||
public static Config_Game_Name: Array<string> = ['游戏大厅']
|
||||
|
||||
//热更文件下载来后存放文件夹
|
||||
// 热更文件下载来后存放文件夹
|
||||
public static Config_Key: Array<string> = ['main-remote-asset']
|
||||
|
||||
private static Config_ManifestName: string = 'project.manifest'
|
||||
@@ -18,10 +20,10 @@ export default class VersionManager {
|
||||
public iosStoreUrl: string = ''
|
||||
public apkStoreUrl: string = ''
|
||||
|
||||
public nowVersion: string = ManifestConfig.version //网页显示版本号,如果是热更会替换改值
|
||||
public nowVersion: string = ManifestConfig.version // 网页显示版本号,如果是热更会替换改值
|
||||
public targetVersion: string = '1.0.0'
|
||||
|
||||
public isOpenHotUpdate: boolean = true //是否打开热更
|
||||
public isOpenHotUpdate: boolean = true // 是否打开热更
|
||||
|
||||
private hotUpdateList: Array<HotUpdate> = []
|
||||
|
||||
@@ -33,27 +35,21 @@ export default class VersionManager {
|
||||
|
||||
public reInitAll() {
|
||||
this.releaseAll()
|
||||
for (let i = 0; i < VersionManager.Config_Key.length; i++) {
|
||||
this.reInit(i)
|
||||
}
|
||||
for (let i = 0; i < VersionManager.Config_Key.length; i++) this.reInit(i)
|
||||
}
|
||||
|
||||
public releaseAll() {
|
||||
for (let i = 0; i < VersionManager.Config_Key.length; i++) {
|
||||
if (this.hotUpdateList[i]) {
|
||||
this.hotUpdateList[i].disposeUpdate()
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < VersionManager.Config_Key.length; i++)
|
||||
if (this.hotUpdateList[i]) this.hotUpdateList[i].disposeUpdate()
|
||||
}
|
||||
|
||||
public reInit(index: number) {
|
||||
if (!this.hotUpdateList[index]) {
|
||||
this.hotUpdateList[index] = new HotUpdate()
|
||||
}
|
||||
if (!this.hotUpdateList[index]) this.hotUpdateList[index] = new HotUpdate()
|
||||
|
||||
this.hotUpdateList[index].init(
|
||||
index,
|
||||
VersionManager.Config_Key[index],
|
||||
VersionManager.Config_ManifestName
|
||||
VersionManager.Config_ManifestName,
|
||||
)
|
||||
if (!this.isOpenHotUpdate) {
|
||||
this.hotUpdateList[index].isCheck = true
|
||||
@@ -63,15 +59,15 @@ export default class VersionManager {
|
||||
|
||||
public checkUpdate(keyIndex: number) {
|
||||
if (keyIndex < this.hotUpdateList.length) {
|
||||
let hotUpdate: HotUpdate = this.hotUpdateList[keyIndex]
|
||||
const hotUpdate: HotUpdate = this.hotUpdateList[keyIndex]
|
||||
if (sys.isNative) {
|
||||
if (keyIndex == this.noUpdateIndex) {
|
||||
//在大厅热更,不用子游戏热更了
|
||||
if (keyIndex === this.noUpdateIndex) {
|
||||
// 在大厅热更,不用子游戏热更了
|
||||
hotUpdate.isCheck = true
|
||||
hotUpdate.isFinishUpdate = true
|
||||
EventManager.instance.dispatchEvent(
|
||||
HotUpdate.Event_On_ALREADY_UP_TO_DATE,
|
||||
VersionManager.Config_Key[keyIndex]
|
||||
VersionManager.Config_Key[keyIndex],
|
||||
)
|
||||
} else {
|
||||
hotUpdate.checkUpdate()
|
||||
@@ -81,28 +77,27 @@ export default class VersionManager {
|
||||
hotUpdate.isFinishUpdate = true
|
||||
EventManager.instance.dispatchEvent(
|
||||
HotUpdate.Event_On_ALREADY_UP_TO_DATE,
|
||||
VersionManager.Config_Key[keyIndex]
|
||||
VersionManager.Config_Key[keyIndex],
|
||||
)
|
||||
}
|
||||
} else {
|
||||
EventManager.instance.dispatchEvent(
|
||||
HotUpdate.Event_On_ALREADY_UP_TO_DATE,
|
||||
VersionManager.Config_Key[keyIndex]
|
||||
VersionManager.Config_Key[keyIndex],
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
public startUpdate(keyIndex: number) {
|
||||
let hotUpdate: HotUpdate = this.hotUpdateList[keyIndex]
|
||||
const hotUpdate: HotUpdate = this.hotUpdateList[keyIndex]
|
||||
hotUpdate.startUpdate()
|
||||
}
|
||||
|
||||
public isCheck(keyIndex: number) {
|
||||
if (keyIndex < this.hotUpdateList.length) {
|
||||
let hotUpdate: HotUpdate = this.hotUpdateList[keyIndex]
|
||||
if (keyIndex == this.noUpdateIndex) {
|
||||
return true
|
||||
}
|
||||
const hotUpdate: HotUpdate = this.hotUpdateList[keyIndex]
|
||||
if (keyIndex === this.noUpdateIndex) return true
|
||||
|
||||
return hotUpdate.isCheck
|
||||
}
|
||||
return true
|
||||
@@ -110,10 +105,9 @@ export default class VersionManager {
|
||||
|
||||
public needUpdate(keyIndex: number) {
|
||||
if (keyIndex < this.hotUpdateList.length) {
|
||||
let hotUpdate: HotUpdate = this.hotUpdateList[keyIndex]
|
||||
if (keyIndex == this.noUpdateIndex) {
|
||||
return false
|
||||
}
|
||||
const hotUpdate: HotUpdate = this.hotUpdateList[keyIndex]
|
||||
if (keyIndex === this.noUpdateIndex) return false
|
||||
|
||||
return hotUpdate.needUpdate
|
||||
}
|
||||
return false
|
||||
@@ -121,7 +115,7 @@ export default class VersionManager {
|
||||
|
||||
public isUpdating(keyIndex: number) {
|
||||
if (keyIndex < this.hotUpdateList.length) {
|
||||
let hotUpdate: HotUpdate = this.hotUpdateList[keyIndex]
|
||||
const hotUpdate: HotUpdate = this.hotUpdateList[keyIndex]
|
||||
return hotUpdate.isUpdating
|
||||
}
|
||||
return false
|
||||
@@ -129,10 +123,9 @@ export default class VersionManager {
|
||||
|
||||
public isFinishUpdate(keyIndex: number) {
|
||||
if (keyIndex < this.hotUpdateList.length) {
|
||||
let hotUpdate: HotUpdate = this.hotUpdateList[keyIndex]
|
||||
if (keyIndex == this.noUpdateIndex) {
|
||||
return true
|
||||
}
|
||||
const hotUpdate: HotUpdate = this.hotUpdateList[keyIndex]
|
||||
if (keyIndex === this.noUpdateIndex) return true
|
||||
|
||||
return hotUpdate.isFinishUpdate
|
||||
}
|
||||
return true
|
||||
|
||||
6
assets/FishSingle/script/game/config/Config.ts
Normal file
6
assets/FishSingle/script/game/config/Config.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import { DEV } from 'cc/env'
|
||||
|
||||
export default {
|
||||
url: () => (DEV ? 'https://fish.wanzhuanyongcheng.cn' : 'https://fish.jdt168.com'),
|
||||
wsUrl: () => (DEV ? 'fish.wanzhuanyongcheng.cn' : 'fish.jdt168.com'),
|
||||
}
|
||||
@@ -2,10 +2,8 @@
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "71a46444-1a80-435f-b02e-0fe6acf71155",
|
||||
"uuid": "f01978bd-5d14-49a6-bea7-4b7ad0c82b7b",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"simulateGlobals": []
|
||||
}
|
||||
"userData": {}
|
||||
}
|
||||
@@ -1,44 +1,86 @@
|
||||
import { FishInfo } from './FishInfo'
|
||||
|
||||
import config from './Config'
|
||||
export class FishConfig {
|
||||
public static readonly config: ReadonlyArray<FishInfo> = [
|
||||
new FishInfo(1, '蝴蝶鱼', 2, 2),
|
||||
new FishInfo(2, '鲶鱼', 2, 1),
|
||||
new FishInfo(3, '狮子鱼', 2, 2),
|
||||
new FishInfo(4, '条纹鱼', 2, 2),
|
||||
new FishInfo(5, '沙丁鱼', 2, 2),
|
||||
new FishInfo(6, '石斑鱼', 2, 2),
|
||||
new FishInfo(7, '河豚', 3, 1.2),
|
||||
new FishInfo(8, '海螺', 3, 2),
|
||||
new FishInfo(9, '接吻鱼', 3, 1.2),
|
||||
new FishInfo(10, '海姆', 4, 1),
|
||||
new FishInfo(11, '绿鳍鱼', 4, 1.2),
|
||||
new FishInfo(12, '鲎', 4, 1.2),
|
||||
new FishInfo(13, '魔鬼鱼', 5, 0.6),
|
||||
new FishInfo(14, '小海龟', 5, 2),
|
||||
new FishInfo(15, '锤头鲨', 6, 0.5),
|
||||
new FishInfo(16, '金枪鱼', 6, 0.5),
|
||||
new FishInfo(17, '大三元', 6, 0.5),
|
||||
new FishInfo(18, '黄金鲎', 6, 1.2),
|
||||
new FishInfo(19, '大四喜', 7, 0.5),
|
||||
new FishInfo(20, '黄金锤头鲨', 7, 0.5),
|
||||
new FishInfo(21, '金海姆', 7, 0.6),
|
||||
new FishInfo(22, '五福临门', 8, 0.4),
|
||||
new FishInfo(23, '金海龟', 8, 0.7),
|
||||
new FishInfo(24, '金鲨', 8, 0.5),
|
||||
new FishInfo(25, '蓝鲨', 8, 0.5),
|
||||
new FishInfo(26, '美人鱼', 14, 0.4),
|
||||
new FishInfo(27, '金龙', 14, 0.3),
|
||||
new FishInfo(28, '章鱼', 10, 0.5),
|
||||
new FishInfo(29, '电鳗鱼', 3, 0.8)
|
||||
public static config: Array<FishInfo> = [
|
||||
// new FishInfo(1, '蝴蝶鱼', 2, 2),
|
||||
// new FishInfo(2, '鲶鱼', 2, 1),
|
||||
// new FishInfo(3, '狮子鱼', 2, 2),
|
||||
// new FishInfo(4, '条纹鱼', 2, 2),
|
||||
// new FishInfo(5, '沙丁鱼', 2, 2),
|
||||
// new FishInfo(6, '石斑鱼', 2, 2),
|
||||
// new FishInfo(7, '河豚', 3, 1.2),
|
||||
// new FishInfo(8, '海螺', 3, 2),
|
||||
// new FishInfo(9, '接吻鱼', 3, 1.2),
|
||||
// new FishInfo(10, '海姆', 4, 1),
|
||||
// new FishInfo(11, '绿鳍鱼', 4, 1.2),
|
||||
// new FishInfo(12, '鲎', 4, 1.2),
|
||||
// new FishInfo(13, '魔鬼鱼', 5, 0.6),
|
||||
// new FishInfo(14, '小海龟', 5, 2),
|
||||
// new FishInfo(15, '锤头鲨', 6, 0.5),
|
||||
// new FishInfo(16, '金枪鱼', 6, 0.5),
|
||||
// new FishInfo(17, '大三元', 6, 0.5),
|
||||
// new FishInfo(18, '黄金鲎', 6, 1.2),
|
||||
// new FishInfo(19, '大四喜', 7, 0.5),
|
||||
// new FishInfo(20, '黄金锤头鲨', 7, 0.5),
|
||||
// new FishInfo(21, '金海姆', 7, 0.6),
|
||||
// new FishInfo(22, '五福临门', 8, 0.4),
|
||||
// new FishInfo(23, '金海龟', 8, 0.7),
|
||||
// new FishInfo(24, '金鲨', 8, 0.5),
|
||||
// new FishInfo(25, '蓝鲨', 8, 0.5),
|
||||
// new FishInfo(26, '美人鱼', 14, 0.4),
|
||||
// new FishInfo(27, '金龙', 14, 0.3),
|
||||
// new FishInfo(28, '章鱼', 10, 0.5),
|
||||
// new FishInfo(29, '电鳗鱼', 3, 0.8),
|
||||
// new FishInfo(1, '蝴蝶鱼'),
|
||||
// new FishInfo(2, '鲶鱼'),
|
||||
// new FishInfo(3, '狮子鱼'),
|
||||
// new FishInfo(4, '条纹鱼'),
|
||||
// new FishInfo(5, '沙丁鱼'),
|
||||
// new FishInfo(6, '石斑鱼'),
|
||||
// new FishInfo(7, '河豚'),
|
||||
// new FishInfo(8, '海螺'),
|
||||
// new FishInfo(9, '接吻鱼'),
|
||||
// new FishInfo(10, '海姆'),
|
||||
// new FishInfo(11, '绿鳍鱼'),
|
||||
// new FishInfo(12, '鲎'),
|
||||
// new FishInfo(13, '魔鬼鱼'),
|
||||
// new FishInfo(14, '小海龟'),
|
||||
// new FishInfo(15, '锤头鲨'),
|
||||
// new FishInfo(16, '金枪鱼'),
|
||||
// new FishInfo(17, '大三元'),
|
||||
// new FishInfo(18, '黄金鲎'),
|
||||
// new FishInfo(19, '大四喜'),
|
||||
// new FishInfo(20, '黄金锤头鲨'),
|
||||
// new FishInfo(21, '金海姆'),
|
||||
// new FishInfo(22, '五福临门'),
|
||||
// new FishInfo(23, '金海龟'),
|
||||
// new FishInfo(24, '金鲨'),
|
||||
// new FishInfo(25, '蓝鲨'),
|
||||
// new FishInfo(26, '美人鱼'),
|
||||
// new FishInfo(27, '金龙'),
|
||||
// new FishInfo(28, '章鱼'),
|
||||
// new FishInfo(29, '电鳗鱼'),
|
||||
]
|
||||
|
||||
public static async init() {
|
||||
this.config = []
|
||||
return new Promise<boolean>((resolve) => {
|
||||
fetch(`${config.url()}/fish/list`)
|
||||
.then((response) => response.text())
|
||||
.then((response) => {
|
||||
const { data: res } = JSON.parse(response)
|
||||
res.data.forEach((item) => {
|
||||
this.config.push(new FishInfo(item.ID, item.name, item.health))
|
||||
})
|
||||
resolve(true)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
public static getFishInfoByType(fishType: number) {
|
||||
for (let i = 0; i < this.config.length; i++) {
|
||||
let fishInfo: FishInfo = this.config[i]
|
||||
if (fishInfo.fishType == fishType) {
|
||||
return fishInfo
|
||||
}
|
||||
const fishInfo: FishInfo = this.config[i]
|
||||
if (fishInfo.fishType === fishType) return fishInfo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,17 +2,17 @@ export class FishInfo {
|
||||
public fishType: number
|
||||
public name: string
|
||||
public blood: number
|
||||
public wikiScale: number
|
||||
// public wikiScale: number
|
||||
|
||||
constructor(
|
||||
fishType: number,
|
||||
name: string,
|
||||
blood: number,
|
||||
wikiScale: number
|
||||
// wikiScale: number,
|
||||
) {
|
||||
this.fishType = fishType
|
||||
this.name = name
|
||||
this.blood = blood
|
||||
this.wikiScale = wikiScale
|
||||
// this.wikiScale = wikiScale
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +1,11 @@
|
||||
export class FishMapInfo {
|
||||
public fishType: number
|
||||
public scale: number
|
||||
public side: number //1: -1:
|
||||
public side: number // 1: -1:
|
||||
public x: number
|
||||
public y: number
|
||||
|
||||
constructor(
|
||||
fishType: number,
|
||||
scale: number,
|
||||
side: number,
|
||||
x: number,
|
||||
y: number
|
||||
) {
|
||||
constructor(fishType: number, scale: number, side: number, x: number, y: number) {
|
||||
this.fishType = fishType
|
||||
this.scale = scale
|
||||
this.side = side
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import { Vec2 } from 'cc'
|
||||
import { FishPathInfo } from './FishPathInfo'
|
||||
|
||||
import RandomUtil from '../../engine/utils/RandomUtil'
|
||||
import { FishMapInfo } from './FishMapInfo'
|
||||
|
||||
import { FishMap } from './FishMap'
|
||||
import { FishMapInfo } from './FishMapInfo'
|
||||
import { FishPathInfo } from './FishPathInfo'
|
||||
|
||||
export class FishPathConfig {
|
||||
private static mapConfig: Array<Array<Array<number>>> = [
|
||||
@@ -90,7 +92,7 @@ export class FishPathConfig {
|
||||
[1, 1, 1, 754, -7],
|
||||
[1, 1, 1, 671, 26],
|
||||
[1, 1, 1, 630, 59],
|
||||
[1, 1, 1, 584, 80]
|
||||
[1, 1, 1, 584, 80],
|
||||
],
|
||||
[
|
||||
[2, 1, 1, -784, 353],
|
||||
@@ -135,7 +137,7 @@ export class FishPathConfig {
|
||||
[3, 1, 1, 523, -253],
|
||||
[3, 1, 1, 172, 128],
|
||||
[3, 1, 1, -357, 30],
|
||||
[3, 1, 1, 582, 23]
|
||||
[3, 1, 1, 582, 23],
|
||||
],
|
||||
[
|
||||
[5, 1, 1, -888, 405],
|
||||
@@ -191,7 +193,7 @@ export class FishPathConfig {
|
||||
[7, 1, 1, 340, -259],
|
||||
[7, 1, 1, 485, -254],
|
||||
[7, 1, 1, 622, -254],
|
||||
[7, 1, 1, 816, -251]
|
||||
[7, 1, 1, 816, -251],
|
||||
],
|
||||
[
|
||||
[9, 1, 1, -513, 150],
|
||||
@@ -222,7 +224,7 @@ export class FishPathConfig {
|
||||
[9, 1, 1, 865, 195],
|
||||
[9, 1, 1, 665, 207],
|
||||
[17, 1, 1, -461, 2],
|
||||
[17, 1, 1, 515, -49]
|
||||
[17, 1, 1, 515, -49],
|
||||
],
|
||||
[
|
||||
[19, 1, 1, -785, 31],
|
||||
@@ -234,7 +236,7 @@ export class FishPathConfig {
|
||||
[20, 1, 1, 425, -301],
|
||||
[20, 1, 1, 537, 265],
|
||||
[20, 1, 1, -604, 317],
|
||||
[20, 1, 1, -634, -285]
|
||||
[20, 1, 1, -634, -285],
|
||||
],
|
||||
[
|
||||
[21, 1, 1, -757, 94],
|
||||
@@ -245,12 +247,12 @@ export class FishPathConfig {
|
||||
[21, 1, 1, -437, 300],
|
||||
[21, 1, 1, -434, -155],
|
||||
[21, 1, 1, 314, -154],
|
||||
[21, 1, 1, 435, 249]
|
||||
[21, 1, 1, 435, 249],
|
||||
],
|
||||
[
|
||||
[22, 1, 1, -548, 65],
|
||||
[22, 1, 1, 747, 61],
|
||||
[22, 1, 1, 95, 63]
|
||||
[22, 1, 1, 95, 63],
|
||||
],
|
||||
[
|
||||
[23, 1, 1, -431, 384],
|
||||
@@ -262,7 +264,7 @@ export class FishPathConfig {
|
||||
[23, 1, 1, 1025, 60],
|
||||
[23, 1, 1, 677, -247],
|
||||
[23, 1, 1, 104, 390],
|
||||
[23, 1, 1, 84, -265]
|
||||
[23, 1, 1, 84, -265],
|
||||
],
|
||||
[
|
||||
[24, 1, 1, -429, 353],
|
||||
@@ -271,7 +273,7 @@ export class FishPathConfig {
|
||||
[24, 1, 1, -27, 35],
|
||||
[24, 1, 1, 563, 39],
|
||||
[24, 1, 1, -268, -245],
|
||||
[24, 1, 1, 172, -260]
|
||||
[24, 1, 1, 172, -260],
|
||||
],
|
||||
[
|
||||
[25, 1, 1, -595, 276],
|
||||
@@ -279,27 +281,27 @@ export class FishPathConfig {
|
||||
[25, 1, 1, -192, -64],
|
||||
[25, 1, 1, 464, -46],
|
||||
[25, 1, 1, 191, -280],
|
||||
[25, 1, 1, 884, -319]
|
||||
[25, 1, 1, 884, -319],
|
||||
],
|
||||
[
|
||||
[26, 1, 1, -681, 441],
|
||||
[26, 1, 1, 685, 426],
|
||||
[26, 1, 1, -46, 140],
|
||||
[26, 1, 1, -494, -207],
|
||||
[26, 1, 1, 497, -238]
|
||||
[26, 1, 1, 497, -238],
|
||||
],
|
||||
[
|
||||
[27, 1, 1, -431, 345],
|
||||
[27, 1, 1, 569, 311],
|
||||
[27, 1, 1, 112, -12],
|
||||
[27, 1, 1, -298, -271],
|
||||
[27, 1, 1, 678, -244]
|
||||
[27, 1, 1, 678, -244],
|
||||
],
|
||||
[
|
||||
[28, 1, 1, -454, 8],
|
||||
[28, 1, 1, 597, 1],
|
||||
[28, 1, 1, 46, 431],
|
||||
[28, 1, 1, 44, -227]
|
||||
[28, 1, 1, 44, -227],
|
||||
],
|
||||
[
|
||||
[2, 1, 1, -557, 409],
|
||||
@@ -345,9 +347,10 @@ export class FishPathConfig {
|
||||
[5, 1, 1, 407, -178],
|
||||
[5, 1, 1, 297, 8],
|
||||
[5, 1, 1, 625, 48],
|
||||
[5, 1, 1, 379, 92]
|
||||
]
|
||||
[5, 1, 1, 379, 92],
|
||||
],
|
||||
]
|
||||
|
||||
private static formatMapConfig: Array<FishMap> = []
|
||||
private static config: Array<Array<Array<number>>> = [
|
||||
// 左边开始
|
||||
@@ -368,7 +371,7 @@ export class FishPathConfig {
|
||||
[627, -511],
|
||||
[762, -578],
|
||||
[885, -667],
|
||||
[1068, -773]
|
||||
[1068, -773],
|
||||
],
|
||||
[
|
||||
[-1295, 534],
|
||||
@@ -385,7 +388,7 @@ export class FishPathConfig {
|
||||
[753, 233],
|
||||
[936, 279],
|
||||
[1182, 350],
|
||||
[1314, 418]
|
||||
[1314, 418],
|
||||
],
|
||||
[
|
||||
[-1295, 534],
|
||||
@@ -402,7 +405,7 @@ export class FishPathConfig {
|
||||
[827, -42],
|
||||
[1020, -131],
|
||||
[1189, -170],
|
||||
[1309, -198]
|
||||
[1309, -198],
|
||||
],
|
||||
[
|
||||
[-1295, 534],
|
||||
@@ -419,7 +422,7 @@ export class FishPathConfig {
|
||||
[835, 88],
|
||||
[1013, -2],
|
||||
[1212, -99],
|
||||
[1309, -198]
|
||||
[1309, -198],
|
||||
],
|
||||
[
|
||||
[-1275, -118],
|
||||
@@ -436,7 +439,7 @@ export class FishPathConfig {
|
||||
[772, 391],
|
||||
[887, 426],
|
||||
[1066, 513],
|
||||
[1164, 710]
|
||||
[1164, 710],
|
||||
],
|
||||
[
|
||||
[-1299, -618],
|
||||
@@ -453,7 +456,7 @@ export class FishPathConfig {
|
||||
[904, 176],
|
||||
[1090, 273],
|
||||
[1208, 355],
|
||||
[1308, 435]
|
||||
[1308, 435],
|
||||
],
|
||||
[
|
||||
[-1275, -118],
|
||||
@@ -470,7 +473,7 @@ export class FishPathConfig {
|
||||
[784, 266],
|
||||
[935, 228],
|
||||
[1157, 174],
|
||||
[1329, 163]
|
||||
[1329, 163],
|
||||
],
|
||||
[
|
||||
[-1288, -220],
|
||||
@@ -487,7 +490,7 @@ export class FishPathConfig {
|
||||
[851, 203],
|
||||
[1050, 141],
|
||||
[1255, 58],
|
||||
[1326, 20]
|
||||
[1326, 20],
|
||||
],
|
||||
[
|
||||
[-1288, -220],
|
||||
@@ -504,7 +507,7 @@ export class FishPathConfig {
|
||||
[993, -283],
|
||||
[1090, -319],
|
||||
[1242, -341],
|
||||
[1329, -396]
|
||||
[1329, -396],
|
||||
],
|
||||
[
|
||||
[-1288, -220],
|
||||
@@ -521,7 +524,7 @@ export class FishPathConfig {
|
||||
[1011, -407],
|
||||
[1095, -418],
|
||||
[1238, -539],
|
||||
[1317, -663]
|
||||
[1317, -663],
|
||||
],
|
||||
[
|
||||
[-1314, -508],
|
||||
@@ -540,7 +543,7 @@ export class FishPathConfig {
|
||||
[1093, 280],
|
||||
[1026, 371],
|
||||
[868, 631],
|
||||
[648, 787]
|
||||
[648, 787],
|
||||
],
|
||||
[
|
||||
[-1314, -508],
|
||||
@@ -559,7 +562,7 @@ export class FishPathConfig {
|
||||
[1093, 280],
|
||||
[1026, 371],
|
||||
[868, 631],
|
||||
[648, 787]
|
||||
[648, 787],
|
||||
],
|
||||
[
|
||||
[-1314, -508],
|
||||
@@ -576,9 +579,9 @@ export class FishPathConfig {
|
||||
[872, -200],
|
||||
[1060, -391],
|
||||
[1150, -492],
|
||||
[1301, -461]
|
||||
[1301, -461],
|
||||
],
|
||||
//右边开始
|
||||
// 右边开始
|
||||
[
|
||||
[1286, -293],
|
||||
[1149, -184],
|
||||
@@ -588,7 +591,7 @@ export class FishPathConfig {
|
||||
[476, 57],
|
||||
[467, 300],
|
||||
[408, 500],
|
||||
[405, 701]
|
||||
[405, 701],
|
||||
],
|
||||
[
|
||||
[1345, 34],
|
||||
@@ -599,7 +602,7 @@ export class FishPathConfig {
|
||||
[267, -29],
|
||||
[66, -79],
|
||||
[-219, -287],
|
||||
[-271, -693]
|
||||
[-271, -693],
|
||||
],
|
||||
[
|
||||
[1345, 34],
|
||||
@@ -614,7 +617,7 @@ export class FishPathConfig {
|
||||
[-725, -92],
|
||||
[-963, -68],
|
||||
[-1169, -46],
|
||||
[-1325, -40]
|
||||
[-1325, -40],
|
||||
],
|
||||
[
|
||||
[1345, 34],
|
||||
@@ -629,7 +632,7 @@ export class FishPathConfig {
|
||||
[-719, -199],
|
||||
[-981, -264],
|
||||
[-1180, -291],
|
||||
[-1320, -367]
|
||||
[-1320, -367],
|
||||
],
|
||||
[
|
||||
[1345, 34],
|
||||
@@ -644,7 +647,7 @@ export class FishPathConfig {
|
||||
[-707, -320],
|
||||
[-961, -408],
|
||||
[-1160, -449],
|
||||
[-1309, -524]
|
||||
[-1309, -524],
|
||||
],
|
||||
[
|
||||
[1345, 34],
|
||||
@@ -659,7 +662,7 @@ export class FishPathConfig {
|
||||
[-596, -448],
|
||||
[-847, -604],
|
||||
[-1019, -589],
|
||||
[-1241, -695]
|
||||
[-1241, -695],
|
||||
],
|
||||
[
|
||||
[1345, 34],
|
||||
@@ -674,7 +677,7 @@ export class FishPathConfig {
|
||||
[-898, 66],
|
||||
[-1070, 219],
|
||||
[-1181, 292],
|
||||
[-1289, 558]
|
||||
[-1289, 558],
|
||||
],
|
||||
[
|
||||
[1345, 34],
|
||||
@@ -689,7 +692,7 @@ export class FishPathConfig {
|
||||
[-806, 84],
|
||||
[-905, 246],
|
||||
[-1008, 375],
|
||||
[-1021, 750]
|
||||
[-1021, 750],
|
||||
],
|
||||
[
|
||||
[1297, 542],
|
||||
@@ -704,7 +707,7 @@ export class FishPathConfig {
|
||||
[-806, 84],
|
||||
[-905, 246],
|
||||
[-1008, 375],
|
||||
[-1021, 750]
|
||||
[-1021, 750],
|
||||
],
|
||||
[
|
||||
[1297, 542],
|
||||
@@ -719,7 +722,7 @@ export class FishPathConfig {
|
||||
[-806, 84],
|
||||
[-927, 189],
|
||||
[-1073, 291],
|
||||
[-1318, 474]
|
||||
[-1318, 474],
|
||||
],
|
||||
[
|
||||
[1297, 542],
|
||||
@@ -734,7 +737,7 @@ export class FishPathConfig {
|
||||
[-775, -77],
|
||||
[-923, -28],
|
||||
[-1133, -46],
|
||||
[-1294, -10]
|
||||
[-1294, -10],
|
||||
],
|
||||
[
|
||||
[1297, 542],
|
||||
@@ -749,7 +752,7 @@ export class FishPathConfig {
|
||||
[-616, -254],
|
||||
[-854, -240],
|
||||
[-1115, -272],
|
||||
[-1312, -336]
|
||||
[-1312, -336],
|
||||
],
|
||||
[
|
||||
[1297, 542],
|
||||
@@ -764,7 +767,7 @@ export class FishPathConfig {
|
||||
[-562, -321],
|
||||
[-647, -446],
|
||||
[-930, -540],
|
||||
[-1073, -726]
|
||||
[-1073, -726],
|
||||
],
|
||||
[
|
||||
[1293, -558],
|
||||
@@ -779,7 +782,7 @@ export class FishPathConfig {
|
||||
[-562, -321],
|
||||
[-647, -446],
|
||||
[-930, -540],
|
||||
[-1073, -726]
|
||||
[-1073, -726],
|
||||
],
|
||||
[
|
||||
[1293, -558],
|
||||
@@ -794,7 +797,7 @@ export class FishPathConfig {
|
||||
[-568, -262],
|
||||
[-857, -301],
|
||||
[-1055, -406],
|
||||
[-1353, -380]
|
||||
[-1353, -380],
|
||||
],
|
||||
[
|
||||
[1293, -558],
|
||||
@@ -809,7 +812,7 @@ export class FishPathConfig {
|
||||
[-590, -195],
|
||||
[-905, -120],
|
||||
[-1100, -72],
|
||||
[-1300, 225]
|
||||
[-1300, 225],
|
||||
],
|
||||
[
|
||||
[1293, -558],
|
||||
@@ -824,7 +827,7 @@ export class FishPathConfig {
|
||||
[-633, -130],
|
||||
[-917, 33],
|
||||
[-1079, 184],
|
||||
[-1220, 412]
|
||||
[-1220, 412],
|
||||
],
|
||||
[
|
||||
[1293, -558],
|
||||
@@ -839,9 +842,9 @@ export class FishPathConfig {
|
||||
[-602, -25],
|
||||
[-857, 181],
|
||||
[-921, 416],
|
||||
[-909, 805]
|
||||
[-909, 805],
|
||||
],
|
||||
//下往上
|
||||
// 下往上
|
||||
[
|
||||
[-279, -786],
|
||||
[-92, -667],
|
||||
@@ -855,7 +858,7 @@ export class FishPathConfig {
|
||||
[-602, -25],
|
||||
[-857, 181],
|
||||
[-921, 416],
|
||||
[-909, 805]
|
||||
[-909, 805],
|
||||
],
|
||||
[
|
||||
[-279, -786],
|
||||
@@ -870,7 +873,7 @@ export class FishPathConfig {
|
||||
[-362, 152],
|
||||
[-543, 358],
|
||||
[-721, 502],
|
||||
[-401, 770]
|
||||
[-401, 770],
|
||||
],
|
||||
[
|
||||
[-279, -786],
|
||||
@@ -885,7 +888,7 @@ export class FishPathConfig {
|
||||
[60, 214],
|
||||
[-85, 418],
|
||||
[-140, 630],
|
||||
[-401, 770]
|
||||
[-401, 770],
|
||||
],
|
||||
[
|
||||
[-279, -786],
|
||||
@@ -900,7 +903,7 @@ export class FishPathConfig {
|
||||
[253, 319],
|
||||
[330, 465],
|
||||
[544, 684],
|
||||
[858, 803]
|
||||
[858, 803],
|
||||
],
|
||||
[
|
||||
[841, -837],
|
||||
@@ -915,9 +918,10 @@ export class FishPathConfig {
|
||||
[253, 319],
|
||||
[330, 465],
|
||||
[544, 684],
|
||||
[858, 803]
|
||||
]
|
||||
[858, 803],
|
||||
],
|
||||
]
|
||||
|
||||
private static formatConfig: Array<FishPathInfo> = []
|
||||
|
||||
public static init() {
|
||||
@@ -928,70 +932,60 @@ export class FishPathConfig {
|
||||
private static initMapConfig() {
|
||||
this.formatMapConfig = []
|
||||
for (let i = 0; i < this.mapConfig.length; i++) {
|
||||
let arr: Array<Array<number>> = this.mapConfig[i]
|
||||
let fishMapInfoList: Array<FishMapInfo> = []
|
||||
const arr: Array<Array<number>> = this.mapConfig[i]
|
||||
const fishMapInfoList: Array<FishMapInfo> = []
|
||||
for (let j = 0; j < arr.length; j++) {
|
||||
let temp: Array<number> = arr[j]
|
||||
let fishMapInfo: FishMapInfo = new FishMapInfo(
|
||||
const temp: Array<number> = arr[j]
|
||||
const fishMapInfo: FishMapInfo = new FishMapInfo(
|
||||
temp[0],
|
||||
temp[1],
|
||||
temp[2],
|
||||
temp[3],
|
||||
temp[4]
|
||||
temp[4],
|
||||
)
|
||||
fishMapInfoList.push(fishMapInfo)
|
||||
}
|
||||
let fishMap: FishMap = new FishMap(i, fishMapInfoList)
|
||||
const fishMap: FishMap = new FishMap(i, fishMapInfoList)
|
||||
this.formatMapConfig.push(fishMap)
|
||||
// console.log('this.formatMapConfig ', this.formatMapConfig)
|
||||
}
|
||||
}
|
||||
|
||||
public static randomFishMap() {
|
||||
let randomIndex: number = RandomUtil.nextInt(
|
||||
0,
|
||||
this.formatMapConfig.length - 1
|
||||
)
|
||||
let map: FishMap = this.formatMapConfig[randomIndex]
|
||||
return map
|
||||
const randomIndex: number = RandomUtil.nextInt(0, this.formatMapConfig.length - 1)
|
||||
return this.formatMapConfig[randomIndex]
|
||||
}
|
||||
|
||||
private static initNormalConfig() {
|
||||
this.formatConfig = []
|
||||
let pathId: number = 1
|
||||
for (let i = 0; i < this.config.length; i++) {
|
||||
let path: Array<Vec2> = []
|
||||
let flipXPath: Array<Vec2> = []
|
||||
let flipYPath: Array<Vec2> = []
|
||||
const path: Array<Vec2> = []
|
||||
const flipXPath: Array<Vec2> = []
|
||||
const flipYPath: Array<Vec2> = []
|
||||
for (let j = 0; j < this.config[i].length; j++) {
|
||||
let p: Vec2 = new Vec2(this.config[i][j][0], this.config[i][j][1])
|
||||
const p: Vec2 = new Vec2(this.config[i][j][0], this.config[i][j][1])
|
||||
path.push(p)
|
||||
let flipXP: Vec2 = new Vec2(-p.x, p.y)
|
||||
let flipYP: Vec2 = new Vec2(p.x, -p.y)
|
||||
const flipXP: Vec2 = new Vec2(-p.x, p.y)
|
||||
const flipYP: Vec2 = new Vec2(p.x, -p.y)
|
||||
flipXPath.push(flipXP)
|
||||
flipYPath.push(flipYP)
|
||||
}
|
||||
this.formatConfig.push(new FishPathInfo(pathId++, path))
|
||||
this.formatConfig.push(new FishPathInfo(pathId++, flipXPath))
|
||||
this.formatConfig.push(new FishPathInfo(pathId++, flipYPath))
|
||||
this.formatConfig.push(new FishPathInfo(pathId, path))
|
||||
this.formatConfig.push(new FishPathInfo(pathId, flipXPath))
|
||||
this.formatConfig.push(new FishPathInfo(pathId, flipYPath))
|
||||
}
|
||||
}
|
||||
|
||||
public static getPathInfo(pathId: number) {
|
||||
for (let i = 0; i < this.formatConfig.length; i++) {
|
||||
let pathInfo: FishPathInfo = this.formatConfig[i]
|
||||
if (pathInfo.pathId == pathId) {
|
||||
return pathInfo
|
||||
}
|
||||
const pathInfo: FishPathInfo = this.formatConfig[i]
|
||||
if (pathInfo.pathId === pathId) return pathInfo
|
||||
}
|
||||
}
|
||||
|
||||
public static randomPathInfo() {
|
||||
let randomIndex: number = RandomUtil.nextInt(
|
||||
0,
|
||||
this.formatConfig.length - 1
|
||||
)
|
||||
// let randomIndex: number = 0
|
||||
let pathInfo: FishPathInfo = this.formatConfig[randomIndex]
|
||||
return pathInfo
|
||||
const randomIndex: number = RandomUtil.nextInt(0, this.formatConfig.length - 1)
|
||||
return this.formatConfig[randomIndex]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { Vec2 } from 'cc'
|
||||
|
||||
export class FishPathInfo {
|
||||
public pathId: number
|
||||
public pathId: string
|
||||
public path: Array<Vec2> = []
|
||||
|
||||
constructor(pathId: number, path: Array<Vec2>) {
|
||||
constructor(pathId: string, path: Array<Vec2>) {
|
||||
this.pathId = pathId
|
||||
this.path = path
|
||||
}
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
export default class GameEvent {
|
||||
}
|
||||
@@ -1,32 +1,39 @@
|
||||
import {
|
||||
_decorator,
|
||||
Component,
|
||||
EventTouch,
|
||||
instantiate,
|
||||
Node,
|
||||
NodePool,
|
||||
Prefab,
|
||||
sys,
|
||||
UITransform,
|
||||
Vec2,
|
||||
Vec3
|
||||
Vec3,
|
||||
_decorator,
|
||||
instantiate,
|
||||
sys,
|
||||
} from 'cc'
|
||||
|
||||
import FishBulletBase from '../../../fish/script/FishBulletBase'
|
||||
import MathUtils from '../../engine/utils/MathUtils'
|
||||
import CannonManager from './CannonManager'
|
||||
import { MoveHelper } from '../../engine/utils/MoveHelper'
|
||||
import FishNetManager from './FishNetManager'
|
||||
import GameMusicHelper from '../utils/GameMusicHelper'
|
||||
import FishUI from '../../../fish/script/FishUI'
|
||||
import CommonTips from '../../engine/uicomponent/CommonTips'
|
||||
import MathUtils from '../../engine/utils/MathUtils'
|
||||
|
||||
import { MoveHelper } from '../../engine/utils/MoveHelper'
|
||||
|
||||
import GameMusicHelper from '../utils/GameMusicHelper'
|
||||
|
||||
import CannonManager from './CannonManager'
|
||||
import FishNetManager from './FishNetManager'
|
||||
import WsManager from './WsManager'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
// 子弹管理类
|
||||
@ccclass('BulletManager')
|
||||
export default class BulletManager extends Component {
|
||||
public static instance: BulletManager = null
|
||||
@property({ type: [Prefab] })
|
||||
private bulletPrefabList: Prefab[] | [] = []
|
||||
|
||||
private bulletPool: Array<NodePool> = []
|
||||
private bulletList: Array<FishBulletBase> = []
|
||||
private bulletMoveSpeed: number = 30
|
||||
@@ -40,24 +47,23 @@ export default class BulletManager extends Component {
|
||||
this._vec2Cache = new Vec2()
|
||||
BulletManager.instance = this
|
||||
this.node.on(Node.EventType.TOUCH_START, this.onShootBullet, this)
|
||||
// this.node.on(Node.EventType.TOUCH_MOVE, this.onShootBullet, this)
|
||||
}
|
||||
|
||||
start() {
|
||||
}
|
||||
start() {}
|
||||
|
||||
update() {
|
||||
this.checkMoveBullet()
|
||||
}
|
||||
|
||||
// 检测子弹是否移动完成
|
||||
private checkMoveBullet() {
|
||||
for (let i = this.bulletList.length - 1; i >= 0; i--) {
|
||||
let bullet: FishBulletBase = this.bulletList[i]
|
||||
let isMoving: boolean = MoveHelper.moveNode(
|
||||
const bullet: FishBulletBase = this.bulletList[i]
|
||||
const isMoving: boolean = MoveHelper.moveNode(
|
||||
bullet.node,
|
||||
this.bulletMoveSpeed,
|
||||
bullet.targetP.x,
|
||||
bullet.targetP.y
|
||||
bullet.targetP.y,
|
||||
)
|
||||
if (!isMoving) {
|
||||
bullet.node.getPosition(this._vec3Cache)
|
||||
@@ -70,38 +76,31 @@ export default class BulletManager extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
// 发射炮弹
|
||||
private onShootBullet(event: EventTouch) {
|
||||
//TOUCH_START 在Editor上,连续触发2次,导致发2次炮弹bug
|
||||
if (sys.platform == 'EDITOR_PAGE') {
|
||||
// TOUCH_START 在Editor上,连续触发2次,导致发2次炮弹bug
|
||||
if (sys.platform === 'EDITOR_PAGE') {
|
||||
this._fireTimeNew = new Date().getTime()
|
||||
if (this._fireTimeNew - this._fireTime < 100) {
|
||||
return
|
||||
}
|
||||
if (this._fireTimeNew - this._fireTime < 15000) return
|
||||
this._fireTime = this._fireTimeNew
|
||||
}
|
||||
|
||||
let tran = this.node.getComponent(UITransform)
|
||||
let location = event.getUILocation()
|
||||
const tran = this.node.getComponent(UITransform)
|
||||
const location = event.getUILocation()
|
||||
this._vec3Cache.x = location.x
|
||||
this._vec3Cache.y = location.y
|
||||
this._vec3Cache.z = 0
|
||||
tran.convertToNodeSpaceAR(this._vec3Cache, this._vec3Cache)
|
||||
let localP: Vec2 = new Vec2(this._vec3Cache.x, this._vec3Cache.y)
|
||||
const localP: Vec2 = new Vec2(this._vec3Cache.x, this._vec3Cache.y)
|
||||
FishUI.instance.playClickEffect(localP)
|
||||
// 子弹发射
|
||||
if (FishUI.instance.dz_score >= CannonManager.instance.cannonType) {
|
||||
FishUI.instance.dz_score -= CannonManager.instance.cannonType
|
||||
FishUI.instance.refreshScore()
|
||||
// FishUI.instance.refreshScore()
|
||||
this._vec3Cache = CannonManager.instance.getCannonPosition()
|
||||
|
||||
let rad: number = MathUtils.p2pRad(
|
||||
new Vec2(this._vec3Cache.x, this._vec3Cache.y),
|
||||
localP
|
||||
)
|
||||
let rot: number = MathUtils.radiansToDegrees(rad)
|
||||
let bullet: FishBulletBase = this.createBullet(
|
||||
CannonManager.instance.cannonType - 1
|
||||
)
|
||||
const rad: number = MathUtils.p2pRad(new Vec2(this._vec3Cache.x, this._vec3Cache.y), localP)
|
||||
const rot: number = MathUtils.radiansToDegrees(rad)
|
||||
const bullet: FishBulletBase = this.createBullet(CannonManager.instance.cannonType - 1)
|
||||
bullet.targetP = localP
|
||||
this.node.addChild(bullet.node)
|
||||
bullet.node.setPosition(CannonManager.instance.getCannonPosition())
|
||||
@@ -113,14 +112,14 @@ export default class BulletManager extends Component {
|
||||
bullet.node.angle = rot
|
||||
this.bulletList.push(bullet)
|
||||
GameMusicHelper.playFire()
|
||||
|
||||
//旋转炮台
|
||||
// 旋转炮台
|
||||
CannonManager.instance.rotateCannon(location)
|
||||
} else {
|
||||
CommonTips.showMsg('豆子不足!')
|
||||
}
|
||||
}
|
||||
|
||||
// 创建子弹
|
||||
private createBullet(bulletType: number) {
|
||||
let bulletNode: Node
|
||||
if (this.bulletPool[bulletType] && this.bulletPool[bulletType].size() > 0) {
|
||||
@@ -133,23 +132,21 @@ export default class BulletManager extends Component {
|
||||
}
|
||||
|
||||
public killBullet(bullet: FishBulletBase) {
|
||||
let index: number = this.bulletList.indexOf(bullet)
|
||||
const index: number = this.bulletList.indexOf(bullet)
|
||||
if (index >= 0) {
|
||||
this.bulletList.splice(index, 1)
|
||||
this.destroyBullet(bullet)
|
||||
}
|
||||
}
|
||||
|
||||
// 销毁子弹
|
||||
private destroyBullet(bullet: FishBulletBase) {
|
||||
//临时代码,因为回收在内存卡顿。后面在优化 2023-2-10
|
||||
if (sys.platform == 'EDITOR_PAGE') {
|
||||
// 临时代码,因为回收在内存卡顿。后面在优化 2023-2-10
|
||||
if (sys.platform === 'EDITOR_PAGE') {
|
||||
bullet.node.destroy()
|
||||
return
|
||||
}
|
||||
|
||||
if (!this.bulletPool[bullet.bulletType]) {
|
||||
this.bulletPool[bullet.bulletType] = new NodePool()
|
||||
}
|
||||
if (!this.bulletPool[bullet.bulletType]) this.bulletPool[bullet.bulletType] = new NodePool()
|
||||
this.bulletPool[bullet.bulletType].put(bullet.node)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,29 @@
|
||||
import { _decorator, Component, EventMouse, Node, Sprite, SpriteFrame, UITransform, Vec2, Vec3 } from 'cc'
|
||||
import {
|
||||
Component,
|
||||
EventMouse,
|
||||
Node,
|
||||
Sprite,
|
||||
SpriteFrame,
|
||||
UITransform,
|
||||
Vec2,
|
||||
Vec3,
|
||||
_decorator,
|
||||
} from 'cc'
|
||||
|
||||
import MathUtils from '../../engine/utils/MathUtils'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
// 炮塔管理类
|
||||
@ccclass('CannonManager')
|
||||
export default class CannonManager extends Component {
|
||||
public static instance: CannonManager = null
|
||||
@property({ type: Node })
|
||||
private view: Node | null = null
|
||||
|
||||
@property({ type: [SpriteFrame] })
|
||||
private cannonSpriteFrame: Array<SpriteFrame> | [] = []
|
||||
|
||||
// 炮塔倍数
|
||||
public cannonType: number = 1
|
||||
private _vec3Cache: Vec3
|
||||
@@ -21,33 +35,33 @@ export default class CannonManager extends Component {
|
||||
this.refreshCannon()
|
||||
}
|
||||
|
||||
// 炮塔移动
|
||||
private onMeMove(event: EventMouse) {
|
||||
this.rotateCannon(event.getUILocation())
|
||||
}
|
||||
|
||||
// 炮塔旋转
|
||||
public rotateCannon(uilocation: Vec2) {
|
||||
let location = uilocation
|
||||
const location = uilocation
|
||||
this._vec3Cache.x = location.x
|
||||
this._vec3Cache.y = location.y
|
||||
this._vec3Cache.z = 0
|
||||
let tran = this.node.getComponent(UITransform)
|
||||
const tran = this.node.getComponent(UITransform)
|
||||
tran.convertToNodeSpaceAR(this._vec3Cache, this._vec3Cache)
|
||||
|
||||
let localTouch: Vec2 = new Vec2(this._vec3Cache.x, this._vec3Cache.y)
|
||||
const localTouch: Vec2 = new Vec2(this._vec3Cache.x, this._vec3Cache.y)
|
||||
this.view.getPosition(this._vec3Cache)
|
||||
let rad: number = MathUtils.p2pRad(
|
||||
new Vec2(this._vec3Cache.x, this._vec3Cache.y),
|
||||
localTouch
|
||||
)
|
||||
let rot: number = MathUtils.radiansToDegrees(rad)
|
||||
const rad: number = MathUtils.p2pRad(new Vec2(this._vec3Cache.x, this._vec3Cache.y), localTouch)
|
||||
const rot: number = MathUtils.radiansToDegrees(rad)
|
||||
this.view.angle = rot - 90
|
||||
}
|
||||
|
||||
// 刷新炮塔
|
||||
public refreshCannon() {
|
||||
this.view.getComponent(Sprite).spriteFrame =
|
||||
this.cannonSpriteFrame[this.cannonType - 1]
|
||||
this.view.getComponent(Sprite).spriteFrame = this.cannonSpriteFrame[this.cannonType - 1]
|
||||
}
|
||||
|
||||
// 获取炮塔位置
|
||||
public getCannonPosition() {
|
||||
return this.view.getPosition()
|
||||
}
|
||||
|
||||
@@ -1,210 +1,272 @@
|
||||
import { _decorator, Animation, Component, game, instantiate, Node, NodePool, Prefab, Vec2, Vec3 } from 'cc'
|
||||
import RandomUtil from '../../engine/utils/RandomUtil'
|
||||
import {
|
||||
Animation,
|
||||
Component,
|
||||
Node,
|
||||
NodePool,
|
||||
Prefab,
|
||||
Tween,
|
||||
Vec2,
|
||||
Vec3,
|
||||
_decorator,
|
||||
game,
|
||||
instantiate,
|
||||
tween,
|
||||
} from 'cc'
|
||||
|
||||
import FishBase from '../../../fish/script/FishBase'
|
||||
import { FishPathConfig } from '../config/FishPathConfig'
|
||||
import FishMover from '../../../fish/script/FishMover'
|
||||
import FishUI from '../../../fish/script/FishUI'
|
||||
import { Logger } from '../../engine/utils/Logger'
|
||||
import { FishInfo } from '../config/FishInfo'
|
||||
import RandomUtil from '../../engine/utils/RandomUtil'
|
||||
import { FishConfig } from '../config/FishConfig'
|
||||
import GameMusicHelper from '../utils/GameMusicHelper'
|
||||
import ScoreManager from './ScoreManager'
|
||||
import { FishInfo } from '../config/FishInfo'
|
||||
import { FishMap } from '../config/FishMap'
|
||||
import { FishMapInfo } from '../config/FishMapInfo'
|
||||
import FishUI from '../../../fish/script/FishUI'
|
||||
import { FishPathConfig } from '../config/FishPathConfig'
|
||||
import GameMusicHelper from '../utils/GameMusicHelper'
|
||||
|
||||
import TimeHelper from '../utils/TimeHelper'
|
||||
|
||||
import ScoreManager from './ScoreManager'
|
||||
import WsManager from './WsManager'
|
||||
import { FishPathInfo } from '../config/FishPathInfo'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
interface dataType {
|
||||
fisn: Array<FishType>
|
||||
}
|
||||
|
||||
interface FishType {
|
||||
fishId: string
|
||||
fishInfo: FishInfo
|
||||
fishType: string
|
||||
isDead: number
|
||||
fishPathInfo: Array<fishPathInfoType>
|
||||
}
|
||||
|
||||
interface fishPathInfoType {
|
||||
pathId: string
|
||||
path: Array<PathPoint>
|
||||
}
|
||||
|
||||
interface PathPoint {
|
||||
x: number
|
||||
y: number
|
||||
}
|
||||
|
||||
// 鱼管理类
|
||||
@ccclass('FishManager')
|
||||
export default class FishManager extends Component {
|
||||
public static instance: FishManager = null
|
||||
@property({ type: Node })
|
||||
private fishContainer: Node | null = null
|
||||
|
||||
@property({ type: [Prefab] })
|
||||
public fishPrefabList: Array<Prefab> = []
|
||||
|
||||
private fishPool: Array<NodePool> = []
|
||||
private fishList: Array<FishBase> = []
|
||||
private fishList: Map<string, FishBase> = new Map()
|
||||
private nextRandomFishTime: number = 0
|
||||
private minRandomTime: number = 2 * (game.frameRate as number)
|
||||
private maxRandomTime: number = 5 * (game.frameRate as number)
|
||||
private isFishMap: boolean = false
|
||||
private mapCount: number = 0
|
||||
private minMapCount: number = 30 * (game.frameRate as number)
|
||||
private maxMapCount: number = 60 * (game.frameRate as number)
|
||||
// // private minMapCount: number = 2 * cc.game.getFrameRate();
|
||||
// // private maxMapCount: number = 5 * cc.game.getFrameRate();
|
||||
|
||||
private _fishPosCache: Vec3
|
||||
|
||||
onLoad() {
|
||||
WsManager.instance.on(100, this.randomFish, this)
|
||||
FishManager.instance = this
|
||||
this._fishPosCache = new Vec3()
|
||||
Logger.log(
|
||||
'maxRandomTime=',
|
||||
this.minRandomTime,
|
||||
this.maxRandomTime,
|
||||
game.frameRate
|
||||
)
|
||||
Logger.log('maxRandomTime=', this.minRandomTime, this.maxRandomTime, game.frameRate)
|
||||
}
|
||||
|
||||
start() {
|
||||
this.randomFish()
|
||||
// this.randomFish()
|
||||
}
|
||||
|
||||
update() {
|
||||
this.checkRandomFish()
|
||||
// this.checkRandomFish()
|
||||
this.checkFishMoveEnd()
|
||||
this.checkFishMap()
|
||||
// this.checkFishMap()
|
||||
}
|
||||
|
||||
private checkFishMap() {
|
||||
if (!this.isFishMap) {
|
||||
if (this.mapCount > 0) {
|
||||
this.mapCount--
|
||||
if (this.mapCount <= 0) {
|
||||
FishUI.instance.playWaveEffect()
|
||||
}
|
||||
if (this.mapCount <= 0) FishUI.instance.playWaveEffect()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 检测是否随机鱼
|
||||
private checkRandomFish() {
|
||||
if (!this.isFishMap) {
|
||||
if (this.nextRandomFishTime > 0) {
|
||||
this.nextRandomFishTime--
|
||||
if (this.nextRandomFishTime == 0) {
|
||||
this.randomFish()
|
||||
}
|
||||
// if (this.nextRandomFishTime === 0) this.randomFish()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 检测鱼是否移动结束
|
||||
private checkFishMoveEnd() {
|
||||
for (let i = this.fishList.length - 1; i >= 0; i--) {
|
||||
let fish: FishBase = this.fishList[i]
|
||||
this.fishList.forEach(async (item: FishBase, key: string) => {
|
||||
if (this.isFishMap) {
|
||||
if (!fish.isDead) {
|
||||
fish.node.getPosition(this._fishPosCache)
|
||||
// 鱼阵回收
|
||||
if (item.isDead === 2) {
|
||||
item.node.getPosition(this._fishPosCache)
|
||||
this._fishPosCache.x -= 2
|
||||
fish.node.setPosition(this._fishPosCache)
|
||||
item.node.setPosition(this._fishPosCache)
|
||||
if (this._fishPosCache.x <= -screen.width / 2) {
|
||||
//winSize.width
|
||||
this.destroyFish(fish)
|
||||
this.fishList.splice(i, 1)
|
||||
// winSize.width
|
||||
await WsManager.instance.onSend({
|
||||
type: 102,
|
||||
fish_id: item.fishId,
|
||||
})
|
||||
// this.fishList.splice(index, 1)
|
||||
this.destroyFish(item)
|
||||
// this.fishList.delete(item.fishId)
|
||||
this.checkEndFishMap()
|
||||
}
|
||||
}
|
||||
} else if (!fish.getComponent(FishMover).isMoving) {
|
||||
this.destroyFish(fish)
|
||||
this.fishList.splice(i, 1)
|
||||
} else if (!item.getComponent(FishMover).isMoving) {
|
||||
// 普通鱼回收
|
||||
await WsManager.instance.onSend({
|
||||
type: 102,
|
||||
fish_id: item.fishId,
|
||||
})
|
||||
// this.fishList.splice(index, 1)
|
||||
this.destroyFish(item)
|
||||
// this.fishList.delete(item.fishId)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private checkEndFishMap() {
|
||||
Logger.log('checkEndFishMap==', this.isFishMap, this.fishList)
|
||||
if (this.isFishMap && this.fishList.length <= 0) {
|
||||
// Logger.log('checkEndFishMap==', this.isFishMap, this.fishList)
|
||||
if (this.isFishMap && this.fishList.size <= 0) {
|
||||
this.isFishMap = false
|
||||
this.randomFish()
|
||||
// this.randomFish()
|
||||
}
|
||||
}
|
||||
|
||||
private randomFish() {
|
||||
if (this.isFishMap) return
|
||||
let randomNum: number = RandomUtil.nextInt(1, 10)
|
||||
// let randomNum: number = RandomUtil.nextInt(1, 1);
|
||||
for (let i = 0; i < randomNum; i++) {
|
||||
let fishType: number = RandomUtil.nextInt(1, 29)
|
||||
// let fishType: number = RandomUtil.nextInt(1, 1);
|
||||
let fish: FishBase = this.createFishByType(fishType)
|
||||
fish.fishPathInfo = FishPathConfig.randomPathInfo()
|
||||
/**
|
||||
* 原:本地随机生成鱼
|
||||
* 新:服务端生成鱼
|
||||
*/
|
||||
private async randomFish(data: dataType) {
|
||||
const arr = data.fisn
|
||||
const paths: Array<FishPathInfo> = []
|
||||
if (!Array.isArray(arr) || this.isFishMap) return
|
||||
for (let i = 0; i < arr.length; i++) {
|
||||
const fish: FishBase = this.createFishByType(arr[i])
|
||||
for (let k = 0; k < arr[i].fishPathInfo.length; k++) {
|
||||
const path: Array<Vec2> = []
|
||||
|
||||
for (let j = 0; j < arr[i].fishPathInfo[k].path.length; j++) {
|
||||
const p: Vec2 = new Vec2(
|
||||
arr[i].fishPathInfo[k].path[j].x,
|
||||
arr[i].fishPathInfo[k].path[j].y,
|
||||
)
|
||||
path.push(p)
|
||||
}
|
||||
paths.push(new FishPathInfo(arr[i].fishPathInfo[k].pathId, path))
|
||||
}
|
||||
fish.fishPathInfo = paths[0]
|
||||
this._fishPosCache.z = 0
|
||||
this._fishPosCache.x = fish.fishPathInfo.path[0].x
|
||||
this._fishPosCache.y = fish.fishPathInfo.path[0].y
|
||||
fish.node.setPosition(this._fishPosCache)
|
||||
fish.getComponent(FishMover).bezierPList = fish.fishPathInfo.path
|
||||
fish.getComponent(FishMover).startMove()
|
||||
this.fishList.push(fish)
|
||||
this.fishContainer.addChild(fish.node)
|
||||
}
|
||||
Logger.log('checkFishMoveEnd=randomFish=', this.fishList)
|
||||
this.nextRandomFishTime = RandomUtil.nextInt(
|
||||
this.minRandomTime,
|
||||
this.maxRandomTime
|
||||
)
|
||||
if (this.mapCount <= 0) {
|
||||
this.mapCount = RandomUtil.nextInt(this.minMapCount, this.maxMapCount)
|
||||
// this.fishList.push(fish)
|
||||
this.fishList.set(fish.fishId, fish)
|
||||
// this.fishContainer.addChild(fish.node)
|
||||
this.fishContainer.addChild(this.fishList.get(fish.fishId).node)
|
||||
}
|
||||
}
|
||||
|
||||
public createFishByType(fishType: number): FishBase {
|
||||
// 创建鱼类
|
||||
public createFishByType(data: FishType | any): FishBase {
|
||||
let fishNode: Node
|
||||
const fishType: number = Number(data.fishType)
|
||||
if (this.fishPool[fishType - 1] && this.fishPool[fishType - 1].size() > 0) {
|
||||
fishNode = this.fishPool[fishType - 1].get()
|
||||
} else {
|
||||
fishNode = instantiate(this.fishPrefabList[fishType - 1])
|
||||
}
|
||||
//fishNode.getComponent(Animation).play() //v3 当前帧 不能播放
|
||||
TimeHelper.exeNextFrame(fishNode, () =>
|
||||
fishNode.getComponent(Animation).play()
|
||||
)
|
||||
let fishInfo: FishInfo = FishConfig.getFishInfoByType(fishType)
|
||||
TimeHelper.exeNextFrame(fishNode, () => fishNode.getComponent(Animation).play())
|
||||
const fishInfo: FishInfo = FishConfig.getFishInfoByType(fishType)
|
||||
fishNode.getComponent(FishBase).fishInfo = fishInfo
|
||||
fishNode.getComponent(FishBase).fishType = fishType
|
||||
fishNode.getComponent(FishBase).blood = fishInfo.blood
|
||||
fishNode.getComponent(FishBase).isDead = false
|
||||
fishNode.getComponent(FishBase).fishId = data.fishId
|
||||
fishNode.getComponent(FishBase).isDead = 2
|
||||
return fishNode.getComponent(FishBase)
|
||||
}
|
||||
|
||||
public killFish(fish: FishBase) {
|
||||
let index: number = this.fishList.indexOf(fish)
|
||||
if (index >= 0) {
|
||||
// console.log("鱼挂了")
|
||||
GameMusicHelper.playFishDead(fish.fishType)
|
||||
fish.node.getPosition(this._fishPosCache)
|
||||
let vec2 = new Vec2(this._fishPosCache.x, this._fishPosCache.y)
|
||||
ScoreManager.instance.addScore(fish.fishInfo.blood, vec2)
|
||||
this.fishList.splice(index, 1)
|
||||
this.destroyFish(fish)
|
||||
this.checkEndFishMap()
|
||||
// 销毁鱼类
|
||||
public killFish(res: any) {
|
||||
const fishCheck = this.fishList.get(res.fish_id)
|
||||
// console.log('正在执行销毁=', fishCheck.fishId, res.fish_id, res.fish_status, fishCheck.isDead)
|
||||
if (fishCheck) {
|
||||
fishCheck.isDead = 1
|
||||
setTimeout(() => {
|
||||
GameMusicHelper.playFishDead(fishCheck.fishType)
|
||||
fishCheck.node.getPosition(this._fishPosCache)
|
||||
const vec2 = new Vec2(this._fishPosCache.x, this._fishPosCache.y)
|
||||
ScoreManager.instance.addScore(Number(res.fish_number), vec2)
|
||||
this.destroyFish(fishCheck)
|
||||
// console.log('killFish=', fishCheck.fishId, fishCheck.fishInfo.name)
|
||||
this.checkEndFishMap()
|
||||
}, 500)
|
||||
tween(fishCheck.node)
|
||||
.repeatForever(tween().by(0.6, { angle: -360 }))
|
||||
.start()
|
||||
|
||||
// this.fishList.splice(index, 1)
|
||||
}
|
||||
}
|
||||
|
||||
private destroyFish(fish: FishBase) {
|
||||
if (!this.fishPool[fish.fishType - 1]) {
|
||||
this.fishPool[fish.fishType - 1] = new NodePool()
|
||||
const f = this.fishList.get(fish.fishId)
|
||||
if (!f) return
|
||||
if (!this.fishPool[f.fishType - 1]) {
|
||||
this.fishPool[f.fishType - 1] = new NodePool()
|
||||
}
|
||||
this.fishPool[fish.fishType - 1].put(fish.node)
|
||||
this.fishPool[f.fishType - 1].put(f.node)
|
||||
this.fishList.delete(f.fishId)
|
||||
}
|
||||
|
||||
public playFishMap() {
|
||||
this.isFishMap = true
|
||||
for (let i = this.fishList.length - 1; i >= 0; i--) {
|
||||
let fish: FishBase = this.fishList[i]
|
||||
this.fishList.forEach((fish: FishBase, key: string) => {
|
||||
this.destroyFish(fish)
|
||||
this.fishList.splice(i, 1)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
public startFishMap() {
|
||||
// this.playFishMap();
|
||||
// this.fishList = [];
|
||||
|
||||
let map: FishMap = FishPathConfig.randomFishMap()
|
||||
let fishMapInfoList: Array<FishMapInfo> = map.fishMapInfoList
|
||||
const map: FishMap = FishPathConfig.randomFishMap()
|
||||
const fishMapInfoList: Array<FishMapInfo> = map.fishMapInfoList
|
||||
Logger.log('startFishMap==', this.isFishMap, this.fishList, map)
|
||||
for (let i = 0; i < fishMapInfoList.length; i++) {
|
||||
let fishMapInfo: FishMapInfo = fishMapInfoList[i]
|
||||
let fish: FishBase = this.createFishByType(fishMapInfo.fishType)
|
||||
const fishMapInfo: FishMapInfo = fishMapInfoList[i]
|
||||
// 暂时屏蔽
|
||||
// @ts-ignore
|
||||
const fish: FishBase = this.createFishByType(fishMapInfo.fishType)
|
||||
fish.node.angle = 0
|
||||
// fish.node.setScale(fishMapInfo.scale);
|
||||
this.fishContainer.addChild(fish.node)
|
||||
fish.node.setPosition(fishMapInfo.x + screen.width, fishMapInfo.y)
|
||||
this.fishList.push(fish)
|
||||
this.fishList.set(fish.fishId, fish)
|
||||
}
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
FishManager.instance = null
|
||||
WsManager.instance.off(100)
|
||||
}
|
||||
|
||||
protected onDisable(): void {}
|
||||
}
|
||||
|
||||
@@ -1,26 +1,31 @@
|
||||
import { _decorator, Component, instantiate, Node, NodePool, Prefab, Vec2, Vec3 } from 'cc'
|
||||
import { Component, Node, NodePool, Prefab, Vec2, Vec3, _decorator, instantiate } from 'cc'
|
||||
|
||||
import FishNetBase from '../../../fish/script/FishNetBase'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
// 鱼网管理类
|
||||
@ccclass('FishNetManager')
|
||||
export default class FishNetManager extends Component {
|
||||
public static instance: FishNetManager = null
|
||||
@property({ type: [Prefab] })
|
||||
private netPrefabList: Prefab[] | [] = []
|
||||
|
||||
private fishNetPool: Array<NodePool> = []
|
||||
|
||||
onLoad() {
|
||||
FishNetManager.instance = this
|
||||
}
|
||||
|
||||
// 添加鱼网
|
||||
public addFishNet(netType: number, p: Vec2) {
|
||||
let fishNet: FishNetBase = this.createFishNet(netType)
|
||||
const fishNet: FishNetBase = this.createFishNet(netType)
|
||||
this.node.addChild(fishNet.node)
|
||||
fishNet.node.setPosition(new Vec3(p.x, p.y, 0))
|
||||
fishNet.playMv()
|
||||
}
|
||||
|
||||
// 创建鱼网
|
||||
private createFishNet(netType: number) {
|
||||
let fishNetNode: Node
|
||||
if (this.fishNetPool[netType] && this.fishNetPool[netType].size() > 0) {
|
||||
@@ -28,14 +33,17 @@ export default class FishNetManager extends Component {
|
||||
} else {
|
||||
fishNetNode = instantiate(this.netPrefabList[netType])
|
||||
}
|
||||
|
||||
fishNetNode.getComponent(FishNetBase).netType = netType
|
||||
return fishNetNode.getComponent(FishNetBase)
|
||||
}
|
||||
|
||||
// 销毁鱼网
|
||||
public destroyFishNet(fishNet: FishNetBase) {
|
||||
if (!this.fishNetPool[fishNet.netType]) {
|
||||
this.fishNetPool[fishNet.netType] = new NodePool()
|
||||
}
|
||||
|
||||
this.fishNetPool[fishNet.netType].put(fishNet.node)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { _decorator, Component, instantiate, Node, NodePool, Prefab, Vec2, Vec3 } from 'cc'
|
||||
import ScorePrefab from '../prefab/ScorePrefab'
|
||||
import { Component, Node, NodePool, Prefab, Vec2, Vec3, _decorator, instantiate } from 'cc'
|
||||
|
||||
import FishUI from '../../../fish/script/FishUI'
|
||||
import ScorePrefab from '../prefab/ScorePrefab'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@@ -9,6 +10,7 @@ export default class ScoreManager extends Component {
|
||||
public static instance: ScoreManager = null
|
||||
@property({ type: Prefab })
|
||||
private scrorePrefab: Prefab | null = null
|
||||
|
||||
private scorePool: NodePool
|
||||
|
||||
onLoad() {
|
||||
@@ -16,34 +18,35 @@ export default class ScoreManager extends Component {
|
||||
this.scorePool = new NodePool()
|
||||
}
|
||||
|
||||
// 添加积分
|
||||
public addScore(score: number, p: Vec2) {
|
||||
let scorePrefab: ScorePrefab = this.createScore(score)
|
||||
const scorePrefab: ScorePrefab = this.createScore(score)
|
||||
this.node.addChild(scorePrefab.node)
|
||||
scorePrefab.node.setPosition(new Vec3(p.x, p.y, 0))
|
||||
scorePrefab.init(score)
|
||||
scorePrefab.playMoveEffect(new Vec2(-472.398, -547.481), () => {
|
||||
this.destroyScore(scorePrefab)
|
||||
FishUI.instance.jf_score += score
|
||||
FishUI.instance.refreshScore()
|
||||
// 本地不在添加积分
|
||||
// FishUI.instance.jf_score += score
|
||||
// FishUI.instance.refreshScore()
|
||||
})
|
||||
}
|
||||
|
||||
// 创建积分
|
||||
private createScore(score: number): ScorePrefab {
|
||||
let scoreNode: Node
|
||||
if (this.scorePool && this.scorePool.size() > 0) {
|
||||
scoreNode = this.scorePool.get()
|
||||
} else {
|
||||
scoreNode = instantiate(this.scrorePrefab)
|
||||
}
|
||||
if (this.scorePool && this.scorePool.size() > 0) scoreNode = this.scorePool.get()
|
||||
else scoreNode = instantiate(this.scrorePrefab)
|
||||
|
||||
return scoreNode.getComponent(ScorePrefab)
|
||||
}
|
||||
|
||||
// 销毁积分
|
||||
private destroyScore(scorePrefab: ScorePrefab) {
|
||||
this.scorePool.put(scorePrefab.node)
|
||||
}
|
||||
|
||||
onDisable() {
|
||||
}
|
||||
onDisable() {}
|
||||
|
||||
onDestroy() {
|
||||
ScoreManager.instance = null
|
||||
|
||||
137
assets/FishSingle/script/game/manager/WsManager.ts
Normal file
137
assets/FishSingle/script/game/manager/WsManager.ts
Normal file
@@ -0,0 +1,137 @@
|
||||
import { _decorator } from 'cc'
|
||||
import CommonTips from '../../engine/uicomponent/CommonTips'
|
||||
import FishUI from '../../../fish/script/FishUI'
|
||||
import config from '../config/Config'
|
||||
|
||||
export default class WsManager {
|
||||
private static _instance: WsManager = null
|
||||
uid: string
|
||||
|
||||
message: any
|
||||
|
||||
t_id: any = null
|
||||
|
||||
public static get instance() {
|
||||
if (!this._instance) {
|
||||
this._instance = new WsManager()
|
||||
}
|
||||
return this._instance
|
||||
}
|
||||
|
||||
private _socket: WebSocket | null = null
|
||||
|
||||
protected m_mapCallbackFun: Map<number, Function>
|
||||
|
||||
constructor() {
|
||||
this.m_mapCallbackFun = new Map<number, Function>()
|
||||
}
|
||||
|
||||
public on(msgId: number, cb: Function, target: any) {
|
||||
let callback = cb.bind(target)
|
||||
let fnCallback: Function = this.m_mapCallbackFun.get(msgId)
|
||||
if (fnCallback) {
|
||||
console.error('重复注册消息处理函数! msgId:' + msgId)
|
||||
} else {
|
||||
this.m_mapCallbackFun.set(msgId, callback)
|
||||
}
|
||||
}
|
||||
|
||||
public off(msgId: number) {
|
||||
if (this.m_mapCallbackFun.has(msgId)) {
|
||||
this.m_mapCallbackFun.delete(msgId)
|
||||
}
|
||||
}
|
||||
|
||||
public get(msgId: number) {
|
||||
return this.m_mapCallbackFun.get(msgId)
|
||||
}
|
||||
|
||||
public offAll() {
|
||||
this.m_mapCallbackFun.clear()
|
||||
}
|
||||
|
||||
// 获取url参数
|
||||
public getQueryString(name: string) {
|
||||
var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')
|
||||
var r = window.location.search.substr(1).match(reg)
|
||||
if (r != null) {
|
||||
return unescape(r[2])
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
public init(): void {
|
||||
this.uid = this.getQueryString('uid')
|
||||
this._socket = new WebSocket(`wss://${config.wsUrl()}/fish/home?uid=${this.uid}`)
|
||||
|
||||
// 添加事件监听器
|
||||
this._socket.onopen = this.onOpen.bind(this)
|
||||
this._socket.onmessage = this.onMessage.bind(this)
|
||||
this._socket.onclose = this.onClose.bind(this)
|
||||
this._socket.onerror = this.onError.bind(this)
|
||||
}
|
||||
|
||||
public onOpen(): void {
|
||||
console.log('WebSocket connection opened.')
|
||||
setInterval(() => {
|
||||
this._socket.send(JSON.stringify('ping'))
|
||||
}, 20000)
|
||||
this.clear()
|
||||
}
|
||||
|
||||
public async onSend(data: any): Promise<void> {
|
||||
if (this._socket && this._socket.readyState === WebSocket.OPEN) {
|
||||
this._socket.send(JSON.stringify(data))
|
||||
} else {
|
||||
console.error('消息发送失败!!!')
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理接收到的消息
|
||||
* @param event WebSocket message event
|
||||
*/
|
||||
public onMessage(event: MessageEvent): void {
|
||||
this.message = JSON.parse(event.data)
|
||||
|
||||
if (this.message.code === 200 || this.message.code === 5) {
|
||||
FishUI.instance.refreshScore(this.message)
|
||||
}
|
||||
|
||||
let fnCallback: Function = this.m_mapCallbackFun.get(this.message.code)
|
||||
|
||||
if (fnCallback) {
|
||||
fnCallback(this.message)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭WebSocket连接
|
||||
*/
|
||||
public onClose(): void {
|
||||
console.log('链接已关闭')
|
||||
CommonTips.showMsg('游戏服务器中断关闭,正在重试')
|
||||
// this.init()
|
||||
if (this._socket) {
|
||||
this._socket.close()
|
||||
this._socket = null
|
||||
}
|
||||
this.t_id = setInterval(() => {
|
||||
WsManager.instance.init()
|
||||
}, 8000)
|
||||
}
|
||||
|
||||
public onError(event: Event): void {
|
||||
CommonTips.showMsg('网络连接失败,正在重试链接游戏服务器')
|
||||
this.t_id = setInterval(() => {
|
||||
WsManager.instance.init()
|
||||
}, 8000)
|
||||
}
|
||||
|
||||
public clear() {
|
||||
if (this.t_id) {
|
||||
clearInterval(this.t_id)
|
||||
this.t_id = null
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,10 +2,8 @@
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "65ad3e01-f8b1-4160-a391-c55d6c8f366f",
|
||||
"uuid": "44f1bff8-2972-4ae5-8f53-e0daaa97b92e",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"simulateGlobals": []
|
||||
}
|
||||
"userData": {}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
import { _decorator, Component, instantiate, Node, Prefab } from 'cc'
|
||||
import { Component, Node, Prefab, _decorator, instantiate } from 'cc'
|
||||
|
||||
import PrefabLoader from '../../engine/utils/PrefabLoader'
|
||||
import { GameConfig } from '../config/GameConfig'
|
||||
|
||||
@@ -6,29 +7,30 @@ const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('ResourcePrefab')
|
||||
export default class ResourcePrefab extends Component {
|
||||
private static prefab: Prefab | null = null
|
||||
public static instance: Node
|
||||
@property({ type: Prefab })
|
||||
private scorePrefab: Prefab | null = null
|
||||
public static preLoad(): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
PrefabLoader.loadPrefab(
|
||||
GameConfig.GameName + '/' + 'game/prefab/ResourcePrefab',
|
||||
(loadedResource: Prefab) => {
|
||||
ResourcePrefab.prefab = loadedResource
|
||||
ResourcePrefab.instance = instantiate(loadedResource)
|
||||
resolve()
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
private static prefab: Prefab | null = null
|
||||
public static instance: Node
|
||||
@property({ type: Prefab })
|
||||
private scorePrefab: Prefab | null = null
|
||||
|
||||
public static clear() {
|
||||
ResourcePrefab.instance = null
|
||||
ResourcePrefab.prefab = null
|
||||
}
|
||||
public static preLoad(): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
PrefabLoader.loadPrefab(
|
||||
`${GameConfig.GameName}/game/prefab/ResourcePrefab`,
|
||||
(loadedResource: Prefab) => {
|
||||
ResourcePrefab.prefab = loadedResource
|
||||
ResourcePrefab.instance = instantiate(loadedResource)
|
||||
resolve()
|
||||
},
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
public static getScorePrefab() {
|
||||
return ResourcePrefab.instance.getComponent(ResourcePrefab).scorePrefab
|
||||
}
|
||||
public static clear() {
|
||||
ResourcePrefab.instance = null
|
||||
ResourcePrefab.prefab = null
|
||||
}
|
||||
|
||||
public static getScorePrefab() {
|
||||
return ResourcePrefab.instance.getComponent(ResourcePrefab).scorePrefab
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,31 +1,27 @@
|
||||
import { _decorator, Component, Label, tween, Tween, Vec2, Vec3 } from 'cc'
|
||||
import { Component, Label, Tween, Vec2, Vec3, _decorator, tween } from 'cc'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('ScorePrefab')
|
||||
export default class ScorePrefab extends Component {
|
||||
@property({ type: Label })
|
||||
private txtScore: Label | null = null
|
||||
public init(score: number) {
|
||||
if (score <= 0) {
|
||||
this.txtScore.string = 'Miss'
|
||||
} else {
|
||||
this.txtScore.string = score + ''
|
||||
}
|
||||
}
|
||||
@property({ type: Label })
|
||||
private txtScore: Label | null = null
|
||||
|
||||
public playMoveEffect(p: Vec2, callback: Function = null) {
|
||||
tween(this.node)
|
||||
.to(0.5, { scale: new Vec3(3, 3, 3), position: new Vec3(p.x, p.y, 0) })
|
||||
.call(() => {
|
||||
if (callback) {
|
||||
callback()
|
||||
}
|
||||
})
|
||||
.start()
|
||||
}
|
||||
public init(score: number) {
|
||||
if (score <= 0) this.txtScore.string = 'Miss'
|
||||
else this.txtScore.string = `${score}`
|
||||
}
|
||||
|
||||
onDisable() {
|
||||
Tween.stopAllByTarget(this.node)
|
||||
}
|
||||
public playMoveEffect(p: Vec2, callback: Function = null) {
|
||||
tween(this.node)
|
||||
.to(0.5, { scale: new Vec3(3, 3, 3), position: new Vec3(p.x, p.y, 0) })
|
||||
.call(() => {
|
||||
if (callback) callback()
|
||||
})
|
||||
.start()
|
||||
}
|
||||
|
||||
onDisable() {
|
||||
Tween.stopAllByTarget(this.node)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { _decorator, Component, instantiate, Material, Node, Prefab } from 'cc'
|
||||
import { Component, Material, Node, Prefab, _decorator, instantiate } from 'cc'
|
||||
|
||||
import PrefabLoader from '../../engine/utils/PrefabLoader'
|
||||
import { GameConfig } from '../config/GameConfig'
|
||||
|
||||
@@ -13,29 +14,36 @@ export default class ShaderMaterialPrefab extends Component {
|
||||
|
||||
@property({ type: Material })
|
||||
public grayMaterial: Material | null = null
|
||||
|
||||
@property({ type: Material })
|
||||
public oldPhoto: Material | null = null
|
||||
|
||||
@property({ type: Material })
|
||||
public glowInner: Material | null = null
|
||||
|
||||
@property({ type: Material })
|
||||
public mosaic: Material | null = null
|
||||
|
||||
@property({ type: Material })
|
||||
public roundCornerCrop: Material | null = null
|
||||
|
||||
@property({ type: Material })
|
||||
public flashLight: Material | null = null
|
||||
|
||||
@property({ type: Material })
|
||||
public flag: Material | null = null
|
||||
|
||||
@property({ type: Material })
|
||||
public gaussian: Material | null = null
|
||||
|
||||
public static preLoad(): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
PrefabLoader.loadPrefab(
|
||||
GameConfig.GameName + '/' + 'game/prefab/ShaderMaterialPrefab',
|
||||
`${GameConfig.GameName}/game/prefab/ShaderMaterialPrefab`,
|
||||
(loadedResource: Prefab) => {
|
||||
ShaderMaterialPrefab.instance = instantiate(loadedResource)
|
||||
resolve()
|
||||
}
|
||||
},
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,37 +1,63 @@
|
||||
import { _decorator, instantiate, Node, Prefab, Sprite, Tween, Vec3 } from 'cc'
|
||||
import SceneBase from './SceneBase'
|
||||
import TextureMgr from '../../engine/uicomponent/TextureMgr'
|
||||
import RandomUtil from '../../engine/utils/RandomUtil'
|
||||
import {
|
||||
Component,
|
||||
Game,
|
||||
Node,
|
||||
Prefab,
|
||||
Sprite,
|
||||
Tween,
|
||||
Vec3,
|
||||
_decorator,
|
||||
director,
|
||||
game,
|
||||
instantiate,
|
||||
} from 'cc'
|
||||
|
||||
import FishMover from '../../../fish/script/FishMover'
|
||||
import { FishPathInfo } from '../config/FishPathInfo'
|
||||
import { FishPathConfig } from '../config/FishPathConfig'
|
||||
import { Logger } from '../../engine/utils/Logger'
|
||||
import FishWiki from '../../../fish/script/FishWiki'
|
||||
import TextureMgr from '../../engine/uicomponent/TextureMgr'
|
||||
import { Logger } from '../../engine/utils/Logger'
|
||||
import RandomUtil from '../../engine/utils/RandomUtil'
|
||||
import { FishPathConfig } from '../config/FishPathConfig'
|
||||
import { FishPathInfo } from '../config/FishPathInfo'
|
||||
import WsManager from '../manager/WsManager'
|
||||
import GameMusicHelper from '../utils/GameMusicHelper'
|
||||
import CommonTips from '../../engine/uicomponent/CommonTips'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('FishGameScene')
|
||||
export default class FishGameScene extends SceneBase {
|
||||
export default class FishGameScene extends Component {
|
||||
@property(Sprite)
|
||||
private bg: Sprite | null = null
|
||||
|
||||
@property({ type: [Prefab] })
|
||||
private fishPrefabList: Array<Prefab> | null = []
|
||||
|
||||
private showNode: Node | null = null
|
||||
|
||||
onLoad() {
|
||||
this.onLoadMe()
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
this.onDestroyMe()
|
||||
}
|
||||
|
||||
onLoadMe() {
|
||||
WsManager.instance.init()
|
||||
GameMusicHelper.playBg()
|
||||
FishPathConfig.init()
|
||||
this.initBg()
|
||||
WsManager.instance.on(400, this.showMsg, this)
|
||||
// FishPathConfig.init()
|
||||
// this.initBg()
|
||||
// this.testPathPlay()
|
||||
game.on(Game.EVENT_HIDE, this.onHide, this)
|
||||
game.on(Game.EVENT_SHOW, this.onAppShow, this)
|
||||
}
|
||||
|
||||
private initBg() {
|
||||
let textureMgr: TextureMgr = this.bg.getComponent(TextureMgr)
|
||||
const textureMgr: TextureMgr = this.bg.getComponent(TextureMgr)
|
||||
this.bg.spriteFrame =
|
||||
textureMgr.Spriteset[
|
||||
RandomUtil.nextInt(0, textureMgr.Spriteset.length - 1)
|
||||
]
|
||||
textureMgr.Spriteset[RandomUtil.nextInt(0, textureMgr.Spriteset.length - 1)]
|
||||
}
|
||||
|
||||
private initShowNode() {
|
||||
@@ -39,10 +65,9 @@ export default class FishGameScene extends SceneBase {
|
||||
this.showNode.destroy()
|
||||
this.showNode = null
|
||||
}
|
||||
let fishType: number = 29
|
||||
if (fishType < 1 || fishType > 29) {
|
||||
return
|
||||
}
|
||||
const fishType: number = 29
|
||||
if (fishType < 1 || fishType > 29) return
|
||||
|
||||
this.showNode = instantiate(this.fishPrefabList[fishType - 1])
|
||||
this.showNode.getComponent(FishMover).speed = 2
|
||||
this.showNode.getComponent(FishMover).node.setScale(new Vec3(2, 2, 1))
|
||||
@@ -51,10 +76,10 @@ export default class FishGameScene extends SceneBase {
|
||||
|
||||
private testPathPlay() {
|
||||
this.initShowNode()
|
||||
let pathInfo: FishPathInfo = FishPathConfig.getPathInfo(3)
|
||||
const pathInfo: FishPathInfo = FishPathConfig.getPathInfo(3)
|
||||
Logger.log('testPathPlay=pathInfo=', pathInfo)
|
||||
let params = pathInfo.path
|
||||
let param0 = params[0]
|
||||
const params = pathInfo.path
|
||||
const param0 = params[0]
|
||||
Logger.log('testPathPlay=11=', param0)
|
||||
this.showNode.setPosition(new Vec3(param0.x, param0.y, 0))
|
||||
this.showNode.getComponent(FishMover).bezierPList = params
|
||||
@@ -65,9 +90,22 @@ export default class FishGameScene extends SceneBase {
|
||||
FishWiki.show()
|
||||
}
|
||||
|
||||
private showMsg(res: any) {
|
||||
Logger.log('showMsg=res=', res)
|
||||
CommonTips.showMsg(res.msg)
|
||||
}
|
||||
|
||||
onDestroyMe() {
|
||||
this.unscheduleAllCallbacks()
|
||||
//this.node.stopAllActions();
|
||||
// this.node.stopAllActions();
|
||||
Tween.stopAllByTarget(this.node)
|
||||
}
|
||||
|
||||
onHide() {
|
||||
director.pause()
|
||||
}
|
||||
|
||||
onAppShow() {
|
||||
director.resume()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,14 @@
|
||||
import { _decorator, DynamicAtlasManager, Node, PhysicsSystem2D, profiler, sys } from 'cc'
|
||||
import {
|
||||
_decorator,
|
||||
Node,
|
||||
sys,
|
||||
profiler,
|
||||
DynamicAtlasManager,
|
||||
PhysicsSystem2D,
|
||||
Component,
|
||||
} from 'cc'
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
import MusicConfig from '../../engine/config/MusicConfig'
|
||||
import CommonTips from '../../engine/uicomponent/CommonTips'
|
||||
import Progress from '../../engine/uicomponent/Progress'
|
||||
@@ -7,74 +17,69 @@ import HotUpdate from '../../engine/utils/HotUpdate'
|
||||
import { Logger } from '../../engine/utils/Logger'
|
||||
import VersionManager from '../../engine/utils/VersionManager'
|
||||
import ResourcePreload from '../utils/ResourcePreload'
|
||||
import SceneBase from './SceneBase'
|
||||
import SceneManager from './SceneManager'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
import { FishConfig } from '../config/FishConfig'
|
||||
|
||||
@ccclass('LoadingScene')
|
||||
export default class LoadingScene extends SceneBase {
|
||||
export default class LoadingScene extends Component {
|
||||
public static scriptName: string = 'LoadingScene'
|
||||
@property({ type: Node })
|
||||
private progressNode: Node | null = null
|
||||
|
||||
async onLoadMe() {
|
||||
protected onLoad(): void {
|
||||
this.onLoadMe()
|
||||
}
|
||||
|
||||
protected onDestroy(): void {
|
||||
this.onDestroyMe()
|
||||
}
|
||||
|
||||
onLoadMe() {
|
||||
this.baseInit()
|
||||
EventManager.instance.addListener(
|
||||
HotUpdate.Event_On_NeedUpdate,
|
||||
this.onNeedUpdate,
|
||||
this
|
||||
)
|
||||
EventManager.instance.addListener(
|
||||
HotUpdate.Event_On_Progress,
|
||||
this.onUpdateProgress,
|
||||
this
|
||||
)
|
||||
EventManager.instance.addListener(
|
||||
HotUpdate.Event_On_Fail_Update,
|
||||
this.onUpdateFail,
|
||||
this
|
||||
)
|
||||
EventManager.instance.addListener(
|
||||
HotUpdate.Event_Finish_Update,
|
||||
this.onUpdateFinish,
|
||||
this
|
||||
)
|
||||
EventManager.instance.addListener(HotUpdate.Event_On_NeedUpdate, this.onNeedUpdate, this)
|
||||
EventManager.instance.addListener(HotUpdate.Event_On_Progress, this.onUpdateProgress, this)
|
||||
EventManager.instance.addListener(HotUpdate.Event_On_Fail_Update, this.onUpdateFail, this)
|
||||
EventManager.instance.addListener(HotUpdate.Event_Finish_Update, this.onUpdateFinish, this)
|
||||
EventManager.instance.addListener(
|
||||
HotUpdate.Event_On_ALREADY_UP_TO_DATE,
|
||||
this.onUpdateFinish,
|
||||
this
|
||||
this,
|
||||
)
|
||||
if (sys.isNative && VersionManager.instance.isOpenHotUpdate) {
|
||||
this.checkUpdate()
|
||||
} else {
|
||||
await this.preLoadRes()
|
||||
this.preLoadRes()
|
||||
}
|
||||
}
|
||||
|
||||
private baseInit() {
|
||||
profiler.hideStats() //showStats
|
||||
//let collisionManager:cc.CollisionManager = director.getCollisionManager();
|
||||
PhysicsSystem2D.instance.enable = true
|
||||
private async baseInit() {
|
||||
try {
|
||||
await FishConfig.init()
|
||||
profiler.hideStats() //showStats
|
||||
//let collisionManager:cc.CollisionManager = director.getCollisionManager();
|
||||
PhysicsSystem2D.instance.enable = true
|
||||
|
||||
// PhysicsSystem2D.instance.debugDrawFlags = EPhysics2DDrawFlags.Aabb |
|
||||
// EPhysics2DDrawFlags.Pair |
|
||||
// EPhysics2DDrawFlags.CenterOfMass |
|
||||
// EPhysics2DDrawFlags.Joint |
|
||||
// EPhysics2DDrawFlags.Shape;
|
||||
// PhysicsSystem2D.instance.debugDrawFlags = EPhysics2DDrawFlags.Aabb |
|
||||
// EPhysics2DDrawFlags.Pair |
|
||||
// EPhysics2DDrawFlags.CenterOfMass |
|
||||
// EPhysics2DDrawFlags.Joint |
|
||||
// EPhysics2DDrawFlags.Shape;
|
||||
|
||||
//if(collisionManager){
|
||||
//collisionManager.enabled = true;
|
||||
// collisionManager.enabledDebugDraw = true;
|
||||
// collisionManager.enabledDrawBoundingBox = true;
|
||||
//}
|
||||
//if(collisionManager){
|
||||
//collisionManager.enabled = true;
|
||||
// collisionManager.enabledDebugDraw = true;
|
||||
// collisionManager.enabledDrawBoundingBox = true;
|
||||
//}
|
||||
|
||||
if (DynamicAtlasManager.instance) {
|
||||
DynamicAtlasManager.instance.enabled = false
|
||||
if (DynamicAtlasManager.instance) {
|
||||
DynamicAtlasManager.instance.enabled = false
|
||||
}
|
||||
MusicConfig.init()
|
||||
// cc.director.getCollisionManager().enabled=true;//这是一个全局属性,开启后就代表碰撞检测组件可以进行检测了
|
||||
// cc.director.getCollisionManager().enabledDebugDraw = true; //绘制碰撞区域
|
||||
} catch (error) {
|
||||
Logger.error(this, error)
|
||||
}
|
||||
MusicConfig.init()
|
||||
// cc.director.getCollisionManager().enabled=true;//这是一个全局属性,开启后就代表碰撞检测组件可以进行检测了
|
||||
// cc.director.getCollisionManager().enabledDebugDraw = true; //绘制碰撞区域
|
||||
}
|
||||
|
||||
private checkUpdate() {
|
||||
@@ -89,13 +94,10 @@ export default class LoadingScene extends SceneBase {
|
||||
}
|
||||
}
|
||||
|
||||
private onUpdateProgress(event: Function, loadedFiles: number, totalFiles: number, key: string) {
|
||||
private onUpdateProgress(event, loadedFiles, totalFiles, key) {
|
||||
if (key == VersionManager.Config_Key[0]) {
|
||||
let msg: string =
|
||||
Math.min(100, (loadedFiles / totalFiles) * 100).toFixed(2) + '%'
|
||||
this.progressNode
|
||||
.getComponent(Progress)
|
||||
.updateProgress(loadedFiles, totalFiles, msg)
|
||||
let msg: string = Math.min(100, (loadedFiles / totalFiles) * 100).toFixed(2) + '%'
|
||||
this.progressNode.getComponent(Progress).updateProgress(loadedFiles, totalFiles, msg)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,25 +128,10 @@ export default class LoadingScene extends SceneBase {
|
||||
}
|
||||
|
||||
onDestroyMe() {
|
||||
EventManager.instance.removeListener(
|
||||
HotUpdate.Event_On_NeedUpdate,
|
||||
this.onNeedUpdate
|
||||
)
|
||||
EventManager.instance.removeListener(
|
||||
HotUpdate.Event_On_Progress,
|
||||
this.onUpdateProgress
|
||||
)
|
||||
EventManager.instance.removeListener(
|
||||
HotUpdate.Event_On_Fail_Update,
|
||||
this.onUpdateFail
|
||||
)
|
||||
EventManager.instance.removeListener(
|
||||
HotUpdate.Event_Finish_Update,
|
||||
this.onUpdateFinish
|
||||
)
|
||||
EventManager.instance.removeListener(
|
||||
HotUpdate.Event_On_ALREADY_UP_TO_DATE,
|
||||
this.onUpdateFinish
|
||||
)
|
||||
EventManager.instance.removeListener(HotUpdate.Event_On_NeedUpdate, this.onNeedUpdate)
|
||||
EventManager.instance.removeListener(HotUpdate.Event_On_Progress, this.onUpdateProgress)
|
||||
EventManager.instance.removeListener(HotUpdate.Event_On_Fail_Update, this.onUpdateFail)
|
||||
EventManager.instance.removeListener(HotUpdate.Event_Finish_Update, this.onUpdateFinish)
|
||||
EventManager.instance.removeListener(HotUpdate.Event_On_ALREADY_UP_TO_DATE, this.onUpdateFinish)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
import { _decorator, Component } from 'cc'
|
||||
import AdapterHelper from '../../engine/utils/AdapterHelper'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('SceneBase')
|
||||
export default class SceneBase extends Component {
|
||||
public static scriptName: string = 'SceneBase'
|
||||
|
||||
onLoad() {
|
||||
AdapterHelper.fixApdater()
|
||||
this.onLoadMe()
|
||||
}
|
||||
|
||||
onLoadMe() {
|
||||
}
|
||||
|
||||
start() {
|
||||
this.onStartMe()
|
||||
}
|
||||
|
||||
onStartMe() {
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
this.onDestroyMe()
|
||||
}
|
||||
|
||||
onDestroyMe() {
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "544253ea-8aa0-4349-9d6c-efb97841d976",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"simulateGlobals": []
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
import { director, SceneAsset, sys } from 'cc'
|
||||
import { Logger } from '../../engine/utils/Logger'
|
||||
import LoadingScenePrefab from '../../engine/uicomponent/LoadingScenePrefab'
|
||||
import CommonTips from '../../engine/uicomponent/CommonTips'
|
||||
import EventManager from '../../engine/utils/EventManager'
|
||||
import { SceneAsset, director, sys } from 'cc'
|
||||
|
||||
import CommonEvent from '../../engine/config/CommonEvent'
|
||||
import CommonTips from '../../engine/uicomponent/CommonTips'
|
||||
import LoadingScenePrefab from '../../engine/uicomponent/LoadingScenePrefab'
|
||||
import EventManager from '../../engine/utils/EventManager'
|
||||
import { Logger } from '../../engine/utils/Logger'
|
||||
|
||||
export default class SceneManager {
|
||||
public static instance: SceneManager = new SceneManager()
|
||||
@@ -23,7 +24,7 @@ export default class SceneManager {
|
||||
}
|
||||
|
||||
public async sceneSwitch(name: string, showProgress: boolean = false) {
|
||||
if (this.loadingSceneName == name) return
|
||||
if (this.loadingSceneName === name) return
|
||||
Logger.log(this, 'sceneSwitch==', name)
|
||||
if (sys.isBrowser) {
|
||||
// showProgress = true;
|
||||
@@ -42,13 +43,13 @@ export default class SceneManager {
|
||||
Logger.warn(this, 'preloadScene=error', error.message)
|
||||
CommonTips.showMsg('加载场景失败')
|
||||
} else {
|
||||
//director.getScene().destroy();//director.getScene().cleanup();
|
||||
// director.getScene().destroy();//director.getScene().cleanup();
|
||||
director.loadScene(name, this.loadSceneOK.bind(this))
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
} else {
|
||||
//director.getScene().destroy();//director.getScene().cleanup();
|
||||
// director.getScene().destroy();//director.getScene().cleanup();
|
||||
director.loadScene(name, this.loadSceneOK.bind(this))
|
||||
}
|
||||
}
|
||||
@@ -65,7 +66,7 @@ export default class SceneManager {
|
||||
public preloadScene(
|
||||
sceneName: string,
|
||||
onProgressCallback: any = null,
|
||||
onLoadedCallback: any = null
|
||||
onLoadedCallback: any = null,
|
||||
) {
|
||||
director.preloadScene(sceneName, onProgressCallback, onLoadedCallback)
|
||||
}
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
import { _decorator } from 'cc'
|
||||
import SceneBase from './SceneBase'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('StartScene')
|
||||
export default class StartScene extends SceneBase {
|
||||
public static scriptName: string = 'StartScene'
|
||||
|
||||
onLoadMe() {
|
||||
}
|
||||
|
||||
update() {
|
||||
}
|
||||
|
||||
onDestroyMe() {
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
import { _decorator, Component, Vec2 } from 'cc'
|
||||
import { Component, Vec2, _decorator } from 'cc'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
export enum AstarGridType {
|
||||
Hider = 0, //不能走
|
||||
Normal = 1, //能走
|
||||
End = 2, //终点
|
||||
Hider = 0, // 不能走
|
||||
Normal = 1, // 能走
|
||||
End = 2, // 终点
|
||||
}
|
||||
|
||||
@ccclass('Astar')
|
||||
@@ -28,8 +28,7 @@ export class Astar extends Component {
|
||||
private path: Array<AstarGrid> = []
|
||||
private gridsList: Array<Array<AstarGrid>> = []
|
||||
|
||||
onLoad() {
|
||||
}
|
||||
onLoad() {}
|
||||
|
||||
/**
|
||||
* @param mapW 宽格子数
|
||||
@@ -51,15 +50,12 @@ export class Astar extends Component {
|
||||
this.closeList = []
|
||||
this.path = []
|
||||
// 初始化格子二维数组
|
||||
this.gridsList = new Array(this.mapW + 1)
|
||||
for (let col = 0; col < this.gridsList.length; col++) {
|
||||
this.gridsList[col] = new Array(this.mapH + 1)
|
||||
}
|
||||
for (let col = 0; col <= this.mapW; col++) {
|
||||
for (let row = 0; row <= this.mapH; row++) {
|
||||
this.addGrid(col, row, AstarGridType.Normal)
|
||||
}
|
||||
}
|
||||
this.gridsList = Array.from({ length: this.mapW + 1 })
|
||||
for (let col = 0; col < this.gridsList.length; col++)
|
||||
this.gridsList[col] = Array.from({ length: this.mapH + 1 })
|
||||
|
||||
for (let col = 0; col <= this.mapW; col++)
|
||||
for (let row = 0; row <= this.mapH; row++) this.addGrid(col, row, AstarGridType.Normal)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -69,7 +65,7 @@ export class Astar extends Component {
|
||||
* @param type
|
||||
*/
|
||||
private addGrid(x: number, y: number, type: number = AstarGridType.Hider) {
|
||||
let grid = new AstarGrid()
|
||||
const grid = new AstarGrid()
|
||||
grid.x = x
|
||||
grid.y = y
|
||||
grid.type = type
|
||||
@@ -83,7 +79,7 @@ export class Astar extends Component {
|
||||
* @param type
|
||||
*/
|
||||
public setGridType(x: number, y: number, type: number) {
|
||||
let curGrid: AstarGrid = this.gridsList[x][y]
|
||||
const curGrid: AstarGrid = this.gridsList[x][y]
|
||||
curGrid.type = type
|
||||
}
|
||||
|
||||
@@ -94,70 +90,59 @@ export class Astar extends Component {
|
||||
* @param callback
|
||||
*/
|
||||
public findPath(startPos: Vec2, endPos: Vec2, callback: Function = null) {
|
||||
let startGrid = this.gridsList[startPos.x][startPos.y]
|
||||
const startGrid = this.gridsList[startPos.x][startPos.y]
|
||||
this.openList.push(startGrid)
|
||||
let curGrid: AstarGrid = this.openList[0]
|
||||
while (this.openList.length > 0 && curGrid.type != AstarGridType.End) {
|
||||
while (this.openList.length > 0 && curGrid.type !== AstarGridType.End) {
|
||||
// 每次都取出f值最小的节点进行查找
|
||||
curGrid = this.openList[0]
|
||||
if (curGrid.type == AstarGridType.End) {
|
||||
if (curGrid.type === AstarGridType.End) {
|
||||
// Logger.log(this,"find path success.");
|
||||
this.generatePath(curGrid)
|
||||
if (callback) {
|
||||
callback(this.path)
|
||||
}
|
||||
if (callback) callback(this.path)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
for (let i: number = -1; i <= 1; i++) {
|
||||
for (let j: number = -1; j <= 1; j++) {
|
||||
if (i != 0 || j != 0) {
|
||||
let col = curGrid.x + i
|
||||
let row = curGrid.y + j
|
||||
if (i !== 0 || j !== 0) {
|
||||
const col = curGrid.x + i
|
||||
const row = curGrid.y + j
|
||||
if (
|
||||
col >= 0 &&
|
||||
row >= 0 &&
|
||||
col <= this.mapW &&
|
||||
row <= this.mapH &&
|
||||
this.gridsList[col][row].type != AstarGridType.Hider &&
|
||||
this.closeList.indexOf(this.gridsList[col][row]) < 0
|
||||
col >= 0
|
||||
&& row >= 0
|
||||
&& col <= this.mapW
|
||||
&& row <= this.mapH
|
||||
&& this.gridsList[col][row].type !== AstarGridType.Hider
|
||||
&& !this.closeList.includes(this.gridsList[col][row])
|
||||
) {
|
||||
if (this.is8dir) {
|
||||
// 8方向 斜向走动时要考虑相邻的是不是障碍物
|
||||
if (
|
||||
this.gridsList[col - i][row].type == AstarGridType.Hider ||
|
||||
this.gridsList[col][row - j].type == AstarGridType.Hider
|
||||
) {
|
||||
this.gridsList[col - i][row].type === AstarGridType.Hider
|
||||
|| this.gridsList[col][row - j].type === AstarGridType.Hider
|
||||
)
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
// 四方形行走
|
||||
if (Math.abs(i) == Math.abs(j)) {
|
||||
continue
|
||||
}
|
||||
if (Math.abs(i) === Math.abs(j)) continue
|
||||
}
|
||||
// 计算g值
|
||||
let g =
|
||||
curGrid.g +
|
||||
Math.floor(Math.sqrt(Math.pow(i * 10, 2)) + Math.pow(j * 10, 2))
|
||||
if (
|
||||
this.gridsList[col][row].g == 0 ||
|
||||
this.gridsList[col][row].g > g
|
||||
) {
|
||||
const g = curGrid.g + Math.floor(Math.sqrt((i * 10) ** 2) + (j * 10) ** 2)
|
||||
if (this.gridsList[col][row].g === 0 || this.gridsList[col][row].g > g) {
|
||||
this.gridsList[col][row].g = g
|
||||
// 更新父节点
|
||||
this.gridsList[col][row].parent = curGrid
|
||||
}
|
||||
// 计算h值 manhattan估算法
|
||||
this.gridsList[col][row].h =
|
||||
Math.abs(endPos.x - col) + Math.abs(endPos.y - row)
|
||||
this.gridsList[col][row].h = Math.abs(endPos.x - col) + Math.abs(endPos.y - row)
|
||||
// 更新f值
|
||||
this.gridsList[col][row].f =
|
||||
this.gridsList[col][row].g + this.gridsList[col][row].h
|
||||
this.gridsList[col][row].f = this.gridsList[col][row].g + this.gridsList[col][row].h
|
||||
// 如果不在开放列表里则添加到开放列表里
|
||||
if (this.openList.indexOf(this.gridsList[col][row]) < 0) {
|
||||
if (!this.openList.includes(this.gridsList[col][row]))
|
||||
this.openList.push(this.gridsList[col][row])
|
||||
}
|
||||
|
||||
// // 重新按照f值排序(升序排列)
|
||||
}
|
||||
}
|
||||
@@ -170,9 +155,8 @@ export class Astar extends Component {
|
||||
if (this.openList.length <= 0) {
|
||||
// Logger.log(this,"find path failed.");
|
||||
this.path = []
|
||||
if (callback) {
|
||||
callback(this.path)
|
||||
}
|
||||
if (callback) callback(this.path)
|
||||
|
||||
break
|
||||
}
|
||||
// 重新按照f值排序(升序排列)
|
||||
@@ -195,6 +179,5 @@ export class Astar extends Component {
|
||||
return this.path
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
}
|
||||
onDestroy() {}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import SoundPrefab from '../../engine/uicomponent/SoundPrefab'
|
||||
import MusicPrefab from '../../engine/uicomponent/MusicPrefab'
|
||||
import SoundPrefab from '../../engine/uicomponent/SoundPrefab'
|
||||
import RandomUtil from '../../engine/utils/RandomUtil'
|
||||
|
||||
export default class GameMusicHelper {
|
||||
public static playBg() {
|
||||
let randomIndex: number = RandomUtil.nextInt(1, 3)
|
||||
MusicPrefab.play('background_' + randomIndex)
|
||||
const randomIndex: number = RandomUtil.nextInt(1, 3)
|
||||
MusicPrefab.play(`background_${randomIndex}`)
|
||||
}
|
||||
|
||||
public static playFishDead(fishType: number) {
|
||||
SoundPrefab.play('deadfish_' + fishType)
|
||||
SoundPrefab.play(`deadfish_${fishType}`)
|
||||
}
|
||||
|
||||
public static playFire() {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { error, game } from 'cc'
|
||||
|
||||
import DarkLayer from '../../engine/uicomponent/DarkLayer'
|
||||
import LoadingPrefab from '../../engine/uicomponent/LoadingPrefab'
|
||||
import LoadingScenePrefab from '../../engine/uicomponent/LoadingScenePrefab'
|
||||
@@ -22,29 +23,28 @@ export default class ResourcePreload {
|
||||
}
|
||||
this.isPreloaded = true
|
||||
this.progress = progress
|
||||
if (this.progress) {
|
||||
if (this.progress)
|
||||
progress.updateProgress(this.nowIndex, this.totalNum)
|
||||
}
|
||||
await LoadingPrefab.preLoad() //1
|
||||
|
||||
await LoadingPrefab.preLoad() // 1
|
||||
this.finishOneItemLoad()
|
||||
await DarkLayer.preLoad() //2
|
||||
await DarkLayer.preLoad() // 2
|
||||
this.finishOneItemLoad()
|
||||
await MusicPrefab.preLoad() //3
|
||||
await MusicPrefab.preLoad() // 3
|
||||
this.finishOneItemLoad()
|
||||
await SoundPrefab.preLoad() //4
|
||||
await SoundPrefab.preLoad() // 4
|
||||
this.finishOneItemLoad()
|
||||
await ResourcePrefab.preLoad() //5
|
||||
await ResourcePrefab.preLoad() // 5
|
||||
this.finishOneItemLoad()
|
||||
await ShaderMaterialPrefab.preLoad() //6
|
||||
await ShaderMaterialPrefab.preLoad() // 6
|
||||
this.finishOneItemLoad() //
|
||||
callback()
|
||||
}
|
||||
|
||||
private finishOneItemLoad() {
|
||||
this.nowIndex++
|
||||
if (this.progress) {
|
||||
if (this.progress)
|
||||
this.progress.updateProgress(this.nowIndex, this.totalNum)
|
||||
}
|
||||
}
|
||||
|
||||
public restartGame() {
|
||||
@@ -53,7 +53,7 @@ export default class ResourcePreload {
|
||||
LoadingScenePrefab.clear()
|
||||
LoadingPrefab.clear()
|
||||
error('需要获取游戏里所有的AudioSource停止音乐')
|
||||
//audioEngine.stopAll();
|
||||
// audioEngine.stopAll();
|
||||
|
||||
// VersionManager.instance.releaseAll();
|
||||
MusicPrefab.destory()
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
import { _decorator, Component } from 'cc'
|
||||
import { Component, _decorator } from 'cc'
|
||||
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
@ccclass('UIRoot')
|
||||
export class UIRoot extends Component {
|
||||
public static Instance: UIRoot
|
||||
onLoad() {
|
||||
UIRoot.Instance = this
|
||||
}
|
||||
onDestroy() {
|
||||
UIRoot.Instance = null
|
||||
}
|
||||
public static Instance: UIRoot
|
||||
|
||||
onLoad() {
|
||||
UIRoot.Instance = this
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
UIRoot.Instance = null
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user