protected void ProcessRenderRequest(Request r)
{
Log log = LogManager.Instance.DefaultLog;
if (log.LogDetail == LoggingLevel.Verbose)
{
log.Write(LogMessageLevel.Trivial, false, "PageRequestQueue: processing render thread request " + r.RequestType +
" for page ID " + r.Page.PageID.Value + " world " + r.Section.World.Name + " : " +
r.Section.Name, null);
}
try
{
switch (r.RequestType)
{
case RequestType.LoadPage:
{
// Allow procedural generation
if (r.Section.LoadProcedualPage(r.Page))
{
r.Page.ChangeStatus(UnitStatus.Prepared, UnitStatus.Loaded);
}
else
{
r.Page.Load();
}
}
break;
case RequestType.UnloadPage:
{
// Allow procedural generation
if (r.Section.UnloadProcedualPage(r.Page))
{
r.Page.ChangeStatus(UnitStatus.Loaded, UnitStatus.Prepared);
}
else
{
r.Page.Unload();
}
// Pass back to render thread to finalise
Request req = new Request(RequestType.UnpreparePage, r.Page, r.Section);
AddBackgroundRequest(req);
}
break;
case RequestType.DeletePage:
r.Page = null;
break;
}
}
catch (Exception e)
{
LogManager.Instance.Write("Error processing render request: " +
e.Message);
}
}
}