public MergedFieldProcessor()
    {
        var processType = typeof(FieldProcessor);
        var allProcess  = processType.Assembly.GetTypes()
                          .Where(t => t != processType && processType.IsAssignableFrom(t));

        first = CreateLink(allProcess.GetEnumerator());
    }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 4
0
    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);
        }
Exemplo n.º 6
0
 public void Awake()
 {
     fieldProcessor = levelController.FieldProcessor;
 }