PlayerMovement2D.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { _decorator, director, find, renderer, Sprite, Vec3 } from 'cc';
  2. import { GameEvent, GameMgr } from '../../module_basic/scripts/GameMgr';
  3. import { IGamePlayer } from '../../module_basic/shared/protocols/public/game/GameTypeDef';
  4. import { ExtraNode, NodeUtils } from '../../module_basic/scripts/NodeUtils';
  5. const { ccclass, property } = _decorator;
  6. const tempV3 = new Vec3();
  7. @ccclass('PlayerMovement2D')
  8. export class PlayerMovement2D extends tgx.CharacterMovement2D {
  9. private _tmpSpeedFactor = 1.0;
  10. private _speedUpEndTime = 0;
  11. start(): void {
  12. super.start();
  13. //if player dies, stop movement
  14. //如果玩家死亡,则停止移动
  15. director.on(GameEvent.PLAYER_DIE, this.onPlayerDie,this);
  16. }
  17. onDestroy(): void {
  18. director.off(GameEvent.PLAYER_DIE, this.onPlayerDie,this);
  19. }
  20. onPlayerDie(player:IGamePlayer){
  21. if(player.playerId == GameMgr.inst.selfPlayer.playerId){
  22. this.onMovementStop();
  23. }
  24. }
  25. public tempSpeedUp(factor:number,time:number){
  26. this._tmpSpeedFactor = factor;
  27. this._speedUpEndTime = Date.now() + time;
  28. }
  29. onMovement(degree, strengthen){
  30. if(GameMgr.inst.selfPlayer.reviveTime > 0 || GameMgr.inst.gameData.gameState != 'playing'){
  31. return;
  32. }
  33. super.onMovement(degree,1.0);
  34. }
  35. onMovementStop(): void {
  36. }
  37. getRealSpeed(){
  38. return super.getRealSpeed() * this._tmpSpeedFactor;
  39. }
  40. update(deltaTime: number): void {
  41. super.update(deltaTime);
  42. if(this.getRealSpeed() > 0 && GameMgr.inst.gameData){
  43. NodeUtils.clampInMapBoundary(this.node as ExtraNode);
  44. }
  45. if(this._speedUpEndTime > 0 && Date.now() >= this._speedUpEndTime){
  46. this._tmpSpeedFactor = 1.0;
  47. this._speedUpEndTime = 0;
  48. }
  49. }
  50. }