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(); } }
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()); }
//-------- 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); }
//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); }
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); }
//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! }