Add project files.
This commit is contained in:
93
Assets/Cryville/Crtr/RulesetSelectors.cs
Normal file
93
Assets/Cryville/Crtr/RulesetSelectors.cs
Normal file
@@ -0,0 +1,93 @@
|
||||
using Cryville.Common.Pdt;
|
||||
using Cryville.Crtr.Components;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Cryville.Crtr {
|
||||
public class RulesetSelectors {
|
||||
readonly RulesetSelector[] selectors;
|
||||
public RulesetSelectors(IEnumerable<RulesetSelector> s) {
|
||||
selectors = s.ToArray();
|
||||
}
|
||||
public IEnumerable<ChartEvent> Match(ChartEvent ev) {
|
||||
IEnumerable<ChartEvent> result = new ChartEvent[] { ev };
|
||||
foreach (var sel in selectors) {
|
||||
IEnumerable<ChartEvent> temp = new ChartEvent[0];
|
||||
foreach (var e in result) {
|
||||
var m = sel.Match(e);
|
||||
if (m != null) temp = temp.Concat(m);
|
||||
}
|
||||
result = temp;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
public override string ToString() {
|
||||
if (selectors.Length == 0) return "";
|
||||
bool flag = false;
|
||||
string r = "";
|
||||
foreach (var s in selectors) {
|
||||
if (flag) r += " " + s.ToString();
|
||||
else { r += s.ToString(); flag = true; }
|
||||
}
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class RulesetSelector {
|
||||
public abstract IEnumerable<ChartEvent> Match(ChartEvent ev);
|
||||
public class CreateItem : RulesetSelector {
|
||||
public override string ToString() {
|
||||
return "$";
|
||||
}
|
||||
public override IEnumerable<ChartEvent> Match(ChartEvent ev) {
|
||||
if (!(ev is EventList)) throw new ArgumentException("Event is not event list");
|
||||
var tev = (EventList)ev;
|
||||
var result = tev.Create();
|
||||
tev.Events.Add(result); // TODO create at
|
||||
return new ChartEvent[] { result };
|
||||
}
|
||||
}
|
||||
public class EventType : RulesetSelector {
|
||||
readonly string _type;
|
||||
public EventType(string type) { _type = type; }
|
||||
public override string ToString() {
|
||||
return _type;
|
||||
}
|
||||
public override IEnumerable<ChartEvent> Match(ChartEvent ev) {
|
||||
if (!(ev is EventContainer)) throw new ArgumentException("Event is not container");
|
||||
var tev = (EventContainer)ev;
|
||||
return new ChartEvent[] { tev.GetEventsOfType(_type) };
|
||||
}
|
||||
}
|
||||
public class Index : RulesetSelector {
|
||||
public override string ToString() {
|
||||
return "#";
|
||||
}
|
||||
public override IEnumerable<ChartEvent> Match(ChartEvent ev) {
|
||||
if (!(ev is EventList)) throw new ArgumentException("Event is not event list");
|
||||
var tev = (EventList)ev;
|
||||
return tev.Events; // TODO select at
|
||||
}
|
||||
}
|
||||
public class Property : RulesetSelector {
|
||||
readonly PdtExpression _exp;
|
||||
readonly PdtOperator _op;
|
||||
bool _flag;
|
||||
public Property(PdtExpression exp) {
|
||||
_exp = exp;
|
||||
_op = new PropOp.Boolean(v => _flag = v);
|
||||
}
|
||||
public override string ToString() {
|
||||
return string.Format("> {{{0}}}", _exp);
|
||||
}
|
||||
public override IEnumerable<ChartEvent> Match(ChartEvent ev) {
|
||||
ChartPlayer.etor.ContextEvent = ev;
|
||||
ChartPlayer.etor.Evaluate(_op, _exp);
|
||||
if (_flag) return new ChartEvent[] { ev };
|
||||
else return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user