diff --git a/engine/physics/src/physics.rs b/engine/physics/src/physics.rs index 0036a0441..8644cb3ac 100644 --- a/engine/physics/src/physics.rs +++ b/engine/physics/src/physics.rs @@ -1811,14 +1811,18 @@ fn atomic_input_instruction(state:&mut PhysicsState,data:&PhysicsData,ins:TimedI }, Instruction::Mode(ModeInstruction::Restart(mode_id))=>{ //teleport to mode start zone + let mut spawn_point=vec3::ZERO; let mode=data.modes.get_mode(mode_id); - let spawn_point=mode.and_then(|mode| + if let Some(mode)=mode{ + // set style + state.style=mode.get_style().clone(); //TODO: spawn at the bottom of the start zone plus the hitbox size - //TODO: set camera andles to face the same way as the start zone - data.models.get_model_transform(mode.get_start().into()).map(|transform| - transform.vertex.translation - ) - ).unwrap_or(vec3::ZERO); + //TODO: set camera angles to face the same way as the start zone + if let Some(transform)=data.models.get_model_transform(mode.get_start()){ + // NOTE: this value may be 0,0,0 on source maps + spawn_point=transform.vertex.translation; + } + } set_position(spawn_point,&mut state.move_state,&mut state.body,&mut state.touching,&mut state.run,&mut state.mode_state,mode,&data.models,&data.hitbox_mesh,&data.bvh,&state.style,&state.camera,&state.input_state,state.time); set_velocity(&mut state.body,&state.touching,&data.models,&data.hitbox_mesh,vec3::ZERO); state.set_move_state(data,MoveState::Air); @@ -1828,6 +1832,9 @@ fn atomic_input_instruction(state:&mut PhysicsState,data:&PhysicsData,ins:TimedI Instruction::Mode(ModeInstruction::Spawn(mode_id,stage_id))=>{ //spawn at a particular stage if let Some(mode)=data.modes.get_mode(mode_id){ + // set style + state.style=mode.get_style().clone(); + // teleport to stage in mode if let Some(stage)=mode.get_stage(stage_id){ let _=teleport_to_spawn( stage.spawn(),