mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 13:59:39 +08:00
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
80 lines
2.5 KiB
Go
80 lines
2.5 KiB
Go
package warframeapi
|
||
|
||
import (
|
||
"sync"
|
||
"time"
|
||
|
||
"github.com/davidscholberg/go-durationfmt"
|
||
)
|
||
|
||
// 游戏时间模拟
|
||
type gameTime struct {
|
||
rwm sync.RWMutex
|
||
Name string `json:"name"` // 时间名称
|
||
NextTime time.Time `json:"time"` // 下次更新时间
|
||
Status bool `json:"status"` // 状态
|
||
StatusTrueDes string `json:"true_des"` // 状态说明
|
||
StatusFalseDes string `json:"false_des"` // 状态说明
|
||
DayTime int `json:"day"` // 白天时长
|
||
NightTime int `json:"night"` // 夜间时长
|
||
}
|
||
|
||
var (
|
||
gameTimes [3]*gameTime
|
||
)
|
||
|
||
// TimeString 根据传入的世界编号,获取对应的游戏时间文本
|
||
func (t *gameTime) String() string {
|
||
return "平原时间:" + t.daynight() + "\n" +
|
||
"下次更新:" + t.remaintime()
|
||
}
|
||
|
||
// 获取当前游戏时间状态(白天/夜晚)
|
||
func (t *gameTime) daynight() string {
|
||
t.rwm.RLock()
|
||
defer t.rwm.RUnlock()
|
||
if t.Status {
|
||
return t.StatusTrueDes
|
||
}
|
||
return t.StatusFalseDes
|
||
}
|
||
|
||
// 获取下一次时间状态更新的剩余游戏时间(x分x秒)
|
||
func (t *gameTime) remaintime() string {
|
||
t.rwm.RLock()
|
||
d := time.Until(t.NextTime)
|
||
t.rwm.RUnlock()
|
||
durStr, _ := durationfmt.Format(d, "%m分%s秒后")
|
||
return durStr
|
||
}
|
||
|
||
// 根据API返回内容修正游戏时间
|
||
func loadTime(api wfAPI) {
|
||
gameTimes = [3]*gameTime{
|
||
{Name: "地球平原", NextTime: api.CetusCycle.Expiry.Local(), Status: api.CetusCycle.IsDay, StatusTrueDes: "白天", StatusFalseDes: "夜晚", DayTime: 100 * 60, NightTime: 50 * 60},
|
||
{Name: "金星平原", NextTime: api.VallisCycle.Expiry.Local(), Status: api.VallisCycle.IsWarm, StatusTrueDes: "温暖", StatusFalseDes: "寒冷", DayTime: 400, NightTime: 20 * 60},
|
||
{Name: "火卫二平原", NextTime: api.CambionCycle.Expiry.Local(), Status: api.CambionCycle.Active == "fass", StatusTrueDes: "fass", StatusFalseDes: "vome", DayTime: 100 * 60, NightTime: 50 * 60},
|
||
}
|
||
}
|
||
|
||
// timeDet游戏时间更新
|
||
func timeDet() {
|
||
for _, v := range gameTimes {
|
||
// 当前时间对比下一次游戏状态更新时间,看看还剩多少秒
|
||
nt := time.Until(v.NextTime).Seconds()
|
||
// 已经过了游戏时间状态更新时间
|
||
if nt < 0 {
|
||
v.rwm.Lock()
|
||
// 更新游戏状态,如果是白天就切换到晚上,反之亦然
|
||
if v.Status {
|
||
// 计算下次的晚上更新时间
|
||
v.NextTime = v.NextTime.Add(time.Duration(v.NightTime) * time.Second)
|
||
} else {
|
||
// 计算下次的白天更新时间
|
||
v.NextTime = v.NextTime.Add(time.Duration(v.DayTime) * time.Second)
|
||
}
|
||
v.rwm.Unlock()
|
||
}
|
||
}
|
||
}
|