Beispiel #1
0
void Controller::SetState(long state)
{
   state_ = state;
   stringstream msg;
   Illuminate();

   // Set timer for the Busy signal
   changedTime_ = GetCurrentMMTime();
}
Beispiel #2
0
void CMine::AutoAdjustLight (double fLightScale, bool bAll, bool bCopyTexLights) 
{
	int			segnum;
	int			texture_num;
	int			sidenum;
	UINT32		brightness;
	CDSegment	*seg;
	CDSide		*side;

// clear all lighting on marked cubes
theApp.SetModified (TRUE);
theApp.LockUndo ();
if (bAll)
	memset (VertexColors (), 0, sizeof (MineData ().vertexColors));
for (segnum = SegCount (), seg = Segments (); segnum; segnum--, seg++)
	if (bAll || (seg->wall_bitmask & MARKED_MASK))
		for (sidenum=0, side = seg->sides;sidenum < MAX_SIDES_PER_SEGMENT; sidenum++, side++) {
			int i;
			for (i = 0; i < 4; i++) {
				side->uvls [i].l = 0;
				if (!bAll)
					memset (VertexColors (seg->verts [side_vert [sidenum][i]]), 0, sizeof (CDColor));
				}
			}

// Calculate cube side corner light values
// for each marked side in the level
// (range: 0 = min, 0x8000 = max)
for (segnum = 0, seg = Segments (); segnum < SegCount (); segnum++, seg++) {
	for (sidenum = 0, side = seg->sides; sidenum < 6; sidenum++, side++) {
		if (!(bAll || SideIsMarked (segnum, sidenum)))
			continue;
		if ((seg->children [sidenum] >= 0) && !VisibleWall (side->nWall))
			continue;
		if (bCopyTexLights)
			memset (LightColor (segnum, sidenum, false), 0, sizeof (CDColor));
		brightness = 0;
		texture_num = side->nBaseTex;
		if ((texture_num >= 0) && (texture_num < MAX_TEXTURES))
			brightness = max (brightness, LightWeight (texture_num));
		texture_num = side->nOvlTex & 0x3fff;
		if ((texture_num > 0) && (texture_num < MAX_TEXTURES))
			brightness = max (brightness, LightWeight (texture_num));
		if (brightness > 0)
			Illuminate (segnum, sidenum, (UINT32) (brightness * 2 * fLightScale), 1.0, bAll, bCopyTexLights);
		}
	}
theApp.UnlockUndo ();
}
Beispiel #3
0
void Controller::SetTrigger()
{
   stringstream msg;
   msg << "SQX" << carriage_return;

   for (unsigned i=0;i<triggerSequence_.size();i++)
   {
      msg << "SQ" << triggerSequence_[i] << carriage_return;
   }

   triggerMessage_ = msg.str();

   Illuminate();

}
void DrawEntireMenuScreen(void) 
{
	/***** Frankly, I don't care which menu. *****/

	int a;
	
	DrawMenuBackdrop();

	a=0;

	while (CurrentMenuStatus[a]!=-1) 
	{

		if (CurrentMenuStatus[a]!=0) 
			{
				Illuminate(a);
			} 
		else 
			{
				DeIlluminate(a);
			}

		a++;
	}

	UpdateScreen[VideoMode]();
	
	/* KJL 15:52:41 03/20/97 - hack from intro that's ended up here */
	{
	// fade in
	if (WhiteOutLevel==0)
	{
		int fadeLevel = 0;
		do
		{
			ResetFrameCounter();
			FadePaletteToWhite(TestPalette,fadeLevel);
			fadeLevel+=NormalFrameTime*4;
			FrameCounterHandler();
		}
		while(fadeLevel<65536);

		ChangePalette(TestPalette);
		WhiteOutLevel=65536;
	}
   	}

}
void
TerrainPatch::Render(Video* video, DWORD flags)
{
	if (max_height < 0)
	return;

	if (flags & RENDER_ADDITIVE)
	return;

	if (!model)
	model = detail_levels[0];

	if (scene) {
		/***
	*** TWO PASS LIGHTING FOR TERRAIN SHADOWS DOESN'T
	*** WORK - IT MESSES UP THE HARDWARE FOG CALCS
	***
	*** PLUS, IT'S INCREDIBLY SLOW!!!
	***/

		if ((flags & RENDER_ADD_LIGHT) != 0)
		return;

		if (water) {
			UpdateSurfaceWaves(Vec3(0,0,0));
			Illuminate(scene->Ambient(), scene->Lights());
		}
		else {
			Illuminate(scene->Ambient(), scene->Lights());
		}
	}
	else {
		if ((flags & RENDER_ADD_LIGHT) != 0)
		return;
	}

	Bitmap* details[16];
	ZeroMemory(details, sizeof(details));

	if (ndetail < 3) {
		for (int i = 0; i < 16 && i < materials.size(); i++) {
			Material* mtl = materials[i];

			if (mtl->tex_detail) {
				details[i] = mtl->tex_detail;
				mtl->tex_detail = 0;
			}
		}
	}

	double   visibility  = terrain->GetRegion()->GetWeather().Visibility();
	FLOAT    fog_density = (FLOAT) (terrain->GetRegion()->FogDensity() * 2.5e-5 * 1/visibility);

	video->SetRenderState(Video::LIGHTING_ENABLE,   false);
	video->SetRenderState(Video::SPECULAR_ENABLE,   false); //water != 0);
	video->SetRenderState(Video::FOG_ENABLE,        true);
	video->SetRenderState(Video::FOG_COLOR,         terrain->GetRegion()->FogColor().Value());
	video->SetRenderState(Video::FOG_DENSITY,       *((DWORD*) &fog_density));

	// Too bad this doesn't work right.  But it makes the
	// ground mostly disappear. :-(
	//
	//video->SetRenderState(Video::Z_BIAS,            -2);

	Solid::Render(video, flags);

	video->SetRenderState(Video::LIGHTING_ENABLE,   true);
	video->SetRenderState(Video::SPECULAR_ENABLE,   true);
	video->SetRenderState(Video::FOG_ENABLE,        false);
	//video->SetRenderState(Video::Z_BIAS,            0);

	if (ndetail < 3) {
		for (int i = 0; i < 16 && i < materials.size(); i++) {
			Material* mtl = materials[i];

			if (details[i] && !mtl->tex_detail) {
				mtl->tex_detail = details[i];
			}
		}
	}
}