Ignore:
Timestamp:
2015-05-17T11:17:31+12:00 (9 years ago)
Author:
davidb
Message:

Working popup editor, saving to localStorage. Tidy up on space-bar for global pause and start play.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/js/game-on.js

    r29886 r29888  
    11"use strict";
    22
    3 var paper_x_dim = 920;
    4 var paper_y_dim = 445;
     3var goDocStorage = null;
     4
     5var goPaper = null;
     6
     7var go_paper_x_dim = 920;
     8var go_paper_y_dim = 445;
    59
    610var gameOnCurrentTimeXPos = 0;
    711var gameOnCurrentTimelineRect = null;
    812
     13var num_midi_pitches = 128;
     14
     15
    916function updateGameOnCurrentTimeline()
    1017{
    11     gameOnCurrentTimeXPos = (mediaPlayer.currentTime / mediaPlayer.duration) *  paper_x_dim;
     18    gameOnCurrentTimeXPos = (mediaPlayer.currentTime / mediaPlayer.duration) *  go_paper_x_dim;
    1219    //console.log("*** x pos = " + gameOnCurrentTimeXPos);
    1320
     
    1522}
    1623
    17 function initGameOn()
    18 {
    19     console.log("initGameOn()");
    20 
    21     var gmp_x_dim = $('#gameOnPaper').width();
    22     var gmp_y_dim = $('#gameOnPaper').height();
    23 
    24     console.log("*** gmp_x_dim = " + gmp_x_dim);
    25     console.log("*** gmp_y_dim = " + gmp_y_dim);
    26 
    27     var paper_x_dim = 920;
    28     var paper_y_dim = 445;
    29 
    30     var num_midi_pitches = 128;
    31 
    32     //var paper = Raphael("gameOnPaper",gmp_x_dim,gmp_y_dim);
    33     var paper = Raphael("gameOnPaper",paper_x_dim,paper_y_dim);
    34     paper.canvas.style.backgroundColor = '#FFFFFF';
    35 
    36     console.log("*** hasLocalStorage = " + hasLocalStorage);
    37 
    38     if (hasLocalStorage) {
    39     var docOID = gs.cgiParams.d;
     24function getDocStorage(docOID)
     25{
     26    var docStorage = null;
     27
     28    if (hasLocalStorage) {
     29
     30    if (goDocStorage == null) {
     31        var docStorageStr = localStorage.getItem(docOID);
     32        //console.log("***docStorageStr = " + docStorageStr);
    4033   
    41     var docStorageStr = localStorage.getItem(docOID);
    42 
    43     var docStorage = (docStorageStr != null) ? eval("("+docStorageStr+")") : {palTracks:{}, popTracks:{}};
     34        //var docStorage = (docStorageStr != null) ? eval("("+docStorageStr+")") : {palTracks:{}, popTracks:{}};
     35        docStorage = eval("("+docStorageStr+")") || {palTracks:{}, popTracks:{}};
     36        goDocStorage = docStorage;
     37    }
     38    else {
     39        docStorage = goDocStorage;
     40    }
     41    }
     42
     43    return docStorage;
     44}
     45
     46function getActiveTrackLayers(opt_field)
     47{
     48    var field = opt_field || "name";
     49
     50    var palActiveLayers = [];
     51    $('#palForm input:checked').each(function() {
     52        palActiveLayers.push(this[field]);
     53    });
     54
     55    return palActiveLayers;
     56}
     57
     58function populatePalList(docStorage)
     59{
     60    // populate pal List
     61    if (hasLocalStorage) {
    4462
    4563    var palTracks = docStorage.palTracks || {};
    4664
    47     // 'palTracks' for the form:
     65    //console.log("*** palTracks = " + JSON.stringify(palTracks));
     66    var palListKeys = Object.keys(palTracks).sort();
     67
     68    for (var i=0; i<palListKeys.length; i++) {
     69        var key = palListKeys[i];
     70        var track = palTracks[key];
     71        var name = key;
     72        var cb_name = name.replace(/[ -]/g,"");
     73        var cb_value = name;
     74
     75        var opt_checked = (i==0) ? ' checked="checked"' : "";
     76
     77        $('#palList').append('<div id="pal'+cb_name+'"><input type="checkbox" '
     78                 + '" name="'+cb_name+'" value="' + cb_value + '"'
     79                 + opt_checked + '>'
     80                 + name + '</div>');
     81    }
     82    }
     83    else {
     84    // Put in some fake data for now
     85    $('#palList').append('<input type="checkbox" id="palPianoHero"    name="PianoHero" value="Piano Hero" checked="checked"/>Piano Hero<br />');
     86    $('#palList').append('<input type="checkbox" id="palDrumbeatHero" name="DrumbeatHero"  value="Drum-beat Hero" />Drum-beat Hero<br />');
     87    }
     88}
     89
     90function displayActiveTrackLayers(docStorage)
     91{
     92    console.log("displayActiveTrackLayers()");
     93
     94    goPaper.clear();
     95
     96    if (hasLocalStorage) {
     97
     98    // 'palTracks' have the form:
    4899    //    palTracks[save_name] = [ { name: "my recording 1", baseCTime: 123.3, events: [ .... ] } ]
    49100
    50     var my_recording = palTracks['My Recording'];
    51 
    52     if (my_recording != null) {
    53         var total_duration = mediaPlayer.duration;
    54         console.log("*** total duration = " + total_duration);
    55 
    56         var min_midi_pitch = num_midi_pitches-1;
    57         var max_midi_pitch = 0;
    58 
    59         // calculate range of midi pitches present
    60         for (var b=0; b<my_recording.length; b++) {
    61         var track_block = my_recording[b];
    62         var base_ctime = track_block.baseCTime;
    63         var block_events = track_block.events;
    64 
    65         for (var ne=0; ne<block_events.length; ne++) {
    66             var midi_pitch = block_events[ne].midiPitch;
    67             if (midi_pitch < min_midi_pitch) {
    68             min_midi_pitch = midi_pitch;
    69             }
    70             if (midi_pitch > max_midi_pitch) {
    71             max_midi_pitch = midi_pitch;
     101    var palTracks = docStorage.palTracks || {};
     102
     103    var total_duration = mediaPlayer.duration;
     104    //console.log("*** total duration = " + total_duration);
     105
     106    var atl = getActiveTrackLayers("value");
     107    //console.log("*** atl = " + JSON.stringify(atl));
     108
     109    var min_midi_pitch = num_midi_pitches-1;
     110    var max_midi_pitch = 0;
     111
     112    for (var i=0; i<atl.length; i++) {
     113        var storage_name = atl[i];
     114        var track = palTracks[storage_name];
     115
     116        if (track != null) {
     117
     118        // calculate range of midi pitches present
     119        for (var b=0; b<track.length; b++) {
     120            var track_block = track[b];
     121            var base_ctime = track_block.baseCTime;
     122            var block_events = track_block.events;
     123
     124            for (var ne=0; ne<block_events.length; ne++) {
     125            var midi_pitch = block_events[ne].midiPitch;
     126            if (midi_pitch < min_midi_pitch) {
     127                min_midi_pitch = midi_pitch;
     128            }
     129            if (midi_pitch > max_midi_pitch) {
     130                max_midi_pitch = midi_pitch;
     131            }
    72132            }
    73133        }
    74134        }
    75         console.log("*** max pitch = " + max_midi_pitch + ", min pitch = " + min_midi_pitch);
    76 
    77         var raw_midi_range = max_midi_pitch - min_midi_pitch;
    78         var midi_range = Math.max(4,raw_midi_range);
    79 
    80         var midi_y_dim_spacing = paper_y_dim / midi_range;
    81 
    82         for (var b=0; b<my_recording.length; b++) {
    83 
    84         var track_block = my_recording[b];
    85         var base_ctime = track_block.baseCTime;
    86 
    87         var block_events = track_block.events;
    88 
    89         for (var ne=0; ne<block_events.length; ne++) {
    90 
    91             var note_event = block_events[ne];
     135    }
     136    //console.log("*** max pitch = " + max_midi_pitch + ", min pitch = " + min_midi_pitch);
     137   
     138    var raw_midi_range = max_midi_pitch - min_midi_pitch;
     139    var midi_range = Math.max(4,raw_midi_range);
     140   
     141    var midi_y_dim_spacing = go_paper_y_dim / midi_range;
     142
     143    for (var i=0; i<atl.length; i++) {
     144        var storage_name = atl[i];
     145        var track = palTracks[storage_name];
     146
     147        if (track != null) {
     148
     149        for (var b=0; b<track.length; b++) {
     150
     151            var track_block = track[b];
     152            var base_ctime = track_block.baseCTime;
    92153           
    93             var startPercTime = (base_ctime + note_event.startCurrentTime)/total_duration;
    94             var rx_org = startPercTime * paper_x_dim;
    95             var ry_org = paper_y_dim - ((note_event.midiPitch - min_midi_pitch) * midi_y_dim_spacing);
     154            var block_events = track_block.events;
    96155           
    97             var rx_dim = (note_event.duration/1000)/total_duration * paper_x_dim;
    98             var ry_dim = midi_y_dim_spacing;
    99            
    100             var rect = paper.rect(rx_org,ry_org,rx_dim,ry_dim);
    101             rect.attr({stroke:"black",fill:"#2E52A4"});
     156            for (var ne=0; ne<block_events.length; ne++) {
     157           
     158            var note_event = block_events[ne];
     159           
     160            var startPercTime = (base_ctime + note_event.startCurrentTime)/total_duration;
     161            var rx_org = startPercTime * go_paper_x_dim;
     162            var ry_org = go_paper_y_dim - ((note_event.midiPitch - min_midi_pitch) * midi_y_dim_spacing);
     163           
     164            var rx_dim = (note_event.duration/1000)/total_duration * go_paper_x_dim;
     165            var ry_dim = midi_y_dim_spacing;
     166           
     167            var rect = goPaper.rect(rx_org,ry_org,rx_dim,ry_dim);
     168            rect.attr({stroke:"black",fill:"#2E52A4"});
     169            }
    102170        }
    103171        }
     
    105173    }
    106174
    107     gameOnCurrentTimelineRect = paper.rect(-2,0,1,paper_y_dim);
    108     console.log("*** gameOnCurrentTimelineRect = " + gameOnCurrentTimelineRect);
    109    
     175    gameOnCurrentTimelineRect = goPaper.rect(-2,0,1,go_paper_y_dim);
    110176    gameOnCurrentTimelineRect.attr({fill: "red", stroke: "red"});
    111    
    112 }
    113 
    114 function pamDelete()
    115 {
    116     //var pamActiveLayers = $('input[type=checkbox]:checked', '#pamForm');
    117 
    118     var pamActiveLayers = [];
    119     $('#pamForm input:checked').each(function() {
    120         pamActiveLayers.push({name: this.name, value: this.value});
    121     });
    122 
    123     return false;
    124 }
     177}
     178
     179function initGameOn()
     180{
     181    console.log("initGameOn()");
     182
     183    goDocStorage = getDocStorage(gs.cgiParams.d);
     184
     185    //var gmp_x_dim = $('#gameOnPaper').width();
     186    //var gmp_y_dim = $('#gameOnPaper').height();
     187
     188    //console.log("*** gmp_x_dim = " + gmp_x_dim);
     189    //console.log("*** gmp_y_dim = " + gmp_y_dim);
     190
     191
     192    //var goPaper = Raphael("gameOnPaper",gmp_x_dim,gmp_y_dim);
     193    goPaper = Raphael("gameOnPaper",go_paper_x_dim,go_paper_y_dim);
     194    goPaper.canvas.style.backgroundColor = '#FFFFFF';
     195
     196    console.log("Browser supports LocalStorage: " + hasLocalStorage);
     197
     198    populatePalList(goDocStorage);
     199    displayActiveTrackLayers(goDocStorage);
     200}
     201
     202
     203function palDeleteConfirmed()
     204{
     205    //var palActiveLayers = $('input[type=checkbox]:checked', '#palForm');
     206
     207    var palActiveLayersID   = getActiveTrackLayers("name");
     208    var palActiveLayersValue = getActiveTrackLayers("value");
     209
     210    var palTracks = goDocStorage.palTracks || {};
     211
     212    for (var i=0; i<palActiveLayersID.length; i++) {
     213    var id = palActiveLayersID[i];
     214    $('#pal'+id).remove();
     215
     216    var value = palActiveLayersValue[i];
     217    delete palTracks[value];
     218    }
     219}
     220
     221
     222function palDelete()
     223{
     224    $('#delete-recording-popup').dialog('open');
     225
     226    return false;  // no need to process the event any further
     227}
     228
     229function palDisplay()
     230{
     231    displayActiveTrackLayers(goDocStorage);
     232
     233    return false;  // no need to process the event any further
     234}
     235
     236function palSave()
     237{
     238    var palTracks = goDocStorage.palTracks || {};
     239
     240    var json_edit_str = trackEditor.getSession().getValue();
     241    console.log("**** json edit str = " + json_edit_str);
     242
     243    var json_edit = eval("("+json_edit_str+")");
     244
     245    for (var key in json_edit){
     246    if (json_edit.hasOwnProperty(key)) {
     247        //console.log("*** key = " + key);
     248        var val = json_edit[key];
     249        console.log("**** Saving under key[ " + key + "]: " + JSON.stringify(val));
     250        palTracks[key] = val;       
     251    }
     252    }
     253
     254    if (hasLocalStorage) {
     255    var docOID = gs.cgiParams.d;
     256    console.log("Saving in Browser localStorage track data for '" + docOID + "'");
     257    localStorage.setItem(docOID,JSON.stringify(goDocStorage));
     258    }
     259}
     260
     261function palEdit()
     262{
     263    var palTracks = goDocStorage.palTracks || {};
     264
     265    var palActiveLayers = getActiveTrackLayers("value");
     266
     267    var edit_json = {};
     268
     269    for (var i=0; i<palActiveLayers.length; i++) {
     270    var track_name = palActiveLayers[i];
     271    edit_json[track_name] = palTracks[track_name];
     272    }
     273
     274    trackEditor.setValue(JSON.stringify(edit_json,null,'\t'));
     275    trackEditor.clearSelection();
     276
     277    $('#edit-recording-popup').dialog('open');
     278
     279    return false;  // no need to process the event any further
     280}
     281
Note: See TracChangeset for help on using the changeset viewer.