Moving and Flying Springs

Version:

3.0

Added on:

06 Mar 2020 17:14

Tags:

Description:
Moving and flying springs, like the ones in JJ1. For the moving spring, just use a regular spring event. (it will work as a red spring no matter what)

The flying one behaves as a butterfly. So put Area IDs to indicate its direction and speed. Please make sure the Keep X option for the spring is checked for this one. Otherwise it won't move.
//moving spring

void onLevelLoad() {

  jjObjectPresets[OBJECT::REDSPRING].xSpeed = 5;
  jjObjectPresets[OBJECT::REDSPRING].scriptedCollisions = true;
  jjObjectPresets[OBJECT::REDSPRING].behavior = MovingSpring();
}

class MovingSpring : jjBEHAVIORINTERFACE {

  void onBehave(jjOBJ@ obj) {
    obj.behave(BEHAVIOR::WALKINGENEMY);
    obj.putOnGround();
  }
  bool onObjectHit(jjOBJ@ obj, jjOBJ@, jjPLAYER@ player, int) {
    player.direction = player.ySpeed = -32;
    obj.scriptedCollisions = true;
    jjSample(obj.xPos, obj.yPos, SOUND::COMMON_SPRING1);
    return true;
    }
}

//flying spring

void onLevelLoad() {

  jjObjectPresets[OBJECT::BLUESPRING].xSpeed = 5;
  jjObjectPresets[OBJECT::BLUESPRING].scriptedCollisions = true;
  jjObjectPresets[OBJECT::BLUESPRING].behavior =FlyingSpring();  
  jjObjectPresets[OBJECT::BLUESPRING].determineCurAnim(ANIM::SPRING,6);
}

class FlyingSpring : jjBEHAVIORINTERFACE {

  void onBehave(jjOBJ@ obj) {
    float YSpeed = 22;
    obj.behave(BEHAVIOR::BUTTERFLY);

  }
  bool onObjectHit(jjOBJ@ obj, jjOBJ@, jjPLAYER@ player, int) {
    player.direction = player.ySpeed = -42;
    obj.scriptedCollisions = true;
    jjSample(obj.xPos, obj.yPos, SOUND::COMMON_SPRING1);
    return true;
    }
}