public void SpawnGibs(GibType gType, Rect area, int amount, float force = 10, float lifeSpan = 5) { List<Gib> eList; if (_gibs.TryGetValue(gType, out eList)) { for (int a = 0; a < amount; a++) { Gib g = null; for (int i = 0; i < eList.Count; i++) { if (!eList[i].gameObject.activeInHierarchy) { g = eList[i]; break; } } if (!g) { g = NewGib(gType); } var position = new Vector2(Random.Range(area.xMin, area.xMax), Random.Range(area.yMin, area.yMax)); g.Spawn(gType, position, force, lifeSpan); } } }
public GameObject GetGib(GibType g) { for (int i = 0; i < gibs.Length; i++) { if (gibs[i].type == g) { return(gibs[i].gibPrefab); } } return(null); }
public Gib NewGib(GibType gType) { if(gType == GibType.None) { return null; } Gib newGib = null; switch (gType) { case GibType.BlueRock: newGib = Instantiate(BlueRockGibs[_gibPrefabIndex[gType]]) as Gib; break; case GibType.BrownRock: newGib = Instantiate(BrownRockGibs[_gibPrefabIndex[gType]]) as Gib; break; case GibType.Meat: newGib = Instantiate(MeatGibs[_gibPrefabIndex[gType]]) as Gib; break; case GibType.Metal: newGib = Instantiate(MetalGibs[_gibPrefabIndex[gType]]) as Gib; break; } if (newGib) { newGib.transform.parent = transform; newGib.gameObject.SetActive(false); _gibs[gType].Add(newGib); } int gibCount = 0; switch (gType) { case GibType.BlueRock: gibCount = BlueRockGibs.Count; break; case GibType.BrownRock: gibCount = BrownRockGibs.Count; break; case GibType.Meat: gibCount = MeatGibs.Count; break; case GibType.Metal: gibCount = MetalGibs.Count; break; } _gibPrefabIndex[gType] = (_gibPrefabIndex[gType] + 1) % gibCount; return newGib; }
public void Spawn(GibType gType, Vector3 origin, float force, float lifeSpan) { //transform.parent = null; transform.position = origin; _lifeSpan = lifeSpan; _lifeCounter = 0; _spriteRenderer.color = _orignalColor; _rigidbody2D.AddForce(Random.insideUnitCircle.normalized * force); gameObject.SetActive(true); gameObject.layer = LayerConstants.EnvironmentOnly; }