Storyboard: film prices from the engine's real per-second rate
This commit is contained in:
parent
69c4728465
commit
f20ae8231e
1 changed files with 11 additions and 4 deletions
15
trailer.html
15
trailer.html
|
|
@ -405,6 +405,11 @@
|
||||||
+ '<button type="button" class="btn' + (done ? '' : ' primary') + '" data-sceneviews="' + esc(draft.id) + '">' + (done ? 'Do it again for shots that have changed' : 'Photograph each set-up from one master') + '</button></div>';
|
+ '<button type="button" class="btn' + (done ? '' : ' primary') + '" data-sceneviews="' + esc(draft.id) + '">' + (done ? 'Do it again for shots that have changed' : 'Photograph each set-up from one master') + '</button></div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// What a take really costs: the engine bills by the second (7 cents), five
|
||||||
|
// seconds at least, and a speaking shot runs its line plus the slate words.
|
||||||
|
function filmCost(x) { return Math.max(5, Math.ceil((Number(x.edit_seconds) || 5) + 1.5)) * 0.07; }
|
||||||
|
function filmCostAll(list) { return list.reduce(function (a, x) { return a + filmCost(x); }, 0); }
|
||||||
|
|
||||||
function partsHtml(draft) {
|
function partsHtml(draft) {
|
||||||
var parts = DRAFTS.filter(function (d) { return /^part-/.test(String(d.writer)); });
|
var parts = DRAFTS.filter(function (d) { return /^part-/.test(String(d.writer)); });
|
||||||
var n = (PKG.shots || []).length;
|
var n = (PKG.shots || []).length;
|
||||||
|
|
@ -583,6 +588,7 @@
|
||||||
// A clip filmed from a picture or words that have since changed is not the shot any more.
|
// A clip filmed from a picture or words that have since changed is not the shot any more.
|
||||||
var unfilmed = shots.filter(function (s) { return !s.clip_url || s.clip_stale; }).length;
|
var unfilmed = shots.filter(function (s) { return !s.clip_url || s.clip_stale; }).length;
|
||||||
var changed = shots.filter(function (s) { return s.clip_url && s.clip_stale; }).length;
|
var changed = shots.filter(function (s) { return s.clip_url && s.clip_stale; }).length;
|
||||||
|
var unfilmedUsd = filmCostAll(shots.filter(function (s) { return !s.clip_url || s.clip_stale; }));
|
||||||
var filmed = shots.length - unfilmed;
|
var filmed = shots.length - unfilmed;
|
||||||
var imgs = boardImages(shots, cast);
|
var imgs = boardImages(shots, cast);
|
||||||
var s = String(meta.draw_state || "");
|
var s = String(meta.draw_state || "");
|
||||||
|
|
@ -662,7 +668,7 @@
|
||||||
if (unfilmed && !undrawn)
|
if (unfilmed && !undrawn)
|
||||||
out.push('<button type="button" class="btn primary" data-film="' + esc(meta.id)
|
out.push('<button type="button" class="btn primary" data-film="' + esc(meta.id)
|
||||||
+ '">Film ' + (changed ? 'the ' + unfilmed + ' shots that are new or have changed' : (filmed ? 'the ' + unfilmed + ' remaining shots' : 'all ' + shots.length + ' shots'))
|
+ '">Film ' + (changed ? 'the ' + unfilmed + ' shots that are new or have changed' : (filmed ? 'the ' + unfilmed + ' remaining shots' : 'all ' + shots.length + ' shots'))
|
||||||
+ ' · $' + (unfilmed * 0.75).toFixed(2) + '</button>');
|
+ ' · about $' + unfilmedUsd.toFixed(2) + '</button>');
|
||||||
if (filmed)
|
if (filmed)
|
||||||
out.push('<button type="button" class="btn primary" data-assemble="' + esc(meta.id)
|
out.push('<button type="button" class="btn primary" data-assemble="' + esc(meta.id)
|
||||||
+ '">Make the trailer · ' + filmed + ' of ' + shots.length + ' shots</button>');
|
+ '">Make the trailer · ' + filmed + ' of ' + shots.length + ' shots</button>');
|
||||||
|
|
@ -1104,6 +1110,7 @@
|
||||||
var checking = ps && ps !== "ready";
|
var checking = ps && ps !== "ready";
|
||||||
var reelReady = String(PKG.reel_state || "") === "ready";
|
var reelReady = String(PKG.reel_state || "") === "ready";
|
||||||
var unfilmed = shots.filter(function (x) { return !x.clip_url || x.clip_stale; }).length;
|
var unfilmed = shots.filter(function (x) { return !x.clip_url || x.clip_stale; }).length;
|
||||||
|
var unfilmedUsd2 = filmCostAll(shots.filter(function (x) { return !x.clip_url || x.clip_stale; }));
|
||||||
var objections = String((DRAFTNOW || {}).problems || "").split("\n").filter(Boolean).length;
|
var objections = String((DRAFTNOW || {}).problems || "").split("\n").filter(Boolean).length;
|
||||||
var price = function (n) { return "$" + n.toFixed(2); };
|
var price = function (n) { return "$" + n.toFixed(2); };
|
||||||
|
|
||||||
|
|
@ -1146,7 +1153,7 @@
|
||||||
if (s3.done && unfilmed)
|
if (s3.done && unfilmed)
|
||||||
s6.btn = '<button type="button" class="btn' + (s4.done && reelReady ? ' primary' : '')
|
s6.btn = '<button type="button" class="btn' + (s4.done && reelReady ? ' primary' : '')
|
||||||
+ '" data-film="' + esc(meta.id) + '">Film ' + unfilmed + ' shot' + (unfilmed === 1 ? '' : 's')
|
+ '" data-film="' + esc(meta.id) + '">Film ' + unfilmed + ' shot' + (unfilmed === 1 ? '' : 's')
|
||||||
+ ' \u00b7 ' + price(unfilmed * 0.75) + '</button>';
|
+ ' \u00b7 ' + price(unfilmedUsd2) + '</button>';
|
||||||
steps.push(s6);
|
steps.push(s6);
|
||||||
|
|
||||||
var nowSet = false;
|
var nowSet = false;
|
||||||
|
|
@ -1438,7 +1445,7 @@
|
||||||
+ '<button type="button" class="btn" data-drawone="' + esc(s.id) + '">'
|
+ '<button type="button" class="btn" data-drawone="' + esc(s.id) + '">'
|
||||||
+ (s.opening_url ? 'Redraw' : 'Draw') + ' · $0.14</button>'
|
+ (s.opening_url ? 'Redraw' : 'Draw') + ' · $0.14</button>'
|
||||||
+ (s.opening_url ? '<button type="button" class="btn" data-filmone="' + esc(s.id) + '">'
|
+ (s.opening_url ? '<button type="button" class="btn" data-filmone="' + esc(s.id) + '">'
|
||||||
+ (s.clip_url ? 'Film it again' : 'Film this shot') + ' · $0.75</button>' : '')
|
+ (s.clip_url ? 'Film it again' : 'Film this shot') + ' · about $' + filmCost(s).toFixed(2) + '</button>' : '')
|
||||||
+ (s.clip_url && s.take_url ? '<button type="button" class="btn" data-recut="' + esc(s.id)
|
+ (s.clip_url && s.take_url ? '<button type="button" class="btn" data-recut="' + esc(s.id)
|
||||||
+ '" title="Cuts and mixes the shot again from the footage already paid for">Cut it again from the same footage · free</button>' : '')
|
+ '" title="Cuts and mixes the shot again from the footage already paid for">Cut it again from the same footage · free</button>' : '')
|
||||||
+ chkHtml + eyeHtml
|
+ chkHtml + eyeHtml
|
||||||
|
|
@ -1471,7 +1478,7 @@
|
||||||
+ (s.film_unchanged && !s.filming ? '<p class="cont">Nothing that reaches the camera has changed since '
|
+ (s.film_unchanged && !s.filming ? '<p class="cont">Nothing that reaches the camera has changed since '
|
||||||
+ 'the last take - same pictures, same words, same voices - so it was not filmed again and nothing '
|
+ 'the last take - same pictures, same words, same voices - so it was not filmed again and nothing '
|
||||||
+ 'was charged. <button type="button" class="btn" data-filmanyway="' + esc(s.id)
|
+ 'was charged. <button type="button" class="btn" data-filmanyway="' + esc(s.id)
|
||||||
+ '">Film another take anyway · $0.75</button></p>' : '')
|
+ '">Film another take anyway · about $' + filmCost(s).toFixed(2) + '</button></p>' : '')
|
||||||
+ '<textarea class="note" rows="2" data-note="' + esc(s.id) + '" '
|
+ '<textarea class="note" rows="2" data-note="' + esc(s.id) + '" '
|
||||||
+ 'placeholder="Your note on this shot, for the next full revision.">'
|
+ 'placeholder="Your note on this shot, for the next full revision.">'
|
||||||
+ esc(NOTES[s.id] || "") + '</textarea>'
|
+ esc(NOTES[s.id] || "") + '</textarea>'
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue