public MergedFieldProcessor() { var processType = typeof(FieldProcessor); var allProcess = processType.Assembly.GetTypes() .Where(t => t != processType && processType.IsAssignableFrom(t)); first = CreateLink(allProcess.GetEnumerator()); }
public FieldUIController(LevelGenerator levelGenerator, FieldProcessor fieldProcessor) { fieldProcessor.OnItemSwap += SwapItems; fieldProcessor.OnItemRemove += RemoveItem; fieldProcessor.OnNewSpawn += SpawnNew; this.levelGenerator = levelGenerator; this.elements = levelGenerator.GenerateField(); UpdateElementsPositions(); }
private FieldProcessor CreateLink(IEnumerator <Type> processors) { if (processors.MoveNext()) { FieldProcessor link = (FieldProcessor)Activator.CreateInstance(processors.Current); link.NextProcessor = CreateLink(processors); return(link); } return(null); }
public void Awake() { var levelGenerator = new LevelGenerator(LevelInfo, Field); FieldProcessor = new FieldProcessor(levelInfo.FieldInfo, LevelInfo.ItemSet.ItemsCount); var fieldUIController = new FieldUIController(levelGenerator, FieldProcessor); AnimationsController.Instance.OnAnimationsFinished += FieldProcessor.CheckFields; AnimationsController.Instance.OnAnimationsFinished += FieldProcessor.CheckForFreeSpaces; }
private static TypeDefinition CreateJsTypeFactoryDefinition( TypeReference type, ModuleDefinition mainModule, IEnumerable <TypeReference> supportedTypes) { var objectTypeDefinition = mainModule.TypeSystem.Object; var iJSBindingFactoryDefinition = mainModule.ImportReference(typeof(IJSBindingFactory)); var definition = new TypeDefinition(type.Namespace, $"{type.Name}_JsFactory", TypeAttributes.Class, objectTypeDefinition); definition.Interfaces.Add(new InterfaceImplementation(iJSBindingFactoryDefinition)); TypeUtils.AddEmptyConstructor(definition, mainModule, mainModule.ImportReference(typeof(object).GetConstructor(Type.EmptyTypes))); var propertyAccessors = new Dictionary <string, (MethodDefinition getter, MethodDefinition setter)>(); foreach (var field in type.Resolve().Fields) { var reference = field.Module != mainModule ? mainModule.ImportReference(field) : field; propertyAccessors.Add(field.Name, ( FieldProcessor.CreateGetter(type, reference, mainModule, supportedTypes), FieldProcessor.CreateSetter(type, reference, mainModule, supportedTypes) )); definition.Methods.Add(propertyAccessors[reference.Name].getter); definition.Methods.Add(propertyAccessors[reference.Name].setter); } var finalizerMethod = CreateFinalizerMethod(mainModule); var noopFinalizerMethod = CreateNoopFinalizerMethod(mainModule); var createJsObjectForNativeMethod = CreateJsObjectForNative( mainModule, finalizerMethod, noopFinalizerMethod, propertyAccessors); var constructorMethod = ConstructorCallbackMethod(type, createJsObjectForNativeMethod, mainModule); var getNameMethod = CreateNamePropertyGetMethod(type, mainModule); var getComponentSizeMethod = CreateComponentSizePropertyGetMethod(type, mainModule); var entityCommandBufferSetComponentMethod = CreateEntityCommandBufferSetComponentMethod(type, mainModule); var getReadComponentTypeMethod = CreateReadComponentTypePropertyGetMethod(type, mainModule); definition.Methods.Add(entityCommandBufferSetComponentMethod); definition.Methods.Add(createJsObjectForNativeMethod); definition.Methods.Add(getNameMethod); definition.Methods.Add(getComponentSizeMethod); definition.Methods.Add(getReadComponentTypeMethod); definition.Methods.Add(constructorMethod); definition.Methods.Add(finalizerMethod); definition.Methods.Add(noopFinalizerMethod); definition.Methods.Add(AddCreateConstructorMethod(constructorMethod, mainModule)); var nameProperty = new PropertyDefinition("Name", PropertyAttributes.None, mainModule.TypeSystem.String); nameProperty.GetMethod = getNameMethod; var componentSizeProperty = new PropertyDefinition("ComponentSize", PropertyAttributes.None, mainModule.TypeSystem.Int32); componentSizeProperty.GetMethod = getComponentSizeMethod; var readComponentProperty = new PropertyDefinition("ReadComponentType", PropertyAttributes.None, mainModule.ImportReference(typeof(ComponentType))); readComponentProperty.GetMethod = getReadComponentTypeMethod; definition.Properties.Add(nameProperty); definition.Properties.Add(componentSizeProperty); definition.Properties.Add(readComponentProperty); return(definition); }
public void Awake() { fieldProcessor = levelController.FieldProcessor; }