public TurretAssembly Assemble(RootModel model) { GameObject assemblyObject = UnityEngine.Object.Instantiate(Resources.Load <GameObject>(ASSEMBLY_PREFAB_PATH)); TurretAssembly assembly = assemblyObject.GetComponent <TurretAssembly>(); ObjectModel obj = model.Root as ObjectModel; assembly.Name = obj.GetValue <string>("Name"); assembly.Description = obj.GetValue <string>("Description"); ObjectModel tiers = obj.GetObject("Tiers"); UpgradeMap upgrades = _valueAssembler.Assemble(obj.GetObject("UpgradeMap"), typeof(UpgradeMap), new AssemblyContext()) as UpgradeMap; foreach (var tierProperty in tiers.GetProperties()) { Transform tierObj = AssembleTier(tierProperty.Model as ObjectModel, assembly).transform; Tier tier = Tier.Parse(tierProperty.Name); tierObj.gameObject.SetActive(false); tierObj.gameObject.name = tier.ToString(); assembly.AddTier(tierObj, tier); } assembly.UpgradeMap = upgrades; assembly.SetTier(Tier.Initial); return(assembly); }
public static void SaveFile(string path, TurretAssembly assembly) { Directory.CreateDirectory(Path.GetDirectoryName(path)); TurretAssemblyAssembler assembler = new TurretAssemblyAssembler(); var model = assembler.Disassemble(assembly); File.WriteAllText(path, ObjectPipeline.SerializeObject(model).ToString()); Alert.Open("Assembly has been saved."); }
public void AddTo(Structure structure, GlobalStructureMod mod) { mod.TryApply(structure); TurretAssembly assembly = structure as TurretAssembly; foreach (var component in assembly.GetComponents()) { mod.TryApply(component); } }
public void RemoveFrom(Structure structure, GlobalStructureMod mod) { mod.RemoveFrom(structure); TurretAssembly assembly = structure as TurretAssembly; foreach (var component in assembly.GetComponents()) { mod.RemoveFrom(component); } }
public void DeleteCurrentAssembly() { foreach (TierDisplay display in _tierDisplays) { Destroy(display.gameObject); } _tierDisplays.Clear(); Destroy((CurrentAsssembly as Component).gameObject); CurrentAsssembly = null; }
public TurretComponent Assemble(ObjectModel model, Transform parent, TurretAssembly assembly, AssemblyContext context) { IContentCachedPrefab component = GetComponent(model.GetValue <string>("UniqueIdentifier")); ValueAssembler assembler = new ValueAssembler(); GameObject obj = component.Instantiate(); TurretComponent newComponent = obj.GetComponent <TurretComponent>(); if (parent != null) { obj.transform.SetParent(parent.transform); var position = (Vector2)assembler.Assemble(model.GetObject("LocalPosition"), typeof(Vector2), context); obj.transform.localPosition = (Vector3)position + Vector3.back * 0.1f; if (model.HasProperty("Angle")) { obj.transform.localRotation = Quaternion.Euler(0f, 0f, model.GetValue <float>("Angle")); } if (model.HasProperty("Flipped")) { if (model.GetValue <bool>("Flipped")) { newComponent.Flip(); } } TurretComponent parentComponent = parent.GetComponent <TurretComponent>(); foreach (var point in newComponent.AttachmentPoints) { AttachmentSlot slot = FindSlotForPoint(parentComponent.AttachmentSlots.GetSupportingPoints(point), point, obj.transform, parent.transform); if (slot != null) { slot.Attach(newComponent); } } } else { obj.transform.SetParent(assembly.transform); obj.transform.localPosition = Vector3.zero; } foreach (ValueModel child in model.GetArray("Children")) { Assemble(child as ObjectModel, newComponent.transform, assembly, context); } return(newComponent); }
public RootModel Disassemble(TurretAssembly assembly) { DisassemblyContext context = new DisassemblyContext(); List <ObjectField> tiers = new List <ObjectField>(); foreach (Transform tier in assembly.transform) { tiers.Add(new ObjectField(tier.name, DisassembleTier(assembly, Tier.Parse(tier.gameObject.name), context))); } return(new RootModel(new ObjectModel( new ObjectField("Name", ValueModelFactory.Create(assembly.Name, context)), new ObjectField("Description", ValueModelFactory.Create(assembly.Description, context)), new ObjectField("Tiers", new ObjectModel(tiers.ToArray())), new ObjectField("UpgradeMap", _valueAssembler.Disassemble(assembly.UpgradeMap, typeof(UpgradeMap), new DisassemblyContext()) )))); }
private void LoadFile(string path) { if (CurrentAsssembly) { DeleteCurrentAssembly(); } var json = JObject.Parse(File.ReadAllText(path)); var model = ObjectPipeline.DeserializeObject(json); TurretAssemblyAssembler assembler = new TurretAssemblyAssembler(); CurrentAsssembly = assembler.Assemble(model); if (CurrentAsssembly is Component comp) { comp.transform.position = Vector3.zero; comp.transform.rotation = Quaternion.identity; } NameText.text = CurrentAsssembly.Name; DescriptionText.text = CurrentAsssembly.Description; }
private void Start() { _assembly = GetComponent <TurretAssembly>(); }
private bool IsUnlocked(TurretAssembly assembly) => assembly.GetComponents().All(x => UnlockList.IsUnlocked(x.Identifier));
private bool ContainsComponent(TurretAssembly assembly, string identifier) => assembly.GetComponents().Any(x => x.Identifier == identifier);
public void SetAssembly(TurretAssembly assembly) { CurrentAsssembly = assembly; }
private ObjectModel DisassembleTier(TurretAssembly assembly, Tier tier, DisassemblyContext context) { return(_assembler.Dissassemble(assembly.GetRootComponent(tier), context)); }
private TurretComponent AssembleTier(ObjectModel model, TurretAssembly assembly) { return(_assembler.Assemble(model, null, assembly, new AssemblyContext())); }