private void HandleDataChanged( SliceUnitData <UnityWorldData> oldData, ref SliceUnitData <UnityWorldData> newData, GridItemPropertyChange changeType ) { // TODO should we do something? if (changeType == GridItemPropertyChange.HealthChange) { newData.Data = oldData.Data; return; } if (oldData.Data?.Structure != null) { UnityExtensions.Destroy(oldData.Data.Structure); } if (oldData.Data?.Tile != null) { UnityExtensions.Destroy(oldData.Data.Tile.gameObject); } var item = newData.GridItem; var worldPosition = newData.Position.ToVector3(); var tileDescriptor = TileLookup.FindTileOrNull(item.TileType); var tileBehavior = tileDescriptor.Construct( new PositionAndRotation(worldPosition, PossibleRotations[(byte)item.TileRotation]), WorldGrid, newData.Position ); GameObject placeableInstance = null; if (item.StructureType != 0) { var associatedStructure = TileLookup.FindStructureOrNull(item.StructureType); if (associatedStructure == null) { Debug.Log($"No object type of «{item.StructureType}» found while building world"); } else { placeableInstance = associatedStructure.CreateInstanceInWorld(this, newData.Position); } } newData.Data = new UnityWorldData { Tile = tileBehavior, Structure = placeableInstance }; }
private GameObject CreateWeaponTemplate() { var copy = WeaponTemplate.CreateInstance(); var weaponBehavior = copy.GetComponent <WeaponBehavior>(); MuzzleOffset = weaponBehavior.MuzzleOffset; HeldPosition = weaponBehavior.HeldPosition; UnityExtensions.Destroy(weaponBehavior); copy.AddComponent <ProjectileWeaponBehavior>(); return(copy); }
private void OnCollisionEnter2D(Collision2D collision) { // TODO make it so that projectiles from our team don't damage ourselves var receiver = collision.gameObject.GetComponent <IDamageReceiver>(); if (receiver != null) { int damageDone = DamageProcessor.ApplyDamage(receiver, _weaponDescriptorTemplate.DamagePerShot); var stat = _owner.Statistics.TryGetStatistic(KnownStats.DamageDone); Debug.Log(stat); stat?.Increment(damageDone); } UnityExtensions.Destroy(gameObject); }
/// <summary /> protected void LateUpdate() { if (_damagable == null) return; if (_owner.IsDestroyed()) { _damagable = null; _owner = null; UnityExtensions.Destroy(gameObject); return; } _healthImage.fillAmount = _damagable.Health / 100.0f; _rectTransform.anchoredPosition = CalculateScreenPosition(_owner.transform.position + _positionOffset); }
public void OnHealthDepleted() { // TODO make the enemies exist elsewhere UnityExtensions.Destroy(gameObject); }
/// <inheritdoc /> public void Detach(PlayerBehavior actor) { UnityExtensions.Destroy(gameObject); }