From fd616d741890147224e61d821ebffc56e54086be Mon Sep 17 00:00:00 2001 From: Juha Date: Wed, 8 Jan 2025 15:57:02 +0900 Subject: [PATCH] =?UTF-8?q?global=E3=81=A8local=E3=81=AEinterface=E3=81=AE?= =?UTF-8?q?=E5=8C=BA=E5=88=A5=E3=82=92=E4=BD=9C=E6=88=90=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mooresmaster.Generator/Semantic/Semantics.cs | 29 +- .../Semantic/SemanticsGenerator.cs | 134 ++-- mooresmaster.SandBox/schema/blocks.yml | 708 +++++++++--------- 3 files changed, 448 insertions(+), 423 deletions(-) diff --git a/mooresmaster.Generator/Semantic/Semantics.cs b/mooresmaster.Generator/Semantic/Semantics.cs index 0118f24..cf3bf01 100644 --- a/mooresmaster.Generator/Semantic/Semantics.cs +++ b/mooresmaster.Generator/Semantic/Semantics.cs @@ -17,21 +17,21 @@ public class Semantics public readonly List<(SwitchId switchId, ClassId typeId)> SwitchInheritList = new(); public readonly Dictionary SwitchSemanticsTable = new(); public readonly Dictionary TypeSemanticsTable = new(); - + public SwitchId AddSwitchSemantics(SwitchSemantics switchSemantics) { var id = SwitchId.New(); SwitchSemanticsTable.Add(id, switchSemantics); return id; } - + public InterfaceId AddInterfaceSemantics(InterfaceSemantics interfaceSemantics) { var id = InterfaceId.New(); InterfaceSemanticsTable.Add(id, interfaceSemantics); return id; } - + public ClassId AddTypeSemantics(TypeSemantics typeSemantics) { var id = ClassId.New(); @@ -39,21 +39,21 @@ public ClassId AddTypeSemantics(TypeSemantics typeSemantics) SchemaTypeSemanticsTable.Add(typeSemantics.Schema, id); return id; } - + public RootId AddRootSemantics(RootSemantics rootSemantics) { var id = RootId.New(); RootSemanticsTable.Add(id, rootSemantics); return id; } - + public PropertyId AddPropertySemantics(PropertySemantics propertySemantics) { var id = PropertyId.New(); PropertySemanticsTable.Add(id, propertySemantics); return id; } - + public InterfacePropertyId AddInterfacePropertySemantics(InterfacePropertySemantics interfacePropertySemantics) { var id = InterfacePropertyId.New(); @@ -61,7 +61,7 @@ public InterfacePropertyId AddInterfacePropertySemantics(InterfacePropertySemant InterfacePropertyIdTable.Add(interfacePropertySemantics, id); return id; } - + public void AddInterfaceInterfaceImplementation(InterfaceId target, InterfaceId other) { if (!InterfaceInterfaceImplementationTable.TryGetValue(target, out var list)) @@ -69,10 +69,10 @@ public void AddInterfaceInterfaceImplementation(InterfaceId target, InterfaceId list = new List(); InterfaceInterfaceImplementationTable[target] = list; } - + list.Add(other); } - + public void AddClassInterfaceImplementation(ClassId target, InterfaceId other) { if (!ClassInterfaceImplementationTable.TryGetValue(target, out var list)) @@ -80,10 +80,10 @@ public void AddClassInterfaceImplementation(ClassId target, InterfaceId other) list = new List(); ClassInterfaceImplementationTable[target] = list; } - + list.Add(other); } - + public Semantics Merge(Semantics other) { foreach (var inherit in other.SwitchInheritList) SwitchInheritList.Add(inherit); @@ -97,10 +97,10 @@ public Semantics Merge(Semantics other) foreach (var kvp in other.InterfacePropertyIdTable) InterfacePropertyIdTable.Add(kvp.Key, kvp.Value); foreach (var kvp in other.InterfaceInterfaceImplementationTable) InterfaceInterfaceImplementationTable.Add(kvp.Key, kvp.Value); foreach (var kvp in other.ClassInterfaceImplementationTable) ClassInterfaceImplementationTable.Add(kvp.Key, kvp.Value); - + return this; } - + public Semantics AddTo(Semantics other) { return other.Merge(this); @@ -121,9 +121,10 @@ public record RootSemantics(Schema Root, ClassId ClassId) /// 親要素がinterfaceになることはない /// /// -public record TypeSemantics(PropertyId[] Properties, ISchema Schema) +public record TypeSemantics(PropertyId[] Properties, ISchema Schema, RootId RootId) { public PropertyId[] Properties = Properties; + public RootId RootId = RootId; public ISchema Schema = Schema; } diff --git a/mooresmaster.Generator/Semantic/SemanticsGenerator.cs b/mooresmaster.Generator/Semantic/SemanticsGenerator.cs index 811e16a..7eee56a 100644 --- a/mooresmaster.Generator/Semantic/SemanticsGenerator.cs +++ b/mooresmaster.Generator/Semantic/SemanticsGenerator.cs @@ -11,109 +11,133 @@ public static class SemanticsGenerator public static Semantics Generate(ImmutableArray schemaArray, SchemaTable table) { var semantics = new Semantics(); - + foreach (var schema in schemaArray) { // ファイルに分けられているルートの要素はclassになる // ただし、objectSchemaだった場合のちのGenerateで生成されるため、ここでは生成しない if (table.Table[schema.InnerSchema] is ObjectSchema objectSchema) { - var (innerSemantics, id) = Generate(objectSchema, table); - semantics.AddRootSemantics(new RootSemantics(schema, id)); + var rootId = RootId.New(); + var (innerSemantics, id) = Generate(objectSchema, table, rootId); + semantics.RootSemanticsTable.Add(rootId, new RootSemantics(schema, id)); innerSemantics.AddTo(semantics); } else { - var typeSemantics = new TypeSemantics([], table.Table[schema.InnerSchema]); + var rootId = RootId.New(); + var typeSemantics = new TypeSemantics([], table.Table[schema.InnerSchema], rootId); var typeId = semantics.AddTypeSemantics(typeSemantics); - semantics.AddRootSemantics(new RootSemantics(schema, typeId)); - - Generate(table.Table[schema.InnerSchema], table).AddTo(semantics); + semantics.RootSemanticsTable.Add(rootId, new RootSemantics(schema, typeId)); + + Generate(table.Table[schema.InnerSchema], table, rootId).AddTo(semantics); } - + foreach (var defineInterface in schema.Interfaces) GenerateInterfaceSemantics(defineInterface, schema, table).AddTo(semantics); } - + ResolveInterfaceInterfaceImplementations(semantics); ResolveClassInterfaceImplementations(semantics); - + return semantics; } - + private static void ResolveInterfaceInterfaceImplementations(Semantics semantics) { - var interfaceTable = semantics.InterfaceSemanticsTable.ToDictionary(kvp => kvp.Value.Interface.InterfaceName, kvp => kvp.Key); - + var globalInterfaceTable = semantics.InterfaceSemanticsTable + .Where(i => i.Value.Interface.IsGlobal) + .ToDictionary(kvp => kvp.Value.Interface.InterfaceName, kvp => kvp.Key); + foreach (var kvp in semantics.InterfaceSemanticsTable) { var target = kvp.Key; - + var localInterfaceTable = semantics.InterfaceSemanticsTable + .Where(i => i.Value.Schema.SchemaId == kvp.Value.Schema.SchemaId) + .Where(i => !i.Value.Interface.IsGlobal) + .ToDictionary(kvp => kvp.Value.Interface.InterfaceName, kvp => kvp.Key); + foreach (var interfaceId in kvp.Value.Interface.ImplementationInterfaces) - { - var other = interfaceTable[interfaceId]; - semantics.AddInterfaceInterfaceImplementation(target, other); - } + if (localInterfaceTable.TryGetValue(interfaceId, out var localOther)) + { + semantics.AddInterfaceInterfaceImplementation(target, localOther); + } + else + { + var globalOther = globalInterfaceTable[interfaceId]; + semantics.AddInterfaceInterfaceImplementation(target, globalOther); + } } } - + private static void ResolveClassInterfaceImplementations(Semantics semantics) { - var interfaceTable = semantics.InterfaceSemanticsTable.ToDictionary(kvp => kvp.Value.Interface.InterfaceName, kvp => kvp.Key); - + var globalInterfaceTable = semantics.InterfaceSemanticsTable + .Where(i => i.Value.Interface.IsGlobal) + .ToDictionary(kvp => kvp.Value.Interface.InterfaceName, kvp => kvp.Key); + foreach (var kvp in semantics.TypeSemanticsTable) { if (kvp.Value.Schema is not ObjectSchema objectSchema) continue; - + var localInterfaceTable = semantics.InterfaceSemanticsTable + .Where(i => i.Value.Schema.SchemaId == semantics.RootSemanticsTable[kvp.Value.RootId].Root.SchemaId) + .Where(i => !i.Value.Interface.IsGlobal) + .ToDictionary(kvp => kvp.Value.Interface.InterfaceName, kvp => kvp.Key); + var target = kvp.Key; - + foreach (var interfaceName in objectSchema.InterfaceImplementations) - { - var interfaceId = interfaceTable[interfaceName]; - semantics.AddClassInterfaceImplementation(target, interfaceId); - } + if (localInterfaceTable.TryGetValue(interfaceName, out var localOther)) + { + semantics.AddClassInterfaceImplementation(target, localOther); + } + else + { + var globalOther = globalInterfaceTable[interfaceName]; + semantics.AddClassInterfaceImplementation(target, globalOther); + } } } - + private static Semantics GenerateInterfaceSemantics(DefineInterface defineInterface, Schema schema, SchemaTable table) { var semantics = new Semantics(); - + var interfaceId = InterfaceId.New(); - + List propertyIds = new(); foreach (var property in defineInterface.Properties) { var propertySchema = property.Value; - + var propertyId = semantics.AddInterfacePropertySemantics(new InterfacePropertySemantics(propertySchema, interfaceId)); propertyIds.Add(propertyId); } - + semantics.InterfaceSemanticsTable[interfaceId] = new InterfaceSemantics( schema, defineInterface, propertyIds.ToArray() ); - + return semantics; } - - private static Semantics Generate(ISchema schema, SchemaTable table) + + private static Semantics Generate(ISchema schema, SchemaTable table, RootId rootId) { var semantics = new Semantics(); - + switch (schema) { case ArraySchema arraySchema: - Generate(table.Table[arraySchema.Items], table).AddTo(semantics); + Generate(table.Table[arraySchema.Items], table, rootId).AddTo(semantics); break; case ObjectSchema objectSchema: - var (innerSemantics, _) = Generate(objectSchema, table); + var (innerSemantics, _) = Generate(objectSchema, table, rootId); innerSemantics.AddTo(semantics); break; case SwitchSchema oneOfSchema: - var (oneOfInnerSemantics, _) = Generate(oneOfSchema, table); + var (oneOfInnerSemantics, _) = Generate(oneOfSchema, table, rootId); oneOfInnerSemantics.AddTo(semantics); break; case RefSchema: @@ -131,31 +155,31 @@ private static Semantics Generate(ISchema schema, SchemaTable table) default: throw new ArgumentOutOfRangeException(nameof(schema)); } - + return semantics; } - - private static (Semantics, SwitchId) Generate(SwitchSchema switchSchema, SchemaTable table) + + private static (Semantics, SwitchId) Generate(SwitchSchema switchSchema, SchemaTable table, RootId rootId) { var semantics = new Semantics(); - + var interfaceId = SwitchId.New(); List<(SwitchPath, string, ClassId)> thenList = new(); foreach (var ifThen in switchSchema.IfThenArray) { - Generate(table.Table[ifThen.Schema], table).AddTo(semantics); - + Generate(table.Table[ifThen.Schema], table, rootId).AddTo(semantics); + var then = semantics.SchemaTypeSemanticsTable[table.Table[ifThen.Schema]]; semantics.SwitchInheritList.Add((interfaceId, then)); thenList.Add((ifThen.SwitchReferencePath, ifThen.When, then)); } - + semantics.SwitchSemanticsTable.Add(interfaceId, new SwitchSemantics(switchSchema, thenList.ToArray())); - + return (semantics, interfaceId); } - - private static (Semantics, ClassId) Generate(ObjectSchema objectSchema, SchemaTable table) + + private static (Semantics, ClassId) Generate(ObjectSchema objectSchema, SchemaTable table, RootId rootId) { var semantics = new Semantics(); var typeId = ClassId.New(); @@ -166,7 +190,7 @@ private static (Semantics, ClassId) Generate(ObjectSchema objectSchema, SchemaTa switch (schema) { case ObjectSchema innerObjectSchema: - var (objectInnerSemantics, objectInnerTypeId) = Generate(innerObjectSchema, table); + var (objectInnerSemantics, objectInnerTypeId) = Generate(innerObjectSchema, table, rootId); objectInnerSemantics.AddTo(semantics); properties.Add(semantics.AddPropertySemantics( new PropertySemantics( @@ -179,7 +203,7 @@ private static (Semantics, ClassId) Generate(ObjectSchema objectSchema, SchemaTa )); break; case SwitchSchema oneOfSchema: - var (oneOfInnerSemantics, oneOfInnerTypeId) = Generate(oneOfSchema, table); + var (oneOfInnerSemantics, oneOfInnerTypeId) = Generate(oneOfSchema, table, rootId); oneOfInnerSemantics.AddTo(semantics); properties.Add(semantics.AddPropertySemantics( new PropertySemantics( @@ -192,7 +216,7 @@ private static (Semantics, ClassId) Generate(ObjectSchema objectSchema, SchemaTa )); break; default: - Generate(table.Table[property.Value], table).AddTo(semantics); + Generate(table.Table[property.Value], table, rootId).AddTo(semantics); properties.Add(semantics.AddPropertySemantics( new PropertySemantics( typeId, @@ -205,11 +229,11 @@ private static (Semantics, ClassId) Generate(ObjectSchema objectSchema, SchemaTa break; } } - - var typeSemantics = new TypeSemantics(properties.ToArray(), objectSchema); + + var typeSemantics = new TypeSemantics(properties.ToArray(), objectSchema, rootId); semantics.TypeSemanticsTable[typeId] = typeSemantics; semantics.SchemaTypeSemanticsTable[typeSemantics.Schema] = typeId; - + return (semantics, typeId); } } diff --git a/mooresmaster.SandBox/schema/blocks.yml b/mooresmaster.SandBox/schema/blocks.yml index 7d8ff3f..496dcec 100644 --- a/mooresmaster.SandBox/schema/blocks.yml +++ b/mooresmaster.SandBox/schema/blocks.yml @@ -1,363 +1,363 @@ id: blocks type: object isDefaultOpen: true -defineInterface: -- interfaceName: IMachineParam - properties: - - key: inputSlotCount - type: integer - - key: outputSlotCount - type: integer -properties: -- key: data - type: array - overrideCodeGeneratePropertyName: BlockMasterElement - items: - type: object +globalDefineInterface: + - interfaceName: IMachineParam properties: - - key: blockGuid - type: uuid - autoGenerated: true - - key: name - type: string - - key: blockType - type: string - enum: - - Block - - BeltConveyor - - Chest - - ElectricMachine - - ElectricPole - - ElectricGenerator - - ElectricMiner - - Gear - - Shaft - - GearMachine - - SimpleGearGenerator - - GearBeltConveyor - - GearMiner - - ItemShooter - - CraftChainerTransporter - - CraftChainerCrafter - - CraftChainerProviderChest - - CraftChainerMainComputer - - TrainRail - - TrainStation - - TrainCargoPlatform - - key: itemGuid - type: uuid - foreignKey: items:itemGuid:name - - key: blockSize - type: vector3Int - default: - - 1 - - 1 - - 1 - - key: blockPrefabAddressablesPath - type: string - optional: true - - key: blockUIAddressablesPath - type: string - optional: true - - key: blockParam - switch: ./blockType - cases: - - when: Block - type: object - properties: [] - - when: BeltConveyor - type: object - properties: - - key: beltConveyorItemCount - type: integer - default: 1 - - key: timeOfItemEnterToExit - type: number - default: 1 - - key: slopeType + - key: inputSlotCount + type: integer + - key: outputSlotCount + type: integer +properties: + - key: data + type: array + overrideCodeGeneratePropertyName: BlockMasterElement + items: + type: object + properties: + - key: blockGuid + type: uuid + autoGenerated: true + - key: name type: string - enum: - - Straight - - Up - - Down - - key: inventoryConnectors - ref: inventoryConnects - - when: Chest - type: object - properties: - - key: chestItemSlotCount - type: integer - default: 5 - - key: inventoryConnectors - ref: inventoryConnects - - when: ElectricMachine - type: object - implementationInterface: - - IMachineParam - properties: - - key: inputSlotCount - type: integer - default: 1 - - key: outputSlotCount - type: integer - default: 1 - - key: requiredPower - type: number - default: 5 - - key: inventoryConnectors - ref: inventoryConnects - - when: ElectricPole - type: object - properties: - - key: poleConnectionRange - type: integer - default: 5 - - key: machineConnectionRange - type: integer - default: 5 - - when: ElectricGenerator - type: object - properties: - - key: fuelItemSlotCount - type: integer - default: 3 - - key: isInfinityPower - type: boolean - default: false - - key: infinityPower - type: integer - default: 0 - - key: fuelItems - type: array - optional: true - items: - type: object - properties: - - key: itemGuid - type: uuid - foreignKey: items:itemGuid:name - - key: time - type: number - default: 1 - - key: power - type: number - default: 10 - - key: inventoryConnectors - ref: inventoryConnects - - when: ElectricMiner - type: object - properties: - - key: requiredPower - type: number - default: 5 - - key: outputItemSlotCount - type: integer - default: 3 - - key: mineSettings - ref: mineSettings - - key: inventoryConnectors - ref: inventoryConnects - - when: Gear - type: object - properties: - - key: teethCount - type: integer - default: 10 - - key: requireTorque - type: number - default: 1 - - key: gear - ref: gear - - when: Shaft - type: object - properties: - - key: requireTorque - type: number - default: 1 - - key: gear - ref: gear - - when: GearMachine - type: object - implementationInterface: - - IMachineParam - properties: - - key: inputSlotCount - type: integer - default: 1 - - key: outputSlotCount - type: integer - default: 1 - - key: teethCount - type: integer - default: 10 - - key: requireTorque - type: number - default: 1 - - key: requiredRpm - type: number - default: 5 - - key: inventoryConnectors - ref: inventoryConnects - - key: gear - ref: gear - - when: SimpleGearGenerator - type: object - properties: - - key: teethCount - type: integer - default: 10 - - key: generateRpm - type: number - default: 5 - - key: generateTorque - type: number - default: 1 - - key: requireTorque - type: number - default: 1 - - key: gear - ref: gear - - when: GearBeltConveyor - type: object - properties: - - key: beltConveyorItemCount - type: integer - default: 4 - - key: beltConveyorSpeed - type: number - default: 2 - - key: requireTorque - type: number - default: 2 - - key: slopeType + - key: blockType type: string enum: - - Straight - - Up - - Down - - key: inventoryConnectors - ref: inventoryConnects - - key: gear - ref: gear - - when: ItemShooter - type: object - properties: - - key: inventoryItemNum - type: integer - default: 4 - - key: initialShootSpeed - type: number - default: 3 - - key: itemShootSpeed - type: number - default: 2 - - key: acceleration - type: number - default: 1 - - key: slopeType + - Block + - BeltConveyor + - Chest + - ElectricMachine + - ElectricPole + - ElectricGenerator + - ElectricMiner + - Gear + - Shaft + - GearMachine + - SimpleGearGenerator + - GearBeltConveyor + - GearMiner + - ItemShooter + - CraftChainerTransporter + - CraftChainerCrafter + - CraftChainerProviderChest + - CraftChainerMainComputer + - TrainRail + - TrainStation + - TrainCargoPlatform + - key: itemGuid + type: uuid + foreignKey: items:itemGuid:name + - key: blockSize + type: vector3Int + default: + - 1 + - 1 + - 1 + - key: blockPrefabAddressablesPath type: string - enum: - - Straight - - Up - - Down - - key: inventoryConnectors - ref: inventoryConnects - - when: GearMiner - type: object - properties: - - key: teethCount - type: integer - default: 10 - - key: requireTorque - type: number - default: 1 - - key: requiredRpm - type: number - default: 5 - - key: outputItemSlotCount - type: integer - default: 3 - - key: mineSettings - ref: mineSettings - - key: inventoryConnectors - ref: inventoryConnects - - key: gear - ref: gear - - when: CraftChainerTransporter - type: object - properties: - - key: transporterConveyorItemCount - type: integer - default: 1 - - key: timeOfItemEnterToExit - type: number - default: 1 - - key: slopeType + optional: true + - key: blockUIAddressablesPath type: string - enum: - - Straight - - Up - - Down - - key: inventoryConnectors - ref: inventoryConnects - - when: CraftChainerCrafter - type: object - properties: - - key: itemSlotCount - type: integer - default: 5 - - key: inventoryConnectors - ref: inventoryConnects - - when: CraftChainerProviderChest - type: object - properties: - - key: itemSlotCount - type: integer - default: 5 - - key: inventoryConnectors - ref: inventoryConnects - - when: CraftChainerMainComputer - type: object - properties: - - key: itemSlotCount - type: integer - default: 5 - - key: inventoryConnectors - ref: inventoryConnects - - when: TrainRail - type: object - properties: [] - - when: TrainStation - type: object - properties: - - key: stationDistance - type: integer - default: 5 - - when: TrainCargoPlatform - type: object - properties: - - key: platformDistance - type: integer - default: 5 - - key: inputSlotCount - type: integer - default: 10 - - key: outputSlotCount - type: integer - default: 10 - - key: loadingSpeed - type: number - default: 20 - - key: overrideVerticalBlock - type: object - optional: true - properties: - - key: upBlockGuid - type: uuid - foreignKey: blocks:blockGuid:name - - key: horizontalBlockGuid - type: uuid - foreignKey: blocks:blockGuid:name - - key: downBlockGuid - type: uuid - foreignKey: blocks:blockGuid:name + optional: true + - key: blockParam + switch: ./blockType + cases: + - when: Block + type: object + properties: [ ] + - when: BeltConveyor + type: object + properties: + - key: beltConveyorItemCount + type: integer + default: 1 + - key: timeOfItemEnterToExit + type: number + default: 1 + - key: slopeType + type: string + enum: + - Straight + - Up + - Down + - key: inventoryConnectors + ref: inventoryConnects + - when: Chest + type: object + properties: + - key: chestItemSlotCount + type: integer + default: 5 + - key: inventoryConnectors + ref: inventoryConnects + - when: ElectricMachine + type: object + implementationInterface: + - IMachineParam + properties: + - key: inputSlotCount + type: integer + default: 1 + - key: outputSlotCount + type: integer + default: 1 + - key: requiredPower + type: number + default: 5 + - key: inventoryConnectors + ref: inventoryConnects + - when: ElectricPole + type: object + properties: + - key: poleConnectionRange + type: integer + default: 5 + - key: machineConnectionRange + type: integer + default: 5 + - when: ElectricGenerator + type: object + properties: + - key: fuelItemSlotCount + type: integer + default: 3 + - key: isInfinityPower + type: boolean + default: false + - key: infinityPower + type: integer + default: 0 + - key: fuelItems + type: array + optional: true + items: + type: object + properties: + - key: itemGuid + type: uuid + foreignKey: items:itemGuid:name + - key: time + type: number + default: 1 + - key: power + type: number + default: 10 + - key: inventoryConnectors + ref: inventoryConnects + - when: ElectricMiner + type: object + properties: + - key: requiredPower + type: number + default: 5 + - key: outputItemSlotCount + type: integer + default: 3 + - key: mineSettings + ref: mineSettings + - key: inventoryConnectors + ref: inventoryConnects + - when: Gear + type: object + properties: + - key: teethCount + type: integer + default: 10 + - key: requireTorque + type: number + default: 1 + - key: gear + ref: gear + - when: Shaft + type: object + properties: + - key: requireTorque + type: number + default: 1 + - key: gear + ref: gear + - when: GearMachine + type: object + implementationInterface: + - IMachineParam + properties: + - key: inputSlotCount + type: integer + default: 1 + - key: outputSlotCount + type: integer + default: 1 + - key: teethCount + type: integer + default: 10 + - key: requireTorque + type: number + default: 1 + - key: requiredRpm + type: number + default: 5 + - key: inventoryConnectors + ref: inventoryConnects + - key: gear + ref: gear + - when: SimpleGearGenerator + type: object + properties: + - key: teethCount + type: integer + default: 10 + - key: generateRpm + type: number + default: 5 + - key: generateTorque + type: number + default: 1 + - key: requireTorque + type: number + default: 1 + - key: gear + ref: gear + - when: GearBeltConveyor + type: object + properties: + - key: beltConveyorItemCount + type: integer + default: 4 + - key: beltConveyorSpeed + type: number + default: 2 + - key: requireTorque + type: number + default: 2 + - key: slopeType + type: string + enum: + - Straight + - Up + - Down + - key: inventoryConnectors + ref: inventoryConnects + - key: gear + ref: gear + - when: ItemShooter + type: object + properties: + - key: inventoryItemNum + type: integer + default: 4 + - key: initialShootSpeed + type: number + default: 3 + - key: itemShootSpeed + type: number + default: 2 + - key: acceleration + type: number + default: 1 + - key: slopeType + type: string + enum: + - Straight + - Up + - Down + - key: inventoryConnectors + ref: inventoryConnects + - when: GearMiner + type: object + properties: + - key: teethCount + type: integer + default: 10 + - key: requireTorque + type: number + default: 1 + - key: requiredRpm + type: number + default: 5 + - key: outputItemSlotCount + type: integer + default: 3 + - key: mineSettings + ref: mineSettings + - key: inventoryConnectors + ref: inventoryConnects + - key: gear + ref: gear + - when: CraftChainerTransporter + type: object + properties: + - key: transporterConveyorItemCount + type: integer + default: 1 + - key: timeOfItemEnterToExit + type: number + default: 1 + - key: slopeType + type: string + enum: + - Straight + - Up + - Down + - key: inventoryConnectors + ref: inventoryConnects + - when: CraftChainerCrafter + type: object + properties: + - key: itemSlotCount + type: integer + default: 5 + - key: inventoryConnectors + ref: inventoryConnects + - when: CraftChainerProviderChest + type: object + properties: + - key: itemSlotCount + type: integer + default: 5 + - key: inventoryConnectors + ref: inventoryConnects + - when: CraftChainerMainComputer + type: object + properties: + - key: itemSlotCount + type: integer + default: 5 + - key: inventoryConnectors + ref: inventoryConnects + - when: TrainRail + type: object + properties: [ ] + - when: TrainStation + type: object + properties: + - key: stationDistance + type: integer + default: 5 + - when: TrainCargoPlatform + type: object + properties: + - key: platformDistance + type: integer + default: 5 + - key: inputSlotCount + type: integer + default: 10 + - key: outputSlotCount + type: integer + default: 10 + - key: loadingSpeed + type: number + default: 20 + - key: overrideVerticalBlock + type: object + optional: true + properties: + - key: upBlockGuid + type: uuid + foreignKey: blocks:blockGuid:name + - key: horizontalBlockGuid + type: uuid + foreignKey: blocks:blockGuid:name + - key: downBlockGuid + type: uuid + foreignKey: blocks:blockGuid:name