コード例 #1
0
ファイル: Projectile.cs プロジェクト: lgarczyn/PureFPS
    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();
        }
    }
コード例 #2
0
ファイル: Projectile.cs プロジェクト: lgarczyn/PureFPS
    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;
    }
コード例 #3
0
ファイル: Projectile.cs プロジェクト: lgarczyn/PureFPS
 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);
         }
     }
 }
コード例 #4
0
    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);
    }
コード例 #5
0
 public TreeItem(int depth, SubweaponData data)
 {
     this.depth = depth;
     this.data  = data;
 }