pubgv3/assets/scripts/game/dropManage.js
2022-05-26 11:46:36 +08:00

361 lines
11 KiB
JavaScript

var Utils = require("Utils")
var gameConfig = require("gameConfig")
var dropItemConfig = gameConfig.dropItemConfig
var dropFrame = {}
var dreadyFrame = {}
var Main = require("Main")
var commonsacle = 0.4
var gunscale = 1
var dcolorarr = [
"#00FF29",
"#00D6FF",
"#EB00FF",
"#FFA300",
"#FF0000",
]
var dropManage = function() {
this.itempool = [];
this.itemarr = [];
this.carpool = [];
this.itemNode = null;
this.setFrame = function(dir, frameName, sprite) {
if (dropFrame[frameName]) {
sprite.sizeMode = 2
sprite.spriteFrame = dropFrame[frameName];
} else {
if (dreadyFrame[frameName] == undefined) {
dreadyFrame[frameName] = []
cc.loader.loadRes(dir + frameName, cc.SpriteFrame, function(err, res) {
if (!err && sprite.isValid) {
dropFrame[frameName] = res
for (var i = dreadyFrame[frameName].length - 1; i >= 0; i--) {
try {
dreadyFrame[frameName][i].spriteFrame = res
dreadyFrame[frameName][i].sizeMode = 2
} catch (e) {}
}
dreadyFrame[frameName] = null
}
});
}
if (dreadyFrame[frameName]) {
dreadyFrame[frameName].push(sprite)
}
}
}
this.reset = function() {
this.itempool.length = 0;
this.itemarr.length = 0;
this.itemNode = null;
}
this.clean = function() {
for (var i = 0; i < this.itempool.length; i++) {
this.itempool[i].icon = null
}
for (var i = 0; i < this.itemarr.length; i++) {
this.itemarr[i].icon = null
}
this.reset()
}
this.createItem = function(id, pos, data2) {
var dt = dropItemConfig[id]
if (!dt) {
console.log(id)
}
if (dt.equip_type == 9) {
// var tank
// if (this.carpool.length > 0) {
// tank = this.carpool.pop();
// }else{
// tank = cc.instantiate(cc.gameMgr.pbtank)
// tank.width = 70
// tank.height = 70
// tank.istank = true
// // tank.rotation = -45
// }
// this.itemarr.push(tank)
// tank.position = pos
// tank.needDelete=false
// cc.gameMgr.ndplayer.addChild(tank)
// tank.dbid = id
// tank.lifeTime = 99999
// tank.opacity = 255
// tank.zIndex = -tank.y
// //tank.getComponent("horsectrl").initdata(id,true)
// return tank
var tank = new cc.Node()
tank.position = pos
tank.needDelete = false
cc.gameMgr.ndplayer.addChild(tank)
tank.dbid = id
tank.lifeTime = 99999
tank.opacity = 255
tank.zIndex = -tank.y /cc.zscale
tank.istank = true
tank.resname = dt.model
tank.width = 70
tank.height = 70
this.itemarr.push(tank)
var cb = function(nd) {
if (tank.isValid) {
tank.addChild(nd)
tank.model = nd
}
}
cc.gameMgr.effectManager.createprefab(dt.model, "prefabs/gameprefab/", cb)
return tank
}
var item
if (this.itempool.length > 0) {
item = this.itempool.pop();
} else {
item = new cc.Node();
item.width = 32;
item.height = 32;
item.icon = new cc.Node();
let sp1 = item.icon.addComponent(cc.Sprite);
item.icon.width = 24;
item.icon.height = 24;
item.icon.scale = 0.4
item.istank = false
let sp2 = item.addComponent(cc.Sprite);
//this.setFrame("icons/","loot-circle-blue",sp2);
// item.rotation = -45
item.scaleY = 1 // 1/cc.gameMgr.shijiao
item.addChild(item.icon)
//sp1.sizeMode = 0;
sp2.sizeMode = 0;
sp1.sizeMode = 2
sp1.trim = false
this.spani = item.icon.addComponent(cc.Animation)
item.icon.getComponent(cc.Animation).addClip(cc.battleCache.drop_ani, "drop_ani");
item.icon.getComponent(cc.Animation).addClip(cc.battleCache.drop_ani2, "drop_ani2");
// this.spani.play("drop_ani")
}
// if (dt.quality != 999) {
// this.spani.play("drop_ani")
// } else {
// this.spani.stop()
// }
if (item.gunpb) {
cc.gameMgr.effectManager.huishouprefab(item.gunpb.pname, item.gunpb)
item.gunpb = null
}
item.opacity = 255
item.lifeTime = 99999
this.itemarr.push(item)
item.stopAllActions()
if (!data2.show_anim) {
item.position = pos
} else {
item.position = cc.v2(data2.born_pos.x, data2.born_pos.y)
item.runAction(cc.moveTo(0.3, pos));
}
item.zIndex = -pos.y /cc.zscale
item.needDelete = false
this.itemNode.addChild(item)
item.dbid = id
// item.data = dt;
// item.data2 = data2;
let sp1 = item.icon.getComponent(cc.Sprite);
var resname = dt.model
item.icon.scale = commonsacle
// item.zIndex = 0
var dirpath = "icons/"
var isava = false
if (dt.equip_type == 10 && dt.equip_subtype == 12) {
dirpath = "avatar/cloth/"
item.icon.scale = 0.3 * cc.hdscale
// item.zIndex = 1
isava = true
} else if (dt.equip_type == 10 && dt.equip_subtype == 11) {
dirpath = "avatar/hat/"
item.icon.scale = 0.3 * cc.hdscale
// item.zIndex = 1
isava = true
}
if (dt.quality != 999) {
this.setFrame("icons/", "loot-circle-blue", item.getComponent(cc.Sprite));
} else {
item.getComponent(cc.Sprite).spriteFrame = null
}
if (dt.quality) {
if(dt.quality!=999){
item.color = new cc.color().fromHEX(dcolorarr[Number(dt.quality) - 1])
this.spani.play("drop_ani")
}else{
this.spani.play("drop_ani2")
}
} else {
item.color = new cc.color().fromHEX(dcolorarr[0])
this.spani.play("drop_ani")
}
if (dt.equip_type == 1) {
var lv = data2.item_level
if (!lv) {
lv = 1
}
sp1.spriteFrame = null
var cb = function(nd) {
if (item.gunpb) {
if (cc.gameMgr && cc.gameMgr.effectManager) {
cc.gameMgr.effectManager.huishouprefab(item.gunpb.pname, item.gunpb)
}
item.gunpb = null
}
nd.scale = gunscale
nd.pname = dt.world_img
item.gunpb = nd
item.icon.addChild(nd)
var cmp = nd.getComponent(cc.Animation)
if (cmp) {
cmp.play(nd.pname + "_" + lv)
}
}
cc.gameMgr.effectManager.createprefab(dt.world_img, "prefabs/gunprefab/", cb)
} else {
this.setFrame(dirpath, resname, sp1);
}
return item
}
this.update = function(playerarr, dt) {
var px = cc.gameMgr.watchPlayer.x
var py = cc.gameMgr.watchPlayer.y
var vw = cc.winSize.width / 2 / cc.gameMgr.viewScale +100
var vh = cc.winSize.height / 2 / cc.gameMgr.viewScale +100
var dxx = 0
var dyy = 0
// var vw = cc.winSize.width/1.5/cc.gameMgr.viewScale
// var vh = cc.winSize.height/1.5/cc.gameMgr.viewScale
for (var i = this.itemarr.length - 1; i >= 0; i--) {
var item = this.itemarr[i];
item.lifeTime -= dt
if (item.lifeTime < 0) {
cc.gameMgr.objMap[item.objuuid] = null;
item.needDelete = true
}
if (item.needDelete) {
if (!item.istank) {
item.removeFromParent(false);
this.itempool.push(item)
} else {
if (item.model) {
cc.gameMgr.effectManager.huishouprefab(item.resname, item.model)
}
item.destroy()
// this.carpool.push(item)
}
this.itemarr.splice(i, 1);
continue;
}
dxx = item.x - px
dyy = item.y - py
if (Math.abs(dxx) > vw || Math.abs(dyy) > vh ) {
item.opacity = 0
} else {
item.opacity = 255
}
if(!cc.gameMgr.nditem.active){
item.opacity = 0
}
}
}
this.getNearDrop = function(horsemode) {
var playerarr = cc.gameMgr.playerarr;
var outarr = []
for (var i = this.itemarr.length - 1; i >= 0; i--) {
var item = this.itemarr[i];
if (item.opacity == 255) {
outarr.push(item)
}
}
if (!horsemode) {
for (var i = cc.gameMgr.cararr.length - 1; i >= 0; i--) {
if (cc.gameMgr.cararr[i].pctrl.canzuo()) {
outarr.push(cc.gameMgr.cararr[i])
}
}
}
if (outarr.length == 0) {
return null
}
outarr = outarr.sort((a, b) => {
var disa = Math.pow(cc.gameMgr.watchPlayer.x - a.x, 2) + Math.pow(cc.gameMgr.watchPlayer.y - a.y, 2)
var disb = Math.pow(cc.gameMgr.watchPlayer.x - b.x, 2) + Math.pow(cc.gameMgr.watchPlayer.y - b.y, 2)
return disa - disb;
});
if (Utils.hitTestRectangle(outarr[0], cc.gameMgr.watchPlayer)) {
return outarr[0]
} else {
return null
}
}
}
module.exports = dropManage