public void SetUp(BulletStateCtrl p_projectileHandler) { _projectileHandler = p_projectileHandler; if (_bulletGraph != null) { _bulletWave = _bulletGraph.bulletWave; _currentPattern = _bulletWave.GetDefaultPattern(); } SetBulletLauncher(); }
private BulletInstanceDefinition[] GetWaveDefinitions(BulletWave wave) { BulletInstanceDefinition[] ret = new BulletInstanceDefinition[wave.amount]; float arcStart = wave.rotation; float arcEnd = wave.rotation + wave.range; for (int i = 0; i < wave.amount; i++) { float offset = (float)i / (float)wave.amount; float angle = GeometryUtils.AngleInArc(arcStart, arcEnd, offset); angle += ignoreRotation? 0 : transform.rotation.eulerAngles.z; ret[i].position = GeometryUtils.PointInCircle(spawnRadiusOffset, angle); ret[i].position += transform.position + (Vector3)spawnOffset; ret[i].rotation = Quaternion.Euler(0, 0, angle); } return(ret); }
private void OnDrawGizmos() { float radius = spawnRadiusOffset > 0 ? spawnRadiusOffset : 0.05f; Gizmos.DrawWireSphere(transform.position + (Vector3)spawnOffset, radius); Color stored = Gizmos.color; foreach (BulletSpawnDefinition waveDef in waves) { BulletWave wave = waveDef.wave; Gizmos.color = wave.debugColor; BulletInstanceDefinition[] waveDefinitions = GetWaveDefinitions(wave); foreach (BulletInstanceDefinition def in waveDefinitions) { Gizmos.DrawLine(def.position, def.position + (ignoreRotation? Vector3.right : def.rotation * Vector3.right)); } } Gizmos.color = stored; }
private void SpawnWave(BulletWave wave) { BulletInstanceDefinition[] waveDefinitions = GetWaveDefinitions(wave); List <Transform> newProjectiles = new List <Transform>(); foreach (BulletInstanceDefinition def in waveDefinitions) { Transform newP = Transform.Instantiate(wave.projectile, def.position, def.rotation); newP.gameObject.SetActive(false); newProjectiles.Add(newP); ApplyDamageOnCollision damageOnCollision = newP.GetComponent <ApplyDamageOnCollision>(); if (damageOnCollision != null) { damageOnCollision.Damage = wave.damage; } } foreach (Transform t in newProjectiles) { t.gameObject.SetActive(true); } }