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(); }
private void OnCollisionExit2D(Collision2D collision) { if (collision.collider.tag == "Ground") { grounded--; } LightUp lightUp = collision.collider.GetComponent <LightUp>(); if (lightUp != null) { lightUp.SwitchOff(); } }
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(); } }
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(); } } }