public VisitStatus VisitCollectionProperty <TProperty2, TContainer2, TValue2>(TProperty2 property, ref TContainer2 container, ref ChangeTracker changeTracker) where TProperty2 : ICollectionProperty <TContainer2, TValue2> { if (Result) { int count = property.GetCount(ref container); for (int i = 0; i != count && Result; ++i) { var getter = new MemberInfoGetter <TContainer2>(); property.GetPropertyAtIndex(ref container, i, ref changeTracker, ref getter); ContextMemberInfo info; if (getter.Found) { info = new ContextMemberInfo( ContextFieldInfo.MakeOperator("[" + i + "]") , getter.Result ); } else { // Unknown type info = new ContextMemberInfo( ContextFieldInfo.MakeOperator("[" + i + "]") , new ContextTypeInfo() ); } Result = Visitor(info); } } return(VisitStatus.Handled); }
public override bool VisitAllMembers(Func <ContextMemberInfo, bool> visitor) { foreach (var e in World.EntityManager.GetAllEntities()) { var info = new ContextMemberInfo(ContextFieldInfo.MakeOperator($"[{e.Index}]"), ContextTypeInfo.Make(typeof(PropertyPathContext <EntityContainer, EntityContainer>))); if (!visitor(info)) { return(false); } } return(true); }
public override bool VisitAllMembers(Func <ContextMemberInfo, bool> visitor) { var comps = GO.GetComponents <Component>(); for (int i = 0; i != comps.Length; ++i) { var info = new ContextMemberInfo( ContextFieldInfo.MakeOperator($"[{i}]"), ContextTypeInfo.Make(comps[i].GetType()) ); if (!visitor(info)) { return(false); } } return(true); }
public override bool TryParseIndex(string path, RangeInt cursor, out IWatchContext ctx) { if (ParserUtils.TryParseScopeSequenceRange(path, ref cursor, ParserUtils.DelemiterQuote, out var worldNameRangeIn, out var worldNameRangeOut)) { string worldName = path.Substring(worldNameRangeIn); foreach (var w in Entities.World.All) { if (w.Name == worldName) { ctx = new WorldContext(this, $"[\"{worldName}\"]", w, ContextFieldInfo.MakeOperator($"[\"{worldName}\"]")); return(true); } } } ctx = default; return(false); }
public override bool TryParseIndex(string path, RangeInt cursor, out IWatchContext ctx) { if (ParserUtils.TryParseScopeSequenceRange(path, ref cursor, ParserUtils.DelemiterQuote, out var nameRangeIn, out var nameRangeOut)) { string name = path.Substring(nameRangeIn); for (int i = 0; i != UnityEngine.SceneManagement.SceneManager.sceneCount; ++i) { var s = UnityEngine.SceneManagement.SceneManager.GetSceneAt(i); if (s.name == name) { ctx = new SceneContext(this, $"[\"{name}\"]", s, ContextFieldInfo.MakeOperator($"[\"{name}\"]")); return(true); } } } ctx = default; return(false); }
public override bool TryParseIndex(string path, RangeInt cursor, out IWatchContext ctx) { if (ParserUtils.TryParseScopeSequenceRange(path, ref cursor, ParserUtils.DelemiterQuote, out var nameRangeIn, out var nameRangeOut)) { string name = path.Substring(nameRangeIn); foreach (var go in Scene.GetRootGameObjects()) { if (go.name == name) { GameObject go2 = go; ctx = new GameObjectContext(this, $"[\"{name}\"]", go, ContextFieldInfo.MakeOperator($"[\"{name}\"]")); //ctx = new PropertyPathContext<GameObject, GameObject>(this, this, $"[\"{name}\"]", ref go2, null, ContextFieldInfo.MakeOperator($"[\"{name}\"]")); //ctx = new PropertyBagContext<GameObject>(this, $"[\"{name}\"]", ref go2, ContextFieldInfo.MakeOperator($"[\"{name}\"]")); return(true); } } } ctx = default; return(false); }
public override bool TryParseIndex(string path, RangeInt cursor, out IWatchContext ctx) { if (ParserUtils.TryParseIntAt(path, ref cursor, out var index)) { var comps = GO.GetComponents <Component>(); Component comp = comps[index]; //Type PropertyBagContextType = typeof(PropertyBagContext<>); //Type[] typeParams = new Type[] { comp.GetType() }; //Type PropertyBagContextTypeGen = PropertyBagContextType.MakeGenericType(typeParams); // //ctx = (IWatchContext)Activator.CreateInstance(PropertyBagContextTypeGen, this, $"[{index}]", comp, ContextFieldInfo.MakeOperator($"[{index}]")); Type PropertyPathContextType = typeof(PropertyPathContext <,>); Type[] typeParams = new Type[] { comp.GetType(), comp.GetType() }; Type PropertyBagContextTypeGen = PropertyPathContextType.MakeGenericType(typeParams); //public PropertyPathContext(IWatchContext parent, IWatchContext rootPathContext, string relativePath, ref TContainer container, PropertyPath propPath, ContextFieldInfo fieldInfo) ctx = (IWatchContext)Activator.CreateInstance(PropertyBagContextTypeGen, this, this, $"[{index}]", comp, null, ContextFieldInfo.MakeOperator($"[{index}]")); if (ctx != null) { return(ctx != null); } } ctx = default; return(false); }
protected ContextMemberInfo MakeMemberInfo <TMemberType>(string index) { return(new ContextMemberInfo(ContextFieldInfo.MakeOperator($"[{index}]"), ContextTypeInfo.Make(typeof(TMemberType)))); }
public override bool TryParse(string path, ref RangeInt cursor, out IWatchContext ctx) { var c = cursor; if (ParserUtils.TryParseScopeSequenceRange(path, ref c, ParserUtils.DelemiterSquareBracket, out var seqIn, out var seqOut)) { if (ParserUtils.TryParseIntAt(path, ref seqIn, out var index)) { var es = World.EntityManager.GetAllEntities(); for (int i = 0; i != es.Length; ++i) { if (es[i].Index == index) { cursor = c; var ctnr = new EntityContainer(World.EntityManager, es[i]); ctx = new PropertyPathContext <EntityContainer, EntityContainer>(this, this, $"[{es[i].Index}]", ctnr, null, ContextFieldInfo.MakeOperator($"[{es[i].Index}]")); return(true); } } } } ctx = null; return(false); }
VisitStatus IPropertyVisitor.VisitCollectionProperty <TProperty2, TContainer2, TValue2>(TProperty2 property, ref TContainer2 container, ref ChangeTracker changeTracker) { var propName = property.GetName(); if (propName != PropertyIdentifier) { return(VisitStatus.Handled); } if (Result != null) { return(VisitStatus.Handled); } Result = new PropertyPathContext <TContainer, TValue2>(Parent, Root, ParserUtils.MakePathRelative(PropertyPart), Container, RootPath.AppendedIndexer(PropertyPart), ContextFieldInfo.MakeOperator(PropertyPart)); return(VisitStatus.Handled); }