Вход Регистрация
Файл: Space race/bkcore/hexgl/HUD.js
Строк: 143
<?php
/*
 * HexGL
 * @author Thibaut 'BKcore' Despoulain <http://bkcore.com>
 * @license This work is licensed under the Creative Commons Attribution-NonCommercial 3.0 Unported License. 
 *          To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/.
 */

var bkcore bkcore || {};
bkcore.hexgl bkcore.hexgl || {};

bkcore.hexgl.HUD = function(opts)
{
    var 
self this;

    
this.visible true;
    
this.messageOnly false;

    
this.width opts.width;
    
this.height opts.height;

    
this.canvas document.createElement('canvas');
    
this.canvas.width this.width;
    
this.canvas.height this.height;

    
this.ctx this.canvas.getContext('2d');
    
this.ctx.textAlign "center";

    
this.bg opts.bg;//"textures/hud/hud-bg.png";

    
this.fgspeed opts.speed;//"textures/hud/hud-fg-speed.png";

    
this.fgshield opts.shield;//"textures/hud/hud-fg-shield.png";

    
this.speedFontRatio 24;
    
this.speedBarRatio 2.91;
    
this.shieldFontRatio 64;
    
this.shieldBarYRatio 34;
    
this.shieldBarWRatio 18.3;
    
this.shieldBarHRatio 14.3;
    
this.timeMarginRatio 18;
    
this.timeFontRatio 19.2;

    
this.font opts.font || "Arial";

    
this.time "";

    
this.message "";
    
this.previousMessage "";
    
this.messageTiming 0;
    
this.messagePos 0.0;
    
this.messagePosTarget 0.0;
    
this.messagePosTargetRatio 12;
    
this.messageA 1.0;
    
this.messageAS 1.0;
    
this.messageDuration 2*60;
    
this.messageDurationD 2*60;
    
this.messageDurationS 30;
    
this.messageYRatio 34;
    
this.messageFontRatio 10;
    
this.messageFontRatioStart 6;
    
this.messageFontRatioEnd 10;
    
this.messageFontLerp 0.4;
    
this.messageLerp 0.4;
    
this.messageFontAlpha 0.8;

    
this.lapMarginRatio 14;
    
this.lap "";
    
this.lapSeparator "/";

    
this.timeSeparators = ["","'""''",""];

    
this.step 0;
    
this.maxStep 2;
};

bkcore.hexgl.HUD.prototype.resize = function(wh)
{
    
this.width w;
    
this.height h;
    
this.canvas.width w;
    
this.canvas.height h;
}

bkcore.hexgl.HUD.prototype.display = function(msgduration)
{
    
this.messageTiming 0;

    if(
this.message != "")
    {
        
this.messageA this.messageFontAlpha;
        
this.messagePos 0.0;
        
this.messagePosTarget this.width/this.messagePosTargetRatio;
        
this.previousMessage this.message;
    }

    
this.messageFontRatio this.messageFontRatioStart;
    
this.messageAS 0.0;
    
this.message msg;
    
this.messageDuration duration == undefined this.messageDurationD duration*60;
}

bkcore.hexgl.HUD.prototype.updateLap = function(currenttotal)
{
    
this.lap current this.lapSeparator total;
}

bkcore.hexgl.HUD.prototype.resetLap = function()
{
    
this.lap "";
}

bkcore.hexgl.HUD.prototype.updateTime = function(time)
{
    
this.time this.timeSeparators[0] + time.this.timeSeparators[1] + time.this.timeSeparators[2] + time.ms this.timeSeparators[3];
}

bkcore.hexgl.HUD.prototype.resetTime = function()
{
    
this.time "";
}

bkcore.hexgl.HUD.prototype.update = function(speedspeedRatioshieldshieldRatio)
{
    var 
SCREEN_WIDTH this.width;
    var 
SCREEN_HEIGHT this.height;

    var 
SCREEN_HW SCREEN_WIDTH 2;
    var 
SCREEN_HH SCREEN_HEIGHT 2;

    if(!
this.visible)
    {
        
this.ctx.clearRect(SCREEN_WIDTH SCREEN_HEIGHT);
        return;
    }

    var 
this.bg.width;
    var 
this.bg.height;
    var 
h/w;
    var 
nw SCREEN_WIDTH;
    var 
nh nw*r;
    var 
oh SCREEN_HEIGHT nh;
    var 
0;
    
//speedbar
    
var ba nh;
    var 
bl SCREEN_WIDTH/this.speedBarRatio;
    var 
bw bl speedRatio;
    
//shieldbar
    
var sw SCREEN_WIDTH/this.shieldBarWRatio;
    var 
sho SCREEN_WIDTH/this.shieldBarHRatio;
    var 
sh sho*shieldRatio;
    var 
sy = (SCREEN_WIDTH/this.shieldBarYRatio)+sho-sh;
    

    if(
this.step == 0)
    {
        
this.ctx.clearRect(oh SCREEN_WIDTH nh);

        if(!
this.messageOnly)
        {
            
this.ctx.drawImage(this.bgoohnwnh);

            
this.ctx.save();
            
this.ctx.beginPath();
            
this.ctx.moveTo(bw+ba+SCREEN_HWoh);
            
this.ctx.lineTo(-(bw+ba)+SCREEN_HWoh);
            
this.ctx.lineTo(-bw+SCREEN_HWSCREEN_HEIGHT);
            
this.ctx.lineTo(bw+SCREEN_HWSCREEN_HEIGHT);
            
this.ctx.lineTo(bw+ba+SCREEN_HWoh);
            
this.ctx.clip();
            
this.ctx.drawImage(this.fgspeedoohnwnh);
            
this.ctx.restore();

            
this.ctx.save();
            
this.ctx.beginPath();
            
this.ctx.moveTo(-sw+SCREEN_HWoh+sy);
            
this.ctx.lineTo(sw+SCREEN_HWoh+sy);
            
this.ctx.lineTo(sw+SCREEN_HWoh+sh+sy);
            
this.ctx.lineTo(-sw+SCREEN_HWoh+sh+sy);
            
this.ctx.lineTo(-sw+SCREEN_HWoh+sh);
            
this.ctx.clip();
            
this.ctx.drawImage(this.fgshieldoohnwnh);
            
this.ctx.restore();

            
// SPEED
            
this.ctx.font = (SCREEN_WIDTH/this.speedFontRatio)+"px "+this.font;
            
this.ctx.fillStyle "rgba(255, 255, 255, 0.8)";
            
this.ctx.fillText(speedSCREEN_HWSCREEN_HEIGHT nh*0.57);

            
// SHIELD
            
this.ctx.font = (SCREEN_WIDTH/this.shieldFontRatio)+"px "+this.font;
            
this.ctx.fillStyle "rgba(255, 255, 255, 0.4)";
            
this.ctx.fillText(shieldSCREEN_HWSCREEN_HEIGHT nh*0.44);
        }
    }
    else if(
this.step == 1)
    {
        
this.ctx.clearRect(SCREEN_WIDTH oh);

        
// TIME
        
if(this.time != "")
        {
            
this.ctx.font = (SCREEN_WIDTH/this.timeFontRatio)+"px "+this.font;
            
this.ctx.fillStyle "rgba(255, 255, 255, 0.8)";
            
this.ctx.fillText(this.timeSCREEN_HWSCREEN_WIDTH/this.timeMarginRatio);
        }

        
// LAPS
        
if(this.lap != "")
        {
            
this.ctx.font = (SCREEN_WIDTH/this.timeFontRatio)+"px "+this.font;
            
this.ctx.fillStyle "rgba(255, 255, 255, 0.8)";
            
this.ctx.fillText(this.lapSCREEN_WIDTH-SCREEN_WIDTH/this.lapMarginRatioSCREEN_WIDTH/this.timeMarginRatio);
        }

        
// MESSAGE
        
var my SCREEN_HH-SCREEN_WIDTH/this.messageYRatio;

        if(
this.messageTiming this.messageDuration+2000)
        {
            
this.previousMessage "";
            
this.message "";
            
this.messageA 0.0;
        }
        else if(
this.messageTiming this.messageDuration && this.message != "")
        {
            
this.previousMessage this.message;
            
this.message "";
            
this.messagePos 0.0;
            
this.messagePosTarget SCREEN_WIDTH/this.messagePosTargetRatio;
            
this.messageA this.messageFontAlpha;
        }

        if(
this.previousMessage != "")
        {
            if(
this.messageA 0.001)
                
this.messageA 0.0;
            else
                
this.messageA += (0.0 this.messageA) * this.messageLerp;

            
this.messagePos += (this.messagePosTarget this.messagePos) * this.messageLerp;

            
this.ctx.font = (SCREEN_WIDTH/this.messageFontRatioEnd)+"px "+this.font;
            
this.ctx.fillStyle "rgba(255, 255, 255, "+this.messageA+")";
            
this.ctx.fillText(this.previousMessageSCREEN_HWmy+this.messagePos);
        }

        if(
this.message != "")
        {
            if(
this.messageTiming this.messageDurationS)
            {
                
this.messageAS += (this.messageFontAlpha this.messageAS) * this.messageFontLerp;
                
this.messageFontRatio += (this.messageFontRatioEnd this.messageFontRatio) * this.messageFontLerp;
            }
            else
            {
                
this.messageAS this.messageFontAlpha;
                
this.messageFontRatio this.messageFontRatioEnd;
            }

            
this.ctx.font = (SCREEN_WIDTH/this.messageFontRatio)+"px "+this.font;
            
this.ctx.fillStyle "rgba(255, 255, 255, "+this.messageAS+")";
            
this.ctx.fillText(this.messageSCREEN_HWmy);
        }
    }
    
    
this.messageTiming++;

    
this.step++;
    if(
this.step == this.maxStepthis.step 0;
}
?>
Онлайн: 1
Реклама