mirror of
https://github.com/Ratstail91/Mementos.git
synced 2025-11-29 02:24:28 +11:00
70 lines
2.0 KiB
C#
70 lines
2.0 KiB
C#
using Ink.Runtime;
|
|
|
|
namespace Ink.Runtime
|
|
{
|
|
/// <summary>
|
|
/// Internal structure used to point to a particular / current point in the story.
|
|
/// Where Path is a set of components that make content fully addressable, this is
|
|
/// a reference to the current container, and the index of the current piece of
|
|
/// content within that container. This scheme makes it as fast and efficient as
|
|
/// possible to increment the pointer (move the story forwards) in a way that's as
|
|
/// native to the internal engine as possible.
|
|
/// </summary>
|
|
public struct Pointer
|
|
{
|
|
public Container container;
|
|
public int index;
|
|
|
|
public Pointer (Container container, int index)
|
|
{
|
|
this.container = container;
|
|
this.index = index;
|
|
}
|
|
|
|
public Runtime.Object Resolve ()
|
|
{
|
|
if (index < 0) return container;
|
|
if (container == null) return null;
|
|
if (container.content.Count == 0) return container;
|
|
if (index >= container.content.Count) return null;
|
|
return container.content [index];
|
|
|
|
}
|
|
|
|
public bool isNull {
|
|
get {
|
|
return container == null;
|
|
}
|
|
}
|
|
|
|
public Path path {
|
|
get {
|
|
if( isNull ) return null;
|
|
|
|
if (index >= 0)
|
|
return container.path.PathByAppendingComponent (new Path.Component(index));
|
|
else
|
|
return container.path;
|
|
}
|
|
}
|
|
|
|
public override string ToString ()
|
|
{
|
|
if (container == null)
|
|
return "Ink Pointer (null)";
|
|
|
|
return "Ink Pointer -> " + container.path.ToString () + " -- index " + index;
|
|
}
|
|
|
|
public static Pointer StartOf (Container container)
|
|
{
|
|
return new Pointer {
|
|
container = container,
|
|
index = 0
|
|
};
|
|
}
|
|
|
|
public static Pointer Null = new Pointer { container = null, index = -1 };
|
|
|
|
}
|
|
} |