pub struct SimTime(/* private fields */);Implementations§
Source§impl SimTime
impl SimTime
pub const EPOCH: SimTime
Sourcepub const fn from_minutes(minutes_from_epoch: i64) -> SimTime
pub const fn from_minutes(minutes_from_epoch: i64) -> SimTime
Examples found in repository?
examples/continuous_game_loop.rs (line 474)
472fn assert_expected_outcome(outcome: &RunOutcome) {
473 let ids = Canwu::demo_ids();
474 let command_at = SimTime::from_minutes(1);
475 let arrival_at = SimTime::from_minutes(1_081);
476 let final_time = SimTime::from_minutes(1_082);
477
478 assert_eq!(outcome.time, final_time, "the scripted final time changed");
479 let army = outcome
480 .world
481 .army(ids.army)
482 .expect("the demo army must remain present");
483 assert_eq!(
484 army.location, ids.eastern_territory,
485 "the scheduled arrival must execute"
486 );
487 assert!(
488 army.transit.is_none(),
489 "the army must no longer be in authoritative transit"
490 );
491
492 assert_eq!(
493 outcome.commands.len(),
494 1,
495 "the move command must be accepted"
496 );
497 let command = &outcome.commands[0];
498 assert_eq!(command.accepted_at, command_at);
499 assert_eq!(command.envelope.expected_time, Some(command_at));
500 assert!(matches!(
501 &command.envelope.command,
502 Command::MoveArmy { army, destination }
503 if *army == ids.army && *destination == ids.eastern_territory
504 ));
505
506 let event_timeline = outcome
507 .events
508 .iter()
509 .map(|event| (event.kind.qualified_event_type(), event.timestamp))
510 .collect::<Vec<_>>();
511 assert_eq!(
512 event_timeline,
513 vec![
514 ("move_ordered".to_owned(), command_at),
515 ("army_arrived".to_owned(), arrival_at),
516 ("knowledge_updated".to_owned(), arrival_at),
517 ("report_dispatched".to_owned(), arrival_at),
518 ],
519 "the expected command and scheduled-arrival event timeline changed"
520 );
521 assert_eq!(
522 outcome.canonical_boundaries, 2,
523 "the command and arrival should settle at two canonical boundaries"
524 );
525}pub const fn as_minutes(self) -> i64
Sourcepub const fn checked_add(self, duration: SimDuration) -> Option<SimTime>
pub const fn checked_add(self, duration: SimDuration) -> Option<SimTime>
Examples found in repository?
examples/continuous_game_loop.rs (line 264)
257 fn submit_player_command(&mut self) -> Result<(), CanwuError> {
258 let captured_at = self.presentation_time();
259 let due_at = if self.accumulated_sim_nanos == 0 {
260 self.authority.time()
261 } else {
262 self.authority
263 .time()
264 .checked_add(SIMULATION_QUANTUM)
265 .expect("the scripted command time must remain representable")
266 };
267 let envelope = CommandEnvelope::new(
268 Issuer::Actor(self.ids.commander),
269 Command::MoveArmy {
270 army: self.ids.army,
271 destination: self.ids.eastern_territory,
272 },
273 )
274 .at_time(due_at);
275 let request = CommandRequest::new(
276 CommandRequestId::new(1),
277 self.authority.revision(),
278 envelope,
279 );
280 let ingress = self.authority.enqueue_command(due_at, 0, request)?;
281
282 if self.verbose {
283 println!(
284 "INPUT: queued commander move as {:?}, captured_at={captured_at}, quantized_due_at={due_at}",
285 ingress.ingress_id,
286 );
287 }
288
289 // This drains ingress due at the current canonical time only. The
290 // mid-quantum command remains queued until normal accumulation reaches
291 // its quantized minute; future scheduled work is never jumped to.
292 let receipts = self.authority.advance_canonical(SimDuration::ZERO)?;
293 self.canonical_boundaries += receipts.len();
294 self.refresh_presentation_from_authority();
295 self.presentation.render(self.presentation_time());
296 if self.verbose {
297 self.print_frame(GameSpeed::X1);
298 }
299 self.report_new_events();
300 Ok(())
301 }pub const fn checked_sub(self, other: SimTime) -> Option<SimDuration>
Trait Implementations§
Source§impl Add<SimDuration> for SimTime
impl Add<SimDuration> for SimTime
Source§impl AddAssign<SimDuration> for SimTime
impl AddAssign<SimDuration> for SimTime
Source§fn add_assign(&mut self, duration: SimDuration)
fn add_assign(&mut self, duration: SimDuration)
Performs the
+= operation. Read moreimpl Copy for SimTime
Source§impl<'de> Deserialize<'de> for SimTime
impl<'de> Deserialize<'de> for SimTime
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<SimTime, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<SimTime, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl Eq for SimTime
Source§impl Ord for SimTime
impl Ord for SimTime
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
Source§impl PartialOrd for SimTime
impl PartialOrd for SimTime
Source§impl Serialize for SimTime
impl Serialize for SimTime
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Serialize this value into the given Serde serializer. Read more
impl StructuralPartialEq for SimTime
Auto Trait Implementations§
impl Freeze for SimTime
impl RefUnwindSafe for SimTime
impl Send for SimTime
impl Sync for SimTime
impl Unpin for SimTime
impl UnsafeUnpin for SimTime
impl UnwindSafe for SimTime
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more