bool GetPositionAndRotation(out Vector3 pos, out Quaternion rot, float minAngle, float maxAngle) { pos = Vector3.zero; rot = Quaternion.identity; pos = AiUtil.GetRandomPosition(transform.position, mMinRadius, mMaxRadius, Vector3.forward, minAngle, maxAngle, 10.0f, AiUtil.groundedLayer, 5); if (pos != Vector3.zero) { return(true); } if (!GameConfig.IsMultiMode) { pos = AiUtil.GetRandomPosition(transform.position, mMinRadius, mMaxRadius, Vector3.forward, minAngle, maxAngle); if (pos != Vector3.zero) { return(true); } } return(false); }
Vector3 GetCorrectPosition() { if (!ignoreTerrain) { for (int i = 0; i < 5; i++) { Vector3 position = AiUtil.GetRandomPosition( transform.position, 0.0f, radius, 200.0f, AiUtil.groundedLayer, 5); if (IsValid(position)) { return(position); } } } else { for (int i = 0; i < 5; i++) { Vector3 position = transform.position + Random.insideUnitSphere * radius; if (IsValid(position)) { return(position); } } } return(Vector3.zero); }
Vector3 GetRandomPosition(AISpawnData data, Vector3 center) { for (int i = 0; i < 10; i++) { Vector3 pos = AiUtil.GetRandomPosition(center, minRadius, maxRadius, Vector3.forward, data.minAngle, data.maxAngle); if (!IsInCSCommon(pos)) { return(pos); } } return(Vector3.zero); }
Vector3 GetPosition(IntVector4 node) { for (int i = 0; i < 10; i++) { Vector3 pos = AiUtil.GetRandomPosition(node); if (!IsInCSCommon(pos)) { return(pos); } } return(Vector3.zero); }
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; } } } } } }
bool GetPositionAndRotation(out Vector3 pos, out Quaternion rot) { pos = Vector3.zero; rot = Quaternion.identity; pos = AiUtil.GetRandomPosition(transform.position, 0.0f, mRadius, 10.0f, AiUtil.groundedLayer, 5); if (pos != Vector3.zero) { return(true); } pos = AiUtil.GetRandomPosition(transform.position, 0.0f, mRadius); if (pos != Vector3.zero) { return(true); } return(false); }
IEnumerator RefreshTowerMission() { _idxWave = 0; _uiData.CurWavesRemaining = _spData._waveDatas.Count; _uiData.TotalWaves = _spData._waveDatas.Count; while (_idxWave < _spData._waveDatas.Count) { while (PreTime > 0) { yield return(new WaitForSeconds(TimeStep)); PreTime -= TimeStep; } PreTime = 0; Vector3 dir = _forward; Vector3 center = _position; int m = _idxWave; AISpawnTDWavesData.TDWaveData wd = _spData._waveDatas[m]; if (Pathea.PeGameMgr.IsStory) { StroyManager.Instance.PushStoryList(wd._plotID); } int nMonsterTypes = wd._monsterTypes.Count; for (int n = 0; n < nMonsterTypes; n++) { int spType = wd._monsterTypes[n]; int minAngle = wd._minDegs[n]; int maxAngle = wd._maxDegs[n]; int spCount = UnityEngine.Random.Range(wd._minNums[n], wd._maxNums[n]); for (int i = 0; i < spCount; i++) { Vector3 pos; if (spType == 520 || spType == 521) //Special code for airborne monsters { pos = center; } else { if (isSweep) { pos = AiUtil.GetRandomPosition(center, 80, 100, dir, minAngle, maxAngle); transform.position = center + ((center - pos) * 1000); } else { pos = AiUtil.GetRandomPosition(center, 20, 80, dir, minAngle, maxAngle); } pos.y = SceneEntityPosAgent.PosYTBD; // let posagent to set y } SceneEntityPosAgent agent = MonsterEntityCreator.CreateAgent(pos, EncodeBcnMonsterProtoId(spType, _spData._dif, _spData._spawnType)); agent.spInfo = new MonsterEntityCreator.AgentInfo(this); agent.canRide = false; if (handerNewEntity != null) { handerNewEntity(agent); } _agents.Add(agent); SceneMan.AddSceneObj(agent); } } if (handlerNewWave != null) { handlerNewWave(_spData, _idxWave); } _uiData.CurWavesRemaining--; _idxWave++; if (_idxWave < _spData._waveDatas.Count) { int cdTime = _spData._timeToCool; while (cdTime > 0) { yield return(new WaitForSeconds(1)); cdTime--; } PreTime = (float)_spData._waveDatas[_idxWave]._delayTime; } } ; }
public bool Start() { MissionCommonData data = MissionManager.GetMissionCommonData(MissionId); for (int i = 0; i < data.m_TargetIDList.Count; i++) { if (data.m_TargetIDList[i] == TargetId) { _idxTarId = i; break; } } if (_idxTarId == -1) { return(false); } _data = MissionManager.GetTypeMonsterData(TargetId); if (_data == null) { return(false); } Vector3 referToPos; switch (_data.m_mr.refertoType) { case ReferToType.None: referToPos = PeCreature.Instance.mainPlayer.position; break; case ReferToType.Player: referToPos = PeCreature.Instance.mainPlayer.position; break; case ReferToType.Town: VArtifactUtil.GetTownPos(_data.m_mr.referToID, out referToPos); break; case ReferToType.Npc: referToPos = EntityMgr.Instance.Get(MissionManager.Instance.m_PlayerMission.adId_entityId[_data.m_mr.referToID]).position; break; default: referToPos = PeCreature.Instance.mainPlayer.position; break; } if (referToPos == Vector3.zero) { return(false); } if (PeGameMgr.IsSingle || PeGameMgr.IsTutorial) { if (_data.type == 2) { DoodadEntityCreator.commonDeathEvent += OnMonsterDeath; } else { MonsterEntityCreator.commonDeathEvent += OnMonsterDeath; } } GenMonsterInMission = !PeGameMgr.IsStory; if (GenMonsterInMission) { #if DbgNearGen Vector2 v2 = Vector2.zero; #else Vector2 v2 = UnityEngine.Random.insideUnitCircle.normalized * _data.m_mr.radius1; #endif Vector3 center = referToPos + new Vector3(v2.x, 0.0f, v2.y); //for (int i = 0; i < _data.m_MonsterList.Count; i++) { // int num = _data.m_MonsterList[i].type; // int protoId = _data.m_MonsterList[i].npcs[UnityEngine.Random.Range(0, _data.m_MonsterList[i].npcs.Count)]; // for (int j = 0; j < num; j++) { // Vector3 pos = AiUtil.GetRandomPosition (center, 0, _data.m_mr.radius2); // pos.y = SceneEntityPosAgent.PosYTBD; // let posagent to set y // SceneEntityPosAgent agent = MonsterEntityCreator.CreateAgent(pos, protoId); // agent.spInfo = new MonsterEntityCreator.AgentInfo(EntityMonsterBeacon.GetSpBeacon4MonsterKillTask()); // _agents.Add (agent); // SceneMan.AddSceneObj (agent); // } //} for (int i = 0; i < _data.m_CreMonList.Count; i++) { for (int j = 0; j < _data.m_CreMonList[i].monNum; j++) { Vector3 pos = AiUtil.GetRandomPosition(center, 0, _data.m_mr.radius2); pos.y = SceneEntityPosAgent.PosYTBD; // let posagent to set y int protoId = _data.m_CreMonList[i].monID; if (_data.m_CreMonList[i].type == 1) { protoId |= EntityProto.IdGrpMask; } SceneEntityPosAgent agent = MonsterEntityCreator.CreateAgent(pos, protoId); agent.spInfo = new MonsterEntityCreator.AgentInfo(EntityMonsterBeacon.GetSpBeacon4MonsterKillTask()); agent.canRide = false; _agents.Add(agent); SceneMan.AddSceneObj(agent); } } } return(true); }
Vector3 GetSpawnPosition(Vector3 center, float minRange, float maxRange) { return(AiUtil.GetRandomPosition(center, minRange, maxRange, 15.0f, AiUtil.groundedLayer, 10)); }