Skip to content

Commit

Permalink
Adjust when ControlPoint and Track appear in phetioState:true, see #385
Browse files Browse the repository at this point in the history
  • Loading branch information
samreid committed Jan 14, 2025
1 parent eec1f72 commit 9a9c852
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 17 deletions.
3 changes: 3 additions & 0 deletions js/common/model/ControlPoint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ export default class ControlPoint extends PhetioObject {
}, providedOptions );
const tandem = options.tandem;

// ControlPoints are always stateful, see https://github.com/phetsims/energy-skate-park/issues/385
options.phetioState = true;

super( options );

this.limitBounds = options.limitBounds;
Expand Down
2 changes: 1 addition & 1 deletion js/common/model/EnergySkateParkTrackSetModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ export default class EnergySkateParkTrackSetModel extends EnergySkateParkSaveSam
this.updateActiveTrack( this.sceneProperty.get() );
}

public static createPremadeTrack( model: IntentionalAny, controlPoints: ControlPoint[], options: IntentionalAny ): Track {
public static createPremadeTrack( model: IntentionalAny, controlPoints: ControlPoint[], options?: IntentionalAny ): Track {
// eslint-disable-next-line phet/bad-typescript-text
options = merge( {
configurable: model.tracksConfigurable,
Expand Down
11 changes: 7 additions & 4 deletions js/common/model/Track.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ import TReadOnlyProperty from '../../../../axon/js/TReadOnlyProperty.js';
import Bounds2 from '../../../../dot/js/Bounds2.js';
import Vector2 from '../../../../dot/js/Vector2.js';
import optionize from '../../../../phet-core/js/optionize.js';
import PhetioObject, { PhetioObjectOptions } from '../../../../tandem/js/PhetioObject.js';
import IntentionalAny from '../../../../phet-core/js/types/IntentionalAny.js';
import StrictOmit from '../../../../phet-core/js/types/StrictOmit.js';
import { DragListener, SceneryEvent } from '../../../../scenery/js/imports.js';
import PhetioObject, { PhetioObjectOptions } from '../../../../tandem/js/PhetioObject.js';
import phetioStateSetEmitter from '../../../../tandem/js/phetioStateSetEmitter.js';
import Tandem from '../../../../tandem/js/Tandem.js';
import ArrayIO from '../../../../tandem/js/types/ArrayIO.js';
Expand All @@ -26,7 +28,6 @@ import energySkatePark from '../../energySkatePark.js';
import SplineEvaluation from '../SplineEvaluation.js';
import ControlPoint from './ControlPoint.js';
import EnergySkateParkModel from './EnergySkateParkModel.js';
import IntentionalAny from '../../../../phet-core/js/types/IntentionalAny.js';

// constants
const FastArray = window.Float64Array ? window.Float64Array : window.Array;
Expand Down Expand Up @@ -65,7 +66,7 @@ type SelfOptions = {
slopeToGround?: boolean;
};

type TrackOptions = SelfOptions & PhetioObjectOptions;
type TrackOptions = SelfOptions & StrictOmit<PhetioObjectOptions, 'phetioState'>;

export default class Track extends PhetioObject {

Expand Down Expand Up @@ -144,6 +145,7 @@ export default class Track extends PhetioObject {
phetioState: PhetioObject.DEFAULT_OPTIONS.phetioState
}, providedOptions );

options.phetioState = options.configurable || options.attachable || options.splittable;
super( options );

const tandem = options.tandem;
Expand Down Expand Up @@ -258,7 +260,7 @@ export default class Track extends PhetioObject {
public toStateObject(): IntentionalAny {
return {
controlPoints: this.controlPoints.map( x => ControlPointReferenceIO.toStateObject( x ) ),
parents: this.parents.map( x => Track.TrackIO.toStateObject( x ) ),
parents: this.parents.map( x => ReferenceIO( IOType.ObjectIO ).toStateObject( x ) ),
draggable: this.draggable,
configurable: this.configurable
};
Expand Down Expand Up @@ -1088,6 +1090,7 @@ export default class Track extends PhetioObject {
// @ts-expect-error
const controlPoints = stateObject.controlPoints.map( x => ControlPointReferenceIO.fromStateObject( x ) );

// debugger;
// @ts-expect-error
const parents = stateObject.parents.map( x => Track.TrackIO.fromStateObject( x ) );
return [ controlPoints, parents, {
Expand Down
16 changes: 4 additions & 12 deletions js/common/view/SceneSelectionRadioButtonGroup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,30 +80,22 @@ export default class SceneSelectionRadioButtonGroup extends RectangularRadioButt
const parabolaControlPoints = PremadeTracks.createParabolaControlPoints( model, merge( {
trackMidHeight: 1
}, controlPointOptions ) );
track = EnergySkateParkTrackSetModel.createPremadeTrack( model, parabolaControlPoints, {
tandem: tandem.createTandem( 'parabolaTrackIcon' )
} );
track = EnergySkateParkTrackSetModel.createPremadeTrack( model, parabolaControlPoints );
}
else if ( trackType === PremadeTracks.TrackType.SLOPE ) {
const slopeControlPoints = PremadeTracks.createSlopeControlPoints( model, controlPointOptions );
track = EnergySkateParkTrackSetModel.createPremadeTrack( model, slopeControlPoints, {
tandem: tandem.createTandem( 'slopeTrackIcon' )
} );
track = EnergySkateParkTrackSetModel.createPremadeTrack( model, slopeControlPoints );
}
else if ( trackType === PremadeTracks.TrackType.DOUBLE_WELL ) {
const doubleWellControlPoints = PremadeTracks.createDoubleWellControlPoints( model, controlPointOptions );
track = EnergySkateParkTrackSetModel.createPremadeTrack( model, doubleWellControlPoints, {
tandem: tandem.createTandem( 'doubleWellTrackIcon' )
} );
track = EnergySkateParkTrackSetModel.createPremadeTrack( model, doubleWellControlPoints );
}
else if ( trackType === PremadeTracks.TrackType.LOOP ) {
const loopControlPoints = PremadeTracks.createLoopControlPoints( model, merge( {
innerLoopWidth: 2.5,
innerLoopTop: 3.5
}, controlPointOptions ) );
track = EnergySkateParkTrackSetModel.createPremadeTrack( model, loopControlPoints, {
tandem: tandem.createTandem( 'loopTrackIcon' )
} );
track = EnergySkateParkTrackSetModel.createPremadeTrack( model, loopControlPoints );
}
else {
throw new Error( `unsupported TrackType: ${trackType}` );
Expand Down

0 comments on commit 9a9c852

Please sign in to comment.