StateLink GetRandomLink()
        {
            float totalWeight = GetTotalWeight();

            if (totalWeight == 0.0f)
            {
                return(null);
            }

            float r = Random.Range(0, totalWeight);

            totalWeight = 0.0f;

            int index = 0;

            int linkCount = _Links.Count;

            for (int linkIndex = 0; linkIndex < linkCount; linkIndex++)
            {
                LinkWeight link = _Links[linkIndex];

                if (totalWeight <= r && r < totalWeight + link.weight)
                {
                    index = linkIndex;
                    break;
                }

                totalWeight += link.weight;
            }

            return(_Links[index].link);
        }
        public float GetTotalWeight()
        {
            if (_Links.Count == 0)
            {
                return(0);
            }

            float totalWeight = 0.0f;

            int linkCount = _Links.Count;

            for (int linkIndex = 0; linkIndex < linkCount; linkIndex++)
            {
                LinkWeight link = _Links[linkIndex];
                totalWeight += link.weight;
            }

            return(totalWeight);
        }