Beispiel #1
0
 public void setTarget(Posture posture, ulong mask = (ulong)PartsBit.Whole)
 {
     // pass 1
     foreach (var node_data in posture.getNodeDataList())
     {
         var node_idx = node_data.node_idx_;
         if (node_idx != (int)Parts.Root &&
             (1UL << node_idx & mask) != 0)
         {
             var node = node_list_[node_idx];
             node.setBaseRotation(node_data);
         }
     }
     // pass 2
     foreach (var node_data in posture.getNodeDataList())
     {
         var node_idx = node_data.node_idx_;
         if (node_idx != (int)Parts.Root &&
             (1UL << node_idx & mask) != 0)
         {
             var node = node_list_[node_idx];
             node.setTarget(node_data);
         }
     }
 }
        IEnumerator Start()
        {
            yield return(FileUtil.preparePath("apose.dat"));

            posture_apose_ = JsonUtility.FromJson <Posture>(FileUtil.content);
            yield return(FileUtil.preparePath("pre_throw_l_arm.dat"));

            posture_pre_throw_l_arm_ = JsonUtility.FromJson <Posture>(FileUtil.content);
            yield return(FileUtil.preparePath("pre_throw_r_arm.dat"));

            posture_pre_throw_r_arm_ = JsonUtility.FromJson <Posture>(FileUtil.content);
            yield return(FileUtil.preparePath("throw_l_arm.dat"));

            posture_throw_l_arm_ = JsonUtility.FromJson <Posture>(FileUtil.content);
            yield return(FileUtil.preparePath("throw_r_arm.dat"));

            posture_throw_r_arm_ = JsonUtility.FromJson <Posture>(FileUtil.content);
            yield return(FileUtil.preparePath("pre_jump.dat"));

            posture_pre_jump_ = JsonUtility.FromJson <Posture>(FileUtil.content);

            muscle_motion_ = new MuscleMotion();
            muscle_motion_.init(posture_apose_, 80f /* damper */, 1500f /* spring */);

            set_params_body(body_damper_, body_spring_);
            set_params_arm(arm_damper_, arm_spring_);
            set_params_leg(leg_damper_, leg_spring_);

            {       /* tales */
                float damper       = 4f;
                float spring_ratio = 40f;
                muscle_motion_.setParams(MuscleMotion.Parts.L_Tale1, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_Tale2, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_Tale3, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_Tale4, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Tale1, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Tale2, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Tale3, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Tale4, damper, spring_ratio);
            }
            {       /* ribbons */
                float damper       = 2f;
                float spring_ratio = 100f;
                muscle_motion_.setParams(MuscleMotion.Parts.L_Ribbon1, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_Ribbon2, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Ribbon1, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Ribbon2, damper, spring_ratio);
            }
            {       /* suso */
                float damper       = 10f;
                float spring_ratio = 200f;
                muscle_motion_.setParams(MuscleMotion.Parts.L_SusoBack, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_SusoFront, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_SusoBack, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_SusoFront, damper, spring_ratio);
            }

            current_posture_ = posture_apose_;
        }
Beispiel #3
0
        public Posture deepCopy()
        {
            var posture = new Posture();

            posture.node_data_list_ = new NodeData[node_data_list_.Length];
            for (var i = 0; i < node_data_list_.Length; ++i)
            {
                posture.node_data_list_[i] = node_data_list_[i].deepCopy();
            }
            return(posture);
        }
Beispiel #4
0
        IEnumerator Start()
        {
            draw_buffer_.init();
            yield return(FileUtil.preparePath("whole.dat"));

            posture_       = JsonUtility.FromJson <Posture>(FileUtil.content);
            muscle_motion_ = new MuscleMotion();
            muscle_motion_.init(posture_, 40f /* damper */, 800f /* spring_ratio */);

            GetComponent <MuscleMotionRenderer>().init();
            initialized_ = true;
        }
Beispiel #5
0
        public void init(Posture posture, float damper, float spring_ratio)
        {
            node_list_ = new Node[(int)Parts.Max];
            for (var i = 0; i < (int)Parts.Max; ++i)
            {
                node_list_[i] = new Node();
            }

            foreach (var node_data in posture.getNodeDataList())
            {
                // node_data.dump();
                var node_idx        = node_data.node_idx_;
                var node            = node_list_[node_idx];
                var parent_node_idx = node_data.parent_node_idx_;
                var parent_node     = parent_node_idx < (int)Parts.Max ? node_list_[parent_node_idx] : null;
                node.init(node_data, parent_node, damper, spring_ratio);
            }
        }
Beispiel #6
0
        private void write_data(string filename, List <MuscleMotionEditor.TransformNode> transform_node_list, ulong mask)
        {
            var root = (target as MuscleMotionEditor).transform;

            root.position = Vector3.zero;
            var posture   = new Posture();
            var serialize = posture.beginSet();

            foreach (var transform_node in transform_node_list)
            {
                posture.set(serialize,
                            transform_node.transform_,
                            transform_node.parts_,
                            transform_node.parent_parts_,
                            mask);
            }
            posture.endSet(serialize);
            string json = JsonUtility.ToJson(posture);
            var    path = Application.streamingAssetsPath + "/" + filename + ".dat";

            System.IO.File.WriteAllText(path, json);
            Debug.LogFormat("write {0} done.", path);
        }
        void OnGUI()
        {
            int x = 20;
            int y = 60;
            int w = 240;
            int h = 40;

            GUI.Box(new Rect(Screen.width - (x + w + 10), y - 40, w, y + h * 10 + 10), "Posture Param");
            GUI.Label(new Rect(Screen.width - (x + w), y, w - 20, h), "body damper");
            y += h / 2;
            float body_damper = GUI.HorizontalSlider(new Rect(Screen.width - (x + w), y, w - 20, h), body_damper_, 0f, 100f);

            if (body_damper_ != body_damper)
            {
                body_damper_ = body_damper;
            }
            y += h;
            GUI.Label(new Rect(Screen.width - (x + w), y, w - 20, h), "body spring");
            y += h / 2;
            float body_spring = GUI.HorizontalSlider(new Rect(Screen.width - (x + w), y, w - 20, h), body_spring_, 0f, 2000f);

            if (body_spring_ != body_spring)
            {
                body_spring_ = body_spring;
            }
            y += h;
            GUI.Label(new Rect(Screen.width - (x + w), y, w - 20, h), "arm damper");
            y += h / 2;
            float arm_damper = GUI.HorizontalSlider(new Rect(Screen.width - (x + w), y, w - 20, h), arm_damper_, 0f, 100f);

            if (arm_damper_ != arm_damper)
            {
                arm_damper_ = arm_damper;
            }
            y += h;
            GUI.Label(new Rect(Screen.width - (x + w), y, w - 20, h), "arm spring");
            y += h / 2;
            float arm_spring = GUI.HorizontalSlider(new Rect(Screen.width - (x + w), y, w - 20, h), arm_spring_, 0f, 2000f);

            if (arm_spring_ != arm_spring)
            {
                arm_spring_ = arm_spring;
            }
            y += h;
            GUI.Label(new Rect(Screen.width - (x + w), y, w - 20, h), "leg damper");
            y += h / 2;
            float leg_damper = GUI.HorizontalSlider(new Rect(Screen.width - (x + w), y, w - 20, h), leg_damper_, 0f, 100f);

            if (leg_damper_ != leg_damper)
            {
                leg_damper_ = leg_damper;
            }
            y += h;
            GUI.Label(new Rect(Screen.width - (x + w), y, w - 20, h), "leg spring");
            y += h / 2;
            float leg_spring = GUI.HorizontalSlider(new Rect(Screen.width - (x + w), y, w - 20, h), leg_spring_, 0f, 2000f);

            if (leg_spring_ != leg_spring)
            {
                leg_spring_ = leg_spring;
            }
            y += h;


            x = 20;
            y = 40;
            w = 180;
            h = 30;
            GUI.Box(new Rect(x - 10, y - 20, x + w, y + h * 10 + 10), "Posture Menu");

            if (GUI.Button(new Rect(x, y, w, h), "apose") || Input.GetKeyDown(KeyCode.Alpha0))
            {
                current_posture_ = posture_apose_;
            }
            y += h;
            if (GUI.Button(new Rect(x, y, w, h), "pre_throw_l_arm") || Input.GetKeyDown(KeyCode.Alpha1))
            {
                current_posture_ = posture_pre_throw_l_arm_;
            }
            y += h;
            if (GUI.Button(new Rect(x, y, w, h), "throw_l_arm") || Input.GetKeyDown(KeyCode.Alpha2))
            {
                current_posture_ = posture_throw_l_arm_;
            }
            y += h;
            if (GUI.Button(new Rect(x, y, w, h), "pre_throw_r_arm") || Input.GetKeyDown(KeyCode.Alpha3))
            {
                current_posture_ = posture_pre_throw_r_arm_;
            }
            y += h;
            if (GUI.Button(new Rect(x, y, w, h), "throw_r_arm") || Input.GetKeyDown(KeyCode.Alpha4))
            {
                current_posture_ = posture_throw_r_arm_;
            }
            y += h;
            if (GUI.Button(new Rect(x, y, w, h), "pre_jump") || Input.GetKeyDown(KeyCode.Alpha5))
            {
                current_posture_ = posture_pre_jump_;
            }
            y += h;
            if (GUI.Button(new Rect(x, y, w, h), "hit") || Input.GetKeyDown(KeyCode.Alpha6))
            {
                var torque0 = MyRandom.onSphere(1f) * 2000f;
                muscle_motion_.getNode(MuscleMotion.Parts.Ribs).rigidbody_.addTorque(ref torque0);
                var torque1 = MyRandom.onSphere(1f) * 2000f;
                muscle_motion_.getNode(MuscleMotion.Parts.Ribs2).rigidbody_.addTorque(ref torque1);
                var torque2 = MyRandom.onSphere(1f) * 2000f;
                muscle_motion_.getNode(MuscleMotion.Parts.Ribs3).rigidbody_.addTorque(ref torque2);
            }
            y += h;

            y          += 8;
            gui_lookat_ = GUI.HorizontalSlider(new Rect(x, y, w, h), gui_lookat_, 0f, 1f);
            y          += 10;
            GUI.Label(new Rect(x, y, w, h), "value:" + gui_lookat_);
            y          += h;
            gui_hand_   = GUI.Toggle(new Rect(x, y, w, h), gui_hand_, "hand");
            y          += h;
            gui_rotate_ = GUI.Toggle(new Rect(x, y, w, h), gui_rotate_, "rotate");
            y          += h;
        }
Beispiel #8
0
        public IEnumerator initialize()
        {
            base.init();

            yield return(FileUtil.preparePath("apose.dat"));

            posture_apose_ = JsonUtility.FromJson <Posture>(FileUtil.content);
            Debug.Assert(posture_apose_ != null);
            yield return(FileUtil.preparePath("pre_throw_l_arm.dat"));

            posture_pre_throw_l_arm_ = JsonUtility.FromJson <Posture>(FileUtil.content);
            Debug.Assert(posture_pre_throw_l_arm_ != null);
            yield return(FileUtil.preparePath("pre_throw_r_arm.dat"));

            posture_pre_throw_r_arm_ = JsonUtility.FromJson <Posture>(FileUtil.content);
            Debug.Assert(posture_pre_throw_r_arm_ != null);
            yield return(FileUtil.preparePath("throw_l_arm.dat"));

            posture_throw_l_arm_ = JsonUtility.FromJson <Posture>(FileUtil.content);
            Debug.Assert(posture_throw_l_arm_ != null);
            yield return(FileUtil.preparePath("throw_r_arm.dat"));

            posture_throw_r_arm_ = JsonUtility.FromJson <Posture>(FileUtil.content);
            Debug.Assert(posture_throw_r_arm_ != null);
            yield return(FileUtil.preparePath("pre_jump.dat"));

            posture_pre_jump_ = JsonUtility.FromJson <Posture>(FileUtil.content);
            Debug.Assert(posture_throw_r_arm_ != null);
            throwing_cnt_l_     = 0;
            throwing_cnt_r_     = 0;
            jump_tame_duration_ = 0f;
            jump_propel_remain_ = 0f;
            on_ground_          = true;
            on_ground_time_     = 100f;
            bullet_tame_left_   = 0f;
            bullet_tame_right_  = 0f;
            // hit_time_ = 0f;
            somersault_ = false;

            muscle_motion_ = new MuscleMotion();
            muscle_motion_.init(posture_apose_, 80f /* damper */, 1500f /* spring */);
            MuscleMotion.Node root_node = muscle_motion_.getRootNode();
            look_at_ = new Vector3(0f, 1f, 0f);
            rigidbody_.setPosition(0f, 1f, 15f);
            var rot = Quaternion.LookRotation(look_at_ - rigidbody_.transform_.position_);

            rigidbody_.setRotation(ref rot);
            rigidbody_.setDamper(10f);
            rigidbody_.setRotateDamper(50f);
            root_node.rigidbody_.setDamper(10f);
            root_node.rigidbody_.setRotateDamper(40f);

            collider_ = MyCollider.createPlayer();
            MyCollider.initSpherePlayer(collider_, ref rigidbody_.transform_.position_, 1f /* radius */);

            // muscle_motion_.fix(MuscleMotion.Parts.Ribs, 0.4f /* interpolate_ratio */);
            // muscle_motion_.fix(MuscleMotion.Parts.Ribs2);
            // muscle_motion_.fix(MuscleMotion.Parts.Ribs3, 0.4f /* interpolate_ratio */);
            // muscle_motion_.fix(MuscleMotion.Parts.Hip, 0.1f /* interpolate_ratio */);
            {       /* body */
                float damper       = 60f;
                float spring_ratio = 800f;
                muscle_motion_.setParams(MuscleMotion.Parts.Ribs, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.Ribs2, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.Ribs3, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.Hip, damper, spring_ratio);
            }
            {       /* arms */
                float damper       = 50f;
                float spring_ratio = 1000f;
                muscle_motion_.setParams(MuscleMotion.Parts.L_Shoulder, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_UpperArm, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_ForeArm, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_Wrist, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Shoulder, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_UpperArm, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_ForeArm, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Wrist, damper, spring_ratio);
            }
            {       /* legs */
                float damper       = 30f;
                float spring_ratio = 500f;
                muscle_motion_.setParams(MuscleMotion.Parts.L_Thigh, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_Knee, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_Ancle, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_Toe, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Thigh, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Knee, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Ancle, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Toe, damper, spring_ratio);
            }
            {       /* tales */
                float damper       = 10f;
                float spring_ratio = 200f;
                muscle_motion_.setParams(MuscleMotion.Parts.L_Tale1, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_Tale2, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_Tale3, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_Tale4, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Tale1, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Tale2, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Tale3, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Tale4, damper, spring_ratio);
            }
            {       /* ribbons */
                float damper       = 2f;
                float spring_ratio = 100f;
                muscle_motion_.setParams(MuscleMotion.Parts.L_Ribbon1, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_Ribbon2, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Ribbon1, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_Ribbon2, damper, spring_ratio);
            }
            {       /* suso */
                float damper       = 10f;
                float spring_ratio = 200f;
                muscle_motion_.setParams(MuscleMotion.Parts.L_SusoBack, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.L_SusoFront, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_SusoBack, damper, spring_ratio);
                muscle_motion_.setParams(MuscleMotion.Parts.R_SusoFront, damper, spring_ratio);
            }
        }