Exemplo n.º 1
0
    //Ai_hatch hatch;

    public override IEnumerator SpawnGroup()
    {
        if (res == null)
        {
            yield break;
        }

        yield return(new WaitForSeconds(delayTime));

        //if (hatch != null && hatch.dead)
        //    yield break;

        //hatch.ApplyDamage(hatch.maxLife + 100.0f);

        int count = Random.Range(minCount, maxCount);

        for (int i = 0; i < count; i++)
        {
            Vector3 position = transform.position + Random.insideUnitSphere * radius;

            if (AiUtil.CheckPositionOnGround(ref position, 10.0f, AiUtil.groundedLayer))
            {
                AIResource.Instantiate(id, position, Quaternion.identity, OnSpawned);
                yield return(new WaitForSeconds(0.1f));
            }
        }

        yield return(new WaitForSeconds(0.5f));

        yield break;
    }
Exemplo n.º 2
0
    bool RevisePosition()
    {
        if (!mRevisePosition)
        {
            return(true);
        }

        Vector3 position = transform.position;

        RaycastHit hitInfo;

        if (AiUtil.CheckPositionOnGround(position,
                                         out hitInfo,
                                         256.0f,
                                         256.0f,
                                         AiUtil.groundedLayer))
        {
            transform.position = hitInfo.point;
            if (!mErode || AIErodeMap.IsInErodeArea(transform.position) == null)
            {
                return(true);
            }
        }

        return(false);
    }
Exemplo n.º 3
0
//    bool CanSpawn()
//    {
//        if (GameConfig.IsMultiMode)
//            return overlay || AiNetworkManager.Instance.GetGroupAiNetwork(OwnerView.viewID.id).Count <= 0;
//        else
//            return overlay || aiObjects.Count <= 0;
//    }

    bool CheckOnTerrain()
    {
        Vector3 pos = transform.position;

        if (AiUtil.CheckPositionOnGround(ref pos, 10.0f, AiUtil.groundedLayer))
        {
            transform.position = pos;
            return(true);
        }

        return(false);
    }
Exemplo n.º 4
0
    bool IsRevisePosition()
    {
        float      distance = VoxelTerrainConstants._numVoxelsPerAxis;
        RaycastHit hitInfo;

        if (AiUtil.CheckPositionOnGround(position, out hitInfo, distance, distance, AiUtil.groundedLayer))
        {
            position = hitInfo.point;
            return(true);
        }

        return(false);
    }
Exemplo n.º 5
0
    void OnTerrainColliderCreated(IntVector4 node)
    {
        if (node.w == 0)
        {
            IntVector2 mark = new IntVector2(node.x, node.z);
            if (!mExists.Contains(mark))
            {
                if (Random.value < probability)
                {
                    Vector3 pos = AiUtil.GetRandomPosition(node);

                    if (AiUtil.CheckPositionOnGround(ref pos,
                                                     0.0f,
                                                     VoxelTerrainConstants._numVoxelsPerAxis << node.w,
                                                     AiUtil.groundedLayer))
                    {
                        if (!AiUtil.CheckPositionUnderWater(pos))
                        {
                            GameObject faece = Instantiate(GetRandomFaeces(), pos, Quaternion.identity) as GameObject;
                            faece.transform.parent = transform;

                            mFaeces.Add(faece);

                            StartCoroutine(DestroyFaece(faece, 400.0f));
                        }
                    }
                }

                mExists.Add(mark);
            }

            List <GameObject> faeces = mFaeces.FindAll(ret => MatchFaece(node, ret));
            foreach (GameObject ite in faeces)
            {
                Vector3 pos      = ite.transform.position;
                float   distance = pos.y - node.y;
                if (distance > PETools.PEMath.Epsilon)
                {
                    RaycastHit hitInfo;
                    if (Physics.Raycast(pos + Vector3.up * 0.1f, Vector3.down, out hitInfo, distance, AiUtil.groundedLayer))
                    {
                        if (ite.GetComponent <Rigidbody>() != null)
                        {
                            ite.GetComponent <Rigidbody>().useGravity = true;
                        }
                    }
                }
            }
        }
    }
Exemplo n.º 6
0
    protected virtual bool RevisePosition(IntVector4 node)
    {
        if (!mRevisePosition)
        {
            return(true);
        }

        Vector3 position = new Vector3(transform.position.x, node.y, transform.position.z);

        RaycastHit hitInfo;

        if (AiUtil.CheckPositionOnGround(position, out hitInfo, 0.0f,
                                         VoxelTerrainConstants._numVoxelsPerAxis << node.w,
                                         AiUtil.groundedLayer))
        {
            transform.position = hitInfo.point;
            if (!mErode || AIErodeMap.IsInErodeArea(transform.position) == null)
            {
                return(true);
            }
        }

        return(false);
    }