UserHead.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import { gameMethod } from "../../../common/gameMethod";
  2. import GameDataCenter from "../../../data/GameDataCenter";
  3. import { HeadBgType } from "../../../data/const/TypeConst";
  4. import { UserInfo } from "../../../data/model/User/UserModelData";
  5. import ResSprite from "../../../frameWork/compment/ResSprite";
  6. import FguiLoadMgr from "../../../frameWork/fgui/FguiLoadMgr";
  7. import ClickAuEffect from "../../../utils/ClickAuEffect";
  8. export default class UserHead extends fgui.GComponent {
  9. uuid: string;
  10. lookDetails: boolean;
  11. touchStart: number;
  12. setData(url: string) {
  13. this.getChild("ZheZhao").visible = true;
  14. if (!gameMethod.isEmpty(url) && url.indexOf('http') >= 0) {
  15. //加载远程头像
  16. if (this.uuid && this.uuid == GameDataCenter.user.uuid && !gameMethod.isEmpty(GameDataCenter.user.wxHeadAsset)) {
  17. let spriteCom = this.getChild("ZheZhao").asCom.getChild("HeadImg").node.getComponent(cc.Sprite);
  18. if (gameMethod.isEmpty(spriteCom)) {
  19. spriteCom = this.getChild("ZheZhao").asCom.getChild("HeadImg").node.addComponent(cc.Sprite);
  20. }
  21. this.getChild("ZheZhao").asCom.getChild("HeadImg").asLoader.url = "";
  22. spriteCom.spriteFrame = new cc.SpriteFrame(GameDataCenter.user.wxHeadAsset);
  23. return;
  24. }
  25. cc.assetManager.loadRemote(url, { ext: ".png" }, (err, asset: cc.Texture2D) => {
  26. if (err) {
  27. console.log("err,", err)
  28. return
  29. }
  30. this.getChild("ZheZhao").asCom.getChild("HeadImg").asLoader.url = "";
  31. let spriteCom = this.getChild("ZheZhao").asCom.getChild("HeadImg").node.getComponent(cc.Sprite);
  32. if (gameMethod.isEmpty(spriteCom)) {
  33. spriteCom = this.getChild("ZheZhao").asCom.getChild("HeadImg").node.addComponent(cc.Sprite);
  34. }
  35. spriteCom.spriteFrame = new cc.SpriteFrame(asset);
  36. if (this.uuid && this.uuid == GameDataCenter.user.uuid) {
  37. GameDataCenter.user.saveWxHeadAssets(asset);
  38. }
  39. })
  40. } else if (!gameMethod.isEmpty(url) && url.indexOf('ui://') >= 0) {
  41. //动态加载fgui资源
  42. let bundleName: string = url.split("/")[2];
  43. let spriteCom = this.getChild("ZheZhao").asCom.getChild("HeadImg").node.getComponent(cc.Sprite);
  44. if (!gameMethod.isEmpty(spriteCom)) {
  45. spriteCom.spriteFrame = null;
  46. }
  47. FguiLoadMgr.loadSpriteFormPackage(this.getChild("ZheZhao").asCom.getChild("HeadImg").asLoader, bundleName, bundleName, url);
  48. } else {
  49. if (gameMethod.isEmpty(url)) {
  50. return;
  51. }
  52. //加载bundle资源
  53. let bundleName: string = url?.split("|")[0];
  54. let urlStr: string = url?.split("|")[1];
  55. this.getChild("ZheZhao").asCom.getChild("HeadImg").asLoader.url = "";
  56. GameDataCenter.loading.loadSpriteFormBundle(this.getChild("ZheZhao").asCom.getChild("HeadImg")?.node, bundleName, urlStr);
  57. }
  58. }
  59. protected onEnable(): void {
  60. this.on(fgui.Event.TOUCH_BEGIN, this.onTouchBegin, this);//防止聊天长按也触发按钮效果,所以改用监听触摸短按
  61. this.on(fgui.Event.TOUCH_END, this.onTouchEnd, this);
  62. }
  63. protected onDisable(): void {
  64. this.off(fgui.Event.TOUCH_BEGIN, this.onTouchBegin, this);
  65. this.off(fgui.Event.TOUCH_END, this.onTouchEnd, this);
  66. }
  67. onTouchBegin() {
  68. this.touchStart = new Date().getTime();
  69. }
  70. onTouchEnd() {
  71. let touchTime = new Date().getTime() - this.touchStart;
  72. if (touchTime < 500) {
  73. this.onClickHead();
  74. }
  75. }
  76. setHead(user: { userInfo: UserInfo, headId?: string, colorBg?: HeadBgType, isFlip?: boolean, lookDetails?: boolean }) {
  77. this.uuid = user.userInfo?.uuid;
  78. if (user?.headId) {
  79. this.setData(GameDataCenter.user.GetHeadUrl(user.userInfo?.sex, user.headId));
  80. }
  81. else {
  82. this.setData(GameDataCenter.user.GetHeadUrl(user.userInfo?.sex, user.userInfo?.head, user.userInfo?.wxhead));
  83. }
  84. this.lookDetails = user.lookDetails;
  85. if (user.colorBg) {
  86. this.getController("BgColor").selectedIndex = user.colorBg;
  87. }
  88. else {
  89. this.getController("BgColor").selectedIndex = HeadBgType.red;
  90. }
  91. this.getChild("ZheZhao").asCom.scaleX = user.isFlip && gameMethod.isEmpty(user?.userInfo?.wxhead) ? -1 : 1;
  92. }
  93. @ClickAuEffect()
  94. onClickHead() {
  95. if (gameMethod.isEmpty(this.uuid)) return;
  96. if (this.lookDetails) {
  97. // GameDataCenter.user.sendUserLookFuuidAll(this.uuid);
  98. }
  99. }
  100. SetEmpty() {
  101. this.getChild("ZheZhao").visible = false;
  102. }
  103. }