Exemplo n.º 1
0
exports.create_selection_sensor = function(obj, auto_release) {
    return m_ctl.create_selection_sensor(obj, auto_release || false);
}
Exemplo n.º 2
0
function prepare_nla_script(scene, nla) {
    var bpy_nla_script = scene["b4w_nla_script"];
    var nla_script = nla.script;

    for (var i = 0; i < bpy_nla_script.length; i++) {
        var sslot = bpy_nla_script[i];

        switch (sslot["type"]) {
        case "PLAY":
            nla_script.push({
                type: "PLAY",
                frame_start: sslot["frame_range"][0],
                frame_end: sslot["frame_range"][1],
                in_play: false
            });
            break;
        case "JUMP":
            nla_script.push({
                type: "JUMP",
                slot_idx: sslot["target_slot"]
            });
            break;
        case "SELECT":
        case "SELECT_PLAY":
            var obj = m_scs.get_object(m_scs.GET_OBJECT_BY_NAME, sslot["object"], 0);

            var sel_objs = m_scs.get_selectable_objects(scene);
            var obj_idx = sel_objs.indexOf(obj);

            if (obj_idx == -1) {
                m_print.error("NLA script error: non-selectable object");
                return [];
            }

            var slot = {
                type: sslot["type"],
                slot_idx_hit: sslot["type"] == "SELECT" ? sslot["target_slot"] : i+1,
                slot_idx_miss: i+1,
                sel_state: -1,
                sel_objs_len: sel_objs.length,
                sel_obj_idx: obj_idx,

                frame_start: sslot["frame_range"][0],
                frame_end: sslot["frame_range"][1],
                in_play: false
            }

            var sel_sensors = [];
            for (var j = 0; j < sel_objs.length; j++) {
                sel_sensors.push(m_ctl.create_selection_sensor(sel_objs[j], true));
            }

            var select_cb = function(obj, id, pulse, param) {
                if (nla.curr_script_slot >= nla.script.length)
                    return;

                var slot = nla.script[nla.curr_script_slot];

                if (!(slot.type == "SELECT" || (slot.type == "SELECT_PLAY" && !slot.in_play)))
                    return;

                for (var i = 0; i < param.sel_objs_len; i++) {
                    if (m_ctl.get_sensor_value(obj, id, i) &&
                            i == param.sel_obj_idx) {
                        param.sel_state = 1;
                        return;
                    }
                }
                param.sel_state = 0;
            }

            m_ctl.create_sensor_manifold(obj, "NLA_SELECT_" + i, m_ctl.CT_SHOT,
                    sel_sensors, m_ctl.default_OR_logic_fun, select_cb, slot);

            nla_script.push(slot);

            break;
        case "NOOP":
            nla_script.push({
                type: "NOOP"
            });
            break;
        }
    }
}