您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
76 行
2.0 KiB
76 行
2.0 KiB
using Unity.Entities;
|
|
using Unity.Sample.Core;
|
|
using UnityEngine;
|
|
|
|
public struct GameTime
|
|
{
|
|
/// <summary>Number of ticks per second.</summary>
|
|
public int tickRate
|
|
{
|
|
get { return m_tickRate; }
|
|
set
|
|
{
|
|
m_tickRate = value;
|
|
tickInterval = 1.0f / m_tickRate;
|
|
}
|
|
}
|
|
|
|
/// <summary>Length of each world tick at current tickrate, e.g. 0.0166s if ticking at 60fps.</summary>
|
|
public float tickInterval { get; private set; } // Time between ticks
|
|
public int tick; // Current tick
|
|
public float tickDuration; // Duration of current tick
|
|
|
|
public GameTime(int tickRate)
|
|
{
|
|
this.m_tickRate = tickRate;
|
|
this.tickInterval = 1.0f / m_tickRate;
|
|
this.tick = 1;
|
|
this.tickDuration = 0;
|
|
}
|
|
|
|
public float TickDurationAsFraction
|
|
{
|
|
get { return tickDuration / tickInterval; }
|
|
}
|
|
|
|
public void SetTime(int tick, float tickDuration)
|
|
{
|
|
this.tick = tick;
|
|
this.tickDuration = tickDuration;
|
|
}
|
|
|
|
public float DurationSinceTick(int tick)
|
|
{
|
|
return (this.tick - tick) * tickInterval + tickDuration;
|
|
}
|
|
|
|
public void AddDuration(float duration)
|
|
{
|
|
tickDuration += duration;
|
|
int deltaTicks = Mathf.FloorToInt(tickDuration * (float)tickRate);
|
|
tick += deltaTicks;
|
|
tickDuration = tickDuration % tickInterval;
|
|
}
|
|
|
|
public static float GetDuration(GameTime start, GameTime end)
|
|
{
|
|
if (start.tickRate != end.tickRate)
|
|
{
|
|
GameDebug.LogError("Trying to compare time with different tick rates (" + start.tickRate + " and " + end.tickRate + ")");
|
|
return 0;
|
|
}
|
|
|
|
float result = (end.tick - start.tick) * start.tickInterval + end.tickDuration - start.tickDuration;
|
|
return result;
|
|
}
|
|
|
|
int m_tickRate;
|
|
}
|
|
|
|
|
|
public struct GlobalGameTime : IComponentData
|
|
{
|
|
public GameTime gameTime;
|
|
public float frameDuration;
|
|
}
|
|
|