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;
        }
    }
Exemplo n.º 2
0
    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);
                }
            }
        }
    }