init
This commit is contained in:
156
client/assets/Scripts/Scene/BattleManager.ts
Normal file
156
client/assets/Scripts/Scene/BattleManager.ts
Normal file
@@ -0,0 +1,156 @@
|
||||
import { _decorator, Component, Node, resources, Prefab, instantiate, Vec2, SpriteFrame } from 'cc';
|
||||
import { PlayerManager } from '../Entity/Player/PlayerManager';
|
||||
import DataManager from '../Global/DataManager';
|
||||
import { JoyStickManager } from '../UI/JoyStickManager';
|
||||
import { ResourceManager } from '../Global/ResourceManager';
|
||||
import { EntityTypeEnum, InputType, PrefabPathEnum, TexturePathEnum } from '../Enum';
|
||||
import NetworkManager from '../Global/NetworkManager';
|
||||
import ObjectPoolManager from '../Global/ObjectPoolManager';
|
||||
import { BulletManager } from '../Entity/Bullet/BulletManager';
|
||||
|
||||
const { ccclass, property, requireComponent } = _decorator;
|
||||
|
||||
@ccclass('BattleManager')
|
||||
export class BattleManager extends Component {
|
||||
stage: Node
|
||||
ui: Node
|
||||
|
||||
isInited = false
|
||||
|
||||
|
||||
onLoad() {
|
||||
DataManager.Instance.gm = this
|
||||
this.stage = this.node.getChildByName("Stage")
|
||||
this.ui = this.node.getChildByName("UI")
|
||||
}
|
||||
|
||||
async start() {
|
||||
this.clearGame()
|
||||
await this.loadRes()
|
||||
await this.initScene()
|
||||
this.isInited = true
|
||||
}
|
||||
|
||||
clearGame() {
|
||||
this.stage.destroyAllChildren()
|
||||
this.ui.destroyAllChildren()
|
||||
}
|
||||
|
||||
async initScene() {
|
||||
// await NetworkManager.Instance.connect()
|
||||
// NetworkManager.Instance.sendMsg("我是客户端!!")
|
||||
// const data = await NetworkManager.Instance.callApi("/join")
|
||||
// console.log("data", data);
|
||||
await Promise.all([
|
||||
this.initJoyStick(),
|
||||
this.initFire(),
|
||||
this.initMap(),
|
||||
])
|
||||
|
||||
}
|
||||
|
||||
async loadRes() {
|
||||
const list = []
|
||||
for (const type in PrefabPathEnum) {
|
||||
const p = ResourceManager.Instance.loadRes(PrefabPathEnum[type], Prefab).then((prefab) => {
|
||||
DataManager.Instance.prefabMap.set(type, prefab)
|
||||
})
|
||||
list.push(p)
|
||||
}
|
||||
for (const type in TexturePathEnum) {
|
||||
const p = ResourceManager.Instance.loadDir(TexturePathEnum[type], SpriteFrame).then((spriteFrames) => {
|
||||
DataManager.Instance.textureMap.set(type, spriteFrames)
|
||||
})
|
||||
list.push(p)
|
||||
}
|
||||
await Promise.all(list)
|
||||
}
|
||||
|
||||
|
||||
async initJoyStick() {
|
||||
const joySitckPrefab = await ResourceManager.Instance.loadRes(PrefabPathEnum[EntityTypeEnum.JoyStick], Prefab)
|
||||
const joySitck = instantiate(joySitckPrefab)
|
||||
joySitck.setParent(this.ui)
|
||||
const jm = DataManager.Instance.jm = joySitck.getComponent(JoyStickManager)
|
||||
await jm.init()
|
||||
}
|
||||
|
||||
async initFire() {
|
||||
const firePrefab = await ResourceManager.Instance.loadRes(PrefabPathEnum[EntityTypeEnum.Shoot], Prefab)
|
||||
const fire = instantiate(firePrefab)
|
||||
fire.setParent(this.ui)
|
||||
}
|
||||
|
||||
async initMap() {
|
||||
const mapPrefab = await ResourceManager.Instance.loadRes(PrefabPathEnum[EntityTypeEnum.Map1], Prefab)
|
||||
const map = instantiate(mapPrefab)
|
||||
map.setParent(this.stage)
|
||||
}
|
||||
|
||||
update(dt: number) {
|
||||
if (!this.isInited) {
|
||||
return
|
||||
}
|
||||
this.render()
|
||||
this.tick(dt)
|
||||
}
|
||||
|
||||
tick(dt: number) {
|
||||
this.tickPlayer(dt)
|
||||
|
||||
DataManager.Instance.applyInput({
|
||||
type: InputType.TimePast,
|
||||
dt
|
||||
})
|
||||
}
|
||||
|
||||
tickPlayer(dt: number) {
|
||||
const players = DataManager.Instance.state.players
|
||||
|
||||
for (const p of players) {
|
||||
const playerManager = DataManager.Instance.playerMap.get(p.id)
|
||||
if (!playerManager) {
|
||||
return
|
||||
}
|
||||
playerManager.tick(dt)
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
this.renderPlayer()
|
||||
this.renderBullet()
|
||||
}
|
||||
|
||||
renderPlayer() {
|
||||
const players = DataManager.Instance.state.players
|
||||
for (const p of players) {
|
||||
let playerManager = DataManager.Instance.playerMap.get(p.id)
|
||||
if (!playerManager) {
|
||||
const playerPrefab = DataManager.Instance.prefabMap.get(p.type)
|
||||
const player = instantiate(playerPrefab)
|
||||
player.setParent(this.stage)
|
||||
playerManager = player.addComponent(PlayerManager)
|
||||
DataManager.Instance.playerMap.set(p.id, playerManager)
|
||||
playerManager.init(p)
|
||||
} else {
|
||||
playerManager.render(p)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
renderBullet() {
|
||||
const bullets = DataManager.Instance.state.bullets
|
||||
for (const b of bullets) {
|
||||
let bulletManager = DataManager.Instance.bulletMap.get(b.id)
|
||||
if (!bulletManager) {
|
||||
const bullet = ObjectPoolManager.Instance.getPoolObject(b.type)
|
||||
bulletManager = bullet.getComponent(BulletManager) || bullet.addComponent(BulletManager)
|
||||
DataManager.Instance.bulletMap.set(b.id, bulletManager)
|
||||
bulletManager.init(b)
|
||||
} else {
|
||||
bulletManager.render(b)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
9
client/assets/Scripts/Scene/BattleManager.ts.meta
Normal file
9
client/assets/Scripts/Scene/BattleManager.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "d8c46424-e6ab-4d22-af07-293ce98d8b5b",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
Reference in New Issue
Block a user