예제 #1
0
    // Use this for initialization
    void Start()
    {
        currentHealth = maxHealth;

        anim = GetComponent<Animator>();
        anim.SetFloat("health", currentHealth);

        player = Player.instance;
        victimMovementScript = GetComponent<VictimMovement>();
        levelExitScript = GameObject.Find("LevelExitTrigger").GetComponent<LevelExit>();

        thisVictimCollider = GetComponent<CapsuleCollider2D>();
        otherVictims = GameObject.FindGameObjectsWithTag("Victim");

        audioManager = AudioManager.instance;
        if (audioManager == null)
        {
            Debug.LogError("No audio manager in scene.");
        }
    }
    private void RayCastLight()
    {
        foreach (GameObject victim in victims)
        {
            if (victim != null)
            {
                Victim         victimScript         = victim.GetComponent <Victim>();
                VictimMovement victimMovementScript = victim.GetComponent <VictimMovement>();

                if (victimMovementScript.currentFloorLevel == floorLevel)
                {
                    float   distanceToVictim = Vector2.Distance(transform.position, victim.transform.position);
                    Vector2 victimFeet       = new Vector2(victim.transform.position.x, victim.transform.position.y - feetOffset);
                    Vector2 victimHead       = new Vector2(victim.transform.position.x, victim.transform.position.y + headOffset);
                    Vector2 lightPosition    = new Vector2(transform.position.x, transform.position.y);

                    RaycastHit2D castToVictimFeet = Physics2D.Raycast(transform.position, (victimFeet - lightPosition), distanceToVictim, whatToHit);
                    RaycastHit2D castToVictimHead = Physics2D.Raycast(transform.position, (victimHead - lightPosition), distanceToVictim, whatToHit);
                    Debug.DrawLine(victimFeet, castToVictimFeet.point, Color.red);
                    Debug.DrawLine(victimHead, castToVictimHead.point, Color.red);

                    if ((castToVictimFeet.collider != null && castToVictimFeet.collider.gameObject.tag == "Victim") || (castToVictimHead.collider != null && castToVictimHead.collider.gameObject.tag == "Victim"))
                    {
                        victimScript.lightTimer       = 0.0f;
                        victimScript.isVisibleByLight = true;
                    }
                    else
                    {
                        if (victimScript.lightTimer < timerMax)
                        {
                            victimScript.lightTimer += Time.deltaTime;
                        }
                        else if (victimScript.lightTimer >= timerMax)
                        {
                            victimScript.isVisibleByLight = false;
                        }
                    }
                }
                else
                {
                    if (victimScript.lightTimer < timerMax)
                    {
                        victimScript.lightTimer += Time.deltaTime;
                    }
                    else if (victimScript.lightTimer >= timerMax)
                    {
                        victimScript.isVisibleByLight = false;
                    }
                }
            }

            if (playerControllerScript.currentFloorLevel == floorLevel)
            {
                float   distanceToPlayer = Vector2.Distance(transform.position, player.transform.position);
                Vector2 playerFeet       = new Vector2(player.transform.position.x, player.transform.position.y - feetOffset);
                Vector2 playerHead       = new Vector2(player.transform.position.x, player.transform.position.y + headOffset);
                Vector2 lightPosition    = new Vector2(transform.position.x, transform.position.y);

                RaycastHit2D castToPlayerFeet = Physics2D.Raycast(transform.position, (playerFeet - lightPosition), distanceToPlayer, whatToHit);
                RaycastHit2D castToPlayerHead = Physics2D.Raycast(transform.position, (playerHead - lightPosition), distanceToPlayer, whatToHit);
                Debug.DrawLine(playerFeet, castToPlayerFeet.point, Color.red);
                Debug.DrawLine(playerHead, castToPlayerFeet.point, Color.red);

                if ((castToPlayerFeet.collider != null && castToPlayerFeet.collider.gameObject.tag == "Player") || (castToPlayerHead.collider != null && castToPlayerHead.collider.gameObject.tag == "Player"))
                {
                    player.lightTimer       = 0.0f;
                    player.isVisibleByLight = true;
                }
                else
                {
                    if (player.lightTimer < timerMax)
                    {
                        player.lightTimer += Time.deltaTime;
                    }
                    else if (player.lightTimer >= timerMax)
                    {
                        player.isVisibleByLight = false;
                    }
                }
            }
            else
            {
                if (player.lightTimer < timerMax)
                {
                    player.lightTimer += Time.deltaTime;
                }
                else if (player.lightTimer >= timerMax)
                {
                    player.isVisibleByLight = false;
                }
            }
        }
    }