protected override void OnUpdate() { EnemyComponent currEnemy = null; BaseEnemyConfig currEnemyConfig = null; WaypointComponent currWaypoint = null; float currSpeed = 0.0f; float deltaTime = Time.deltaTime; Transform enemyTransform = null; Transform waypointTransform = null; Vector3 dir; float distance = 0.0f; foreach (var entity in GetEntities <TEnemyGroup>()) { currEnemy = entity.mEnemy; currEnemyConfig = currEnemy.mConfigs; currWaypoint = currEnemy.mCurrWaypoint; currSpeed = currEnemyConfig.mSpeed * deltaTime; enemyTransform = currEnemy.CachedTransform; waypointTransform = currWaypoint.CachedTransform; /// until the enemy doesn't reach the waypoint update its position dir = waypointTransform.position - enemyTransform.position; distance = dir.magnitude; dir.Normalize(); /// rotate an enemy along its move direction enemyTransform.rotation = Quaternion.RotateTowards(enemyTransform.rotation, QuaternionUtils.LookRotationXZ(dir), currEnemyConfig.mRotationSpeed * deltaTime); if (distance > 0.1f) /// epsilon { enemyTransform.position += dir * currSpeed; continue; } if (currWaypoint.mNextWaypoint != null) { currEnemy.mCurrWaypoint = currWaypoint.mNextWaypoint; } } }
#pragma warning restore 0649 private void Awake() { if (waypointComponent == null) { waypointComponent = GetComponentInParent <WaypointComponent>(); } if (waypointComponent == null) { return; } _waypoints = waypointComponent.GetNavigator(); _waypoints.Select(startAtWaypoint); transform.position = _waypoints.Current; }
protected void _spawnNewEnemy(GameObject enemyPrefab, Vector3 position, WaypointComponent startWaypoint) { GameObject instantiatedEnemy = GameObject.Instantiate(enemyPrefab, position, Quaternion.identity, mEnemiesRootTransform); EnemyComponent enemyComponent = instantiatedEnemy.GetComponent <EnemyComponent>(); if (enemyComponent == null) { return; } /// copy shared values into individual fields enemyComponent.mHealth = enemyComponent.mConfigs.mHealth; enemyComponent.mCurrWaypoint = startWaypoint; /// update enemy's UI HealthBarView healthBarView = enemyComponent.GetComponentInChildren <HealthBarView>(); healthBarView.CurrNormalizedHealth = 1.0f; }
private void Update() { RaycastHit[] hits = Physics.RaycastAll(mainCamera.ScreenPointToRay(Input.mousePosition), 1000.0f, mainCamMask); mainHitList.Clear(); if (hits.Length > 0) { foreach (RaycastHit curHit in hits) { mainHitList.Add(curHit.collider); } } hits = Physics.RaycastAll(miniMapCamera.ScreenPointToRay(Input.mousePosition), 1000.0f, miniMapCamMask); ClearText(hits); miniMapHitList.Clear(); if (hits.Length > 0) { foreach (RaycastHit curHit in hits) { miniMapHitList.Add(curHit.collider); } foreach (Collider curCol in miniMapHitList) { UI_DisplayText displayTextRef = curCol.gameObject.GetComponent <UI_DisplayText>(); if (displayTextRef != null) { displayTextRef.DisplayText(); } } } /*hits = Physics.RaycastAll (UICamera.ScreenPointToRay (Input.mousePosition)); * uiHitList.Clear(); * if(hits.Length > 0) * { * foreach (RaycastHit curHit in hits) * uiHitList.Add(curHit.collider); * }*/ if (Input.GetMouseButtonDown(0)) { Collider waypoint = miniMapHitList.Find(mmh => mmh.CompareTag("Waypoint")); if (waypoint != null) { miniMapHitList.Remove(waypoint.GetComponent <Collider>()); Destroy(waypoint.gameObject); return; } foreach (Collider curCol in miniMapHitList) { WaypointComponent waypointRef = curCol.gameObject.GetComponent <WaypointComponent>(); if (waypointRef != null) { if (WaypointComponent.currentWaypoint != null) { waypointRef.DestroyWaypoint(); } waypointRef.CreateWaypoint(); break; } } } }