public void OnFallenObjectSourceAdded(GameObject go) { List <FallenObjectData> list = null; if (!this.m_Data.TryGetValue(go.tag, out list)) { return; } for (int i = 0; i < list.Count; i++) { FallenObjectData src = list[i]; FallenObjectGeneratorData fallenObjectGeneratorData; if (go.GetComponent <FallenObjectGenerator>() == null) { FallenObjectGenerator fallenObjectGenerator = go.AddComponent <FallenObjectGenerator>(); fallenObjectGeneratorData = new FallenObjectGeneratorData(); fallenObjectGenerator.m_GeneratorData = fallenObjectGeneratorData; this.m_Generators.Add(go.GetComponent <FallenObjectGenerator>()); } else { fallenObjectGeneratorData = go.GetComponent <FallenObjectGenerator>().m_GeneratorData; } fallenObjectGeneratorData.m_Data.Add(new FallenObjectData(src)); fallenObjectGeneratorData.m_Object = go; } }
private bool CreateFallenObjects(GameObject go, FallenObjectData data, FallenObjectGeneratorData generator_data, int data_index, FallenObjectGenerator generator) { if (UnityEngine.Random.Range(0f, 1f) > data.m_Chance) { return(false); } GameObject prefab = GreenHellGame.Instance.GetPrefab(data.m_FallenPrefabName); if (!prefab) { DebugUtils.Assert("[FallenObjectsManager:CreateFallenObjects] Can't load prefab - " + data.m_FallenPrefabName, true, DebugUtils.AssertType.Info); return(false); } bool result = false; int num = UnityEngine.Random.Range(data.m_QuantityMin, data.m_QuantityMax + 1); for (int i = 0; i < num; i++) { Vector3 vector = this.GenerateRandomPointAround(go.transform.position, data.m_MinGenRadius, data.m_MaxGenRadius); Vector3 origin = vector; origin.y += 3f; RaycastHit raycastHit; if (Physics.Raycast(new Ray { origin = origin, direction = Vector3.down }, out raycastHit)) { GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(prefab); if (!gameObject) { DebugUtils.Assert("[FallenObjectsManager:CreateFallenObjects] Can't Instantiate prefab - " + prefab.name, true, DebugUtils.AssertType.Info); } else { vector = raycastHit.point; BoxCollider component = gameObject.GetComponent <BoxCollider>(); float y = component.bounds.min.y; float y2 = gameObject.transform.position.y; float num2 = y2 - y; vector.y += num2; gameObject.transform.position = vector; Quaternion quaternion = gameObject.transform.rotation; quaternion *= Quaternion.Euler(Vector3.up * UnityEngine.Random.Range(0f, 360f)); gameObject.transform.rotation = quaternion; Vector3 forward = gameObject.transform.forward - Vector3.Dot(gameObject.transform.forward, raycastHit.normal) * raycastHit.normal; gameObject.transform.rotation = Quaternion.LookRotation(forward, raycastHit.normal); data.m_GeneratedObjects.Add(gameObject); Trigger component2 = gameObject.GetComponent <Trigger>(); DebugUtils.Assert(component2 != null, "[FallenObjectsManager:CreateFallenObjects] Generated object is not item!", true, DebugUtils.AssertType.Info); component2.m_FallenObject = true; component2.m_FallenObjectCreationTime = Time.time; component2.m_FallenObjectGenerator = generator; result = true; } } } return(result); }
public void RemoveItem(Trigger trigger) { FallenObjectGenerator fallenObjectGenerator = trigger.m_FallenObjectGenerator; if (fallenObjectGenerator != null && fallenObjectGenerator) { FallenObjectGeneratorData generatorData = fallenObjectGenerator.m_GeneratorData; for (int i = 0; i < generatorData.m_Data.Count; i++) { if (generatorData.m_Data[i].m_GeneratedObjects.Contains(trigger.gameObject)) { generatorData.m_Data[i].m_GeneratedObjects.Remove(trigger.gameObject); } } } }