- Learn
- Tutorials
- Physics Labs
- Push Lab
- 3 Deliver an Impulse
3 Deliver an Impulse
Choose a shared impulse, push both carts, and compare their changes in velocity.
Press Space to push both carts. Arrows choose the next impulse and sign. H opens the readings; Home returns the carts.
Open the downloaded file with File › Open Project... in Myth Engine.
3.1 The Idea
Blue rolls toward the stop. Copper follows below, more slowly, although the same push reached them together. Their answers differ.
A brief push gives an impulse, measured here in newton seconds, shown as N s. It changes a cart’s velocity, which includes direction: positive points right along the rail, and negative points left.
The same impulse changes the lighter cart’s velocity more because their masses differ. Think of pushing an empty shopping cart beside a loaded one. The load matters.
This workshop uses ideal horizontal tracks, with no friction slowing the carts. Gravity is zero, and the bodies cannot rotate. Native physics carries their motion after the push, along the rail until a stop intervenes.
The dial holds a future choice. This chapter keeps that choice separate from the action that delivers it.
The last distinction takes a little care. A cart may stop after hitting the rail end, while its earlier push reading still describes the moment it received the impulse. You’ll measure that moment before physics carries it onward.
3.2 The Plan
Remember the carts, choose the next push, then measure their answers. Identify Workshop Cart remembers the original pair. Choose Next Impulse and Turn Impulse Dial choose a magnitude; Choose Impulse Direction supplies its sign. Request Pair Push passes those choices to Push Workshop Pair.
Apply Cart Impulse measures each body around its native Apply Impulse Action. Show Measured Reading reveals the results. Native physics owns released motion, without another mover placing the cart each frame.
3.3 Set Up
Continue with your draggable carts and working Return button. Joining here? Download the Chapter 2 starting workshop. Open that file through File > Open Project… before adding this chapter’s pieces. The download above is already finished. Keep their existing settings and placements, using the kit’s pictures for the new controls.
Add the Commands in Input Manager and the Globals under Project Globals. Instance Set holds running copies. Leave the cart sets empty initially, so their registration Logic can fill them at creation. Blank starting entries mean empty, without typing undefined.
The setup card lists the new placements. Make each resource below before placing its copy in the Scene. Its Z-Index belongs to the Scene placement, while component ordering belongs inside the Object.
SpaceUp ArrowDown ArrowEnd0Left ArrowRight ArrowHKeep the helper page nearby for Data Structures and Data Tables. Build them first. The experiment will remain quiet until the callers and Objects are connected.
3.4 Give the Readings a Shape
3.4.1 Impulse Reading
A push needs a small record of what happened. Impulse Reading holds the body’s measured mass and its horizontal velocity before and after the push.
Make this Data Structure with its named fields. A Function will return one record after each cart receives its impulse.
An immediate native impulse measurement: mass in kg, and before/after signed horizontal velocity in m/s.
3.4.2 Impulse Settings Entry
The dial needs limits. Impulse Settings Entry describes those two fields for the tuning table. The table comes next.
One row of the "Impulse Settings" Data Table.
3.4.3 Impulse Settings
The carts share one setting. Create Impulse Settings using the structure above, then use Add Row. Enter Shared in the Entry cell at the row’s left. The row position is separate. The maximum bounds the dial. The increment field sets the regular spacing between choices on its scale.
400.13.4.4 Prepare Impulse Settings
An edited table should still leave the dial usable. Prepare Impulse Settings checks its row. If increment exceeds maximum, the Function reduces increment to that maximum. The dial retains a usable step.
Look for Check Data Row Exists before the branches. Its named result tells the Function whether to repair an existing row or make the missing one.
Repairs a missing Shared tuning row or a nonpositive range/increment. A step larger than the range becomes one whole-range step.
- Action Name
sharedRow- Table
Impulse Settings- Row
"Shared"
sharedRow.valuedata("Impulse Settings","Shared","maximum") <= 0- Table
Impulse Settings- Row
"Shared"- Column
"maximum"- Value
40
data("Impulse Settings","Shared","increment") <= 0- Table
Impulse Settings- Row
"Shared"- Column
"increment"- Value
0.1
data("Impulse Settings","Shared","increment") > data("Impulse Settings","Shared","maximum")- Table
Impulse Settings- Row
"Shared"- Column
"increment"- Value
data("Impulse Settings","Shared","maximum")
- Action Name
addedRow- Table
Impulse Settings- Row
"Shared"- Values > maximum
40- Values > increment
0.1
3.5 Remember the Actual Pair
3.5.1 Cart Press Input
The input helper now needs to recognize controls on the optional sheet. Import the new supplied file into the existing Cart Press Input Library. Keep its wiring unchanged.
push-lab-cart-press-input.js1.8 KBpush-lab-cart-press-input-ch02.js2.8 KBcartPressCartPressInput3.5.2 Identify Workshop Cart
The push must reach the carts standing on these rails. An Instance Set remembers them.
Identify Workshop Cart fills the matching empty set when its cart appears. The registration flag protects the identity of the experiment’s original pair. Delete Blue and create another copy: the set loses Blue, but the registration flag remembers its original owner. A push still reports that the original cart is missing.
Declare cartNumber here. The Object values below choose which place each cart claims in the pair. The Collider reference works as it did last chapter.
Registers the first valid cart in each workshop slot once. A later copy never replaces an original that has disappeared.
Any ObjectCollider@self.cartNumber == 1 && $blueCartRegistered == false$blueCart.count == 0- Instance Set
$blueCart- To
self
$blueCart.count == 1- Variable
$blueCartRegistered- Value
true
@self.cartNumber == 2 && $copperCartRegistered == false$copperCart.count == 0- Instance Set
$copperCart- To
self
$copperCart.count == 1- Variable
$copperCartRegistered- Value
true
3.5.3 Blue Cart
Blue claims the upper cart’s place. Attach Identify Workshop Cart, then select it in Blue Cart’s Logic workspace. Match its supplied cartNumber row to the Changes card, keeping the earlier drag attachment.
X 3.6, Y 0.93Blue Cart ArtX 3.6, Y 0.9X 3.6, Y 0.9ColliderColliderNumberConstant6.75NumberConstant10.975NumberConstant5.975NumberConstant20.875NumberConstant13.5.4 Copper Cart
Copper claims the other place. Use the same attachment on Copper Cart with its own cartNumber value. Its lane values and load pictures stay with the lower cart.
X 3.6, Y 0.9103Copper Cart ArtX 3.6, Y 0.9X 3.6, Y 0.9ColliderColliderRear LoadWorkshop weight-26.04X -1.125, Y 0.825X 0.625, Y 0.95Middle LoadWorkshop weight-26.05X -0.375, Y 0.825X 0.625, Y 0.95Front LoadWorkshop weight-56.08X 0.375, Y 0.9X 0.75, Y 1.1NumberConstant6.75NumberConstant8.2NumberConstant5.975NumberConstant20.875NumberConstant2The pair is registered.
3.6 Deliver and Measure the Push
3.6.1 Apply Cart Impulse
The body is moving, or waiting where you left it. Apply Cart Impulse reads its mass and horizontal velocity, delivers the impulse, then reads the new velocity. It returns that small Impulse Reading record.
The before reading comes first, while the body still has its earlier velocity. Apply Impulse changes the body through native physics. The after reading follows immediately, before later travel or a stop can replace it. Direction zero points right along the rail. A negative Strength applies the impulse in the opposite direction.
Its cart Parameter uses Instance Set. Use that type in the Function’s Parameters, and leave its default empty. The caller supplies the exact cart set. Choose Impulse Reading as Return Type, then match its returned fields.
Measures native mass and velocity, applies one signed impulse, then measures the immediate new velocity. Outputs describe this push, not later motion.
- Name
mass- Value
param:cart.transform.mass
- Name
before- Value
param:cart.transform.velocity.x
- Applies to
cart- Strength
impulse- Direction
0
- Name
after- Value
param:cart.transform.velocity.x
- mass
mass- before
before- after
after
3.6.2 Push Workshop Pair
Both carts must be free before either receives a push. Push Workshop Pair checks the pair first. A held or missing cart refuses the whole request, leaving the other cart unpushed.
Once accepted, each call to Apply Cart Impulse returns its own measurement. The named bluePush and copperPush results feed the corresponding Globals. Their velocity changes come from after minus before.
Both measurements must exist before the batch counter advances to announce another accepted push. The click answers an accepted push, while pushStatus gives the sheet a reason when a request is refused.
Pushes the exact workshop pair once only when both hands are clear. A held cart rejects the whole push.
param:blue.count == 1 && param:copper.count == 1param:blue.collider.fixed == false && param:copper.collider.fixed == false- Action Name
bluePush- cart
blue- impulse
blueImpulse
- Variable
$blueMass- Value
bluePush.mass
- Variable
$blueBefore- Value
bluePush.before
- Variable
$blueAfter- Value
bluePush.after
- Variable
$blueAppliedImpulse- Value
blueImpulse
- Variable
$blueDelta- Value
$blueAfter - $blueBefore
- Action Name
copperPush- cart
copper- impulse
copperImpulse
- Variable
$copperMass- Value
copperPush.mass
- Variable
$copperBefore- Value
copperPush.before
- Variable
$copperAfter- Value
copperPush.after
- Variable
$copperAppliedImpulse- Value
copperImpulse
- Variable
$copperDelta- Value
$copperAfter - $copperBefore
- Variable
$pushBatch- Operator
+=- Value
1
- Variable
$pushStatus- Value
'Impulse applied to both carts.'
- accepted
Yes
- Variable
$pushStatus- Value
'Release both carts before pushing.'
- Variable
$pushStatus- Value
'Both workshop carts are needed for Push Both.'
3.6.3 Request Pair Push
Space and the blue button need to reach the same experiment. Request Pair Push sends both routes to the paired Function, using the registered cart references.
The magnitude and direction multiply into a signed impulse. Both carts receive that same signed choice here. Match the Command field to Push Both, keeping the Event’s displayed name as its card shows.
Routes keyboard and button push requests to the exact workshop pair, with a visible missing-cart response.
Any Object- blue
$blueCart- copper
$copperCart- blueImpulse
$impulseMagnitude * $impulseDirection- copperImpulse
$impulseMagnitude * $impulseDirection
- blue
$blueCart- copper
$copperCart- blueImpulse
$impulseMagnitude * $impulseDirection- copperImpulse
$impulseMagnitude * $impulseDirection
The push has one route through physics, shared by both keyboard and pointer requests.
3.7 Choose the Next Push
3.7.1 Choose Next Impulse
Arrow keys change the next choice while the carts keep rolling. Choose Next Impulse sends magnitude requests through the limiting Function. Its direction Commands change the sign separately.
Creation checks the choice too, as do restoration and edits to the tuning table. The Load Events prepare these controls for saved experiments later; this chapter adds no save control. Its range stays bounded. None of these Events applies an impulse.
Arrow keys choose the shared next impulse and its direction. End chooses the maximum; 0 chooses zero.
Any Object- magnitude
$impulseMagnitude + data("Impulse Settings","Shared","increment")
- magnitude
$impulseMagnitude - data("Impulse Settings","Shared","increment")
- magnitude
data("Impulse Settings","Shared","maximum")
- magnitude
0
- Variable
$impulseDirection- Value
-1
- Variable
$impulseDirection- Value
1
- magnitude
$impulseMagnitude
- magnitude
$impulseMagnitude
- magnitude
$impulseMagnitude
3.7.2 Game Rules
The bench needs a place for those shared controls. Game Rules carries Request Pair Push and Choose Next Impulse without a visible picture. Place it using the setup card.
You can test now. Run Lab, press Space, and watch Blue draw ahead of Copper. Home brings both back.
3.7.3 Turn Impulse Dial
Your pointer turns the knob by moving across its width. Turn Impulse Dial converts that horizontal place into the next magnitude. It shares the keyboard’s limiting Function.
Get the dial Event headers. Install this Myth Pack through File > Install Myth Pack… > Add to This Project. Resources now contains Turn Impulse Dial. Open that imported Logic Component instead of making another resource with the same name. It contains only the first Event, with empty Released and Turning Modes. Make its Variables and fill the Actions from the cards below, then add the remaining Events.
Keep the supplied Mouse Press trigger for Released and Mouse Held trigger for Turning. Myth’s Change Event command changes all Modes together, so this small prepared resource keeps their separate input moments. You still build the behavior inside them.
The prepared Released and Turning Modes belong to one named Event. Released begins the gesture. Turning follows your held pointer across the marked face until you let go. Add their Actions without creating another Event or changing either supplied trigger.
These blocks belong together. Fill the Actions inside those two existing Modes.
Drag the dial horizontally to select from zero to the tuned maximum (40 N s by default). Release, cancellation, focus loss and Load end the hand.
Any Objectself.pressSelected == true- magnitude
(valueMember(event.position,"x") - @self.dialLeft) / @self.dialWidth * data("Impulse Settings","Shared","maximum")
- Event
When the Left Mouse Button Is Pressed- Mode
Turning
- magnitude
(valueMember(event.position,"x") - @self.dialLeft) / @self.dialWidth * data("Impulse Settings","Shared","maximum")
Letting go ends the dial’s hand, as do the same interruptions that released last chapter’s carts. Rotation after Load reflects the stored magnitude, so the knob shows the choice that returned.
- Event
When the Left Mouse Button Is Pressed- Mode
Released
- Event
When the Left Mouse Button Is Pressed- Mode
Released
- Event
When the Left Mouse Button Is Pressed- Mode
Released
- Event
When the Left Mouse Button Is Pressed- Mode
Released
- Degrees
135 - $impulseMagnitude / data("Impulse Settings","Shared","maximum") * 270
Now the knob follows other ways of choosing too. A changed magnitude turns it, and the wheel adjusts it while your pointer is over its face. Opening Help or returning the carts ends a remaining dial hold.
- Degrees
135 - $impulseMagnitude / data("Impulse Settings","Shared","maximum") * 270
- Degrees
135 - $impulseMagnitude / data("Impulse Settings","Shared","maximum") * 270
$detailsOpen == false && (abs(valueMember(event.position,"x") - self.transform.position.x) <= @self.dialWidth / 2 && abs(valueMember(event.position,"y") - self.transform.position.y) <= @self.dialWidth / 2)- magnitude
$impulseMagnitude + 5 * data("Impulse Settings","Shared","increment")
$detailsOpen == false && (abs(valueMember(event.position,"x") - self.transform.position.x) <= @self.dialWidth / 2 && abs(valueMember(event.position,"y") - self.transform.position.y) <= @self.dialWidth / 2)- magnitude
$impulseMagnitude - 5 * data("Impulse Settings","Shared","increment")
- Degrees
135 - $impulseMagnitude / data("Impulse Settings","Shared","maximum") * 270
$detailsOpen- Event
When the Left Mouse Button Is Pressed- Mode
Released
- Event
When the Left Mouse Button Is Pressed- Mode
Released
- Event
When the Left Mouse Button Is Pressed- Mode
Released
3.7.4 Impulse Dial
The painted knob needs an Object before it can receive those pointer Events. Attach both listed Logic Components. They share pressSelected, as Return did.
Match the supplied Shared Variable rows on this attachment. They describe its horizontal span.
X 2.05, Y 2.055Workshop knobX 2.05, Y 2.05NumberConstant7.1NumberConstant2.053.7.5 Choose Impulse Direction
The lever leans toward the next push direction. Pressing it reverses the sign, with the same quiet click as the Return control. Choose Impulse Direction also turns the picture when a keyboard Command changes that choice.
It changes the next push alone. A cart already moving keeps its velocity until another impulse or contact acts.
Click the lever to reverse the next push direction. Carts and old readings keep their current state.
Any Objectself.pressSelected == true- Variable
$impulseDirection- Operator
*=- Value
-1
- accepted
Yes
- Degrees
$impulseDirection * 24
- Degrees
$impulseDirection * 24
- Degrees
$impulseDirection * 24
3.7.6 Impulse Direction Lever
The lever sits between choosing a strength and delivering it. Check its tilt before pushing. The same listener that serves the knob recognizes this separate handle.
X 0.875, Y 2.16Workshop leverX 0.875, Y 2.13.8 Open the Readings
3.8.1 Toggle Workshop Readings
The bench can show its workings without stopping the experiment. Toggle Workshop Readings opens the sheet. The carts keep moving underneath the sheet, carrying on with the experiment you began.
Toggles only the saved reading-sheet view. The experiment continues unchanged.
$detailsOpen- Variable
$detailsOpen- Value
false
- Variable
$detailsOpen- Value
true
3.8.2 Open Workshop Readings
H opens the sheet, then closes it again. Open Workshop Readings gives the Help label the same response. Its pointer Event shares the Object’s selection value with Listen for Control Press.
H or the bench Help control opens and closes the optional live readings and instructions without changing physics.
Any Objectself.pressSelected == true3.8.3 Help Control
A small Help label waits below the apparatus. Make its Text / UI and attach both Logic Components before placing it. It stays available in both views.
X 2.2, Y 0.8Help0.35#F4E8CFCenterWrap to Width2.23.8.4 Show Workshop Detail
Some labels belong on the bench; others belong on the sheet. Show Workshop Detail compares the view with each Object’s showOnOpen value to decide whether to draw it.
Declare showOnOpen in this Logic’s Shared Variables as its card shows. Attaching the Logic supplies the row on each Object. Start with Yes for sheet elements. The cards for the bench readout and dial face instead specify No.
Shows either a bench label or a reading-sheet element in its chosen view.
Any Object- Visible
$detailsOpen == @self.showOnOpen
- Visible
$detailsOpen == @self.showOnOpen
- Visible
$detailsOpen == @self.showOnOpen
3.8.5 Reading Sheet
The sheet covers the workshop. Its Scene placement starts hidden, as the setup card says. Give it showOnOpen Yes and attach Show Workshop Detail to reveal it with Help.
X 1.875, Y 1.875Reading Sheet SurfaceX 24, Y 14.63.8.6 Reading Sheet Title
The heading names the view above the measurements. Give this Object showOnOpen Yes too. Its placement Z-Index puts its text above the sheet’s surface.
X 22, Y 1PUSH LAB / READINGS0.8Medium#F4E8CFCenterWrap to Width223.8.7 Workshop Instructions
The controls stay beside the readings when Help opens. Workshop Instructions carries that short reminder, with Show Workshop Detail and showOnOpen Yes. Replace each [new line] marker with a line break in its Text field. Do not type the marker itself.
X 0.8, Y 0.8Drag carts; release from rest. [new line] Space: Push Home: Return Arrows: J / sign [new line] End: max 0: zero [new line] Experiment continues. H: close0.8MediumCenterWrap to Width223.8.8 Push Status
A refused push needs a reason the player can find without examining the Logic. Push Status reads the workshop’s message on the sheet. Give it showOnOpen Yes, so the reason appears when you open Help. If a push is refused during play, open Help to read that reason.
X 0.8, Y 0.8{$pushStatus}0.8MediumCenterWrap to Width22The sheet has room for the experiment’s answer, ready for a measured push to fill it.
3.9 Show the Answer
3.9.1 Set Reading Visibility
Before a push, there is no measured answer to show. Set Reading Visibility reveals a caption only when the sheet is open and an accepted batch exists. A genuine zero impulse still counts as an observation.
Shows a genuine measured push only in the optional reading sheet; zero impulse is a measurement, the opening workshop is not.
$detailsOpen && $pushBatch > 0- Applies to
caption- Visible
true
- Applies to
caption- Visible
false
3.9.2 Show Measured Reading
A new push replaces the latest measurement. Show Measured Reading refreshes its caption when the batch changes, and when the sheet opens or a saved experiment returns.
Refreshes measurement visibility when the workshop opens, captures a push or finishes Load.
Any Object- caption
self
- caption
self
- caption
self
- caption
self
3.9.3 Blue Push Reading
Blue’s caption gathers its mass, applied impulse and measured velocities. Attach Show Measured Reading here. These values describe the latest push, even after the cart reaches a stop.
X 0.8, Y 0.8Blue: {$blueMass} kg | J {$blueAppliedImpulse} N s [new line] v {round($blueBefore * 100) / 100} -> {round($blueAfter * 100) / 100} m/s | change {round($blueDelta * 100) / 100} m/s0.8MediumCenterWrap to Width223.9.4 Copper Push Reading
Copper’s caption follows the same pattern with the lower cart’s values. Keep the Globals distinct.
X 0.8, Y 0.8Copper: {$copperMass} kg | J {$copperAppliedImpulse} N s [new line] v {round($copperBefore * 100) / 100} -> {round($copperAfter * 100) / 100} m/s | change {round($copperDelta * 100) / 100} m/s0.8MediumCenterWrap to Width223.9.5 Next Impulse
The bench keeps a smaller readout for the next signed choice. Use Show Workshop Detail here with showOnOpen No, as the Object card shows below. Past measurements stay on the sheet.
X 0.8, Y 0.8{round($impulseMagnitude * $impulseDirection * 10) / 10} N s0.2375#39291BCenterWrap to Width3.1No3.9.6 Impulse Dial Face
The face stays fixed. Impulse Dial Face carries the marked picture and the separate Text / UI labels. Keep those labels on this Object, so the knob turns without taking them along. Test the knob first. After trying the controls, return here to finish those labels before the next chapter.
Give it Show Workshop Detail and showOnOpen No. The knob sits in front.
Impulse CalibrationX 4, Y 400.2#39291BCenterWrap to Width0.65X -1.02530483272049, Y -1.02530483272049Impulse 550.2#39291BCenterWrap to WidthX -1.42213865658468, Y -0.2828809669233860.65Impulse 10100.2#39291BCenterWrap to WidthX -1.33962532214137, Y 0.554890976929380.65Impulse 15150.2#39291BCenterWrap to WidthX -0.805576837878423, Y 1.205630937838690.65Impulse 20200.2#39291BCenterWrap to WidthX 0, Y 1.450.65Impulse 25250.2#39291BCenterWrap to WidthX 0.805576837878423, Y 1.205630937838690.65Impulse 30300.2#39291BCenterWrap to WidthX 1.33962532214137, Y 0.554890976929380.65Impulse 35350.2#39291BCenterWrap to WidthX 1.42213865658468, Y -0.2828809669233860.65Impulse 40400.2#39291BCenterWrap to WidthX 1.02530483272049, Y -1.025304832720490.65No3.9.7 Place Cart on Rail
Opening the sheet should end a hand still holding a cart. Add the marked Event to the existing Place Cart on Rail. The cleanup is familiar.
Place one exact cart along its rail with the pointer, release it from rest, or return it home.
Any ObjectCollider- Timer Name
"cartInputReady"- Repeat Every (s)
0.02- Ring Once
Yes
- Script
Capture Cart Press
self.pressSelected == true- X Velocity
0- Y Velocity
0
- Component Value
self.collider.fixed- Value
true
- Event
While the Left Mouse Button Is Held- Mode
Holding
- Variable
handX- Value
valueMember(event.position,"x") - self.grabOffset
- X
clamp(self.handX, @self.leftLimit, @self.rightLimit)- Y
@self.laneY
- cart
self
- Event
While the Left Mouse Button Is Held- Mode
Released
- cart
self
- Event
While the Left Mouse Button Is Held- Mode
Released
- cart
self
- Event
While the Left Mouse Button Is Held- Mode
Released
- cart
self
- Event
While the Left Mouse Button Is Held- Mode
Released
- Script
Capture Cart Press
- cart
self- homeX
@self.homeX- laneY
@self.laneY
- Event
While the Left Mouse Button Is Held- Mode
Released
- cart
self- homeX
@self.homeX- laneY
@self.laneY
- Event
While the Left Mouse Button Is Held- Mode
Released
$detailsOpen- cart
self
- Event
While the Left Mouse Button Is Held- Mode
Released
The bench can show what its push did.
3.10 Play It!
Predict which cart will answer more strongly when both receive the same signed impulse. Begin a fresh run, then compare the readings with their motion.
- Press Space once from rest, then H. Blue shows before zero and after four; Copper shows before zero and after four tenths of a meter per second.
- Close the sheet and let Blue reach its stop. Open Help again. The latest push reading still describes its immediate after velocity.
- Press Home, then push through the blue button. It uses the same choice and gives both carts another measured push.
- While Copper rolls, change the magnitude with Up Arrow or the dial. Its motion stays unchanged.
- Press Home, choose Left Arrow, and push. Both carts initially move left, with negative changes shown on the reading sheet.
- Hold a cart and press Space. The whole push is refused, leaving the released cart’s velocity unchanged as well. Release it, open Help, and look for the release message.
- Press Home, choose zero with 0, and push. An accepted zero push records no velocity change, while End chooses the maximum again.
- Open and close Help with H and with its label. The experiment continues while its sheet is open.
Before leaving, return to Impulse Dial Face if you postponed its labels. Finish those fixed marks while keeping the knob separate.
3.11 How It Works
The dial holds a choice until a push delivers it to both native bodies. The reading keeps the moment.
For these carts, change in velocity equals signed impulse divided by actual mass: delta v = J / m. The same impulse therefore gives the heavier cart a smaller change. The change adds to existing velocity.
A later stop changes current motion while leaving the earlier observation alone. This separation also lets a game display a hit’s effect after the body has traveled onward.
3.12 If It Didn’t Work
Space does nothing? Check Game Rules is placed in Lab. Then compare Request Pair Push’s Command field with Push Both. Restore that connection and try a fresh run, with both carts released.
Only a missing-cart message appears? Compare the carts’ cartNumber values and Identify Workshop Cart attachments. Each must claim its own reference. Run again after that correction, letting creation fill both empty sets.
The knob turns but carts keep their old speed? That is the next-push choice at work, waiting for the action that delivers it. Press the blue button. Watch the new reading after that action, comparing it with the one you saw before.
The dial keeps following after release? Compare its Mode changes with the release and interruption Events. They all return to Released. Restore that destination and the knob should wait for another press.
Help opens without readings? Make a push with both carts released. If the sheet still stays blank, compare Show Measured Reading and its caption attachment. The opening zeros deliberately stay hidden until an observation exists.
Bench labels disappear at the wrong time? Compare each Object’s showOnOpen value. The dial face and Next Impulse use No; sheet elements use Yes. Restore the mismatched value.
3.13 Challenge
Choose a push that slows a moving cart without reversing it. Predict its signed change before pressing the button, then compare the sheet’s before and after values. What choice brings it nearer rest?
Both carts answer a chosen push, and your workshop can measure what happened. Next, you’ll change their loads and watch the instruments.
