#date-time #time #game #date

ticktime

提供将tick转换为游戏日期时间的ticktime结构体

3个不稳定版本

0.1.0 2021年2月27日
0.0.2 2021年2月22日
0.0.1 2020年12月10日

#703 in 游戏开发

MIT/Apache

40KB
873

TickTime-rs

将tick数字转换为日期时间以便在游戏中使用。最初是为了满足城市建设游戏的需求,但也适用于任何需要从ticks处理日期时间的游戏。

功能

  • 可配置日历
    • 类似地球的实历:计算时间将遵循真实地球日历规则
    • 类似地球的农历:计算时间将使用12个月30天的农历
    • 自定义日历:计算时间将通过初始化时提供的自定义单位时间来完成
  • 更新事件:每个tick将计算时间,如果启用,将返回一个包含所有字段更新的事件。

示例

类似地球的农历

    // Initialize a lunar ticktime where one tick is 3600 seconds
    let mut ticktime = TickTime::init(
        0, TickTimeOptions {
            tick_time_type: TickTimeType::EarthLike { seconds_per_tick: 3600, month_type: EarthLikeMonthType::Lunar },
            compute_events: false,
        }
    ).unwrap();

    // Calling tick to simulate 40 days
    for _ in 0..(24*40) {
        ticktime.tick();
    }

    println!("{}", ticktime.to_string()); // Month 1, Day 10

类似地球的实历

    // Initialize a real ticktime where one tick is 3600 seconds
    let mut ticktime = TickTime::init(
        0, TickTimeOptions {
            tick_time_type: TickTimeType::EarthLike { seconds_per_tick: 3600, month_type: EarthLikeMonthType::Real },
            compute_events: false,
            }
        ).unwrap();

    // Calling tick to simulate 40 days
    for _ in 0..(24*40) {
        ticktime.tick();
    }

    println!("{}", ticktime.to_string()); // Month 1, Day 9

自定义日历

    // Initialize a custom ticktime where one tick is 3600 seconds
    // where each day is 12 hours long
    // and year are composed of 4 months with 1 day
    let mut ticktime = TickTime::init(
        0, TickTimeOptions {
            tick_time_type:
            TickTimeType::Custom {
            seconds_per_tick: 3600,
            hours_in_a_day: 12,
            months_durations: vec![1, 1, 1, 1],
            seasons_durations: vec![4],
            week_duration: 7,
        },
        compute_events: false,
        },
    ).unwrap();

    // Calling tick to simulate 40 days
    for _ in 0..(24*40) {
        ticktime.tick();
    }

    println!("{}", ticktime.to_string()); // Year 20, Month 0, Day 0

请查看示例以获取更多使用案例。

贡献

与任何操作系统项目一样,欢迎贡献。问题或PR。请查看问题以了解您是否可以参与现有需求。

无运行时依赖