NpcScheduling/NpcSchedule.cs
using System;
namespace Clover.NpcScheduling;
public class NpcSchedule
{
public class Activity
{
public int StartHour;
public int StartMinute;
public int EndHour;
public int EndMinute;
}
public class SleepActivity : Activity
{
}
public class WanderActivity : Activity
{
}
public class ShopActivity : Activity
{
}
public List<Activity> Activities { get; set; } = new();
public void AddActivity( Activity activity )
{
Activities.Add( activity );
}
public int GetLastFreeTime()
{
if ( Activities.Count == 0 )
return 0;
Activity lastActivity = Activities[^1];
return lastActivity.EndHour * 60 + lastActivity.EndMinute;
}
public void GenerateSchedule()
{
Activities.Clear();
// Sleep
SleepActivity sleep_morning = new()
{
StartHour = 0,
StartMinute = 0,
EndHour = 6 + Random.Shared.Int( 0, 2 ),
EndMinute = Random.Shared.Int( 0, 59 )
};
AddActivity( sleep_morning );
// random day activities
int lastFreeTime = GetLastFreeTime();
while ( lastFreeTime < 20 * 60 )
{
Activity activity = new()
{
StartHour = lastFreeTime / 60,
StartMinute = lastFreeTime % 60,
EndHour = lastFreeTime / 60 + Random.Shared.Int( 1, 3 ),
EndMinute = Random.Shared.Int( 0, 59 )
};
AddActivity( activity );
lastFreeTime = GetLastFreeTime();
}
// Sleep
SleepActivity sleep_evening = new()
{
StartHour = 20 + Random.Shared.Int( 0, 2 ),
StartMinute = Random.Shared.Int( 0, 59 ),
EndHour = 24,
EndMinute = 0
};
AddActivity( sleep_evening );
}
}