(function () {
var coresPossiveis = {
ciano: '#0bc0d3',
laranja: '#fc671d',
roxo: '#2c006a',
magenta: '#d34af4',
branco: '#ffffff'
};
var coresPossiveisDosDetalhes = ['ciano', 'laranja', 'magenta'];
var tempoDeTrocaDeCor = parseInt('0');
var callbackDeTrocaDeCor = '';
var contador = 0;
var corAtual = 'ciano';
var corDoFundo = '#';
var ehAleatorio = 'undefined' === 'true';
var svgs = {
'ciano': '',
'laranja': '',
'magenta': ''
};
function parseSvg(svg) {
return (new window.DOMParser()).parseFromString(svg, "text/xml");
}
function logo() {
var pontoEsquerdo, pontoDireito, pontoTopo, trianguloroxo, fundo;
var canvas = document.getElementById("Logo");
var paperLogo = new paper.PaperScope();
configurar(canvas);
desenhar();
function desenhar() {
console.log('desenhar', 'logo', canvas.id);
paperLogo.project.clear();
configurar(canvas);
pontoEsquerdo = new paperLogo.Point(calcularProporcao(10), calcularProporcao(80));
pontoDireito = new paperLogo.Point(calcularProporcao(90), pontoEsquerdo.y);
pontoTopo = new paperLogo.Point((pontoEsquerdo.x + pontoDireito.y) / 2, calcularProporcao(18));
if(trianguloroxo)
trianguloroxo.remove();
trianguloroxo = criarTriangulo(coresPossiveis[corAtual]);
trianguloroxo.sendToBack();
if(ehAleatorio) {
var tempoAleatorio = Math.floor((Math.random() * 45) + 0);
atualizarFrame({ time: tempoAleatorio * 1000 });
}
if (corDoFundo !== '#') {
fundo = new paperLogo.Path.Rectangle({
point: [0, 0],
size: [canvas.offsetWidth, canvas.offsetHeight],
});
fundo.sendToBack();
fundo.selected = false;
fundo.strokeColor = corDoFundo;
fundo.fillColor = corDoFundo;
}
var symbolSvg = new paperLogo.Symbol(paper.project.importSVG(parseSvg(svgs[corAtual]).getElementsByTagName("svg")[0]));
var pathSvg = symbolSvg.place();
pathSvg.position = new paperLogo.Point(calcularProporcao(95), calcularProporcao(56));
pathSvg.scale(calcularProporcao(0.85));
}
if(!ehAleatorio)
paperLogo.view.onFrame = atualizarFrame;
paperLogo.view.onResize = desenhar;
function configurar(canvas) {
canvas.height = canvas.width / 1.7;
canvas.offsetHeight = canvas.offsetWidth / 1.7;
paperLogo.setup(canvas);
}
function calcularProporcao(percentual) {
return (percentual / 100) * canvas.offsetHeight;
}
function criarTriangulo(cor) {
var primeiroSegmento = new paperLogo.Segment(pontoEsquerdo);
var segundoSegmento = new paperLogo.Segment(pontoDireito);
var terceiroSegmento = new paperLogo.Segment(pontoTopo);
var triangulo = new paperLogo.Path(primeiroSegmento, segundoSegmento, terceiroSegmento);
triangulo.strokeColor = cor;
triangulo.fillColor = cor;
triangulo.strokeWidth = calcularProporcao(4);
triangulo.closed = true;
// triangulo.fullySelected = true;
return triangulo;
}
function atualizarFrame(event) {
var raioTrianguloRoxo = calcularProporcao(15);
var velocidadeDoRoxo = 0.5;
if(tempoDeTrocaDeCor && tempoDeTrocaDeCor > 0 && contador%(tempoDeTrocaDeCor*60) === 0)
trocarDeCor();
atualizarTriangulo(event.time, trianguloroxo, raioTrianguloRoxo, velocidadeDoRoxo + 0.1, velocidadeDoRoxo - 0.1, velocidadeDoRoxo);
contador++;
}
function trocarDeCor() {
var cor = coresPossiveisDosDetalhes[Math.floor(Math.random() * 3)];
if (cor === corAtual)
return trocarDeCor();
corAtual = cor;
trianguloroxo.strokeColor = coresPossiveis[corAtual];
trianguloroxo.fillColor = coresPossiveis[corAtual];
desenhar();
if(callbackDeTrocaDeCor) {
if(typeof window[callbackDeTrocaDeCor] === 'function')
window[callbackDeTrocaDeCor].apply(window, [corAtual, coresPossiveis[corAtual]]);
else
console.error('callbackDeTrocaDeCor recebeu "' + callbackDeTrocaDeCor + '" que não é uma função válida.');
}
}
function atualizarSegmento(tempo, segmento, velocidade, raio, deveInverter, anguloInicial, anguloFinal) {
var radianoInicial = (anguloInicial / 180) * Math.PI;
var radianoFinal = (anguloFinal / 180) * Math.PI;
var angulo = ((Math.sin(((tempo + 5) * velocidade)) + 1) / 2) * (radianoFinal - radianoInicial) + radianoInicial;
var raioCalculado = ((Math.sin(((tempo + 5) * velocidade * 2.2)) + 1) / 2) * (raio * 1.2 - raio * 0.8) + raio * 0.8;
var x = Math.cos(angulo) * raioCalculado;
var y = Math.sin(angulo) * raioCalculado;
var multiplicador = deveInverter ? -1 : 1;
segmento.handleIn.x = x * multiplicador;
segmento.handleIn.y = y * multiplicador;
segmento.handleOut.x = -x * multiplicador;
segmento.handleOut.y = -y * multiplicador;
}
function atualizarTriangulo(tempo, triangulo, raio, velocidade1, velocidade2, velocidade3) {
atualizarSegmento(tempo, triangulo.segments[0], velocidade1, raio, false, -230, -70); // esquerda
atualizarSegmento(tempo, triangulo.segments[1], velocidade2, raio, true, -100, 40); // direita
atualizarSegmento(tempo, triangulo.segments[2], velocidade3, raio, false, -60, 60); // cima
}
}
if (typeof paper === 'undefined') {
var script = document.createElement('script');
script.src = 'https://cdnjs.cloudflare.com/ajax/libs/paper.js/0.10.2/paper-full.min.js';
script.onload = function () {
logo();
}
document.body.appendChild(script);
} else {
logo();
}
}());