AnimationModel firingAnimation = new AnimationModel( false, firingAnimationSpeed, 8, 16 );
if( parameterExists( "jumping" ) ) {
double[] parameters= getDoubleParameters( "jumping", "-" );
RandomWaitingModel waitingForJump = new RandomWaitingModel( parameters[ 0 ], parameters[ 1 ] );
attachModel( waitingForJump );
IsModelActive onLandCondition = new IsModelActive( onLand );
waitingForJump.nextModels.addLast( onLandCondition );
IsModelActive animationActive = new IsModelActive( firingAnimation );
onLandCondition.trueModels.addLast( animationActive );
onLandCondition.falseModels.addLast( waitingForJump );
animationActive.trueModels.addLast( waitingForJump );
animationActive.falseModels.addLast( new ModelActivator( jumpingAnimation ) );
animationActive.falseModels.addLast( new ModelDeactivator( horizontalMovementModel() ) );
animationActive.falseModels.addLast( new ModelDeactivator( gravity ) );
jumpingAnimation.nextModels.addLast( new ModelActivator( fallingAnimation ) );
parameters= getDoubleParameters( "jumping_strength", "-" );
FixedWaitingModel pauseBeforeJump = FixedWaitingModel.create( jumpingPause );
pauseBeforeJump.nextModels.addLast( new Jump( parameters[ 0 ], parameters[ 1 ] ) );
pauseBeforeJump.nextModels.addLast( new ModelActivator( horizontalMovementModel() ) );
pauseBeforeJump.nextModels.addLast( new ModelActivator( gravity ) );
pauseBeforeJump.nextModels.addLast( waitingForJump );
animationActive.falseModels.addLast( pauseBeforeJump );
addToStack( jumpingAnimation );
score += 200;
}
addToStack( fallingAnimation );
if( parameterExists( "firing" ) ) {
double[] parameters = getDoubleParameters( "firing", "-" );
RandomWaitingModel waitingForFire = new RandomWaitingModel( parameters[ 0 ], parameters[ 1 ] );
attachModel( waitingForFire );
IsModelActive onLandCondition = new IsModelActive( onLand );
waitingForFire.nextModels.addLast( onLandCondition );