From f2ef9bbbc31a92e7ed2d4c33690a445cb672d414 Mon Sep 17 00:00:00 2001 From: ookami125 Date: Sat, 3 May 2025 00:31:26 -0400 Subject: [PATCH] Schedule interval improvement --- src/main.zig | 7 ++++--- src/spacetime.zig | 24 +++++++++++++++++++++++- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/main.zig b/src/main.zig index 9db5e35..3235c82 100644 --- a/src/main.zig +++ b/src/main.zig @@ -8,6 +8,7 @@ comptime { _ = spacetime; } const stdb_math = @import("spacetime/math.zig"); const DbVector2 = stdb_math.DbVector2; const DbVector3 = stdb_math.DbVector3; +const ScheduleAt = spacetime.ScheduleAt; const START_PLAYER_MASS: u32 = 15; const START_PLAYER_SPEED: u32 = 10; @@ -270,15 +271,15 @@ pub fn init(ctx: *spacetime.ReducerContext) !void { }); _ = try ctx.db.get("circle_decay_timer").insert(CircleDecayTimer { .scheduled_id = 0, - .scheduled_at = .{ .Interval = .{ .__time_duration_micros__ = 5 * std.time.us_per_s }}, + .scheduled_at = ScheduleAt.interval(5, .Seconds), }); _ = try ctx.db.get("spawn_food_timer").insert(SpawnFoodTimer { .scheduled_id = 0, - .scheduled_at = .{ .Interval = .{ .__time_duration_micros__ = 500 * std.time.us_per_ms }} + .scheduled_at = ScheduleAt.interval(500, .Milliseconds), }); _ = try ctx.db.get("move_all_players_timer").insert(MoveAllPlayersTimer { .scheduled_id = 0, - .scheduled_at = .{ .Interval = .{ .__time_duration_micros__ = 50 * std.time.us_per_ms }} + .scheduled_at = ScheduleAt.interval(50, .Milliseconds), }); } diff --git a/src/spacetime.zig b/src/spacetime.zig index 6352982..e3ba024 100644 --- a/src/spacetime.zig +++ b/src/spacetime.zig @@ -91,15 +91,31 @@ pub const Timestamp = struct { }; pub const TimeUnit = enum { + Minutes, Seconds, + Milliseconds, + Microseconds, }; pub const TimeDuration = struct { __time_duration_micros__: i64, pub fn as_f32(self: @This(), unit: TimeUnit) f32 { + const micros: f32 = @floatFromInt(self.__time_duration_micros__); return switch(unit) { - .Seconds => @as(f32, @floatFromInt(self.__time_duration_micros__)) / std.time.us_per_s, + .Minutes => micros / std.time.us_per_min, + .Seconds => micros / std.time.us_per_s, + .Milliseconds => micros / std.time.us_per_ms, + .Microseconds => micros, + }; + } + + pub fn create(time: f32, unit: TimeUnit) TimeDuration { + return switch(unit) { + .Minutes => .{ .__time_duration_micros__ = time * std.time.us_per_min}, + .Seconds => .{ .__time_duration_micros__ = time * std.time.us_per_s}, + .Milliseconds => .{ .__time_duration_micros__ = time * std.time.us_per_ms}, + .Microseconds => .{ .__time_duration_micros__ = time } }; } }; @@ -117,6 +133,12 @@ pub const ScheduleAt = union(enum){ } }; } + + pub fn interval(time: f32, unit: TimeUnit) ScheduleAt { + return .{ + .Interval = TimeDuration.create(time, unit), + }; + } }; pub const ConnectionId = struct {