Example #1
0
gkColor parseColour(const TiXmlElement* XMLNode)
{
	return gkColor(
		getAttribScalar(XMLNode, "r", 0),
		getAttribScalar(XMLNode, "g", 0),
		getAttribScalar(XMLNode, "b", 0),
		getAttribScalar(XMLNode, "a", 1));
}
Example #2
0
void gkBlenderSceneConverter::convertObjectLamp(gkGameObject* gobj, Blender::Object* bobj)
{
	GK_ASSERT(gobj->getType() == GK_LIGHT && bobj->data);

	gkLight* obj = static_cast<gkLight*>(gobj);

	gkLightProperties& props = obj->getLightProperties();
	Blender::Lamp* la = static_cast<Blender::Lamp*>(bobj->data);

	props.m_diffuse = gkColor(la->r, la->g, la->b);
	if (la->mode & LA_NO_DIFF)
		props.m_diffuse = gkColor::Black;

	props.m_specular = gkColor(la->r, la->g, la->b);
	if (la->mode & LA_NO_SPEC)
		props.m_specular = gkColor::Black;

	props.m_power = la->energy;
	if (la->mode & LA_NEG)
		props.m_power = -props.m_power;

	props.m_linear    = la->att1 / la->dist;
	props.m_constant  = 1.f;
	props.m_quadratic = la->att2 / (la->dist * la->dist);


	props.m_type = gkLightProperties::LI_POINT;
	if (la->type != LA_LOCAL)
		props.m_type = la->type == LA_SPOT ? gkLightProperties::LI_SPOT : gkLightProperties::LI_DIR;

	
	props.m_spot.y  = la->spotsize > 128 ? 128 : la->spotsize;
	props.m_spot.x  = gkMax(gkRadian(la->spotblend).valueDegrees(), props.m_spot.y);
	props.m_falloff = 128.f * la->spotblend;

	props.m_casts = (la->type != LA_HEMI && 
		((la->mode & LA_SHAD_RAY) ||
		 (la->type == LA_SPOT && (la->mode & LA_SHAD_BUF))));		
}
Example #3
0
void gkBlenderMeshConverter::convertMaterial(Blender::Material* bma, gkMaterialProperties& gma, gkMeshHashKey& hk)
{
	convertTextureFace(gma, hk, 0);

	gma.m_name          = GKB_IDNAME(bma);
	gma.m_hardness      = bma->har / 4.f;
	gma.m_refraction    = bma->ref;
	gma.m_emissive      = bma->emit;
	gma.m_ambient       = bma->amb;
	gma.m_spec          = bma->spec;
	gma.m_alpha         = bma->alpha;
	gma.m_diffuse       = gkColor(bma->r, bma->g, bma->b);
	gma.m_specular      = gkColor(bma->specr, bma->specg, bma->specb);
	gma.m_rblend        = getRampBlendType(bma->rampblend_col);

	if (bma->mode & MA_ZTRA)        		gma.m_mode |= gkMaterialProperties::MA_DEPTHWRITE;
	if (bma->mode & MA_SHADOW)      		gma.m_mode |= gkMaterialProperties::MA_RECEIVESHADOWS;
	if (bma->mode & MA_WIRE)        		gma.m_mode |= gkMaterialProperties::MA_WIREFRAME;
	if (!(bma->mode & MA_SHLESS))   		gma.m_mode |= gkMaterialProperties::MA_LIGHTINGENABLED;
	// TODO: this need to be checked, as there are cases where material-alpha is set to zero to give the texture-alpha full control
	if (bma->alpha <= 0.f)          		gma.m_mode |= gkMaterialProperties::MA_INVISIBLE;
	if (bma->mode & MA_RAMP_COL)			gma.m_mode |= gkMaterialProperties::MA_HASRAMPBLEND;
	if (!(bma->game.flag & GEMAT_BACKCULL)) gma.m_mode |= gkMaterialProperties::MA_TWOSIDE;
	if (bma->game.flag & GEMAT_INVISIBLE)   gma.m_mode |= gkMaterialProperties::MA_INVISIBLE;

	if (bma->game.alpha_blend & GEMAT_ALPHA)
		gma.m_mode |= gkMaterialProperties::MA_ALPHABLEND;

	if (bma->game.alpha_blend & GEMAT_CLIP)
		gma.m_mode |= gkMaterialProperties::MA_ALPHACLIP;

	// textures
	if (bma->mtex != 0)
	{
		gma.m_totaltex = 0;

		for (int i = 0; i < MAX_MTEX; i++)
		{
			if (!bma->mtex[i] || !bma->mtex[i]->tex)
				continue;

			if (bma->mtex[i]->tex->type == TEX_IMAGE)
			{
				Blender::MTex* mtex = bma->mtex[i];

				Blender::Image* ima = mtex->tex->ima;
				if (!ima)
					continue;

				gkTextureProperties& gte = gma.m_textures[gma.m_totaltex++];
				gte.m_image = gte.m_name = GKB_IDNAME(ima);

				if (mtex->texflag & MTEX_STENCIL)
				{
					gte.m_mode |= gkTextureProperties::TM_SPLAT;
					gte.m_texmode |= gkTextureProperties::TX_STENCIL;
				}
				if (mtex->texflag & MTEX_NEGATIVE)
					gte.m_texmode |= gkTextureProperties::TX_NEGATIVE;
				if (mtex->texflag &  MTEX_RGBTOINT)
					gte.m_texmode |= gkTextureProperties::TX_RGBTOINTEN;

				if (mtex->mapto & MAP_ALPHA)
				{
					gte.m_mode |= gkTextureProperties::TM_ALPHA;
					gma.m_mode |= gkMaterialProperties::MA_ALPHABLEND;
				}
				if ((mtex->mapto & MAP_NORM) || (mtex->maptoneg & MAP_NORM))
				{
					gte.m_mode |= gkTextureProperties::TM_NORMAL;
					gma.m_tangentLayer = i;
				}
				if ((mtex->mapto & MAP_SPEC) || (mtex->maptoneg & MAP_SPEC))
					gte.m_mode |= gkTextureProperties::TM_SPECULAR;
				if ((mtex->mapto & MAP_REF)  || (mtex->maptoneg & MAP_REF))
					gte.m_mode |= gkTextureProperties::TM_REFRACTION;
				if ((mtex->mapto & MAP_EMIT) || (mtex->maptoneg & MAP_EMIT))
					gte.m_mode |= gkTextureProperties::TM_EMMISIVE;

				if (mtex->normapspace == MTEX_NSPACE_OBJECT) //else set to tagent space.
					gte.m_texmode |= gkTextureProperties::TX_OBJ_SPACE;

				gte.m_blend = getTexBlendType(mtex->blendtype);				

				gte.m_layer = findTextureLayer(mtex);
				gte.m_mix   = mtex->colfac;				

				gte.m_normalFactor = mtex->norfac;
				gte.m_diffuseColorFactor = mtex->colfac;
				gte.m_diffuseAlpahFactor = mtex->alphafac;
				gte.m_speculaColorFactor = mtex->colspecfac;
				gte.m_speculaHardFactor = mtex->hardfac;

				gte.m_scale.x = 1/mtex->size[0];
				gte.m_scale.y = 1/mtex->size[1];
				gte.m_scale.z = 1/mtex->size[2];
			}
		}
	}
}
Example #4
0
void gkGameLevel::loadPickup(void)
{
	if (m_pickup)
	{
		m_pickup->reinstance();
		return;
	}

#ifndef OGREKIT_CPPDEMO_COMPILE_BLEND
	gkBlendFile* playerData = gkBlendLoader::getSingleton().loadFile(gkUtils::getFile(GK_RESOURCE_PLAYER), "", LEVEL_GROUP_NAME);
#else
	gkBlendFile* playerData = gkBlendLoader::getSingleton().loadFromMemory(MOMO,MOMO_SIZE,gkBlendLoader::LO_ALL_SCENES, "", LEVEL_GROUP_NAME);
#endif

	if (!playerData || !playerData->getMainScene())
	{
		gkPrintf("GameLevel: Blend '%s' loading failed", GK_RESOURCE_PLAYER);
		return;
	}


	// log status
	gkPrintf("GameLevel: Blend '%s' loaded", GK_RESOURCE_PLAYER);

#ifndef OGREKIT_CPPDEMO_COMPILE_BLEND
	gkBlendFile* mapData = gkBlendLoader::getSingleton().loadFile(gkUtils::getFile(GK_RESOURCE_MAPS), "Pickup", LEVEL_GROUP_NAME);
#else
	gkBlendFile* mapData = gkBlendLoader::getSingleton().loadFromMemory(MAPS,MAPS_SIZE,gkBlendLoader::LO_ALL_SCENES, "Pickup", LEVEL_GROUP_NAME);
#endif
	if (!mapData || !mapData->getMainScene())
	{
		gkPrintf("GameLevel: Blend '%s'->Pickup loading failed", GK_RESOURCE_MAPS);
		return;
	}

	// log status
	gkPrintf("GameLevel: Blend '%s'->Pickup loaded", GK_RESOURCE_MAPS);

	gkScene* sc = mapData->getMainScene();



	m_pickup = (gkScene*)gkSceneManager::getSingleton().create("PickupLevel");
	m_pickup->setHorizonColor(gkColor(0.2f, 0.2f, 0.2f));
	m_pickup->setAmbientColor(gkColor(0.5f, 0.5f, 0.5f));

	gkSceneManager::getSingleton().copyObjects(sc, m_pickup);

	m_player = new gkGamePlayer(this);
	m_player->load(playerData);
    m_player->registerToNetwork();
	

	m_pickup->createInstance();
/*
	gkGamePlayer* enemy = m_player->clone();
	enemy->registerToNetwork();
	enemy->setPosition(gkVector3(0,1,1));
	m_enemies.push_back(enemy);

	enemy = enemy->clone();
	enemy->registerToNetwork();
	enemy->setPosition(gkVector3(1,1,1));
	m_enemies.push_back(enemy);
	*/
}