Newer
Older
TheVengeance-Project-IADE-Unity2D / Assets / Ink / InkLibs / InkCompiler / ParsedHierarchy / List.cs
  1. using System.Collections.Generic;
  2. namespace Ink.Parsed
  3. {
  4. public class List : Parsed.Expression
  5. {
  6. public List<Identifier> itemIdentifierList;
  7. public List (List<Identifier> itemIdentifierList)
  8. {
  9. this.itemIdentifierList = itemIdentifierList;
  10. }
  11. public override void GenerateIntoContainer (Runtime.Container container)
  12. {
  13. var runtimeRawList = new Runtime.InkList ();
  14. if (itemIdentifierList != null) {
  15. foreach (var itemIdentifier in itemIdentifierList) {
  16. var nameParts = itemIdentifier?.name.Split ('.');
  17. string listName = null;
  18. string listItemName = null;
  19. if (nameParts.Length > 1) {
  20. listName = nameParts [0];
  21. listItemName = nameParts [1];
  22. } else {
  23. listItemName = nameParts [0];
  24. }
  25. var listItem = story.ResolveListItem (listName, listItemName, this);
  26. if (listItem == null) {
  27. if (listName == null)
  28. Error ("Could not find list definition that contains item '" + itemIdentifier + "'");
  29. else
  30. Error ("Could not find list item " + itemIdentifier);
  31. } else {
  32. if (listName == null)
  33. listName = ((ListDefinition)listItem.parent).identifier?.name;
  34. var item = new Runtime.InkListItem (listName, listItem.name);
  35. if (runtimeRawList.ContainsKey (item))
  36. Warning ("Duplicate of item '"+itemIdentifier+"' in list.");
  37. else
  38. runtimeRawList [item] = listItem.seriesValue;
  39. }
  40. }
  41. }
  42. container.AddContent(new Runtime.ListValue (runtimeRawList));
  43. }
  44. }
  45. }