Beispiel #1
0
Sprite* UILayer::MakeCooltimeBox(SkillKey key, Vec2 pos)
{
    m_CooltimeBox[key] = MakeSprite("Images/Interface/black.jpg", pos, Vec2(0.5, 0.5), Vec2(0.0, 0.0));
    m_CooltimeBox[key]->setOpacity(200);
    m_CooltimeBox[key]->setZOrder(10);
    return m_CooltimeBox[key];
}
Beispiel #2
0
bool UILayer::init()
{
    if (!Layer::init())
        return false;

    auto winSize = Director::getInstance()->getWinSize();

    auto menuItem = MenuItemImage::create(
        "Images/Interface/Exit.png",
        "Images/Interface/Exit_selected.png",
        CC_CALLBACK_1(UILayer::ClickExit, this));
    menuItem->setScale(0.3f, 0.3f);

    auto menu = Menu::create(menuItem, NULL);
    menu->setPosition(winSize.width - 40, 12);
    this->addChild(menu);

    auto hpLabel = Label::createWithSystemFont("\0", DEF_FONT, 23);
    hpLabel->setPosition(Vec2(MAX_MAP_SIZE_X / 2, 143));
    this->addChild(hpLabel, 11, HP_LABEL);

    this->addChild(MakeSprite("Images/Interface/interface.png",         Vec2(MAX_MAP_SIZE_X / 2, 100),          Vec2(1.1f, 1.1f),   Vec2(0.5, 0.5)));
    this->addChild(MakeSprite("Images/Interface/HpBar_interface.png",   Vec2(MAX_MAP_SIZE_X / 2 - 204, 141),    Vec2(0.72f, 1.1f),  Vec2(0.0, 0.5)),    10, HP_BAR);

    this->addChild(MakeCooltimeBox(SKILL_Q, Vec2(MAX_MAP_SIZE_X / 2 - 150, 48)));
    this->addChild(MakeCooltimeBox(SKILL_W, Vec2(MAX_MAP_SIZE_X / 2 - 70, 48)));
    this->addChild(MakeCooltimeBox(SKILL_E, Vec2(MAX_MAP_SIZE_X / 2 + 13, 48)));
    this->addChild(MakeCooltimeBox(SKILL_R, Vec2(MAX_MAP_SIZE_X / 2 + 92, 48)));
    
    m_Cursor = MakeCursor(CURSOR_DEFAULT, "Images/Cursor/cursor_default.png", Vec2(1, 1), Vec2(0, 1));
    m_Cursor->setVisible(true);
    this->addChild(m_Cursor, 10);
    this->addChild(MakeCursor(CURSOR_ATTACK, "Images/Cursor/cursor_attack.png",     Vec2(1, 1),         Vec2(0, 1)),        10);
    this->addChild(MakeCursor(CURSOR_TELEPORT, "Images/Cursor/cursor_teleport.png", Vec2(0.2f, 0.08f),  Vec2(0.5f, 0.5f)),  10);
    this->addChild(MakeCursor(CURSOR_SPLASH, "Images/Cursor/cursor_splash.png",     Vec2(1.5f, 1.5f),   Vec2(0.5f, 0.5f)),  10);
    return true;
}
Beispiel #3
0
void Sprites::Draw()
{
	static int i,j,k;
	static float M[16];
	static XYZ point;
	static float distancemult;
	static int lasttype;
	static int lastspecial;
	static int whichpatchx,whichpatchz;
	static XYZ start,end,colpoint;
	static bool check;
	static bool blend;
	static float tempmult;
	static XYZ difference;
	static float lightcolor[3];
	static float viewdistsquared=viewdistance*viewdistance;
	static XYZ tempviewer;

	tempviewer=viewer+viewerfacing*6;
	check=0;

	lightcolor[0]=light.color[0]*.5+light.ambient[0];
	lightcolor[1]=light.color[1]*.5+light.ambient[1];
	lightcolor[2]=light.color[2]*.5+light.ambient[2];

	checkdelay-=multiplier*10;

	if(checkdelay<=0){
		check=1;
		checkdelay=1;
	}

	lasttype=-1;
	lastspecial=-1;
	glEnable(GL_BLEND);
	glDisable(GL_LIGHTING);
	glDisable(GL_CULL_FACE);
	glEnable(GL_TEXTURE_2D);
	blend = 1;
	glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
	glDepthMask(0);
	glAlphaFunc(GL_GREATER, 0.0001);
	for(i=0;i<numsprites;i++){
		if(type[i]==cloudsprite&&lasttype!=type[i]){
			glBindTexture( GL_TEXTURE_2D, cloudtexture);
			if(!blend){
				blend=1;
				glAlphaFunc(GL_GREATER, 0.0001);
				glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
			}
		}
		if(type[i]==cloudimpactsprite&&lasttype!=type[i]){
			glBindTexture( GL_TEXTURE_2D, cloudimpacttexture);
			if(!blend){
				blend=1;
				glAlphaFunc(GL_GREATER, 0.0001);
				glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
			}
		}
		if(type[i]==breathsprite&&lasttype!=type[i]){
			glBindTexture( GL_TEXTURE_2D, cloudimpacttexture);
			if(!blend){
				blend=1;
				glAlphaFunc(GL_GREATER, 0.0001);
				glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
			}
		}
		if(type[i]==smoketype&&lasttype!=type[i]){
			glBindTexture( GL_TEXTURE_2D, smoketexture);
			if(!blend){
				blend=1;
				glAlphaFunc(GL_GREATER, 0.0001);
				glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
			}
		}
		if(type[i]==bloodsprite&&lasttype!=type[i]){
			glBindTexture( GL_TEXTURE_2D, bloodtexture);
			if(!blend){
				blend=1;
				glAlphaFunc(GL_GREATER, 0.0001);
				glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
			}
		}
		if(type[i]==splintersprite&&(lasttype!=type[i]||lastspecial!=special[i])){
			if(special[i]==0)glBindTexture( GL_TEXTURE_2D, splintertexture);
			if(special[i]==1)glBindTexture( GL_TEXTURE_2D, leaftexture);
			if(special[i]==2)glBindTexture( GL_TEXTURE_2D, snowflaketexture);
			if(special[i]==3)glBindTexture( GL_TEXTURE_2D, toothtexture);
			if(!blend){
				blend=1;
				glAlphaFunc(GL_GREATER, 0.0001);
				glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
			}
		}
		if(type[i]==snowsprite&&lasttype!=type[i]){
			glBindTexture( GL_TEXTURE_2D, snowflaketexture);
			if(!blend){
				blend=1;
				glAlphaFunc(GL_GREATER, 0.0001);
				glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
			}
		}
		if(type[i]==weaponshinesprite&&lasttype!=type[i]){
			glBindTexture( GL_TEXTURE_2D, shinetexture);
			if(blend){
				blend=0;
				glAlphaFunc(GL_GREATER, 0.001);
				glBlendFunc(GL_SRC_ALPHA,GL_ONE);
			}
		}
		if((type[i]==flamesprite||type[i]==weaponflamesprite)&&lasttype!=type[i]){
			glBindTexture( GL_TEXTURE_2D, flametexture);
			if(blend||lasttype==bloodflamesprite){
				blend=0;
				glAlphaFunc(GL_GREATER, 0.3);
				glBlendFunc(GL_SRC_ALPHA,GL_ONE);
			}
		}
		if((type[i]==bloodflamesprite)&&lasttype!=type[i]){
			glBindTexture( GL_TEXTURE_2D, bloodflametexture);
			if(blend){
				blend=0;
				glAlphaFunc(GL_GREATER, 0.3);
				glBlendFunc(GL_ONE,GL_ZERO);
				//glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
			}
		}
		if(type[i]!=snowsprite)distancemult=(viewdistsquared-(findDistancefast(&viewer,&position[i])-(viewdistsquared*fadestart))*(1/(1-fadestart)))/viewdistsquared;
		if(type[i]==snowsprite)distancemult=(144-(findDistancefast(&tempviewer,&position[i])-(144*fadestart))*(1/(1-fadestart)))/144;
		if(type[i]!=flamesprite){
			if(distancemult>=1)glColor4f(color[i][0]*lightcolor[0],color[i][1]*lightcolor[1],color[i][2]*lightcolor[2],opacity[i]);
			if(distancemult<1)glColor4f(color[i][0]*lightcolor[0],color[i][1]*lightcolor[1],color[i][2]*lightcolor[2],opacity[i]*distancemult);
		}
		if(type[i]==flamesprite){
			if(distancemult>=1)glColor4f(color[i][0],color[i][1],color[i][2],opacity[i]);
			if(distancemult<1)glColor4f(color[i][0],color[i][1],color[i][2],opacity[i]*distancemult);
		}
		lasttype=type[i];
		lastspecial=special[i];
		glMatrixMode(GL_MODELVIEW);							// Select The Modelview Matrix
		glPushMatrix();
			glTranslatef(position[i].x,position[i].y,position[i].z);
			if((type[i]==flamesprite||type[i]==weaponflamesprite||type[i]==weaponshinesprite)){
				difference=viewer-position[i];
				Normalise(&difference);
				glTranslatef(difference.x*size[i]/4, difference.y*size[i]/4, difference.z*size[i]/4);
			}
			if(type[i]==snowsprite){
				glRotatef(rotation[i]*.2,0,.3,1);
				glTranslatef(1,0,0);
			}
			glGetFloatv(GL_MODELVIEW_MATRIX,M);
			point.x=M[12];
			point.y=M[13];
			point.z=M[14];
			glLoadIdentity();
			glTranslatef(point.x, point.y, point.z);

			glRotatef(rotation[i],0,0,1);

			if((type[i]==flamesprite||type[i]==weaponflamesprite||type[i]==weaponshinesprite||type[i]==bloodflamesprite)){
				if(alivetime[i]<.14)glScalef(alivetime[i]/.14,alivetime[i]/.14,alivetime[i]/.14);
			}
			if(type[i]==smoketype||type[i]==snowsprite||type[i]==weaponshinesprite||type[i]==breathsprite){
				if(alivetime[i]<.3){
					if(distancemult>=1)glColor4f(color[i][0]*lightcolor[0],color[i][1]*lightcolor[1],color[i][2]*lightcolor[2],opacity[i]*alivetime[i]/.3);
					if(distancemult<1)glColor4f(color[i][0]*lightcolor[0],color[i][1]*lightcolor[1],color[i][2]*lightcolor[2],opacity[i]*distancemult*alivetime[i]/.3);
				}
			}
			if(type[i]==splintersprite&&special[i]>0&&special[i]!=3){
				if(alivetime[i]<.2){
					if(distancemult>=1)glColor4f(color[i][0]*lightcolor[0],color[i][1]*lightcolor[1],color[i][2]*lightcolor[2],alivetime[i]/.2);
					if(distancemult<1)glColor4f(color[i][0]*lightcolor[0],color[i][1]*lightcolor[1],color[i][2]*lightcolor[2],distancemult*alivetime[i]/.2);
				}
				else{
					if(distancemult>=1)glColor4f(color[i][0]*lightcolor[0],color[i][1]*lightcolor[1],color[i][2]*lightcolor[2],1);
					if(distancemult<1)glColor4f(color[i][0]*lightcolor[0],color[i][1]*lightcolor[1],color[i][2]*lightcolor[2],1);
				}
			}
			if(type[i]==splintersprite&&(special[i]==0||special[i]==3)){
				if(distancemult>=1)glColor4f(color[i][0]*lightcolor[0],color[i][1]*lightcolor[1],color[i][2]*lightcolor[2],1);
				if(distancemult<1)glColor4f(color[i][0]*lightcolor[0],color[i][1]*lightcolor[1],color[i][2]*lightcolor[2],1);
			}
			/*
			if(type[i]==snowsprite){
			glRotatef(rotation[i],0,0,1);
			glTranslatef(1,0,0);
			}*/

			glBegin(GL_TRIANGLES);
			glTexCoord2f(1.0f, 1.0f); glVertex3f( .5*size[i], .5*size[i], 0.0f);
			glTexCoord2f(0.0f, 1.0f); glVertex3f(-.5*size[i], .5*size[i], 0.0f);
			glTexCoord2f(1.0f, 0.0f); glVertex3f( .5*size[i],-.5*size[i], 0.0f);
			glTexCoord2f(0.0f, 0.0f); glVertex3f(-.5*size[i],-.5*size[i], 0.0f);
			glTexCoord2f(1.0f, 0.0f); glVertex3f( .5*size[i], -.5*size[i], 0.0f);
			glTexCoord2f(0.0f, 1.0f); glVertex3f(-.5*size[i], .5*size[i], 0.0f);
			glEnd();
		glPopMatrix();
	}
	tempmult=multiplier;
	for(i=numsprites-1;i>=0;i--){
		multiplier=tempmult;
		if(type[i]!=snowsprite)position[i]+=velocity[i]*multiplier;
		if(type[i]!=snowsprite)velocity[i]+=windvector*multiplier;
		if(type[i]==flamesprite||type[i]==smoketype)position[i]+=windvector*multiplier/2;
		if((type[i]==flamesprite||type[i]==weaponflamesprite||type[i]==weaponshinesprite||type[i]==bloodflamesprite))multiplier*=speed[i]*.7;
		alivetime[i]+=multiplier;

		if(type[i]==cloudsprite||type[i]==cloudimpactsprite){
			opacity[i]-=multiplier/2;
			size[i]+=multiplier/2;
			velocity[i].y+=gravity*multiplier*.25;
		}
		if(type[i]==breathsprite){
			opacity[i]-=multiplier/2;
			size[i]+=multiplier/2;
			if(findLength(&velocity[i])<=multiplier)velocity[i]=0;
			else{
				XYZ slowdown;
				slowdown=velocity[i]*-1;
				Normalise(&slowdown);
				slowdown*=multiplier;
				velocity[i]+=slowdown;
			}
		}
		if(type[i]==snowsprite){
			size[i]-=multiplier/120;
			rotation[i]+=multiplier*360;
			position[i].y-=multiplier;
			position[i]+=windvector*multiplier;
			if(position[i].y<tempviewer.y-6)position[i].y+=12;
			if(position[i].y>tempviewer.y+6)position[i].y-=12;
			if(position[i].z<tempviewer.z-6)position[i].z+=12;
			if(position[i].z>tempviewer.z+6)position[i].z-=12;
			if(position[i].x<tempviewer.x-6)position[i].x+=12;
			if(position[i].x>tempviewer.x+6)position[i].x-=12;
		}
		if(type[i]==bloodsprite){
			bool spritehit=0;
			rotation[i]+=multiplier*100;
			velocity[i].y+=gravity*multiplier;
			if(check){
				XYZ where,startpoint,endpoint,movepoint,footpoint;
				float rotationpoint;
				int whichtri;

				for(j=0;j<numplayers;j++){
					if(!spritehit&&player[j].dead&&alivetime[i]>.1){
						where=oldposition[i];
						where-=player[j].coords;
						if(!player[j].skeleton.free)where=DoRotation(where,0,-player[j].rotation,0);
						startpoint=where;
						where=position[i];
						where-=player[j].coords;
						if(!player[j].skeleton.free)where=DoRotation(where,0,-player[j].rotation,0);
						endpoint=where;

						movepoint=0;
						rotationpoint=0;
						whichtri=player[j].skeleton.drawmodel.LineCheck(&startpoint,&endpoint, &footpoint, &movepoint, &rotationpoint);
						if(whichtri!=-1){
							spritehit=1;
							player[j].DoBloodBigWhere(0,160,oldposition[i]);
							DeleteSprite(i);
						}
					}
				}

				whichpatchx=position[i].x/(terrain.size/subdivision*terrain.scale*terraindetail);
				whichpatchz=position[i].z/(terrain.size/subdivision*terrain.scale*terraindetail);
				if(whichpatchx>0&&whichpatchz>0&&whichpatchx<subdivision&&whichpatchz<subdivision)
					if(terrain.patchobjectnum[whichpatchx][whichpatchz]){
						if(!spritehit)
							for(j=0;j<terrain.patchobjectnum[whichpatchx][whichpatchz];j++){
								k=terrain.patchobjects[whichpatchx][whichpatchz][j];
								start=oldposition[i];
								end=position[i];
								if(!spritehit)
									if(objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.rotation[k])!=-1){
										if(detail==2||(detail==1&&abs(Random()%4)==0)||(detail==0&&abs(Random()%8)==0))objects.model[k].MakeDecal(blooddecalfast,DoRotation(colpoint-objects.position[k],0,-objects.rotation[k],0),size[i]*1.6/*+abs((float)(Random()%100))/2400*/,.5,Random()%360);
										DeleteSprite(i);
										spritehit=1;
									}	
							}
					}
					if(!spritehit)
						if(position[i].y<terrain.getHeight(position[i].x,position[i].z)){
							terrain.MakeDecal(blooddecalfast,position[i],size[i]*1.6/*+abs((float)(Random()%100))/2400*/,.6,Random()%360);
							DeleteSprite(i);
						}
			}
		}
		if(type[i]==splintersprite){
			rotation[i]+=rotatespeed[i]*multiplier;
			opacity[i]-=multiplier/2;
			if(special[i]==0||special[i]==2||special[i]==3)velocity[i].y+=gravity*multiplier;
			if(special[i]==1)velocity[i].y+=gravity*multiplier*.5;
		}
		if(type[i]==flamesprite||type[i]==weaponflamesprite||type[i]==weaponshinesprite||type[i]==bloodflamesprite){
			rotation[i]+=multiplier*rotatespeed[i];
			opacity[i]-=multiplier*5/4;
			if(type[i]!=weaponshinesprite&&type[i]!=bloodflamesprite)
				if(opacity[i]<.5&&opacity[i]+multiplier*5/4>=.5&&(abs(Random()%4)==0||(initialsize[i]>2&&Random()%2==0)))MakeSprite(smoketype, position[i],velocity[i], .9,.9,.6, size[i]*1.2, .4);
			if(alivetime[i]>.14&&(type[i]==flamesprite)){
				velocity[i]=0;
				velocity[i].y=1.5;
			}
		}
		/*if(type[i]==smoketype){
		opacity[i]-=multiplier/3/initialsize[i];
		size[i]+=multiplier;
		velocity[i]=0;
		velocity[i].y=1.5;
		rotation[i]+=multiplier*rotatespeed[i]/5;
		}*/
		if(type[i]==smoketype){
			opacity[i]-=multiplier/3/initialsize[i];
			color[i][0]-=multiplier;
			color[i][1]-=multiplier;
			color[i][2]-=multiplier;
			if(color[i][0]<.6)color[i][0]=.6;
			if(color[i][1]<.6)color[i][1]=.6;
			if(color[i][2]<.6)color[i][2]=.6;
			size[i]+=multiplier;
			velocity[i]=0;
			velocity[i].y=1.5;
			rotation[i]+=multiplier*rotatespeed[i]/5;
		}
		if(opacity[i]<=0||size[i]<=0)DeleteSprite(i);
	}
	if(check)
		for(i=numsprites-1;i>=0;i--){
			oldposition[i]=position[i];
		}
		glAlphaFunc(GL_GREATER, 0.0001);
		glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
}
void Tileset::MakeAnimatedTile(int tile_id, AnimatedTile& tile)
{
	MakeSprite(tile_id, tile.sprite);
	tile.id = tile.frame = tile_id;
}
Beispiel #5
0
Sprite* UILayer::MakeCursor(CursorMode mode, const char* image, Vec2 scale, Vec2 anchor)
{
    m_CursorShape[mode] = MakeSprite(image, Vec2::ZERO, scale, anchor);
    m_CursorShape[mode]->setVisible(false);
    return m_CursorShape[mode];
}