private static void clearSoftResin(long x0, long y0, long z0, int size)
        {
            size = (int)(size * 2.5); //up to 120
            int sizey  = size / 3;    //up to 40
            int maxrSq = size + 1;

            maxrSq *= maxrSq;
            HashSet <Segment> hashSet = new HashSet <Segment>();

            try {
                for (int i = -size; i <= size; i++)
                {
                    for (int j = -size; j <= sizey; j++)
                    {
                        for (int k = -size; k <= size; k++)
                        {
                            Vector3 vector = new Vector3((float)j, (float)i, (float)k);
                            int     num4   = (int)vector.sqrMagnitude;
                            if (num4 < maxrSq)
                            {
                                long    x       = x0 + (long)j;
                                long    y       = y0 + (long)i;
                                long    z       = z0 + (long)k;
                                Segment segment = WorldScript.instance.GetSegment(x, y, z);
                                if (segment != null && segment.mbInitialGenerationComplete && !segment.mbDestroyed)
                                {
                                    if (!segment.mbIsEmpty)
                                    {
                                        if (!hashSet.Contains(segment))
                                        {
                                            hashSet.Add(segment);
                                            segment.BeginProcessing();
                                        }
                                        ushort cube = segment.GetCube(x, y, z);
                                        if (cube == eCubeTypes.Giger)
                                        {
                                            if (WorldScript.instance.BuildFromEntity(segment, x, y, z, eCubeTypes.Air, global::TerrainData.DefaultAirValue))
                                            {
                                                DroppedItemData stack = ItemManager.DropNewCubeStack(eCubeTypes.Giger, 0, 1, x, y, z, Vector3.zero);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            finally {
                foreach (Segment current in hashSet)
                {
                    if (current.mbHasFluid)
                    {
                        current.FluidSleepTicks = 1;
                    }
                    current.EndProcessing();
                }
                WorldScript.instance.mNodeWorkerThread.KickNodeWorkerThread();
            }
        }
Example #2
0
    IEnumerator CleanUp()
    {
        List <DroppedItemData> junk = new List <DroppedItemData>();

        foreach (DroppedItemData d in droppedItems)
        {
            DroppedItemData temp = d;
            temp.lifeTime -= 10;
            if (temp.lifeTime <= 0)
            {
                if (temp.scene.Equals(SceneManager.GetActiveScene().name))
                {
                    Pickups[] items = GameObject.FindObjectsOfType <Pickups>();
                    Vector3   pos   = new Vector3(temp.x, temp.y, temp.z);

                    foreach (Pickups p in items)
                    {
                        if (p.transform.position == pos && p.Item == temp.item)
                        {
                            Destroy(p.gameObject);
                        }
                    }
                }
            }
            else
            {
                junk.Add(temp);
            }
        }
        droppedItems = junk;
        yield return(new WaitForSeconds(mc.CLOCK_SPEED));

        StartCoroutine(CleanUp());
    }
Example #3
0
    //-------- Dropped items --------

    public DroppedItemData AddDroppedItem(string item_id, string scene, Vector3 pos, int quantity)
    {
        DroppedItemData ditem = new DroppedItemData();

        ditem.uid                = UniqueID.GenerateUniqueID();
        ditem.item_id            = item_id;
        ditem.scene              = scene;
        ditem.pos                = pos;
        ditem.quantity           = quantity;
        dropped_items[ditem.uid] = ditem;
        return(ditem);
    }
Example #4
0
    //Create a totally new one that will be added to save file
    public static Item Create(ItemData data, Vector3 pos, int quantity)
    {
        DroppedItemData ditem = PlayerData.Get().AddDroppedItem(data.id, SceneNav.GetCurrentScene(), pos, quantity);
        GameObject      obj   = Instantiate(data.item_prefab, pos, data.item_prefab.transform.rotation);
        Item            item  = obj.GetComponent <Item>();

        item.data                = data;
        item.was_dropped         = true;
        item.unique_id.unique_id = ditem.uid;
        item.quantity            = quantity;
        return(item);
    }
Example #5
0
    public void SpawnDropped()
    {
        List <DroppedItemData> junk = new List <DroppedItemData>();

        foreach (DroppedItemData d in droppedItems)
        {
            if (d.scene.Equals(SceneManager.GetActiveScene().name))
            {
                DroppedItemData temp = d;
                GameObject      go   = new GameObject {
                    name = d.item.name
                };
                SpriteRenderer sr = go.AddComponent <SpriteRenderer>();
                sr.sprite             = Resources.Load <Sprite>(d.item.imagePath);
                go.transform.position = new Vector3(d.x, d.y, d.z);
                Vector2       bounds = new Vector2(sr.bounds.size.x, sr.bounds.size.y);
                BoxCollider2D c      = go.AddComponent <BoxCollider2D>();
                c.size      = bounds;
                c.isTrigger = true;


                if (!(d.item is Potion))
                {
                    if (d.item.imagePath.StartsWith("Gem"))
                    {
                        go.transform.localScale = new Vector3(0.7f, 0.7f, 1);
                    }
                    else if (go.name.Equals("algae") || go.name.Equals("snail"))
                    {
                        go.transform.localScale = new Vector3(0.6f, 0.6f, 1);
                    }
                    else
                    {
                        go.transform.localScale = new Vector3(0.4f, 0.4f, 1);
                    }
                }

                Pickups p = go.AddComponent <Pickups>();
                p.Item  = d.item;
                p.Count = d.count;
                p.Data  = temp;
                junk.Add(temp);
            }
            else
            {
                junk.Add(d);
            }
        }
        droppedItems = junk;
    }
        public static DroppedItemData doPlayerItemCollection(ItemManager mgr, long x, long y, long z, Vector3 off, float magRange, float magStrength, float range, int maxStack, Player p)
        {
            PlayerInventory inv = p.mInventory;
            int             id  = ItemEntry.GetIDFromKey("ReikaKalseki.ItemMagnet", true);
            //FUtil.log("Has magnet "+id+" : "+inv.GetSuitAndInventoryItemCount(id));
            float pwr = config.getFloat(FTConfig.ConfigEntries.MAGNET_COST);

            if (SurvivalPowerPanel.mrSuitPower >= pwr && id > 0 && inv.GetSuitAndInventoryItemCount(id) > 0)       //TODO cache this for performance
            {
                range    *= 6;
                magRange *= 6;
                SurvivalPowerPanel.mrSuitPower -= pwr;
            }
            DroppedItemData droppedItem = mgr.UpdateCollection(x, y, z, off, magRange, magStrength, range, maxStack);

            return(droppedItem);
        }
Example #7
0
    //Spawn an existing one in the save file (such as after loading)
    public static Item Spawn(string uid)
    {
        DroppedItemData ddata = PlayerData.Get().GetDroppedItem(uid);

        if (ddata != null)
        {
            ItemData idata = ItemData.Get(ddata.item_id);
            if (idata != null)
            {
                GameObject build = Instantiate(idata.item_prefab, ddata.pos, idata.item_prefab.transform.rotation);
                Item       item  = build.GetComponent <Item>();
                item.data                = idata;
                item.was_dropped         = true;
                item.unique_id.unique_id = uid;
                item.quantity            = ddata.quantity;
                return(item);
            }
        }
        return(null);
    }
        public override void LowFrequencyUpdate()
        {
            if (this.mbAttachedToSmelter)
            {
                return;
            }

            this.mnLFUpdates++;

            if (this.mnLFUpdates >= 5)
            {
                if (WorldScript.mbIsServer)
                {
                    if (this.mValue == 5 && !DLCOwnership.HasT4() && !DLCOwnership.HasPatreon())
                    {
                        FloatingCombatTextManager.instance.QueueText(this.mnX, this.mnY, this.mnZ, 1.5f, "Needs Frozen Factory Expansion Pack!", Color.cyan, 1.5f, 64f);
                    }
                    WorldScript.instance.BuildFromEntity(this.mSegment, this.mnX, this.mnY, this.mnZ, 1, 0);
                    DroppedItemData droppedItemData = ItemManager.DropNewCubeStack(515, this.mValue, 1, this.mnX, this.mnY, this.mnZ, Vector3.zero);
                    if (droppedItemData != null)
                    {
                        droppedItemData.mrLifeRemaining *= 10f;
                    }
                }
                return;
            }

            var segment = base.AttemptGetSegment(this.mnX, this.mnY - 1L, this.mnZ);

            if (segment == null)
            {
                this.mnLFUpdates = 0;
                return;
            }

            var smelter = segment.SearchEntity(this.mnX, this.mnY - 1L, this.mnZ) as OreSmelterInterface;

            if (smelter == null)
            {
                return;
            }

            if (!smelter.SupportsForcedInduction())
            {
                return;
            }

            if (this.mValue == 0)
            {
                this.SetSmelterDetails(smelter, 25, 2, 8, 192, 1);
            }

            if (this.mValue == 1)
            {
                this.SetSmelterDetails(smelter, 25, 3, 16, 320, 1);
            }

            if (this.mValue == 2)
            {
                this.SetSmelterDetails(smelter, 25, 4, 32, 512, 1);
            }

            if (this.mValue == 3)
            {
                this.SetSmelterDetails(smelter, 25, 4, 32, 512, 2);
            }

            if (this.mValue == 4)
            {
                this.SetSmelterDetails(smelter, 25, 4, 32, 512, 4);
            }

            if (this.mValue == 5)
            {
                this.SetSmelterDetails(smelter, 5, 1, 512, 4096, 1, true);
            }

            if (this.mValue > 6)
            {
                Debug.LogError("Error, Forced Induction built with Value of " + this.mValue);
            }

            this.AttachedSmelter     = smelter;
            this.mbAttachedToSmelter = true;
            Achievements.UnlockAchievementDelayed(Achievements.eAchievements.eForce);             // This will never run because mods yo!
        }