view webGL/dandy/resources/Character.js @ 4:7f615f5f5220

upload javascript file
author NOBUYASU Oshiro
date Mon, 14 Jun 2010 15:01:02 +0900
parents 10344afb38a6
children 881478004f18
line wrap: on
line source

active_chara_list = new Object();
active_chara_list.enemy = [];

function loadXml(gl,url)
{
    gl.chara = new Object();
    var xmlChara = new Object();
    xmlChara = parsePanel(url);
    for (var name in xmlChara) 
	{
	    gl.chara[name] = makeXmlObj(gl, xmlChara[name]);
	    gl.chara[name].texture = loadImageTexture(gl, xmlChara[name].image);
	}
}

function Character()
{
    this.x=0;
    this.y=0;
    this.dx=0;
    this.dy=0;
    this.vit=0;
    this.score=0;
    this.dt1=0;
    this.dt2=0;
    this.charano=0;
    this.tama=0;
    this.f=false;
    this.s=0;

    this.state=0;
    this.collision=0;

    this.next=0;
    this.prev=0;

    this.image=new Object();
    this.texture=new Object();

    return this;
}

function Putenemy(charano, x, y, vx, vy, chara_state)
{

    var q = new Character();


    //    q.collision = atari;
    q.x = x;
    q.y = y;
    q.vx = vx;
    q.vy = vy;
    //    q.tama = tf;
    //    q.vit = enemystate[charano].p;
    //    q.score = enemystate[charano].sc;
    //    q.s = 0;
    q.f = true;
    loadState(chara_state, q);
    loadImage(charano, q);

    active_chara_list.enemy.push(q);
}

chara_state0 = function character_state0( q )
{
    q.x += q.vx;
    q.y += q.vy;
    q.state = chara_state0;
    return q;
}

chara_state1 = function character_state1( q )
{
    q.x -= q.vx;
    q.y -= q.vy;
    q.state = chara_state1;
    return q;
}

function loadState(charano, q)
{
    if(charano == 0) q.state = chara_state0;
    if(charano == 1) q.state = chara_state1;
    if(charano == 3) q.state = chara_state1;    
    if(charano == 4) q.state = chara_state1;
}

function loadImage(charano, q)
{
    if(charano == 0)
	{
	    q.image = enemy[0];
	    q.texture = enemy[0].texture;
	}
    if(charano == 1)
	{
	    q.image = enemy[1];
	    q.texture = enemy[1].texture;
	}
    if(charano == 2)
	{
	    q.image = enemy[2];
	    q.texture = enemy[2].texture;
	}
    if(charano == 3)
	{
	    q.image = enemy[3];
	    q.texture = enemy[3].texture;
	}
}

function PutSprite( ctx, glObj)
{

    // setup VBOs
    ctx.enableVertexAttribArray(0);
    ctx.enableVertexAttribArray(1);
    ctx.enableVertexAttribArray(2);
				
    ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.image.vertexObject);
    ctx.vertexAttribPointer(2, 3, ctx.FLOAT, false, 0, 0);
    
    ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.image.normalObject);
    ctx.vertexAttribPointer(0, 3, ctx.FLOAT, false, 0, 0);
    
    ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.image.texCoordObject);
    ctx.vertexAttribPointer(1, 2, ctx.FLOAT, false, 0, 0);
				
    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, glObj.image.indexObject);

    // generate the model-view matrix
    var mvMatrix = new CanvasMatrix4();
    mvMatrix.scale(1, 1, 1);
    mvMatrix.translate(0,0,0);
    mvMatrix.rotate(180, 0,0,1);
    mvMatrix.translate(glObj.x,glObj.y,10);
    
    // construct the normal matrix from the model-view matrix
    var normalMatrix = new CanvasMatrix4(mvMatrix);
    normalMatrix.invert();
    normalMatrix.transpose();
    ctx.uniformMatrix4fv(ctx.getUniformLocation(ctx.program, "u_normalMatrix"), false, normalMatrix.getAsWebGLFloatArray());
    
    // construct the model-view * projection matrix
    var mvpMatrix = new CanvasMatrix4(mvMatrix);
    mvpMatrix.multRight(ctx.perspectiveMatrix);
    ctx.uniformMatrix4fv(ctx.getUniformLocation(ctx.program, "u_modelViewProjMatrix"), false, mvpMatrix.getAsWebGLFloatArray());
    
    ctx.bindTexture(ctx.TEXTURE_2D, glObj.texture);
    ctx.drawElements(ctx.TRIANGLES, glObj.image.numIndices, ctx.UNSIGNED_SHORT, 0);
}

function obj_draw( ctx )
{
    for(var i = 0; Boolean(active_chara_list.enemy[i]) ; i++)
	{
	    if(active_chara_list.enemy[i].f == true)
		{
		    PutSprite(ctx,active_chara_list.enemy[i]);
		}
	}
}