rokojori_action_library/Runtime/Tools/Async.cs

114 lines
2.3 KiB
C#
Raw Normal View History

2025-02-19 12:12:12 +00:00
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System;
using Godot;
using System;
using System.Threading.Tasks;
2026-05-22 12:25:02 +00:00
using Rokojori.Extensions;
2025-02-19 12:12:12 +00:00
namespace Rokojori
{
public class Async
{
public const double waitTime = 1.0 / 60.0;
public static async Task Wait( double waitTime = Async.waitTime )
{
await Task.Delay( (int)( waitTime * 1000 ) );
return;
}
public static double StartTimer()
{
2026-05-22 12:25:02 +00:00
return Godot.Time.GetTicksMsec() / 1000.0;
2025-02-19 12:12:12 +00:00
}
public static double GetTimeMS()
{
2026-05-22 12:25:02 +00:00
return Godot.Time.GetTicksMsec();
}
public static double PrintAndUpdateMS( double ms, string info = null )
{
var now = GetTimeMS();
var elapsed = now - ms;
2026-05-22 12:25:02 +00:00
#if ROKOJORI_ACTION_CORE
if ( info != null && info != "" )
{
RJLog.Log( "Info:", info, "| Elapsed:", elapsed, "Time:", now );
}
else
{
RJLog.Log( "| Elapsed:", elapsed, "Time:", now );
}
#else
if ( info != null && info != "" )
{
RJLog.Log( "Info:", info, "| Elapsed:", elapsed._DDD(), "Time:", now._DDD() );
}
else
{
RJLog.Log( "| Elapsed:", elapsed._DDD(), "Time:", now._DDD() );
}
2026-05-22 12:25:02 +00:00
#endif
return now;
}
2025-02-19 12:12:12 +00:00
public static async Task<double> WaitIfExceeded( double last, double waitTime = Async.waitTime )
{
2026-05-22 12:25:02 +00:00
var now = Godot.Time.GetTicksMsec() / 1000.0;
2025-02-19 12:12:12 +00:00
if ( ( now - last ) > waitTime )
{
await Task.Delay( (int)( waitTime * 1000 ) );
2026-05-22 12:25:02 +00:00
return Godot.Time.GetTicksMsec() / 1000.0;;
2025-02-19 12:12:12 +00:00
}
return last;
}
2025-05-21 20:44:28 +00:00
public static async Task<double> WaitIfExceeded( double last, Node node, double waitTime = Async.waitTime )
{
2026-05-22 12:25:02 +00:00
var now = Godot.Time.GetTicksMsec() / 1000.0;
2025-05-21 20:44:28 +00:00
if ( ( now - last ) > waitTime )
{
await node.RequestNextFrame();
2026-05-22 12:25:02 +00:00
return Godot.Time.GetTicksMsec() / 1000.0;;
2025-05-21 20:44:28 +00:00
}
return last;
}
2025-02-19 12:12:12 +00:00
public static double DoIfExceeded( double last, System.Action action, double waitTime = Async.waitTime )
{
2026-05-22 12:25:02 +00:00
var now = Godot.Time.GetTicksMsec() / 1000.0;
2025-02-19 12:12:12 +00:00
if ( ( now - last ) > waitTime )
{
action();
}
2026-05-22 12:25:02 +00:00
return Godot.Time.GetTicksMsec() / 1000.0;;
2025-02-19 12:12:12 +00:00
}
}
}