/// <summary> /// Initialize damage text to the array. /// </summary> private void InitDamageTextToArray() { mDamageTexts = new JCS_Vector <JCS_DamageText>(mNumberOfHandle); if (mDamageText == null) { return; } for (int count = 0; count < mNumberOfHandle; ++count) { // spawn a new game object, // and get the component JCS_DamageText dt = JCS_Utility.SpawnGameObject( mDamageText, mDamageText.transform.position, mDamageText.transform.rotation) as JCS_DamageText; // add to array mDamageTexts.set(count, dt); // set parent dt.transform.SetParent(this.transform); } }
/// <summary> /// Spawn one damage text. /// </summary> /// <param name="damage"> damage number </param> /// <param name="pos"> spawn position </param> public void SpawnDamageTextFromPool( int damage, Vector3 pos, AudioClip hitSound, bool secondSearch = false) { if (mNumberOfHandle == 0) { return; } JCS_DamageText dt = null; for (int index = mLastSpawnPos; index < mNumberOfHandle; ++index) { dt = mDamageTexts.at(index); // if not active, meaning we can spawn the text if (!dt.isActive()) { dt.SpawnDamageText(damage, pos); // Hit Sound is the part of SFX sound PlayHitSound(hitSound); // set the last spawn count mLastSpawnPos = index; // Look at the camera once! if (mFaceCamera) { dt.transform.LookAt(Camera.main.transform.position); dt.transform.Rotate(0.0f, 180.0f, 0.0f); } return; } } // if we get here mean we cycle once but we // did not spawn a text! // so reset the spawn pos and // try to search agian until we find one! mLastSpawnPos = 0; // if function call the second time, // and try to call the third time, // exit the function call. // so prevent "stack overflow // search/infinite function call". // IMPORTANT(JenChieh): it wont spawn damage text this time, // if this happens. if (secondSearch) { #if (UNITY_EDITOR) if (JCS_GameSettings.instance.DEBUG_MODE) { JCS_Debug.LogWarning("Prevent, stack overflow function call."); } #endif return; } // dangerious, use carefully! // make sure u have enough number of handle // or else the program might crash? (too many delay?) SpawnDamageTextFromPool(damage, pos, hitSound, true); }