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