public SchematicIterator(ConstructionArea area, string schematicName, Schematic.Rotation rotation) { this.area = area; positionMin = area.Minimum; positionMax = area.Maximum; iterationChunkLocation = positionMin; cursor = positionMin; SchematicName = schematicName; if (SchematicReader.TryGetSchematic(SchematicName, area.Owner.ColonyID, iterationChunkLocation, out var schematic)) { BuilderSchematic = schematic; if (rotation >= Schematic.Rotation.Right) { BuilderSchematic.Rotate(); } if (rotation >= Schematic.Rotation.Back) { BuilderSchematic.Rotate(); } if (rotation >= Schematic.Rotation.Left) { BuilderSchematic.Rotate(); } } }
public void ApplyTypes(ConstructionArea area, JSONNode node) { Log.Write("Appling Types " + node.ToString()); ReplaceType type = new ReplaceType(node); area.ConstructionType = (IConstructionType) new ReplacerSpecial(type); area.IterationType = (IIterationType) new TopToBottom(area); }
public Walls(ConstructionArea area) { this.area = area; this.positionMin = area.Minimum; this.positionMax = area.Maximum; this.iterationChunkLocation = new Vector3Int(this.positionMin.x & -16, this.positionMin.y & -16, this.positionMin.z & -16); this.iterationIndex = -1; this.MoveNext(); }
public void SaveTypes(ConstructionArea area, JSONNode node) { var itt = area.IterationType as SchematicIterator; if (itt != null) { node.SetAs(NAME + ".SchematicName", itt.SchematicName); } }
public BottomToTop(ConstructionArea area) { this.area = area; positionMin = area.Minimum; positionMax = area.Maximum; iterationChunkLocation = new Vector3Int(positionMin.x & -16, positionMin.y & -16, positionMin.z & -16); iterationIndex = -1; MoveNext(); }
public void SaveTypes(ConstructionArea area, JSONNode node) { var itt = area.IterationType as ArchitectIterator; if (itt != null) { node.SetAs(NAME + ".ArchitectSchematicName", itt.SchematicName); node.SetAs(NAME + "PreviousPosition", (JSONNode)((ArchitectIterator)area.IterationType).PreviousPosition); SchematicReader.SaveSchematic(area.Owner, itt.BuilderSchematic); } }
public TopToBottom(ConstructionArea area) { this.area = area; positionMin = area.Minimum; positionMax = area.Maximum; iterationChunkLocation = new Vector3Int(positionMax.x & -16, positionMax.y & -16, positionMax.z & -16); iterationIndex = 16 * 16 * 16; MoveNext(); }
public Circle(ConstructionArea area) { this.area = area; this.positionMin = area.Minimum; this.positionMax = area.Maximum; this.iterationChunkLocation = new Vector3Int(this.positionMin.x & -16, this.positionMin.y & -16, this.positionMin.z & -16); this.iterationIndex = -1; this.center = area.Minimum + ((area.Maximum - area.Minimum) / 2); this.radius = Math.Min(positionMax.x - positionMin.x, positionMax.z - positionMin.z) / 2; this.MoveNext(); }
public void ApplyTypes(ConstructionArea area, JSONNode node) { if (node == null) { return; } if (node.TryGetAs(NAME + ".SchematicName", out string schematic) && node.TryGetAs(NAME + ".Rotation", out Schematic.Rotation rotation)) { area.IterationType = new SchematicIterator(area, schematic, rotation); area.ConstructionType = new SchematicBuilder(); } }
public void ApplyTypes(ConstructionArea area, JSONNode node) { JSONNode arr; if (node != null && node.TryGetChild("selectedTypes", out arr) && arr.NodeType == NodeType.Array && arr.ChildCount > 0) { ItemTypes.ItemType buildType = ItemTypes.GetType(ItemTypes.IndexLookup.GetIndex(arr[0].GetAs <string>())); if (buildType != null && buildType.ItemIndex != 0) { area.ConstructionType = new Types.BuilderBasic(buildType); area.IterationType = new Iterators.BottomToTop(area); } } }
public void ApplyTypes(ConstructionArea area, JSONNode node) { JSONNode arr; if (node != null && node.TryGetChild("selectedTypes", out arr) && arr.NodeType == NodeType.Array && arr.ChildCount > 0) { ItemTypes.ItemType digTpe = ItemTypes.GetType(ItemTypes.IndexLookup.GetIndex(arr[0].GetAs <string>())); if (digTpe != null && digTpe.ItemIndex != 0) { area.ConstructionType = new Types.DiggerSpecial(digTpe); area.IterationType = new Iterators.TopToBottom(area); } } }
private IIterationType GetIterationType(ConstructionArea area) { switch (JobName) { case "wingdings.walls": return(new Walls(area)); case "wingdings.pyramid": return(new Pyramid(area)); case "wingdings.circle": return(new Circle(area)); } return(null); }
public void ApplyTypes(ConstructionArea area, JSONNode node) { JSONNode node1; if (node == null || !node.TryGetChild("selectedTypes", out node1) || (node1.NodeType != NodeType.Array || node1.ChildCount <= 0)) { return; } ItemTypes.ItemType type = ItemTypes.GetType(ItemTypes.IndexLookup.GetIndex(node1[0].GetAs <string>())); if (!(type != (ItemTypes.ItemType)null) || type.ItemIndex == (ushort)0) { return; } area.ConstructionType = (IConstructionType) new BuilderBasic(type); area.IterationType = GetIterationType(area); }
void Update() { if (Input.GetMouseButtonDown(0)) { Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector2 mousePos2D = new Vector2(mousePos.x, mousePos.y); RaycastHit2D hit = Physics2D.Raycast(mousePos2D, Vector2.zero); if (hit.collider != null) { if (hit.collider.CompareTag("Tile")) { if (hit.collider.gameObject.GetComponent <ConstructionArea>() == lastTileHit) { lastTileHit.DeactiveUI(); lastTileHit = null; } else { if (lastTileHit != null) { lastTileHit.DeactiveUI(); } lastTileHit = hit.collider.gameObject.GetComponent <ConstructionArea>(); lastTileHit.ActiveUI(); } } else if (hit.collider.CompareTag("TileButton")) { lastTileHit.DeactiveUI(); hit.collider.gameObject.GetComponent <TileButton>().Action(); lastTileHit = null; } } else { if (lastTileHit != null) { lastTileHit.DeactiveUI(); lastTileHit = null; } } } }
public ArchitectIterator(ConstructionArea area, string schematicName) { this.area = area; positionMin = area.Minimum; positionMax = area.Maximum; iterationChunkLocation = positionMin; cursor = positionMin; SchematicName = schematicName; if (SchematicReader.TryGetSchematic(SchematicName, area.Owner.ColonyID, iterationChunkLocation, out var schematic)) { BuilderSchematic = schematic; } else { var calcSize = area.Maximum - area.Minimum; BuilderSchematic = new Schematic(SchematicName, calcSize.x, calcSize.y, calcSize.z); BuilderSchematic.Blocks = new SchematicBlock[calcSize.x + 1, calcSize.y + 1, calcSize.z + 1]; for (int Y = 0; Y <= BuilderSchematic.YMax; Y++) { for (int Z = 0; Z <= BuilderSchematic.ZMax; Z++) { for (int X = 0; X <= BuilderSchematic.XMax; X++) { BuilderSchematic.Blocks[X, Y, Z] = new SchematicBlock() { CSBlock = true, X = X, Y = Y, Z = Z, BlockID = ColonyBuiltIn.ItemTypes.AIR }; } } } } BuilderSchematic.StartPos = positionMin; }
public void ApplyTypes(ConstructionArea area, JSONNode node) { if (node == null) { return; } if (node.TryGetAs(NAME + ".ArchitectSchematicName", out string schematic)) { area.IterationType = new ArchitectIterator(area, schematic); if (node.TryGetAs <JSONNode>(NAME + "PreviousPosition", out var jSONNodePos)) { ((ArchitectIterator)area.IterationType).PreviousPosition = (Vector3Int)jSONNodePos; } area.ConstructionType = new ArchitectBuilder(); } }
public static void FillGhost(ConstructionArea area, IIterationType iteration) { ItemType ghostBlock = ItemTypes.GetType("ghost"); int num1 = 4096; while (num1-- > 0) { Vector3Int currentPosition = iteration.CurrentPosition; ushort val; if (World.TryGetTypeAt(currentPosition, out val)) { if (val == (ushort)0 || (int)val == (int)BuiltinBlocks.Indices.water) { SendGhostBlock(area.Owner, currentPosition, ghostBlock); } } iteration.MoveNext(); } }
public void OnAssemblyLoaded(string path) { //Register loader for Construction job callback ConstructionArea.RegisterLoader((IConstructionLoader) new ReplacerSpecialLoader()); ConstructionArea.RegisterLoader((IConstructionLoader) new ShapeBuilderLoader("wingdings.walls")); ConstructionArea.RegisterLoader((IConstructionLoader) new ShapeBuilderLoader("wingdings.pyramid")); ConstructionArea.RegisterLoader((IConstructionLoader) new ShapeBuilderLoader("wingdings.circle")); //Override identifier so we can create our own callback using the Construction Job AreaJobTracker.RegisterAreaJobDefinition(new CustomConstructionAreaJobDefinition()); CommandToolManager.AddAreaJobSettings(new ConstructionAreaToolSettings("wingdings.tooljob.walls", "wingdings.walls", "wingdings.builder.2d", EConstructionKind.Builder, 1, EAreaItemSelectionFilter.ComboBuildable)); CommandToolManager.AddAreaJobSettings(new ConstructionAreaToolSettings("wingdings.tooljob.pyramid", "wingdings.pyramid", "wingdings.builder.3d", EConstructionKind.Builder, 1, EAreaItemSelectionFilter.ComboBuildable)); CommandToolManager.AddAreaJobSettings(new ConstructionAreaToolSettings("wingdings.tooljob.circle", "wingdings.circle", "wingdings.builder.2d", EConstructionKind.Builder, 1, EAreaItemSelectionFilter.ComboBuildable)); //dictionary.Add("pipliz.digger", ("popup.tooljob.diggera", "popup.tooljob.diggerb")); CommandToolManager.AddButtonTooltip("wingdings.tooljob.replacer", "wingdings.tooljob.replacera", "wingdings.tooljob.replacerb"); CommandToolManager.AddButtonTooltip("wingdings.tooljob.walls", "wingdings.tooljob.wallsa", "wingdings.tooljob.wallsb"); CommandToolManager.AddButtonTooltip("wingdings.tooljob.pyramid", "wingdings.tooljob.pyramida", "wingdings.tooljob.pyramidb"); CommandToolManager.AddButtonTooltip("wingdings.tooljob.circle", "wingdings.tooljob.circlea", "wingdings.tooljob.circleb"); }
public static void Register() { ConstructionArea.RegisterLoader(new SchematicBuilderLoader()); }
public static void Register() { ConstructionArea.RegisterLoader(new ArchitectLoader()); }
public void ApplyTypes(ConstructionArea area, JSONNode node) { area.ConstructionType = new Types.DiggerBasic(); area.IterationType = new Iterators.TopToBottom(area); }
public void SaveTypes(ConstructionArea area, JSONNode node) { // todo in the future - save the iterator progress here }
public void SaveTypes(ConstructionArea area, JSONNode node) { }