Beispiel #1
0
    private void OnDrawGizmos()
    {
        bool      isFirstRound = true;
        BufferObj lastBo       = new BufferObj();

        foreach (BufferObj bo in trailList) // para cada um dos azuis
        {
            Gizmos.color  = Color.blue;
            Gizmos.matrix = Matrix4x4.TRS(bo.position, bo.rotation, Vector3.one);
            Gizmos.DrawWireCube(Vector3.zero, Vector3.Scale(bo.size, bo.scale)); // desenha o collider
            if (!isFirstRound)
            {
                LinkedList <BufferObj> calculated = FillTrail(bo, lastBo);
                foreach (BufferObj cbo in calculated)
                {
                    Gizmos.color  = Color.yellow;
                    Gizmos.matrix = Matrix4x4.TRS(cbo.position, cbo.rotation, Vector3.one);
                    Gizmos.DrawWireCube(Vector3.zero, Vector3.Scale(bo.size, bo.scale));

                    Collider[] hits = Physics.OverlapBox(cbo.position, cbo.size, cbo.rotation, hitLayers, QueryTriggerInteraction.Ignore);
                }
            }
            isFirstRound = false;
            lastBo       = bo;
        }
    }
    private void DetectTrailCollisions()
    {
        bool      isFirstRound = true;
        BufferObj lastBo       = new BufferObj();

        foreach (BufferObj bo in trailList) // para cada um dos azuis
        {
            if (!isFirstRound)
            {
                LinkedList <BufferObj> calculated = FillTrail(bo, lastBo);
                foreach (BufferObj cbo in calculated)
                {
                    Collider[] hits = Physics.OverlapBox(cbo.position, cbo.size / 2, cbo.rotation, hitLayers, QueryTriggerInteraction.Ignore);

                    if (hits.Length > 0)
                    {
                        if (hits[0].gameObject.GetComponent <Destructible>() != null) // confere se atacou algo do cenario
                        {
                            hits[0].gameObject.GetComponent <Destructible>().SwordTrailDetectedMe();
                        }

                        if (girlAnim.GetBool("Attacking") && hits[0].gameObject.GetComponentInParent <BossScript>() != null) // confere se atacou o boss
                        {
                            hits[0].gameObject.GetComponentInParent <BossScript>().RegisterPlayerSwordFillDamage();
                        }
                    }
                }
            }
            isFirstRound = false;
            lastBo       = bo;
        }
    }
Beispiel #3
0
    private void CheckTrail()
    {
        BufferObj bo = new BufferObj();

        bo.size     = customSize;
        bo.scale    = greatSwordCollider.transform.localScale;
        bo.rotation = greatSwordCollider.transform.rotation;
        bo.position = greatSwordCollider.transform.position + greatSwordCollider.transform.TransformDirection(greatSwordCollider.center + posOffset);
        trailList.AddFirst(bo);
        if (trailList.Count > maxFrameBuffer)
        {
            trailList.RemoveLast();
        }

        DetectTrailCollisions();
    }
Beispiel #4
0
    private LinkedList <BufferObj> FillTrail(BufferObj from, BufferObj to) // preenche os gaps e retorna uma lista
    {
        LinkedList <BufferObj> fillerList = new LinkedList <BufferObj>();
        float distance = Mathf.Abs((from.position - to.position).magnitude);

        if (distance > checkSize)
        {
            float steps       = Mathf.Ceil(distance / checkSize);
            float stepsAmount = 1 / (steps + 1);
            float stepValue   = 0;
            for (int i = 0; i < (int)steps; i++)
            {
                stepValue += stepsAmount;
                BufferObj tmpBo = new BufferObj();
                tmpBo.size     = customSize;
                tmpBo.position = Vector3.Lerp(from.position, to.position, stepValue);
                tmpBo.rotation = Quaternion.Lerp(from.rotation, to.rotation, stepValue);
                fillerList.AddFirst(tmpBo);
            }
        }
        return(fillerList);
    }
Beispiel #5
0
    private void DetectTrailCollisions()
    {
        bool      isFirstRound = true;
        BufferObj lastBo       = new BufferObj();

        foreach (BufferObj bo in trailList) // para cada um dos azuis
        {
            if (!isFirstRound)
            {
                LinkedList <BufferObj> calculated = FillTrail(bo, lastBo);
                foreach (BufferObj cbo in calculated)
                {
                    Collider[] hits = Physics.OverlapBox(cbo.position, Vector3.Scale(bo.size, bo.scale), cbo.rotation, hitLayers, QueryTriggerInteraction.Ignore);

                    if (hits.Length > 0)
                    {
                        damageDealer.GreatSwordFiller(hits[0].gameObject);
                    }
                }
            }
            isFirstRound = false;
            lastBo       = bo;
        }
    }