cc.Class({
  extends: cc.Component,

  properties: {
    pickedUpAnimNode: {
      type: cc.Node,
      default: null
    },
    durationMillis: {
      default: 0 
    },
    binglingAnimNode: {
      type: cc.Node,
      default: null
    },
    binglingAnimDurationMillis: {
      default: 0
    },
    scoreLabelNode: {
      type: cc.Node,
      default: null
    }
  
  },
 

  setData (treasureInfo) {
    const self = this;
    this.score = treasureInfo.score ? treasureInfo.score : 100 ;
    this.type = treasureInfo.type ? treasureInfo.type : 1;
    this.scoreLabelNode.getComponent(cc.Label).string = this.score;
    const spriteComponent = this.pickedUpAnimNode.getComponent(cc.Sprite);
    //hardcode treasurePNG's path.
    cc.loader.loadRes("textures/treasures/"+ this.type, cc.SpriteFrame, function (err, frame) {
      if(err){
        cc.warn(err);
        return;
      }
      spriteComponent.spriteFrame = frame; 
    })
  },
  
  // LIFE-CYCLE CALLBACKS:
  update (dt) {
    const changingNode = this.pickedUpAnimNode; 
    const elapsedMillis = Date.now() - this.startedAtMillis; 
    if(elapsedMillis >= this.binglingAnimDurationMillis && null != this.binglingAnimNode && true == this.binglingAnimNode.active) {
      this.binglingAnimNode.active = false;
      this.startedAtMillis = Date.now();
    }
    if(this.binglingAnimNode.active)
      return;
    if (elapsedMillis > this.durationMillis) {
      this.node.destroy();
      return;
    }
    if (elapsedMillis <= this.firstDurationMillis) {
      let posDiff = cc.v2(0, dt * this.yIncreaseSpeed);
      changingNode.setPosition(changingNode.position.add(posDiff));
      this.scoreLabelNode.setPosition(this.scoreLabelNode.position.add(posDiff));
      changingNode.scale += (this.scaleIncreaseSpeed*dt); 
    } else {
      let posDiff = cc.v2(dt * this.xIncreaseSpeed , ( -1 *dt * this.yDecreaseSpeed));     
      changingNode.setPosition(changingNode.position.add(posDiff));
      this.scoreLabelNode.setPosition(this.scoreLabelNode.position.add(posDiff));
      changingNode.opacity -= dt * this.opacityDegradeSpeed;
      this.scoreLabelNode.opacity -= dt * this.opacityDegradeSpeed;
    }
  },

  onLoad() {
    this.pickedUpAnimNode.scale = 0; 
    this.startedAtMillis = Date.now();

    this.firstDurationMillis = (0.8*this.durationMillis);
    this.yIncreaseSpeed = (200 *1000/this.firstDurationMillis);
    this.scaleIncreaseSpeed = (2 * 1000/this.firstDurationMillis);

    this.scondDurationMillis = (0.2 * this.durationMillis );
    this.opacityDegradeSpeed = (255*1000/this.scondDurationMillis);
    this.yDecreaseSpeed = (30*1000/this.scondDurationMillis);
    this.xIncreaseSpeed = (20*1000/this.scondDurationMillis);
  }
});