public void Kill(DeathCause cause, float time) { if (_exploded) { return; } AddPositionToRenderer(_rigidbody.position); _exploded = true; enabled = false; _trailRenderer.enabled = false; _renderer.enabled = false; _rigidbody.detectCollisions = false; _rigidbody.velocity = Vector3.zero; for (int i = 0; i < _data.subweapons.Count; i++) { SubweaponData subweapon = _data.subweapons[i]; if (_subweaponCreated[i] == false && ( (subweapon.activation.onContact && cause == DeathCause.Contact) || (subweapon.activation.onTimeout && cause == DeathCause.Timeout))) { AddSubweapon(subweapon, time, i); } } if (_activeSubweaponCount == 0) { Retire(); } }
void BaseInit(IWeapon shooter, float shotTime, ProjectileData data, EffectData effect) { enabled = true; _data = data; _effect = effect; _parent = shooter; _id = _currentID++; _exploded = false; _deathTime = shotTime + data.lifetime + Random.Range(0, data.lifetimeVariation); _bounces = 0; _activeSubweaponCount = 0; _subweaponCreated = new bool[data.subweapons.Count]; if (_deathTime <= shotTime) { Kill(DeathCause.Timeout, shotTime); return; } //TODO: add subweapons after pos is set? for (int i = 0; i < data.subweapons.Count; i++) { SubweaponData subweapon = data.subweapons[i]; if (subweapon.activation.onStartup) { AddSubweapon(subweapon, shotTime, i); } } _rigidbody.detectCollisions = true; _trailRenderer.enabled = true; _renderer.enabled = true; }
public void NotifyTrigger(float time) { foreach (Subweapon subweapon in GetComponentsInChildren <Subweapon>()) { subweapon.NotifyTrigger(time); } for (int i = 0; i < _data.subweapons.Count; i++) { SubweaponData subweapon = _data.subweapons[i]; if (subweapon.activation.onTrigger && _subweaponCreated[i] == false) { AddSubweapon(subweapon, time, i); } } }
int FoldTree(ref List <SubweaponData> subweapons, int depth, int index) { while (index < subweaponsData.Count) { SubweaponData subdata = subweaponsData[index].data; if (subdata == null) { subdata = new SubweaponData(); subweaponsData[index] = new TreeItem(subweaponsData[index].depth, subdata); } subdata.projectile.subweapons = new List <SubweaponData>(); subweapons.Add(subdata); index++; //TODO clean loop if (index >= subweaponsData.Count) { break; } int newDepth = subweaponsData[index].depth; if (newDepth == depth) { continue; } if (newDepth < depth) { break; } if (newDepth > depth) { index = FoldTree(ref subdata.projectile.subweapons, depth + 1, index); } } return(index); }
public TreeItem(int depth, SubweaponData data) { this.depth = depth; this.data = data; }