public CreatureManager GetCreatureManager()
    {
        if (HasNoValidAsset())
        {
            Debug.LogError("Input Creature JSON file not set for CreatureAsset: " + name, this);
            ResetState();
            return(null);
        }

        if (creature_manager != null)
        {
            return(creature_manager);
        }

        Dictionary <string, object> load_data = LoadCreatureJsonData();

        CreatureModule.Creature new_creature = new CreatureModule.Creature(ref load_data);
        creature_manager = new CreatureModule.CreatureManager(new_creature);
        creature_manager.CreateAllAnimations(ref load_data);

        var all_animations = creature_manager.animations;

        foreach (KeyValuePair <string, CreatureAnimationAssetData> entry in animation_clip_overides)
        {
            var cur_name           = entry.Key;
            var cur_animation_data = entry.Value;

            if (all_animations.ContainsKey(cur_name))
            {
                // Set Animation Frame Ranges
                all_animations[cur_name].start_time = cur_animation_data.start_frame;
                all_animations[cur_name].end_time   = cur_animation_data.end_frame;

                // Decide if we need to make point caches
                if (cur_animation_data.make_point_cache)
                {
                    var stopWatch = new System.Diagnostics.Stopwatch();
                    stopWatch.Start();

                    creature_manager.MakePointCache(cur_name, cur_animation_data.cache_approximation);

                    stopWatch.Stop();
                    Debug.Log("Creature Point Cache generation took: " + stopWatch.ElapsedMilliseconds);
                }
            }
        }



        is_dirty = true;

        // Load meta data if available
        creature_meta_data = null;
        if (creatureMetaJSON != null)
        {
            creature_meta_data = new CreatureMetaData();
            CreatureModule.Utils.BuildCreatureMetaData(
                creature_meta_data,
                creatureMetaJSON.text,
                physics_assets,
                skin_swap_names);
        }

        return(creature_manager);
    }