IEnumerator _Hit(CellHitInfo info) { yield return(new WaitForSeconds(0.05f)); ChangeMaterial(); GotHit(info); if (info.fatal) { if (finalBigCell && PongPadBuilder.instance.IsFinalLevel) { const int STEPS = 24; Vector3 point = Vector3.Lerp(info.hit_point, transform.position, 0.5f); for (int i = 0; i < STEPS; i++) { Vector3 normal = Quaternion.Euler(0, 360 * i / (float)STEPS, 0) * Vector3.forward; EmitHitPS(point, normal, Color.white, velocity_mul: 1.7f); } } Destroy((GameObject)gameObject); if (bonus) { Bonus.AddBonus(transform.position); } float cell_fraction = GetCellFraction(); int points1 = Mathf.RoundToInt(points * cell_fraction); Points.AddPoints(transform.position, MyMaterial.color, points1, pointsSize); PongPadBuilder.instance.KilledOneCell(cell_fraction); } }
protected override void GotHit(CellHitInfo info) { if (info.fatal) { dying_cell_time = Time.time; dying_cell_location = transform.position; } else if (spawnCellPrefabs.Length > 0) { int spawn_count = spawnCellOrientation.Length; Debug.Assert(spawn_count > 0); Debug.Assert(finalBigCell); StartCoroutine(PassThroughCocoonMode(spawnCellPrefabs.Length == 1 ? 2.2f : 11f)); void SpawnNewCell(LivingCell prefab, Quaternion orientation) { var spawn = Instantiate(prefab, transform.parent); var q = Quaternion.LookRotation(info.hit_point - transform.position); q = q * orientation; float dist = 0.055f + 0.21f - spawn.transform.localScale.y; var p = transform.position + dist * (q * Vector3.forward); spawn.transform.SetPositionAndRotation(p, q); spawn.fraction_of_original = 1f / (full_energy * spawn_count + 1); spawn.points = Mathf.RoundToInt(spawn.points / spawn.fraction_of_original); } for (int i = Mathf.RoundToInt(energy); i < Mathf.RoundToInt(info.prev_energy); i++) { int j = i % spawnCellPrefabs.Length; j = spawnCellPrefabs.Length - 1 - j; var prefab = spawnCellPrefabs[j]; foreach (var orientation in spawnCellOrientation) { SpawnNewCell(prefab, Quaternion.LookRotation(orientation)); } } } else if (last_moving_target != null && energy >= 1e-3f) { var copy = Instantiate(this, transform.parent); copy.copied_from_cell = this; Debug.Assert(copy.energy > 0f); } }
protected virtual void GotHit(CellHitInfo info) { }