//
// 碰撞交互逻辑处理
// 碰撞到人 ，传感器 会 顶牌子
// 和 人类[tags分类] 交互
// ColliderTrigger 的 自定义事件 绑定
// 参考 7-11行代码

// tags判定
// 参考20 - 26 行代码

// onDestroy() 生命周期的处理 -- 重要
// 参考 84行

// 静态图片资源加载
// 参考 67行

class Scanner extends THING.Component {
  onStart() {
    // 绑定触发 的一些自定义事件
    const ct = this.object.colliderTrigger
    if (ct) {
      ct.addEnterEvt(this.enter.bind(this))
      ct.addExitEvt(this.exit.bind(this))
    }
  }

  /**
   * 这里用来 检查 和 自身碰撞的对象， tags是不是 Human （人类） ，是人类才可以触发红外功能
   * @returns
   */
  _tagsCheck(obj) {
    if (Array.isArray(obj.tags)) {
      return obj.tags.includes('Human')
    } else {
      return obj.tags === 'Human'
    }
  }
  enter(e) {
    if (!this._tagsCheck(e.object)) {
      return
    }
    // 如果是人类，就调用他的 碰撞触发器
    e.object.colliderTrigger &&
      e.object.colliderTrigger.passiveEnter({ object: this.object })

    // 弹个牌子
    this.showMarker('检测到人员进入')

    // 避免 这个人类突然消失，造成顶牌一直 不消失的情况
    e.object.on(THING.EventType.BeforeDestroy, (e1) => {
      if (e.object === e1.object) this.exit(e)
    })
  }
  exit(e) {
    if (!this._tagsCheck(e.object)) {
      return
    }
    // 主角 离开 牌子也消失
    this.object && this.object.uIPanel && this.object.uIPanel.hide()
    // 通知 主角 - 可能 主角需要 回调 做一些事情
    e.object.colliderTrigger &&
      e.object.colliderTrigger.passiveExit({ object: this.object })
  }

  //弹出个牌子
  showMarker(label) {
    const param = {
      name: label,
      description: this._nowTime(),
      time: '',
      price: '',
      imgSrc:
        this.getPrefabRootObject().resource.url + '/images/hyh_car_icon.svg',
      isAlarm: false,
      bubbleHeight: 1,
      outputs: [],
    }
    this.object.uIPanel.show(param)

    //  秒后通过
    this.inter = setTimeout(() => {
      this.object.uIPanel.hide()
    }, 2 * 1000)
  }

  /**
   * 一定记得onDestroy() ，物体被删除的必要处理
   */
  onDestroy() {
    this.inter && clearTimeout(this.inter)
  }
  _nowTime() {
    const DateIn = new Date()
    const Year = DateIn.getFullYear() //年
    const Month = DateIn.getMonth() + 1 //月
    const Day = DateIn.getDate() //日
    const Hour = DateIn.getHours() //时
    const Minute = DateIn.getMinutes() //分
    return `${Year}/${Month}/${Day} ${Hour}:${Minute}`
  }
}
