uiMiniMap.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { EVENT_TYPE } from "../../../gameLogic/utrl/gameEnum";
  2. import gameEventManager from "../../../gameLogic/utrl/gameEventManager";
  3. const { ccclass, property } = cc._decorator;
  4. /**ui迷你地图 */
  5. @ccclass
  6. export default class UiMiniMap extends cc.Component {
  7. /**地图图片组 */
  8. @property(cc.SpriteFrame)
  9. maps: cc.SpriteFrame[] = [];
  10. /**地图背景 */
  11. @property(cc.Sprite)
  12. view: cc.Sprite = null;
  13. /**当前地图外框节点 */
  14. private cur_map_frame: cc.Node = null;
  15. onEnable() {
  16. gameEventManager.on(EVENT_TYPE.refresh_mini_map, this.setBg, this);
  17. gameEventManager.on(EVENT_TYPE.refresh_mini_map_pos, this.setPos, this);
  18. }
  19. onDisable() {
  20. gameEventManager.off(EVENT_TYPE.refresh_mini_map, this.setBg, this);
  21. gameEventManager.off(EVENT_TYPE.refresh_mini_map_pos, this.setPos, this);
  22. }
  23. /**初始化
  24. * @param level 关卡
  25. * @param frame 地图外框节点
  26. */
  27. private setBg(level: number, frame: cc.Node) {
  28. this.view.spriteFrame = this.maps[level];
  29. this.cur_map_frame = frame;
  30. }
  31. /**设置位置点
  32. * @param pos 玩家位置
  33. */
  34. private setPos(pos: cc.Vec3) {
  35. if (!this.node.active) return;
  36. let rp = pos.sub(this.cur_map_frame.position);
  37. let sx = -rp.x / this.cur_map_frame.width;
  38. let sy = -rp.y / this.cur_map_frame.height;
  39. this.view.node.x = this.view.node.width * sx;
  40. this.view.node.y = this.view.node.height * sy;
  41. }
  42. }