void Start()
    {
        droidInformation = GetComponent<DroidInformation>();
        path = GetComponent<DroidPath>();

        droidInformation.CharacterStateChanged += EnemyInformation_CharacterStateChanged;

        mode = DroidMode.SeekingPoint;
        StartCoroutine(SeekPoint(path.NextPoint));
    }
    void Update()
    {
        if (GameInformation.Instance.GameState != GameState.Playing) return;
        if (droidInformation.CharacterState != CharacterState.Alive) return;

        cooldown += Time.deltaTime;

        switch (mode)
        {
            case DroidMode.Walking:
                {
                    if (PlayerIsVisible())
                    {
                        mode = DroidMode.SeekingPlayer;
                        StopAllCoroutines();
                        StartCoroutine(SeekPlayer());
                    }
                    else if (Vector3.Distance(transform.position, path.NextPoint) < MaxDistanceTriggerNextPoint)
                    {
                        mode = DroidMode.SeekingPoint;

                        StopAllCoroutines();
                        StartCoroutine(SeekPoint(path.GetAndSetNextPointIndex()));
                    }
                    else
                    {
                        transform.position += (path.NextPoint - transform.position).normalized * droidInformation.WalkSpeed * Time.deltaTime / 10;
                    }
                }
                break;
            case DroidMode.SeekingPoint:
                {
                    DebugController.Instance.LogLine("DROID ANGLE: " + Vector3.Angle(transform.forward, path.NextPoint - transform.position));
                    if (PlayerIsVisible())
                    {
                        mode = DroidMode.SeekingPlayer;
                        StopAllCoroutines();
                        StartCoroutine(SeekPlayer());
                    }
                    else if (Vector3.Angle(transform.forward, path.NextPoint - transform.position) < 0.8)
                    {
                        mode = DroidMode.Walking;

                        StopAllCoroutines();
                    }
                }
                break;
            case DroidMode.SeekingPlayer:
                {
                    if (!PlayerIsVisible())
                    {
                        mode = DroidMode.SeekingPoint;

                        StopAllCoroutines();
                        StartCoroutine(SeekPoint(path.NextPoint));
                    }
                    else if (CanFireOnPlayer())
                    {
                        Fire();
                    }
                }
                break;
            default:
                break;
        }
    }