core: Ignore NaN in StageObject setters

This commit is contained in:
Mike Welsh 2019-12-14 22:34:16 -08:00
parent e36dbad7d2
commit d5f7521061
1 changed files with 30 additions and 14 deletions

View File

@ -363,7 +363,9 @@ fn set_x<'gc>(
val: Value<'gc>, val: Value<'gc>,
) -> Result<(), Error> { ) -> Result<(), Error> {
let val = val.as_number(avm, context)?; let val = val.as_number(avm, context)?;
this.set_x(context.gc_context, val); if !val.is_nan() {
this.set_x(context.gc_context, val);
}
Ok(()) Ok(())
} }
@ -382,7 +384,9 @@ fn set_y<'gc>(
val: Value<'gc>, val: Value<'gc>,
) -> Result<(), Error> { ) -> Result<(), Error> {
let val = val.as_number(avm, context)?; let val = val.as_number(avm, context)?;
this.set_y(context.gc_context, val); if !val.is_nan() {
this.set_y(context.gc_context, val);
}
Ok(()) Ok(())
} }
@ -402,7 +406,9 @@ fn set_x_scale<'gc>(
val: Value<'gc>, val: Value<'gc>,
) -> Result<(), Error> { ) -> Result<(), Error> {
let val = val.as_number(avm, context)? / 100.0; let val = val.as_number(avm, context)? / 100.0;
this.set_scale_x(context.gc_context, val); if !val.is_nan() {
this.set_scale_x(context.gc_context, val);
}
Ok(()) Ok(())
} }
@ -422,7 +428,9 @@ fn set_y_scale<'gc>(
val: Value<'gc>, val: Value<'gc>,
) -> Result<(), Error> { ) -> Result<(), Error> {
let val = val.as_number(avm, context)? / 100.0; let val = val.as_number(avm, context)? / 100.0;
this.set_scale_y(context.gc_context, val); if !val.is_nan() {
this.set_scale_y(context.gc_context, val);
}
Ok(()) Ok(())
} }
@ -468,7 +476,9 @@ fn set_alpha<'gc>(
val: Value<'gc>, val: Value<'gc>,
) -> Result<(), Error> { ) -> Result<(), Error> {
let val = val.as_number(avm, context)? / 100.0; let val = val.as_number(avm, context)? / 100.0;
this.set_alpha(context.gc_context, val); if !val.is_nan() {
this.set_alpha(context.gc_context, val);
}
Ok(()) Ok(())
} }
@ -507,7 +517,9 @@ fn set_width<'gc>(
val: Value<'gc>, val: Value<'gc>,
) -> Result<(), Error> { ) -> Result<(), Error> {
let val = val.as_number(avm, context)?; let val = val.as_number(avm, context)?;
this.set_width(context.gc_context, val); if !val.is_nan() {
this.set_width(context.gc_context, val);
}
Ok(()) Ok(())
} }
@ -526,7 +538,9 @@ fn set_height<'gc>(
val: Value<'gc>, val: Value<'gc>,
) -> Result<(), Error> { ) -> Result<(), Error> {
let val = val.as_number(avm, context)?; let val = val.as_number(avm, context)?;
this.set_height(context.gc_context, val); if !val.is_nan() {
this.set_height(context.gc_context, val);
}
Ok(()) Ok(())
} }
@ -545,14 +559,16 @@ fn set_rotation<'gc>(
degrees: Value<'gc>, degrees: Value<'gc>,
) -> Result<(), Error> { ) -> Result<(), Error> {
let mut degrees = degrees.as_number(avm, context)?; let mut degrees = degrees.as_number(avm, context)?;
// Normalize into the range of [-180, 180]. if !degrees.is_nan() {
degrees %= 360.0; // Normalize into the range of [-180, 180].
if degrees < -180.0 { degrees %= 360.0;
degrees += 360.0 if degrees < -180.0 {
} else if degrees > 180.0 { degrees += 360.0
degrees -= 360.0 } else if degrees > 180.0 {
degrees -= 360.0
}
this.set_rotation(context.gc_context, degrees.to_radians());
} }
this.set_rotation(context.gc_context, degrees.to_radians());
Ok(()) Ok(())
} }