BITFALL/Assets/GSpawn - Level Designer/Scripts/Level Design/Int Pattern/IntPatternExpression.cs

212 lines
6.4 KiB
C#

#if UNITY_EDITOR
using System.Collections.Generic;
namespace GSpawn
{
public interface IIntPatternExpressionVisitor
{
public void visitIntLiteralSequence (IntPatternIntLiteralSequenceExpression intLiteralSeqExpr);
public void visitIntLiteral (IntPatternIntLiteralExpression intLiteralExpr);
public void visitRepeat (IntPatternRepeatExpression repeatExpr);
public void visitIsoTriangle (IntPatternIsoTriangleEpression isoTriangleExpr);
public void visitSteps (IntPatternStepsExpression stepsExpr);
public void visitUnary (IntPatternUnaryExpression unaryExpr);
public void visitBinary (IntPatternBinaryExpression binaryExpr);
public void visitIntSeq (IntPatternIntSeqExpression intSeqExpr);
}
public abstract class IntPatternExpression
{
public abstract void accept(IIntPatternExpressionVisitor visitor);
}
public class IntPatternIntLiteralSequenceExpression : IntPatternExpression
{
private List<int> _values = new List<int>();
public int numValues { get { return _values.Count; } }
public void addValue(int val)
{
_values.Add(val);
}
public List<int> getValues()
{
return new List<int>(_values);
}
public override void accept(IIntPatternExpressionVisitor visitor)
{
visitor.visitIntLiteralSequence(this);
}
}
public class IntPatternIntLiteralExpression : IntPatternExpression
{
private int _value;
public int value { get { return _value; } }
public IntPatternIntLiteralExpression(int val)
{
_value = val;
}
public override void accept(IIntPatternExpressionVisitor visitor)
{
visitor.visitIntLiteral(this);
}
}
public class IntPatternRepeatExpression : IntPatternExpression
{
private int _repeatCount;
private IntPatternExpression _expr;
public int repeatCount { get { return _repeatCount; } }
public IntPatternExpression expr { get { return _expr; } }
public IntPatternRepeatExpression(int repeatCount, IntPatternExpression expr)
{
_repeatCount = repeatCount;
_expr = expr;
}
public override void accept(IIntPatternExpressionVisitor visitor)
{
visitor.visitRepeat(this);
}
}
public class IntPatternIsoTriangleEpression : IntPatternExpression
{
private List<int> _values = new List<int>();
private int _height;
public IntPatternIsoTriangleEpression(int height)
{
_height = height;
}
public override void accept(IIntPatternExpressionVisitor visitor)
{
visitor.visitIsoTriangle(this);
}
public List<int> getValues()
{
if (_values.Count == 0)
{
int incr = _height > 0 ? 1 : -1;
for (int val = incr; val != _height; val += incr)
_values.Add(val);
_values.Add(_height);
int end = incr - incr;
for (int val = _height - incr; val != end; val -= incr)
_values.Add(val);
}
return new List<int>(_values);
}
}
public class IntPatternStepsExpression : IntPatternExpression
{
private List<int> _values = new List<int>();
private int _numSteps;
private int _stepLength;
private int _heightSign;
public IntPatternStepsExpression(int numSteps, int stepLength, int heightSign)
{
_numSteps = numSteps;
_stepLength = stepLength;
_heightSign = heightSign;
}
public List<int> getValues()
{
if (_values.Count == 0)
{
int startHeight = 1 * _heightSign;
for (int stepIndex = 0; stepIndex < _numSteps; ++stepIndex)
{
int heightVal = startHeight + stepIndex * _heightSign;
for (int i = 0; i < _stepLength; ++i)
_values.Add(heightVal);
}
}
return new List<int>(_values);
}
public override void accept(IIntPatternExpressionVisitor visitor)
{
visitor.visitSteps(this);
}
}
public class IntPatternUnaryExpression : IntPatternExpression
{
private int _tokenId;
private IntPatternExpression _expr;
public int tokenId { get { return _tokenId; } }
public IntPatternExpression expr { get { return _expr; } }
public IntPatternUnaryExpression(int tokenId, IntPatternExpression expr)
{
_tokenId = tokenId;
_expr = expr;
}
public override void accept(IIntPatternExpressionVisitor visitor)
{
visitor.visitUnary(this);
}
}
public class IntPatternBinaryExpression : IntPatternExpression
{
private IntPatternExpression _left;
private int _tokenId;
private IntPatternExpression _right;
public IntPatternExpression left { get { return _left; } }
public int tokenId { get { return _tokenId; } }
public IntPatternExpression right { get { return _right; } }
public IntPatternBinaryExpression(IntPatternExpression left, int tokenId, IntPatternExpression right)
{
_left = left;
_tokenId = tokenId;
_right = right;
}
public override void accept(IIntPatternExpressionVisitor visitor)
{
visitor.visitBinary(this);
}
}
public class IntPatternIntSeqExpression : IntPatternExpression
{
private string _seqName = string.Empty;
public string seqName { get { return _seqName; } }
public IntPatternIntSeqExpression(string seqName)
{
_seqName = seqName;
}
public override void accept(IIntPatternExpressionVisitor visitor)
{
visitor.visitIntSeq(this);
}
}
}
#endif