public void SpawnRock()
    {
        GameObject go = Instantiate(f_prefab, new Vector3(Random.Range(f_collider.bounds.min.x, f_collider.bounds.max.x), transform.position.y, 0), Quaternion.identity, transform);
        RhinoBoss  rb = go.GetComponent <RhinoBoss>();

        rb.SwitchState(true);
        rb.Velocity = 3 * Vector2.down;
    }
    private IEnumerator StartFromDoor(Door door, RhinoBoss rhinoBoss)
    {
        List <RhinoBoss> spawned = new List <RhinoBoss>();

        // if (Random.value < f_createPercentage) {
        //     for (int i = 0; i < 100; ++i) {
        //         yield return new WaitForFixedUpdate();
        //     }
        //     for (int i = 0; i < 4; ++i) {
        //         GameObject go = Instantiate(pre_little, f_doors[i].SpawnPoint.position, Quaternion.identity);
        //         yield return new WaitForFixedUpdate();
        //         RhinoBoss rb = go.GetComponent<RhinoBoss>();
        //         rb.SwitchState(Random.value > 0.5f);
        //         rb.Velocity = f_doors[i].StartDirection;
        //         go.SetActive(true);
        //         spawned.Add(rb);
        //         rb.SetStartState(rb.ActiveState);
        //     }
        // }

        int lastSpawn   = f_lastSpawn[door];
        int addedOffset = Mathf.Max(0, MIN_SPAWN_OFFSET - (GameManager.Instance.Frame - lastSpawn));

        f_lastSpawn[door] = GameManager.Instance.Frame + addedOffset;

        for (int i = 0; i < addedOffset; ++i)
        {
            yield return(new WaitForFixedUpdate());
        }

        for (int i = 0; i < DOOR_DELTA; ++i)
        {
            yield return(new WaitForFixedUpdate());
        }

        // foreach (RhinoBoss rb in spawned) {
        //     rb.GroundMovement.SetGroundMask(new string[] { "Default", "MonsterTransparent" });
        // }

        // for (int i = 0; i < 75; ++i) {
        //     yield return new WaitForFixedUpdate();
        // }

        rhinoBoss.Velocity          = door.StartDirection;
        rhinoBoss.Mirror.localScale = new Vector3(door.StartDirection.normalized.x, 1, 1);
        //rhinoBoss.SwitchState(Random.value > 0.5f);

        rhinoBoss.ToggleState();

        rhinoBoss.Velocity = door.StartDirection;

        rhinoBoss.transform.position = door.SpawnPoint.position;
        rhinoBoss.gameObject.SetActive(true);
    }
    public void SetNextStep(Door door, RhinoBoss rhinoBoss)
    {
        rhinoBoss.gameObject.SetActive(false);

        List <Door> freeDoors = new List <Door>();

        foreach (Door d in f_doors)
        {
            //if (!d.ContainsPlayer()) {
            if (d == door)
            {
                continue;
            }
            freeDoors.Add(d);
            //}
        }

        int rand = Random.Range(0, freeDoors.Count);

        StartCoroutine(StartFromDoor(freeDoors[rand], rhinoBoss));
    }