You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
507 lines
16 KiB
507 lines
16 KiB
{
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// MAkinE - Disney GEN BUMP Toolkit
|
|
//
|
|
// ©2017 Jorge Vasquez
|
|
// Author: Jorge Vasquez
|
|
//
|
|
// Version History
|
|
//
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
var tcd_scriptName = "MAkinE - DC GEN BUMP Toolkit ";
|
|
var tcd_version = "0.8";
|
|
//
|
|
/////////////////////////////Array.indexOf for older JS/////////////////////
|
|
////////////////////////////////////////////////////////////////////////
|
|
// Production steps of ECMA-262, Edition 5, 15.4.4.14
|
|
// Reference: http://es5.github.io/#x15.4.4.14
|
|
if (!Array.prototype.indexOf) {
|
|
Array.prototype.indexOf = function(searchElement, fromIndex) {
|
|
|
|
var k;
|
|
|
|
// 1. Let o be the result of calling ToObject passing
|
|
// the this value as the argument.
|
|
if (this == null) {
|
|
throw new TypeError('"this" is null or not defined');
|
|
}
|
|
|
|
var o = Object(this);
|
|
|
|
// 2. Let lenValue be the result of calling the Get
|
|
// internal method of o with the argument "length".
|
|
// 3. Let len be ToUint32(lenValue).
|
|
var len = o.length >>> 0;
|
|
|
|
// 4. If len is 0, return -1.
|
|
if (len === 0) {
|
|
return -1;
|
|
}
|
|
|
|
// 5. If argument fromIndex was passed let n be
|
|
// ToInteger(fromIndex); else let n be 0.
|
|
var n = fromIndex | 0;
|
|
|
|
// 6. If n >= len, return -1.
|
|
if (n >= len) {
|
|
return -1;
|
|
}
|
|
|
|
// 7. If n >= 0, then Let k be n.
|
|
// 8. Else, n<0, Let k be len - abs(n).
|
|
// If k is less than 0, then let k be 0.
|
|
k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
|
|
|
|
// 9. Repeat, while k < len
|
|
while (k < len) {
|
|
// a. Let Pk be ToString(k).
|
|
// This is implicit for LHS operands of the in operator
|
|
// b. Let kPresent be the result of calling the
|
|
// HasProperty internal method of o with argument Pk.
|
|
// This step can be combined with c
|
|
// c. If kPresent is true, then
|
|
// i. Let elementK be the result of calling the Get
|
|
// internal method of o with the argument ToString(k).
|
|
// ii. Let same be the result of applying the
|
|
// Strict Equality Comparison Algorithm to
|
|
// searchElement and elementK.
|
|
// iii. If same is true, return k.
|
|
if (k in o && o[k] === searchElement) {
|
|
return k;
|
|
}
|
|
k++;
|
|
}
|
|
return -1;
|
|
};
|
|
}
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
function applyAvatar( item ){
|
|
//$.writeln( item );
|
|
var comp = myPalette.comp;
|
|
//$.writeln(comp);
|
|
var avatar_targets = [
|
|
comp.layer("Main_Avatar"),
|
|
comp.layer("Avatar_Echo_1"),
|
|
comp.layer("Avatar_Echo_2")
|
|
];
|
|
//$.writeln(avatar_targets);
|
|
|
|
for ( var i = 0 ; i < avatar_targets.length ; i ++ )
|
|
{
|
|
avatar_targets[i].replaceSource(item,false);
|
|
}
|
|
}
|
|
function applyPallette( palette_string ){
|
|
var comp = myPalette.comp;
|
|
|
|
var color_targets = {
|
|
col_title: comp.layer("TITLE")("Effects")("Fill")("Color"),
|
|
col_bubble: comp.layer("DONT_TOUCH_bubble")("Effects")("Fill")("Color"),
|
|
col_bubble_shadow: comp.layer("DONT_TOUCH_bubble_shadow")("Effects")("Fill")("Color"),
|
|
col_logo_bg : comp.layer("DISNEY_LOGO_Bubble_BG")("Effects")("Fill")("Color"),
|
|
col_logo_fg: comp.layer("DISNEY_LOGO_Bubble_FG")("Effects")("Fill")("Color"),
|
|
col_logo_neutral: comp.layer("DISNEY_LOGO_Bubble_GRAY")("Effects")("Fill")("Color"),
|
|
col_logo_accent: comp.layer("DISNEY_LOGO_Bubble_ACCENT")("Effects")("Fill")("Color"),
|
|
};
|
|
|
|
for ( var i in color_targets ){
|
|
color_targets[i].setValue(hexToColor(palettes[palette_string][i]));
|
|
}
|
|
}
|
|
function getItem( item_name, item_type ){
|
|
var result = null;
|
|
var items = app.project.items;
|
|
var names = [];
|
|
|
|
for ( i = 1 ; i <= items.length ; i ++ )
|
|
{
|
|
var item = items[i];
|
|
var type = item.typeName;
|
|
if ( ( type == item_type ) && ( item.name == item_name ) )
|
|
{
|
|
result = item;
|
|
//$.writeln( item.name );
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function getFolder( given_name ){
|
|
|
|
result = getItem( given_name, "Folder" );
|
|
|
|
return result;
|
|
}
|
|
function getComp( given_name ){
|
|
|
|
result = getItem( given_name, "Composition" );
|
|
|
|
return result;
|
|
}
|
|
|
|
function hexToColor(theHex){
|
|
var r = theHex >> 16;
|
|
var g = (theHex & 0x00ff00) >> 8;
|
|
var b = theHex & 0xff;
|
|
return [r/255,g/255,b/255,1];
|
|
}
|
|
function tcd_buildUI(thisObj) {
|
|
|
|
if ( getComp("DC_GEN_BUMP_##Base##_5s") == null )
|
|
{
|
|
alert("Make sure to have the DC_GEN_BUMP Template project open before running the script");
|
|
return;
|
|
}
|
|
|
|
if (thisObj instanceof Panel) {
|
|
var myPal = thisObj;
|
|
} else {
|
|
var myPal = new Window("palette",tcd_scriptName + " v" + tcd_version,undefined, {resizeable:true});
|
|
}
|
|
|
|
if (myPal != null) {
|
|
|
|
var res =
|
|
"group { \
|
|
alignment: ['fill','fill'], \
|
|
alignChildren: ['left','top'], \
|
|
orientation: 'column', \
|
|
match: Group { \
|
|
alignment: ['fill','top'], \
|
|
alignChildren: ['fill','top'], \
|
|
orientation:'column', \
|
|
palette: Group { \
|
|
alignment: ['fill','top'], \
|
|
alignChildren: ['fill','top'], \
|
|
paletteText: StaticText {text:'Piece Palette', alignment: ['left','center']}, \
|
|
paletteOption: DropDownList {alignment: ['fill','center']}, \
|
|
} \
|
|
title: Group { \
|
|
alignment: ['fill','top'], \
|
|
alignChildren: ['fill','top'], \
|
|
titleTxt: StaticText {text:'Show Title', alignment: ['left','center']}, \
|
|
titleString: EditText {text: 'PLACEHOLDER TITLE', alignment: ['fill','center']}, \
|
|
} \
|
|
avatar: Group { \
|
|
alignment: ['fill','top'], \
|
|
alignChildren: ['fill','top'], \
|
|
avatarText: StaticText {text:'Avatar Image', alignment: ['left','center']}, \
|
|
avatarOption: DropDownList {alignment: ['fill','center']}, \
|
|
} \
|
|
} \
|
|
doItBtn: Button {text: 'Apply to new Comp', alignment: ['center','top']} , \
|
|
}";
|
|
//doItBtn: Button {text: 'Customize', alignment: ['right','top']} , \
|
|
|
|
myPal.avatar_folder = getFolder("AVATAR_ICONS_1080x1080");
|
|
myPal.comp = getComp("DC_GEN_BUMP_##Base##_5s");
|
|
|
|
myPal.paletteOptionNames = {
|
|
Gray : "D",
|
|
Gold : "F",
|
|
Magenta : "G",
|
|
Blue_1 : "C",
|
|
Blue_2 : "E",
|
|
Blue_3 : "H"
|
|
};
|
|
|
|
myPal.populateAvatars = function()
|
|
{
|
|
myPal.grp.match.avatar.avatarOption.removeAll();
|
|
myPal.avatars = [];
|
|
|
|
if ( myPal.avatar_folder != null )
|
|
{
|
|
for ( i = 1 ; i <= myPal.avatar_folder.numItems ; i ++ )
|
|
{
|
|
myPal.avatars.push( myPal.avatar_folder.item(i) );
|
|
//$.writeln(myPal.avatars[i-1]);
|
|
myPal.grp.match.avatar.avatarOption.add("item", myPal.avatars[i-1].name);
|
|
//$.writeln( myPal.avatar_folder.item(i).name );
|
|
}
|
|
}
|
|
myPal.grp.match.avatar.avatarOption.selection = myPal.avatars.indexOf ( myPal.comp.layer("Main_Avatar").source );
|
|
}
|
|
|
|
myPal.grp = myPal.add(res);
|
|
|
|
for ( i in myPal.paletteOptionNames ) {
|
|
myPal.grp.match.palette.paletteOption.add("item",i);
|
|
}
|
|
|
|
//myPal.avatars = [];
|
|
|
|
myPal.populateAvatars ();
|
|
|
|
myPal.grp.match.palette.paletteOption.selection = 0;
|
|
myPal.grp.match.palette.paletteOption.minimumSize.width = myPal.grp.match.palette.paletteOption.preferredSize.width = 75;
|
|
|
|
myPal.grp.match.title.titleString.onChange = function () {
|
|
//alert("changing text");
|
|
if( myPal.comp == null )
|
|
{
|
|
return;
|
|
}
|
|
app.beginUndoGroup("Change Text");
|
|
var title = myPalette.grp.match.title.titleString.text;
|
|
applyShowTitle( title );
|
|
app.endUndoGroup();
|
|
}
|
|
myPal.grp.match.palette.paletteOption.onChange = function () {
|
|
//alert("changing palette");
|
|
if( myPal.comp == null )
|
|
{
|
|
return;
|
|
}
|
|
app.beginUndoGroup("Change Palette");
|
|
var id = myPal.paletteOptionNames[myPalette.grp.match.palette.paletteOption.selection];
|
|
setBG( id );
|
|
applyPallette( id );
|
|
app.endUndoGroup();
|
|
}
|
|
myPal.grp.match.avatar.avatarOption.onChange = function () {
|
|
try
|
|
{
|
|
applyAvatar( myPal.avatars[myPal.grp.match.avatar.avatarOption.selection.index ] );
|
|
}
|
|
catch(err)
|
|
{
|
|
return;
|
|
}
|
|
//applyAvatar( myPal.avatars[myPal.grp.match.avatar.avatarOption.selection.index] );
|
|
}
|
|
myPal.onActivate = function()
|
|
{
|
|
myPal.populateAvatars ();
|
|
}
|
|
/*
|
|
myPal.grp.match.avatar.avatarOption.onActivate = function () {
|
|
myPal.populateAvatars ();
|
|
}
|
|
*/
|
|
/*
|
|
//myPal.grp.doItBtn.onClick = function ()
|
|
*/
|
|
myPal.grp.doItBtn.onClick = function () {
|
|
var new_comp = myPal.comp.duplicate();
|
|
new_comp.name = myPal.comp.name.replace("##Base##",generateName());
|
|
}
|
|
myPal.layout.layout(true);
|
|
myPal.layout.resize();
|
|
myPal.onResizing = myPal.onResize = function () {this.layout.resize();}
|
|
|
|
} //if (myPal != null)
|
|
return myPal;
|
|
}
|
|
function titleCase(str) {
|
|
str = str.toLowerCase().split(' ');
|
|
|
|
for(var i = 0; i < str.length; i++){
|
|
str[i] = str[i].split('');
|
|
str[i][0] = str[i][0].toUpperCase();
|
|
str[i] = str[i].join('');
|
|
}
|
|
return str.join(' ');
|
|
}
|
|
|
|
function getTitle(){
|
|
var comp = myPalette.comp;
|
|
var title_layer = comp.layer("TITLE");
|
|
var title = title_layer.sourceText.value.text;
|
|
|
|
return title
|
|
}
|
|
|
|
function formatTitle( s )
|
|
{
|
|
title = titleCase( s );
|
|
var exp = new RegExp(" " , 'g');
|
|
title = title.replace(" ","");
|
|
title = title.replace(exp, '');
|
|
|
|
return title;
|
|
}
|
|
function generateName(){
|
|
var name = getTitle();
|
|
name = formatTitle ( name ) + "_" + genColorCode ();
|
|
return name
|
|
}
|
|
function genColorCode()
|
|
{
|
|
var id = String(myPalette.grp.match.palette.paletteOption.selection);
|
|
cc = "";
|
|
/*
|
|
*
|
|
switch ( id )
|
|
{
|
|
case "Blue_1":
|
|
cc = "BLU1";
|
|
break;
|
|
case "Blue_2":
|
|
cc = "BLU2";
|
|
break;
|
|
case "Blue_3":
|
|
cc = "BLU3";
|
|
break;
|
|
case "Gray":
|
|
cc = "GRY";
|
|
break;
|
|
case "Magenta":
|
|
cc = "MGN";
|
|
break;
|
|
case "Gold":
|
|
cc = "GLD"
|
|
break;
|
|
}
|
|
*/
|
|
if ( id.search("Blu") == -1 ){
|
|
cc = id.substr(0,3);
|
|
}
|
|
else
|
|
{
|
|
cc = id.substr(0,3) + id[5];
|
|
}
|
|
return cc;
|
|
}
|
|
function applyShowTitle( new_title ){
|
|
var comp = myPalette.comp;
|
|
var title_layer = comp.layer("TITLE");
|
|
var ctrl_layer = comp.layer("ctrl_bubble");
|
|
title_layer.sourceText.setValue( new_title );
|
|
|
|
width = title_layer.sourceRectAtTime(0, false).width;
|
|
var new_scale;
|
|
var new_center;
|
|
|
|
if ( width >= 1300 )
|
|
{
|
|
new_scale = (1500/width)*100;
|
|
new_center = [787,540];
|
|
}
|
|
else if ( width > 640 )
|
|
{
|
|
new_scale = 100;
|
|
new_center = [960,540];
|
|
}
|
|
else
|
|
{
|
|
new_scale = 100;
|
|
new_center = [1040,540];
|
|
|
|
}
|
|
|
|
comp.layer("DONT_TOUCH_CTRL_CENTER")("Transform")("Position").setValue(new_center);
|
|
comp.layer("ctrl_bubble")("Transform")("Scale").setValue([new_scale,new_scale]);
|
|
ctrl_layer("Effects")("width")("Slider").setValue(width + 75);
|
|
}
|
|
function setBG ( id ){
|
|
new_source = myPalette.comp.layer("DC_GEN_BG_"+String(id)).source;
|
|
a = myPalette.comp.layer("BG");
|
|
a.replaceSource(new_source,false)
|
|
}
|
|
var paletteOptions = ["C","D","E","F","G","H"];
|
|
|
|
var colors = {
|
|
gray : 0x2C313B,
|
|
purple : 0x7c36e1,
|
|
purple_dark : 0x5525ab,
|
|
yellow : 0xfffa38,
|
|
yellow_dark : 0xBBB900,
|
|
magenta : 0xE74DB7,
|
|
magenta_dark : 0xA93886,
|
|
cyan : 0x1BF0FF,
|
|
cyan_darl : 0x128DA6,
|
|
aqua_dark : 0x238573,
|
|
aqua : 0x288492,
|
|
aqua_light : 0x3ED8BB,
|
|
bluish_gray : 0x2A3B52
|
|
}
|
|
|
|
var palettes = {
|
|
A : {
|
|
col_title: colors.magenta,
|
|
col_bubble: colors.yellow,
|
|
col_bubble_shadow: colors.yellow_dark,
|
|
col_logo_bg : colors.yellow,
|
|
col_logo_fg: colors.magenta,
|
|
col_logo_neutral: colors.gray,
|
|
col_logo_accent: 0x19EDFF
|
|
},
|
|
C : {
|
|
col_title: colors.magenta,
|
|
col_bubble: colors.yellow,
|
|
col_bubble_shadow: colors.yellow_dark,
|
|
col_logo_bg : colors.yellow,
|
|
col_logo_fg: colors.magenta,
|
|
col_logo_neutral: colors.gray,
|
|
col_logo_accent: colors.purple
|
|
},
|
|
D : {
|
|
col_title: colors.bluish_gray,
|
|
col_bubble: colors.aqua_light,
|
|
col_bubble_shadow: colors.aqua_dark,
|
|
col_logo_bg : colors.yellow,
|
|
col_logo_fg: colors.magenta,
|
|
col_logo_neutral: colors.gray,
|
|
col_logo_accent: colors.purple
|
|
},
|
|
E : {
|
|
col_title: colors.aqua,
|
|
col_bubble: colors.yellow,
|
|
col_bubble_shadow: colors.yellow_dark,
|
|
col_logo_bg : colors.purple,
|
|
col_logo_fg: colors.yellow,
|
|
col_logo_neutral: colors.gray,
|
|
col_logo_accent: colors.magenta
|
|
},
|
|
F : {
|
|
col_title: colors.cyan,
|
|
col_bubble: colors.magenta,
|
|
col_bubble_shadow: colors.magenta_dark,
|
|
col_logo_bg : colors.purple,
|
|
col_logo_fg: colors.cyan,
|
|
col_logo_neutral: colors.gray,
|
|
col_logo_accent: colors.magenta
|
|
},
|
|
G : {
|
|
col_title: colors.yellow,
|
|
col_bubble: colors.purple,
|
|
col_bubble_shadow: colors.purple_dark,
|
|
col_logo_bg : colors.purple,
|
|
col_logo_fg: colors.yellow,
|
|
col_logo_neutral: colors.cyan,
|
|
col_logo_accent: colors.gray
|
|
},
|
|
H: {
|
|
col_title: colors.purple,
|
|
col_bubble: colors.yellow,
|
|
col_bubble_shadow: colors.yellow_dark,
|
|
col_logo_bg : colors.purple,
|
|
col_logo_fg: colors.yellow,
|
|
col_logo_neutral: colors.gray,
|
|
col_logo_accent: 0xE74DB7
|
|
}
|
|
}
|
|
|
|
//main
|
|
|
|
var myPalette = tcd_buildUI(this);
|
|
var tcd_folderName, tcd_addFolder, tcd_origParentFolder, tcd_parentFolder, previousComps, previousFolders;
|
|
|
|
if (parseFloat(app.version) < 8) {
|
|
alert("This script requires Adobe After Effects CS3 or later.", tcd_scriptName);
|
|
} else {
|
|
if (myPalette != null && myPalette instanceof Window) {
|
|
//myPalette.center();
|
|
myPalette.show();
|
|
}
|
|
}
|
|
}
|