15bb36ce702430379830fc326ef5f50b0caa01f1.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706
  1. System.register(["__unresolved_0", "cc", "__unresolved_1", "__unresolved_2", "__unresolved_3", "__unresolved_4", "__unresolved_5", "__unresolved_6", "__unresolved_7", "__unresolved_8"], function (_export, _context) {
  2. "use strict";
  3. var _reporterNs, _cclegacy, __checkObsolete__, __checkObsoleteInNamespace__, _decorator, Node, Vec3, ProgressBar, UIOpacity, tween, Label, PhysicsSystem, geometry, NodeSpace, Quat, easing, SkeletalAnimation, ResUtil, PoolManager, Game, Utils, Player, BaseExp, userIns, GunBase, _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _crd, ccclass, property, Enemy;
  4. function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
  5. function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
  6. function _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }
  7. function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
  8. function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'transform-class-properties is enabled and runs after the decorators transform.'); }
  9. function _reportPossibleCrUseOfResUtil(extras) {
  10. _reporterNs.report("ResUtil", "../../utils/ResUtil", _context.meta, extras);
  11. }
  12. function _reportPossibleCrUseOfPoolManager(extras) {
  13. _reporterNs.report("PoolManager", "../../core/manager/PoolManager", _context.meta, extras);
  14. }
  15. function _reportPossibleCrUseOfGame(extras) {
  16. _reporterNs.report("Game", "../../game/Game", _context.meta, extras);
  17. }
  18. function _reportPossibleCrUseOfUtils(extras) {
  19. _reporterNs.report("Utils", "../../utils/Utils", _context.meta, extras);
  20. }
  21. function _reportPossibleCrUseOfPlayer(extras) {
  22. _reporterNs.report("Player", "../player/Player", _context.meta, extras);
  23. }
  24. function _reportPossibleCrUseOfBaseExp(extras) {
  25. _reporterNs.report("BaseExp", "../../core/base/BaseExp", _context.meta, extras);
  26. }
  27. function _reportPossibleCrUseOfuserIns(extras) {
  28. _reporterNs.report("userIns", "../../data/UserData", _context.meta, extras);
  29. }
  30. function _reportPossibleCrUseOfGunBase(extras) {
  31. _reporterNs.report("GunBase", "../base/GunBase", _context.meta, extras);
  32. }
  33. return {
  34. setters: [function (_unresolved_) {
  35. _reporterNs = _unresolved_;
  36. }, function (_cc) {
  37. _cclegacy = _cc.cclegacy;
  38. __checkObsolete__ = _cc.__checkObsolete__;
  39. __checkObsoleteInNamespace__ = _cc.__checkObsoleteInNamespace__;
  40. _decorator = _cc._decorator;
  41. Node = _cc.Node;
  42. Vec3 = _cc.Vec3;
  43. ProgressBar = _cc.ProgressBar;
  44. UIOpacity = _cc.UIOpacity;
  45. tween = _cc.tween;
  46. Label = _cc.Label;
  47. PhysicsSystem = _cc.PhysicsSystem;
  48. geometry = _cc.geometry;
  49. NodeSpace = _cc.NodeSpace;
  50. Quat = _cc.Quat;
  51. easing = _cc.easing;
  52. SkeletalAnimation = _cc.SkeletalAnimation;
  53. }, function (_unresolved_2) {
  54. ResUtil = _unresolved_2.ResUtil;
  55. }, function (_unresolved_3) {
  56. PoolManager = _unresolved_3.PoolManager;
  57. }, function (_unresolved_4) {
  58. Game = _unresolved_4.Game;
  59. }, function (_unresolved_5) {
  60. Utils = _unresolved_5.Utils;
  61. }, function (_unresolved_6) {
  62. Player = _unresolved_6.Player;
  63. }, function (_unresolved_7) {
  64. BaseExp = _unresolved_7.BaseExp;
  65. }, function (_unresolved_8) {
  66. userIns = _unresolved_8.userIns;
  67. }, function (_unresolved_9) {
  68. GunBase = _unresolved_9.GunBase;
  69. }],
  70. execute: function () {
  71. _crd = true;
  72. _cclegacy._RF.push({}, "5abcfOgUyRGS6wKMns5W55C", "Enemy", undefined);
  73. __checkObsolete__(['_decorator', 'Component', 'Node', 'Tween', 'Vec3', 'ProgressBar', 'UIOpacity', 'tween', 'Label', 'PhysicsSystem', 'geometry', 'NodeSpace', 'Quat', 'easing', 'SkeletalAnimation']);
  74. ({
  75. ccclass,
  76. property
  77. } = _decorator);
  78. _export("Enemy", Enemy = (_dec = ccclass('Enemy'), _dec2 = property({
  79. type: Node,
  80. tooltip: "展示敌人的节点"
  81. }), _dec3 = property({
  82. type: ProgressBar,
  83. tooltip: "敌人血量"
  84. }), _dec4 = property({
  85. type: Node,
  86. tooltip: "创建枪的位置"
  87. }), _dec5 = property({
  88. type: Node,
  89. tooltip: "创建盾牌的位置"
  90. }), _dec6 = property({
  91. type: Node,
  92. tooltip: "敌人受伤节点"
  93. }), _dec7 = property({
  94. type: SkeletalAnimation,
  95. tooltip: "人物动画节点"
  96. }), _dec(_class = (_class2 = class Enemy extends (_crd && BaseExp === void 0 ? (_reportPossibleCrUseOfBaseExp({
  97. error: Error()
  98. }), BaseExp) : BaseExp) {
  99. constructor() {
  100. super(...arguments);
  101. _initializerDefineProperty(this, "enemyNode", _descriptor, this);
  102. _initializerDefineProperty(this, "hpBar", _descriptor2, this);
  103. _initializerDefineProperty(this, "gun_pos", _descriptor3, this);
  104. _initializerDefineProperty(this, "shieldPos", _descriptor4, this);
  105. _initializerDefineProperty(this, "hurtNumNode", _descriptor5, this);
  106. _initializerDefineProperty(this, "skeletalAnim", _descriptor6, this);
  107. this.oTween = void 0;
  108. //敌人透明变化
  109. this.defaultSpeed = 0;
  110. this.speed = 0;
  111. this.isDead = false;
  112. //拥有的枪
  113. this.gun = null;
  114. //拥有的盾可以是空
  115. this.shield = null;
  116. //当前金币的值
  117. this.goldCount = 0;
  118. //敌人行走的路径
  119. this.pathList = [];
  120. //玩家
  121. this.player = null;
  122. //运动方向
  123. this.moveDir = new Vec3();
  124. //设置的血量
  125. this.totalHP = 0;
  126. //是否是没打死逃逸
  127. this.escape = false;
  128. //敌人数据
  129. this.data = null;
  130. //是否能锁定攻击对象了
  131. this.isCanLock = false;
  132. //是否是在开火
  133. this.isFire = false;
  134. //枪旋转角度
  135. this.angle = 0;
  136. //新增警戒状态属性
  137. this.isAlert = false;
  138. //附近最近的掩体节点
  139. this.currentCover = null;
  140. }
  141. onLoad() {
  142. this.shieldPos.active = false;
  143. this.gun_pos.active = false;
  144. this.hurtNumNode.active = false;
  145. }
  146. /**
  147. * 初始化数据
  148. */
  149. init(data) {
  150. var _this = this;
  151. return _asyncToGenerator(function* () {
  152. _this.player = (_crd && Game === void 0 ? (_reportPossibleCrUseOfGame({
  153. error: Error()
  154. }), Game) : Game).I.player.getComponent(_crd && Player === void 0 ? (_reportPossibleCrUseOfPlayer({
  155. error: Error()
  156. }), Player) : Player);
  157. _this.isAlert = false;
  158. _this.data = _this.enemyData(data);
  159. _this.isDead = false;
  160. _this.escape = false; //设置血量
  161. _this.totalHP = data.hp; //敌人速度
  162. var s = data.speed * 100;
  163. _this.speed = s;
  164. _this.defaultSpeed = s; //设置枪的数据
  165. yield _this.createGun(); //恢复初始雪条
  166. _this.hpBar.progress = 1;
  167. _this.hpBar.node.active = true;
  168. _this.endFire();
  169. })();
  170. }
  171. /**
  172. * 把武器的参数带到敌人身上
  173. */
  174. enemyData(data) {
  175. if (!data) return; //主武器id
  176. var mainWeaponID = data.enemy_weapon_id_1;
  177. var hp = (_crd && Utils === void 0 ? (_reportPossibleCrUseOfUtils({
  178. error: Error()
  179. }), Utils) : Utils).clone(data).hp;
  180. var gunData = (_crd && userIns === void 0 ? (_reportPossibleCrUseOfuserIns({
  181. error: Error()
  182. }), userIns) : userIns).enemyWeaponTable.find(e => e.id == mainWeaponID); //副武器 盾上的血量
  183. var secondWeaponID = data.enemy_weapon_id_2;
  184. if (secondWeaponID != 0) {
  185. var sData = (_crd && userIns === void 0 ? (_reportPossibleCrUseOfuserIns({
  186. error: Error()
  187. }), userIns) : userIns).enemyWeaponTable.find(e => e.id == secondWeaponID);
  188. if (sData && sData.hp > 0) {
  189. data.hp += hp + sData.shield_hp;
  190. }
  191. }
  192. return Object.assign(data, gunData);
  193. }
  194. /**
  195. * 创建英雄所拥有的枪
  196. */
  197. createGun() {
  198. var _this2 = this;
  199. return _asyncToGenerator(function* () {
  200. _this2.data.bulletSpeed = 750;
  201. _this2.removeGun(); //敌人主武器
  202. var mainWeaponID = _this2.data.enemy_weapon_id_1;
  203. var mData = (_crd && userIns === void 0 ? (_reportPossibleCrUseOfuserIns({
  204. error: Error()
  205. }), userIns) : userIns).enemyWeaponTable.find(e => e.id == mainWeaponID);
  206. var gunNode = yield (_crd && ResUtil === void 0 ? (_reportPossibleCrUseOfResUtil({
  207. error: Error()
  208. }), ResUtil) : ResUtil).loadGunRes("enemy/" + mData.gun_prb_name, _this2.enemyNode);
  209. gunNode.active = true;
  210. gunNode.parent = _this2.node;
  211. gunNode.worldPosition = _this2.gun_pos.worldPosition;
  212. _this2.gun = gunNode.getComponent(_crd && GunBase === void 0 ? (_reportPossibleCrUseOfGunBase({
  213. error: Error()
  214. }), GunBase) : GunBase);
  215. gunNode.eulerAngles = new Vec3(0, -180, 0);
  216. _this2.gun.init(_this2.data, _this2); //敌人附武器
  217. var secondWeaponID = _this2.data.enemy_weapon_id_2;
  218. if (secondWeaponID != 0) {
  219. var sData = (_crd && userIns === void 0 ? (_reportPossibleCrUseOfuserIns({
  220. error: Error()
  221. }), userIns) : userIns).enemyWeaponTable.find(e => e.id == secondWeaponID);
  222. var shieldNode = yield (_crd && ResUtil === void 0 ? (_reportPossibleCrUseOfResUtil({
  223. error: Error()
  224. }), ResUtil) : ResUtil).loadGunRes("enemy/" + sData.gun_prb_name, _this2.enemyNode);
  225. shieldNode.active = true;
  226. shieldNode.parent = _this2.node;
  227. shieldNode.worldPosition = _this2.shieldPos.worldPosition;
  228. shieldNode.eulerAngles = new Vec3(0, -180, 0);
  229. _this2.shield = gunNode.getComponent(_crd && GunBase === void 0 ? (_reportPossibleCrUseOfGunBase({
  230. error: Error()
  231. }), GunBase) : GunBase);
  232. _this2.shield.init(_this2.data, _this2);
  233. }
  234. })();
  235. }
  236. /**
  237. * 移除枪回收武器的时候调用
  238. */
  239. removeGun() {
  240. if (this.gun) {
  241. this.gun.endFire();
  242. (_crd && PoolManager === void 0 ? (_reportPossibleCrUseOfPoolManager({
  243. error: Error()
  244. }), PoolManager) : PoolManager).putNode(this.gun.node);
  245. this.gun = null;
  246. }
  247. if (this.shield) {
  248. (_crd && PoolManager === void 0 ? (_reportPossibleCrUseOfPoolManager({
  249. error: Error()
  250. }), PoolManager) : PoolManager).putNode(this.shield.node);
  251. this.shield = null;
  252. }
  253. this.isFire = false;
  254. }
  255. /**
  256. * 扣掉血
  257. * @param hp 血
  258. * @param pData 英雄数据
  259. */
  260. subHP(hp, pData) {
  261. if ((_crd && Game === void 0 ? (_reportPossibleCrUseOfGame({
  262. error: Error()
  263. }), Game) : Game).I.isPause || this.isDead || hp == null || this.totalHP <= 0) {
  264. return;
  265. }
  266. this.totalHP -= hp; //这种是伤害超级高直接死亡了
  267. if (hp > this.totalHP) {
  268. this.escape = false;
  269. this.showHurt((_crd && Utils === void 0 ? (_reportPossibleCrUseOfUtils({
  270. error: Error()
  271. }), Utils) : Utils).numberToString(hp));
  272. this.recycle();
  273. return;
  274. } //敌人死亡
  275. if (this.totalHP <= 0 && !this.isDead) {
  276. //audioMgr.playDieAudios();
  277. this.escape = false;
  278. this.recycle();
  279. } else {
  280. //进度条和单独扣血
  281. this.hpBar.progress = this.totalHP / this.data.hp;
  282. this.showHurt((_crd && Utils === void 0 ? (_reportPossibleCrUseOfUtils({
  283. error: Error()
  284. }), Utils) : Utils).numberToString(hp));
  285. }
  286. }
  287. /**
  288. * 开始敌人移动,面向玩家行走
  289. */
  290. walk() {
  291. if (this.isDead || !this.player) return;
  292. if (!this.isAlert) {
  293. var playerPos = this.player.node.getWorldPosition();
  294. var enemyPos = this.node.getWorldPosition(); //创建射线对象修复类型错误
  295. var ray = new geometry.Ray();
  296. ray.o = enemyPos;
  297. ray.d = playerPos.subtract(enemyPos).normalize(); //修正物理检测参数
  298. if (PhysicsSystem.instance.raycast(ray, 1 << 0, 2)) {
  299. var randomDir = Math.random() > 0.5 ? 1 : -1; //修改为正确的参数格式
  300. var quat = new Quat();
  301. Quat.fromAxisAngle(quat, Vec3.UP, 45 * randomDir * Math.PI / 180);
  302. this.node.rotate(quat, NodeSpace.WORLD);
  303. } //this.skeletalAnim.play("walk");
  304. //使用定时器持续移动
  305. this.schedule(() => {
  306. var distance = Vec3.distance(this.node.worldPosition, (_crd && Game === void 0 ? (_reportPossibleCrUseOfGame({
  307. error: Error()
  308. }), Game) : Game).I.buildEnemys.ambush.worldPosition);
  309. if (distance < 10) {
  310. this.isAlert = true;
  311. this.walk();
  312. return;
  313. }
  314. var moveVec = this.node.forward.negative().multiplyScalar(this.speed * 0.016);
  315. this.node.position = this.node.position.add(moveVec);
  316. }, 0.1);
  317. } else if (!this.currentCover) {
  318. var nearestCover = this.findNearestCover();
  319. if (nearestCover) {
  320. this.currentCover = nearestCover; //生成Z轴随机偏移(-18到+18)
  321. var targetPos = nearestCover.worldPosition.clone();
  322. targetPos.z += Math.random() * 36 - 18; //移动到掩体位置 直接使用缓动动画移动到掩体
  323. tween(this.node).to(2, {
  324. worldPosition: targetPos
  325. }, {
  326. easing: easing.quadOut,
  327. onStart: () => {
  328. this.speed = this.defaultSpeed * 1.5; //加速移动
  329. },
  330. onComplete: () => {
  331. //this.skeletalAnim.play("stand_idle0");
  332. this.beginFire(); //到达后开始攻击
  333. this.currentCover = nearestCover;
  334. }
  335. }).start();
  336. }
  337. }
  338. }
  339. /**
  340. * 寻找最近的掩体节点
  341. */
  342. findNearestCover() {
  343. var minDistance = Infinity;
  344. var nearestCover = null; //假设掩体节点存放在
  345. (_crd && Game === void 0 ? (_reportPossibleCrUseOfGame({
  346. error: Error()
  347. }), Game) : Game).I.buildEnemys.crossover.children.forEach(cover => {
  348. var distance = Vec3.distance(this.node.position, cover.position);
  349. if (distance < minDistance) {
  350. minDistance = distance;
  351. nearestCover = cover;
  352. }
  353. });
  354. return nearestCover;
  355. }
  356. /**
  357. * 开始攻击
  358. */
  359. beginFire() {
  360. if (this.player != null && !this.player.isDead && this.gun) {
  361. this.isFire = true;
  362. this.gun.fire();
  363. }
  364. }
  365. /**
  366. * 结束攻击
  367. */
  368. endFire() {
  369. this.gun.endFire();
  370. this.isFire = false;
  371. }
  372. /**
  373. * 回收敌人节点
  374. * @param f 是否是游戏进行中的正常回收 程序主动回收不参数个数统计和加分这些
  375. * @returns
  376. */
  377. recycle(f) {
  378. if (f === void 0) {
  379. f = true;
  380. }
  381. if (!this.node || this.isDead) {
  382. return;
  383. }
  384. ;
  385. this.removeGun();
  386. this.totalHP = 0;
  387. this.isDead = true;
  388. this.hpBar.node.active = false;
  389. var death = function (inite) {
  390. this.node.getComponent(UIOpacity).opacity = 255;
  391. (_crd && PoolManager === void 0 ? (_reportPossibleCrUseOfPoolManager({
  392. error: Error()
  393. }), PoolManager) : PoolManager).putNode(this.node);
  394. if (inite) {
  395. (_crd && Game === void 0 ? (_reportPossibleCrUseOfGame({
  396. error: Error()
  397. }), Game) : Game).I.buildEnemys.subtractEnemy(this);
  398. }
  399. }.bind(this, f);
  400. if (this.oTween) {
  401. var _this$oTween;
  402. (_this$oTween = this.oTween) == null || _this$oTween.stop();
  403. }
  404. ;
  405. if (f) {
  406. //修改透明度
  407. var op = this.node.getComponent(UIOpacity);
  408. this.oTween = tween(op).delay(0.4).to(0.15, {
  409. opacity: 0
  410. }).call(() => {
  411. death();
  412. }).start();
  413. } else {
  414. death();
  415. }
  416. }
  417. /**
  418. * 展示敌人受到的伤害
  419. * @param hpStr
  420. */
  421. showHurt(hpStr) {
  422. if ((_crd && Game === void 0 ? (_reportPossibleCrUseOfGame({
  423. error: Error()
  424. }), Game) : Game).I.isGameOver || this.isDead) return; //创建3D伤害数字
  425. var n = (_crd && PoolManager === void 0 ? (_reportPossibleCrUseOfPoolManager({
  426. error: Error()
  427. }), PoolManager) : PoolManager).getNode(this.hurtNumNode, this.hurtNumNode.parent);
  428. n.getComponent(Label).string = hpStr;
  429. var oPos = this.hpBar.node.position.clone();
  430. n.position = oPos;
  431. var oScale = this.hurtNumNode.scale.clone();
  432. n.scale = oScale;
  433. n.getComponent(UIOpacity).opacity = 255;
  434. var bezier = [];
  435. var num = 100;
  436. var forward = (_crd && Utils === void 0 ? (_reportPossibleCrUseOfUtils({
  437. error: Error()
  438. }), Utils) : Utils).getRandomFloat(0, 1) > 0.5;
  439. if (forward) {
  440. bezier = [new Vec3(-(10 / num) + oPos.x, 30 / num + oPos.y), new Vec3(-40 / num + oPos.x, 40 / num + oPos.y), new Vec3(-60 / num + oPos.x, oPos.y)];
  441. } else {
  442. bezier = [new Vec3(10 / num + oPos.x, 30 / num + oPos.y), new Vec3(40 / num + oPos.x, 40 / num + oPos.y), new Vec3(60 / num + oPos.x, oPos.y)];
  443. }
  444. n.position = new Vec3(bezier[2].x, bezier[2].y - 80 / num, oPos.z); //贝塞尔曲线坐标函数
  445. var twoBezier = (t, p1, cp, p2) => {
  446. var x = (1 - t) * (1 - t) * p1.x + 2 * t * (1 - t) * cp.x + t * t * p2.x;
  447. var y = (1 - t) * (1 - t) * p1.y + 2 * t * (1 - t) * cp.y + t * t * p2.y;
  448. return new Vec3(x, y, oPos.z);
  449. };
  450. var time = 0.65;
  451. tween(n).parallel(tween().to(time, {
  452. scale: new Vec3(oScale.x * 0.4, oScale.y * 0.4, oScale.z * 0.4)
  453. }), tween().to(time, bezier[2], {
  454. onUpdate: (target, ratio) => {
  455. if (n.parent) {
  456. var pos = twoBezier(ratio, bezier[0], bezier[1], bezier[2]);
  457. n.position = new Vec3(pos.x, pos.y - 80 / num, oPos.z);
  458. }
  459. }
  460. })).call(function () {
  461. tween(this.getComponent(UIOpacity)).to(0.15, {
  462. opacity: 0
  463. }).call(() => {
  464. (_crd && PoolManager === void 0 ? (_reportPossibleCrUseOfPoolManager({
  465. error: Error()
  466. }), PoolManager) : PoolManager).putNode(this);
  467. }).start();
  468. }.bind(n)).start();
  469. }
  470. /**
  471. * 计算是否命中玩家
  472. * @returns 返回命中状态
  473. */
  474. calculateIsHit() {
  475. var isGuaranteedHit = false; //获取射击的精准度
  476. var data = this.getDifficultyData(); //生成0-1随机数用于命中判定 根据precision范围确定命中逻辑
  477. var random = Math.random();
  478. if (data.precision < 0) {
  479. //负值100%不命中
  480. isGuaranteedHit = false;
  481. } else if (data.precision > 1) {
  482. //超过1 100%命中
  483. isGuaranteedHit = true;
  484. } else {
  485. //正常范围:随机判定
  486. isGuaranteedHit = random <= data.precision;
  487. }
  488. return isGuaranteedHit;
  489. }
  490. /**
  491. * 轻松杀敌增加游戏难度 只有单其他附加因素 例如:连杀等叠加状态 给敌人增加血
  492. */
  493. addDiffHP() {
  494. if (!this.node || this.isDead || (_crd && Game === void 0 ? (_reportPossibleCrUseOfGame({
  495. error: Error()
  496. }), Game) : Game).I.isGameOver || this.isDead) {
  497. return;
  498. }
  499. ;
  500. var data = this.getDifficultyData();
  501. if (data.hp_ratio > 0) {
  502. this.totalHP = this.data.hp * (1 + data.hp_ratio);
  503. }
  504. }
  505. /**
  506. * 敌人的射击的精准度 获得难度数据
  507. */
  508. getDifficultyData() {
  509. //获取基础精准度(玩家预设值)
  510. var precision = (_crd && userIns === void 0 ? (_reportPossibleCrUseOfuserIns({
  511. error: Error()
  512. }), userIns) : userIns).getCurLevelData().precision;
  513. var diff = {
  514. precision: precision,
  515. //增加或减少的精准度 0-100%
  516. hp_ratio: 0,
  517. //增加或减少的血量 0-100%
  518. reaction_time: 0 //增加或减少的反应时间 0-100%
  519. };
  520. var each = Math.floor((_crd && Game === void 0 ? (_reportPossibleCrUseOfGame({
  521. error: Error()
  522. }), Game) : Game).I.buildEnemys.getCurKillNum() / 3); //连杀3个敌人的次数 AI精准度增加1%
  523. diff.precision += each * 0.01;
  524. if ((_crd && userIns === void 0 ? (_reportPossibleCrUseOfuserIns({
  525. error: Error()
  526. }), userIns) : userIns).isContinuePass) {
  527. //1、连续通关 AI生命值增加15% 精准度增加1%
  528. diff.hp_ratio += 0.15;
  529. diff.precision += 0.01;
  530. } else {
  531. //2、通关失败 下一局 AI精准度下降5% AI反应时间增加0.5s
  532. diff.precision -= 0.05;
  533. diff.reaction_time += 0.5;
  534. }
  535. return diff;
  536. }
  537. }, (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "enemyNode", [_dec2], {
  538. configurable: true,
  539. enumerable: true,
  540. writable: true,
  541. initializer: function initializer() {
  542. return null;
  543. }
  544. }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "hpBar", [_dec3], {
  545. configurable: true,
  546. enumerable: true,
  547. writable: true,
  548. initializer: function initializer() {
  549. return null;
  550. }
  551. }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "gun_pos", [_dec4], {
  552. configurable: true,
  553. enumerable: true,
  554. writable: true,
  555. initializer: function initializer() {
  556. return null;
  557. }
  558. }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "shieldPos", [_dec5], {
  559. configurable: true,
  560. enumerable: true,
  561. writable: true,
  562. initializer: function initializer() {
  563. return null;
  564. }
  565. }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "hurtNumNode", [_dec6], {
  566. configurable: true,
  567. enumerable: true,
  568. writable: true,
  569. initializer: function initializer() {
  570. return null;
  571. }
  572. }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "skeletalAnim", [_dec7], {
  573. configurable: true,
  574. enumerable: true,
  575. writable: true,
  576. initializer: function initializer() {
  577. return null;
  578. }
  579. })), _class2)) || _class));
  580. _cclegacy._RF.pop();
  581. _crd = false;
  582. }
  583. };
  584. });
  585. //# sourceMappingURL=15bb36ce702430379830fc326ef5f50b0caa01f1.js.map