Ejemplo n.º 1
0
    public void FireProjectile(AffectedProjectile projectile)
    {
        int index = -1;

        //{TODO} Could redo this with 'LinqE.FindIndex()'
        for (int i = 0; i < projectilePool.Length; i++)
        {
            if (projectilePool[i] == null || !projectilePool[i].Active)
            {
                index = i;
                break;
            }
        }

        if (index != -1)
        {
            projectilePool[index] = projectile;
            projectile.Active     = true;
        }
        else
        {
            projectileOverflow.Enqueue(projectile);
        }



        //if (PoolSize == 0)
        //	Debug.LogError("Must have a poolsize of atleast '1' to fire a projectile");
        //AffectedProjectile projectile = projectilePool.First(n => !n.Active);

        //projectile.Initial(position, direction, pd, twist);

        //projectile.Active = true;
    }
Ejemplo n.º 2
0
    public TerminalBallisticsData Tick(AffectedProjectile proj, bool debugHits = false)
    {
        RaycastHit rayHitInfo;

        //projectile.physicsTransform
        if (Physics.Raycast(
                proj.physicsTransform.PrevPosition,
                proj.physicsTransform.Position - proj.physicsTransform.PrevPosition,
                out rayHitInfo,
                Vector3.Distance(proj.physicsTransform.Position, proj.physicsTransform.PrevPosition),
                layerMask)
            )
        {
            if (debugHits)
            {
                Debug.DrawRay(
                    proj.physicsTransform.PrevPosition,
                    proj.physicsTransform.PrevPosition - proj.physicsTransform.Position,
                    Color.cyan,
                    10.0f,
                    false
                    );
            }

            return(new TerminalBallisticsData()
            {
                projectile = proj, hitInfo = rayHitInfo
            });
        }
        return(null);
    }
Ejemplo n.º 3
0
    public virtual object Clone()
    {
        AffectedProjectile newProj = (AffectedProjectile)MemberwiseClone();

        newProj.physicsTransform = physicsTransform.Clone() as VirtualPhysicsTransform;
        //newProj.affectors = affectors.Select(n => n.Clone() as AffectorBase).ToArray();


        newProj.affGravity   = affGravity.Clone() as Affector_Gravity;
        newProj.affCoriolis  = affCoriolis.Clone() as Affector_Coriolis;
        newProj.affSpinTwist = affSpinTwist.Clone() as Affector_SpinTwist;
        newProj.affWindDrag  = affWindDrag.Clone() as Affector_WindDrag;
        newProj.termCalc     = termCalc.Clone() as Default_TerminalCalculator;


        newProj.terminalDetector = this.terminalDetector.Clone() as TerminalBallisticDetector;
        //newProj.terminalCalculators = terminalCalculators.Select(n => n.Clone() as TerminalBallisticCalculator).ToArray();

        newProj.Initial();

        return(newProj);
    }