view Vacuum/resources/vacuum.js @ 0:718974a1a32b

Vacuum
author <e085737>
date Tue, 07 Dec 2010 17:31:15 +0900
parents
children
line wrap: on
line source

const vacuum_speed = 10.0


no_move_idle = function(node, sgroot, w, h){

}


no_collision_idle = function(node, sgroot, w, h){

}


vacuum_coll = function(node, sgroot, screen_w, screen_h){
    const ENCOUNT = 100
    var pad = new sgroot.getController()
    if(node.frame%ENCOUNT == ENCOUNT-1){
        if(Math.random() < 0.5){
            add_cubecollision_object(redcube.name,node,screen_w,screen_h,sgroot)
	}
	else{
	    add_cubecollision_object(enemy.name,node,screen_w,screen_h,sgroot)
	}
    }
   
    if(pad.cross_isHold()){
        BgmPlay(test_sound,"on")	
	//var it = new sgroot.getIterator(tree)
        collision_red(node)
	//var it = new sgroot.getIterator(tree)
	collision_purple(node,sgroot,screen_w,screen_h)
    }
    else if(pad.circle_isHold()){
	//var it = sgroot.getIterator(tree)
	lock_attack(node, sgroot)
    }
    if(pad.cross_isRelease()){
	BgmPlay(test_sound,"off")
    }
}



lock_attack = function(e, sgroot){
    var range = 100

    for(num in e.child){
	lock_attack(e.child[num], sgroot)
    }

    if(e.id == "ENEMY"){
	var node = sg_exec_tree
	var dx = e.xyz[0] - node.xyz[0]
	var dy = e.xyz[1] - node.xyz[1]
	var r = Math.sqrt(Math.pow(dx,2) + Math.pow(dy,2))

	if(range > r && e.stack_xyz[2] == 0){
	    range = r
	    var near_enemy = e
	}
    
    
        if(near_enemy != null){
            near_enemy.stack_xyz[2] = 1
            var lockon = sgroot.createSceneGraph2("LOCK")
	    lockon.xyz[0] = near_enemy.xyz[0]
	    lockon.xyz[1] = near_enemy.xyz[1]
            lockon.set_move_collision(no_move_idle, lockon_collision)
            near_enemy.addChild(lockon)
	}
    }	
}


lockon_collision = function(node, sgroot, w, h, tree){
    var pad = new sgroot.getController()
    var lockon_enemy = node.parents

    node.xyz[0] = lockon_enemy.xyz[0]
    node.xyz[1] = lockon_enemy.xyz[1]

    if(pad.circle_isRelease()){
        lockon_enemy.remove(lockon_enemy)
    }
}


vacuum_move = function(node,sgroot,w,h){
    var pad = new sgroot.getController()
    if(pad.right_isHold() && w > node.xyz[0]){
	node.xyz[0] += vacuum_speed
        node.angle[0] += 2
    }else if(pad.left_isHold() && 0 < node.xyz[0]){
	node.xyz[0] -= vacuum_speed
	node.angle[0] -= 2
    }

    if(pad.up_isHold() && 0 > node.xyz[1]){
	node.xyz[1] += vacuum_speed
        node.angle[1] += 2
    }else if(pad.down_isHold() && h < node.xyz[1]){
	node.xyz[1] -= vacuum_speed
        node.angle[1] -= 2
    }
    
    if(pad.start_isHold()){
        node.xyz[0] = w/2
	node.xyz[1] = h*0.8
    }	
}



add_cubecollision_object = function(id, root, w, h, sgroot){
    var cube_object = new sgroot.createSceneGraph1(id)
    cube_object.xyz[0] = Math.random()*w
    cube_object.xyz[1] = Math.random()*h
    cube_object.set_move_collision(no_move_idle,cube_collision)
}



vacuum_init = function(gl, sgroot, w, h){
    sgroot.createFromXMLfile(gl, "./xml/gameover.xml")
    sgroot.createFromXMLfile(gl, "./xml/gamecube.xml")
    sgroot.createFromXMLfile(gl, "./xml/title.xml")
    test_sound = MusicLoad("./sound/vacuum.wav")

    var title = new sgroot.createSceneGraph1("TITLE")
    title.xyz[0] = w/2
    title.xyz[1] = h/2
    title.set_move_collision(no_move_idle, title_collision) 

    sgroot.setSceneData(title)

    redcube = sgroot.getSgid("REDCUBE")
    enemy   = sgroot.getSgid("ENEMY")

    return sgroot
}