123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import { _decorator, Component, find, instantiate, Node, Prefab, Quat, v2 } from 'cc';
- import { GameAudioMgr } from './GameAudioMgr';
- import { Cell } from './Cell';
- import { IGamePlayer } from '../../module_basic/shared/protocols/public/game/GameTypeDef';
- import { GameMgr } from '../../module_basic/scripts/GameMgr';
- import { CellMgr, CellType } from './CellMgr';
- import { GameResMgr } from './GameResMgr';
- const { ccclass, property } = _decorator;
- @ccclass('CellBullet')
- export class CellBullet extends Component {
- @property
- moveSpeed: number = 400;
- @property
- lifeTime: number = 3000;
- /**
- * @en the bullet belongs to which player
- * @zh 子弹所属的玩家 id
- */
- player: IGamePlayer;
- damage: number = 10;
- private _lifeStart = 0;
- private _moveDir = v2();
- public set moveDir(v) {
- this._moveDir.set(v);
- }
- start() {
- this._lifeStart = Date.now();
- this.damage = Math.floor(Math.random() * 15 + 10);
- }
- update(deltaTime: number) {
- if (this._lifeStart + this.lifeTime < Date.now()) {
- this.lifeEnd();
- return;
- }
- let dist = this.moveSpeed * deltaTime;
- let dx = this._moveDir.x * dist;
- let dy = this._moveDir.y * dist;
- let pos = this.node.position;
- this.node.setPosition(pos.x + dx, pos.y + dy, pos.z);
- }
- lifeEnd() {
- this.node.destroy();
- }
- protected lateUpdate(dt: number): void {
- const tankBodyRadius = 50;
- let cellList = CellMgr.inst.cellList;
- for (let i = 0; i < cellList.length; i++) {
- let cell = cellList[i] as CellType;
- let bp = this.node.worldPosition;
- let tp = cell.node.worldPosition;
- let dx = bp.x - tp.x;
- let dy = bp.y - tp.y;
- if (dx * dx + dy * dy < tankBodyRadius * tankBodyRadius) {
- if(this.player != cell.player){
- this.lifeEnd();
- }
- /**
- * @en if this bullet belongs to other player, then this.player is null, no damage calculation
- * @zh 如果是其他玩家的子弹,this.player 为 null,不做伤害计算
- */
- if (this.player && this.player.color != cell.player.color) {
- //cell.beAttack(this.player.playerId, this.damage, this.node.worldPosition);
- }
- break;
- }
- }
- }
- }
|