123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- import itemDtManager from "../dataManager/itemDtManager";
- import npcHelper from "../dataManager/npcHelper";
- import Utils from "../framework/utils/utils";
- const { ccclass, property } = cc._decorator;
- @ccclass
- class playerActionMgr {
- private _gunHeadPos: any;
- /**
- *
- * @param spine 目标spine
- * @param npcID 玩家的唯一ID
- * @param wqID 武器ID (在捡到武器时或者切换武器时就需要传)
- * @param loop 是否循环
- */
- public playAttackAnim(spine: sp.Skeleton, npcID: number, loop, wqID?: number, cb?) {
- let animName = npcHelper.getModelAttrByID(npcID).attAct
- let newAnimName = this.getAnimName(animName, npcID, wqID);
- let trackIndex = spine.setAnimation(0, newAnimName, loop);
- if (cb) {
- spine.setTrackCompleteListener(trackIndex, cb);
- }
- }
- /**
- *
- * @param spine 目标spine
- * @param npcID 玩家的唯一ID
- * @param wqID 武器ID (在捡到武器时或者切换武器时就需要传)
- */
- public playStandAnim(spine: sp.Skeleton, npcID: number, loop, wqID?: number) {
- let animName = npcHelper.getModelAttrByID(npcID).idleAct
- let newAnimName = this.getAnimName(animName, npcID, wqID);
- spine.setAnimation(0, newAnimName, loop);
- }
- /**
- *
- * @param spine 目标spine
- * @param npcID 玩家的唯一ID
- * @param wqID 武器ID (在捡到武器时或者切换武器时就需要传)
- */
- public playWallAnim(spine: sp.Skeleton, npcID: number, loop, wqID?: number) {
- let animName = npcHelper.getModelAttrByID(npcID).moveAct;
- let newAnimName = this.getAnimName(animName, npcID, wqID);
- spine.setAnimation(0, newAnimName, loop);
- }
- /**
- *
- * @param spine 目标spine
- * @param npcID 玩家的唯一ID
- * @param wqID 武器ID (在捡到武器时或者切换武器时就需要传)
- */
- public playDieAnim(spine: sp.Skeleton, npcID: number, loop, wqID?: number) {
- let animName = npcHelper.getModelAttrByID(npcID).dieAct;
- let newAnimName = this.getAnimName(animName, npcID, wqID);
- spine.setAnimation(0, newAnimName, loop);
- }
- /**
- *
- * @param spine 目标spine
- * @param npcID 玩家的唯一ID
- * @param wqID 武器ID (在捡到武器时或者切换武器时就需要传)
- * @param cb 动画播放完后的回调
- */
- public playHitAnim(spine: sp.Skeleton, npcID: number, loop, wqID?: number, cb?) {
- let animName = npcHelper.getModelAttrByID(npcID).hitAct;
- let newAnimName = this.getAnimName(animName, npcID, wqID);
- let trackIndex = spine.setAnimation(0, newAnimName, loop);
- if (cb) {
- spine.setTrackCompleteListener(trackIndex, cb);
- }
- }
- AimZombie(spineNode: cc.Node, targetNode: cc.Node, wqID: number) {
- let boneName: string = '';
- let MuzzleName = '';
- let weaName: string = itemDtManager.getDataByID(wqID).anmiName;
- let fireEffNode = spineNode.getChildByName('fire1')
- if (weaName.indexOf('gunb_') >= 0) {
- boneName = 'GUNB_HR_BBGun';
- MuzzleName = 'txgunb';
- } else if (weaName.indexOf('guna_') >= 0) {
- boneName = 'GUNA_HM_CatGun'; //获取骨骼名字
- MuzzleName = 'txguna';
- }
- // setTimeout(() => {
- let Muzzle = undefined;
- let skeleton = spineNode.getComponent(sp.Skeleton);
- if (skeleton) {
- Muzzle = spineNode.getComponent(sp.Skeleton).findBone(MuzzleName); //枪口骨骼
- if (Muzzle) {
- let bulletPos = cc.v2(Muzzle.worldX * spineNode.scaleX, Muzzle.worldY);
- this._gunHeadPos = spineNode.parent.convertToWorldSpaceAR(bulletPos);
- let worldPos = cc.v2(Muzzle.worldX, Muzzle.worldY);
- fireEffNode.setPosition(worldPos.x, worldPos.y) //设置发射特效位置
- }
- //吴京枪口 相关特殊处理
- let wujingBoneName = 'gun_gatlinmg2';
- let wujingRotationName = 'gun_gatlinmg';
- let wujingBone = spineNode.getComponent(sp.Skeleton).findBone(wujingBoneName);
- if (wujingBone) {
- let bulletPos = cc.v2(wujingBone.worldX * spineNode.scaleX, wujingBone.worldY);
- this._gunHeadPos = spineNode.parent.convertToWorldSpaceAR(bulletPos);
- let worldPos = cc.v2(wujingBone.worldX, wujingBone.worldY);
- fireEffNode.setPosition(worldPos.x, worldPos.y) //设置发射特效位置
- }
- if (spineNode.getComponent(sp.Skeleton).findBone(wujingRotationName)) {
- boneName = wujingRotationName;
- }
- let gunBone = spineNode.getComponent(sp.Skeleton).findBone(boneName);
- if (gunBone) {
- let startNode = spineNode.parent.convertToWorldSpaceAR(cc.v2(spineNode.x, spineNode.y));
- let endNode = targetNode.parent.convertToNodeSpaceAR(cc.v2(targetNode.x, targetNode.y));
- let sub = startNode.sub(endNode);
- let comVec = cc.v2(0, -1); //以X轴正方向为基准线
- let radian = sub.signAngle(comVec); //弧度
- let angle = Math.floor(cc.misc.radiansToDegrees(radian)); //弧度转角度
- gunBone.rotation = -spineNode.scaleX * angle;
- fireEffNode.angle = gunBone.rotation - 90;
- }
- }
- // }, 0.02);
- }
- getGunHeadPos() {
- if (this._gunHeadPos) {
- return this._gunHeadPos;
- }
- }
- /**枪支角度重置
- * @param spineNode spine所在节点
- * @param wqID 武器视图id
- */
- resetGun(spineNode: cc.Node, wqID: number) {
- let boneName: string = '';
- let weaName: string = itemDtManager.getDataByID(wqID).anmiName;
- if (weaName.indexOf('gunb_') >= 0) {
- boneName = 'GUNB_HR_BBGun';
- } else if (weaName.indexOf('guna_') >= 0) {
- boneName = 'GUNA_HM_CatGun'; //获取骨骼名字
- }
- //吴京英雄枪 特殊处理
- let wujingRotationName = 'gun_gatlinmg';
- if (spineNode.getComponent(sp.Skeleton).findBone(wujingRotationName)) {
- boneName = wujingRotationName;
- }
- let gunBone = spineNode.getComponent(sp.Skeleton).findBone(boneName);
- if (!gunBone) {
- return;
- }
- gunBone.rotation = 90;
- let fireEffNode = spineNode.getChildByName('fire1')
- fireEffNode.angle = gunBone.rotation - 90;
- }
- /**
- *
- * @param spine 目标spine
- * @param npcID 玩家的唯一ID
- */
- public setSkin(spine, npcID: number) {
- let skinName = npcHelper.getModelAttrByID(npcID).modelname;
- spine.setSkin(skinName);
- }
- private getAnimName(animName: string, npcID: number, wqID: number) {
- let nameArr = animName.split(","); //切割动作名称
- let random = Utils.random(0, nameArr.length - 1); //随机取一个名字
- let wqName = wqID ? itemDtManager.getItemName(wqID) : null;
- let itemName = wqName ? wqName : this.getdefaultWqNameByNpcId(npcID);
- if (npcID >= 49 && npcID <= 52) {
- return nameArr[random];
- }
- let newName = '1fist/' + nameArr[random]; //itemName为空 表示空手动画
- if (itemName) {
- newName = itemName + "/" + nameArr[random];
- }
- return newName;
- }
- //获取初始玩家的武器名字 null为空手
- public getdefaultWqNameByNpcId(npcId) {
- let itemDt = npcHelper.getItemByID(npcId);
- if (itemDt == undefined) {
- return null;
- }
- let Wqname = itemDt.anmiName;
- if (Wqname == 0) {
- return null;
- }
- return Wqname;
- }
- }
- export default new playerActionMgr();
|