GunItem.ts 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { _decorator, Sprite, SpriteFrame,Node, Label, Vec3, EventTouch, easing, tween} from 'cc';
  2. import ListItem from '../../third/ListItem';
  3. import { ResUtil } from '../../utils/ResUtil';
  4. import MsgHints from '../../utils/MsgHints';
  5. const { ccclass, property } = _decorator;
  6. //枪的数据
  7. @ccclass('GunItem')
  8. export class GunItem extends ListItem {
  9. @property({ type: SpriteFrame, tooltip: "解锁的背景" })
  10. public unlock_bg: SpriteFrame;
  11. @property({ type: SpriteFrame, tooltip: "解锁的背景" })
  12. public not_unlock_bg: SpriteFrame;
  13. @property({ type: Sprite, tooltip: "枪的背景图片" })
  14. public gun_bg: Sprite;
  15. @property({ type: Node, tooltip: "枪选中勾选" })
  16. public gou_icon: Node;
  17. @property({ type: Node, tooltip: "枪选中勾选父节点" })
  18. public gou_n: Node;
  19. @property({ type: Node, tooltip: "枪选未解锁图片" })
  20. public lock_n: Node;
  21. @property({ type: Node, tooltip: "设置枪的图片" })
  22. public gun_sp: Node;
  23. @property({ type: Label, tooltip: "枪的名字" })
  24. public gun_name_lable: Label;
  25. public data: any = null;
  26. public cb: Function = null;
  27. public start() {
  28. this.node.on(Node.EventType.TOUCH_START,this.touchStart,this);
  29. //点击查看
  30. this.node.on(Node.EventType.TOUCH_END,()=>{
  31. if(!this.data)return;
  32. if(!this.data.unlocked){
  33. MsgHints.show(`${this.data.name_lang} not unlocked!`);
  34. return;
  35. }
  36. this.cb?.(this.data);
  37. },this);
  38. }
  39. /**
  40. * 点击
  41. */
  42. private touchStart(event: EventTouch) {
  43. if(!this.data) return;
  44. let target: Node = event.target;
  45. tween(target)
  46. .to(0.1, {scale: new Vec3(1.02,1.02,1.02)},{easing: easing.backOut})
  47. .to(0.1, {scale: new Vec3(0.98,0.98,0.98)},{easing: easing.backOut})
  48. .call(() => {
  49. target.scale = new Vec3(1,1,1);
  50. }).start();
  51. }
  52. /**
  53. * 数据填充
  54. * @param data 数据
  55. * @param cb 回调
  56. */
  57. public init(data: any,cb?: Function){
  58. if(!data)return;
  59. this.data = data;
  60. this.cb = cb;
  61. //设置解锁状态 未解锁时显示锁图标
  62. this.lock_n.active = !data.unlocked;
  63. //已解锁时显示勾选父节点
  64. this.gou_n.active = data.unlocked;
  65. //设置枪械背景 根据解锁状态使用不同背景图
  66. this.gun_bg.spriteFrame = data.unlocked ? this.unlock_bg : this.not_unlock_bg;
  67. //枪的图片
  68. const icon: string = data.unlocked ? data.gun_unlock_icon : data.gun_not_unlock_icon;
  69. ResUtil.setSpriteFrame(icon, this.gun_sp);
  70. //设置选中状态(根据当前使用枪械ID判断)
  71. if(data.unlocked){
  72. this.gou_icon.active = data.selected;
  73. }
  74. //枪的名字
  75. this.gun_name_lable.string = data.name_lang;
  76. }
  77. }