public void LoadActorsFromData()
{
var leader = this.Leader;
foreach (var cutsceneActorData in this.Data.Actors)
{
Creature actor = null;
var actorName = cutsceneActorData.Name;
var defaultActorName = cutsceneActorData.Default;
// Retrieve actor
if (actorName.StartsWith("#"))
{
var actorData = AuraData.ActorDb.Find(actorName);
if (actorData == null)
Log.Warning("Cutscene.FromData: Unknown actor '{0}'.", actorData);
else
actor = new NPC(actorData);
}
else if (actorName == "me")
{
actor = leader;
}
else if (actorName == "leader")
{
actor = _viewers[0];
}
else if (actorName.StartsWith("player"))
{
int idx;
if (!int.TryParse(actorName.Substring("player".Length), out idx))
{
Log.Warning("Cutscene.FromData: Invalid party member actor name '{0}'.", actorName);
}
else if (idx > _viewers.Length - 1)
{
if (!string.IsNullOrWhiteSpace(defaultActorName))
{
var actorData = AuraData.ActorDb.Find(defaultActorName);
if (actorData == null)
Log.Warning("Cutscene.FromData: Unknown default actor '{0}'.", defaultActorName);
else
actor = new NPC(actorData);
}
else
Log.Warning("Cutscene.FromData: Index out of party member range '{0}/{1}'.", idx, _viewers.Length);
}
else
{
actor = _viewers[idx];
}
}
else
{
Log.Warning("Cutscene.FromData: Unknown kind of actor ({0}).", actorName);
}
if (actor == null)
{
var dummy = new NPC();
actor = dummy;
}
this.AddActor(actorName, actor);
}
}