コード例 #1
0
        public void SetLightDirection(Vector3 lightDirection)
        {
            var last = LightDirection;

            LightDirection = lightDirection.Normalized();
            if (last == Vector3.Zero)
            {
                CalculateUp();
            }
            else
            {
                var proj = LightUp.ProjectPlane(lightDirection);
                if (proj.LengthSquared() < 0.01f)
                {
                    // if the direction moved too far and is too close to parallel to the old up, calculate a new up
                    CalculateUp();
                }
                else
                {
                    // otherwise just use the new projection
                    LightUp = proj.Normalized();
                }
            }
            UpdateView();
        }
コード例 #2
0
    private void OnCollisionExit2D(Collision2D collision)
    {
        if (collision.collider.tag == "Ground")
        {
            grounded--;
        }

        LightUp lightUp = collision.collider.GetComponent <LightUp>();

        if (lightUp != null)
        {
            lightUp.SwitchOff();
        }
    }
コード例 #3
0
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.tag == "Ground")
        {
            if (isJumping && Time.fixedTime >= timerNextJump)
            {
                isJumping   = false;
                comboEnable = true;
                animator.SetBool("IsJumping", false);
            }

            grounded++;
        }

        LightUp lightUp = collision.collider.GetComponent <LightUp>();

        if (lightUp != null)
        {
            lightUp.SwitchOn();
        }
    }
コード例 #4
0
ファイル: FOV.cs プロジェクト: Cirnol/Unity-Games
    private void FindFOVDef()
    {
        VisibleCharacters.Clear();
        VisibleObstacles.Clear();
        VisibleInteractables.Clear();

        if (!showMesh)
        {
            return;
        }

        stepCount = Mathf.RoundToInt(lens.fov * meshRes);
        float stepAngle = lens.fov / stepCount;

        viewVertex = new List <Vector3>();

        hit = new RaycastHit2D();
        for (int i = 0; i < stepCount; i++)
        {
            float   angle = transform.eulerAngles.z - lens.fov / 2 + stepAngle * i + 90;
            Vector3 dir   = Utils.GetVectorFromAngle(angle);
            if (isEnemy)
            {
                hit = Physics2D.Raycast(transform.position, dir, lens.radius * radiusFactor, ObstacleMask + CharacterMask + InteractableMask + EnemyBlockerMask + xrayProof);
            }
            else if (bulb.power == Bulb.Power.XRAY)
            {
                hit = Physics2D.Raycast(transform.position, dir, lens.radius * radiusFactor, CharacterMask + InteractableMask + xrayProof);
            }
            else
            {
                hit = Physics2D.Raycast(transform.position, dir, lens.radius * radiusFactor, ObstacleMask + CharacterMask + InteractableMask + xrayProof);
            }

            if (hit.collider == null)
            {
                viewVertex.Add(transform.position + dir.normalized * lens.radius * radiusFactor);
            }
            else if (InteractableMask == (InteractableMask | (1 << hit.collider.gameObject.layer)))
            {
                if (!VisibleInteractables.Contains(hit.transform))
                {
                    VisibleInteractables.Add(hit.transform);
                }
                if (bulb.power == Bulb.Power.XRAY)
                {
                    hit = Physics2D.Raycast(transform.position, dir, lens.radius * radiusFactor, CharacterMask + xrayProof);
                }
                else
                {
                    hit = Physics2D.Raycast(transform.position, dir, lens.radius * radiusFactor, ObstacleMask + CharacterMask + xrayProof);
                }
            }

            if (hit.collider == null)
            {
                viewVertex.Add(transform.position + dir.normalized * lens.radius * radiusFactor);
            }
            else if (CharacterMask == (CharacterMask | (1 << hit.collider.gameObject.layer)))
            {
                if (!VisibleCharacters.Contains(hit.transform))
                {
                    VisibleCharacters.Add(hit.transform);
                }
                if (bulb.power == Bulb.Power.XRAY)
                {
                    hit = Physics2D.Raycast(transform.position, dir, lens.radius * radiusFactor, xrayProof);
                }
                else
                {
                    hit = Physics2D.Raycast(transform.position, dir, lens.radius * radiusFactor, ObstacleMask + xrayProof);
                }
            }


            if (hit.collider != null && xrayProof == (xrayProof | (1 << hit.collider.gameObject.layer)))
            {
                if (!VisibleObstacles.Contains(hit.transform))
                {
                    VisibleObstacles.Add(hit.transform);
                }
                viewVertex.Add(hit.point);
            }
            else if (hit.collider == null || bulb.power == Bulb.Power.XRAY)
            {
                viewVertex.Add(transform.position + dir.normalized * lens.radius * radiusFactor);
            }
            else
            {
                //Debug.Log("hitting a behindmask");
                if (ObstacleMask == (ObstacleMask | (1 << hit.collider.gameObject.layer)) || (isEnemy && EnemyBlockerMask == (EnemyBlockerMask | (1 << hit.collider.gameObject.layer))))
                {
                    if (!VisibleObstacles.Contains(hit.transform))
                    {
                        VisibleObstacles.Add(hit.transform);
                    }
                }
                viewVertex.Add(hit.point);
            }
        }

        foreach (Transform t in VisibleCharacters)
        {
            LightUp l = t.gameObject.GetComponent <LightUp>();
            if (l != null)
            {
                l.Light();
            }
        }
        foreach (Transform t in VisibleInteractables)
        {
            LightUp l = t.gameObject.GetComponent <LightUp>();
            if (l != null)
            {
                l.Light();
            }
        }
        foreach (Transform t in VisibleObstacles)
        {
            LightUp l = t.gameObject.GetComponent <LightUp>();
            if (l != null)
            {
                l.Light();
            }
        }
    }