Esempio n. 1
0
        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();
 }
Esempio n. 4
0
        public void SaveTypes(ConstructionArea area, JSONNode node)
        {
            var itt = area.IterationType as SchematicIterator;

            if (itt != null)
            {
                node.SetAs(NAME + ".SchematicName", itt.SchematicName);
            }
        }
Esempio n. 5
0
        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();
        }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
        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();
 }
Esempio n. 9
0
        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();
            }
        }
Esempio n. 10
0
        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);
        }
Esempio n. 14
0
    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;
        }
Esempio n. 16
0
        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();
            }
        }
Esempio n. 18
0
        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");
        }
Esempio n. 19
0
 public static void Register()
 {
     ConstructionArea.RegisterLoader(new SchematicBuilderLoader());
 }
Esempio n. 20
0
 public static void Register()
 {
     ConstructionArea.RegisterLoader(new ArchitectLoader());
 }
Esempio n. 21
0
 public void ApplyTypes(ConstructionArea area, JSONNode node)
 {
     area.ConstructionType = new Types.DiggerBasic();
     area.IterationType    = new Iterators.TopToBottom(area);
 }
Esempio n. 22
0
 public void SaveTypes(ConstructionArea area, JSONNode node)
 {
     // todo in the future - save the iterator progress here
 }
 public void SaveTypes(ConstructionArea area, JSONNode node)
 {
 }