Ejemplo n.º 1
0
        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);
    }
Ejemplo n.º 5
0
 public void OnHealthDepleted()
 {
     // TODO make the enemies exist elsewhere
     UnityExtensions.Destroy(gameObject);
 }
 /// <inheritdoc />
 public void Detach(PlayerBehavior actor)
 {
     UnityExtensions.Destroy(gameObject);
 }