Expand Up
@@ -38,60 +38,59 @@
/* renders the Research IMDs into the surface - used by message display in
Intelligence Map */
void renderResearchToBuffer (RESEARCH * psResearch ,
UDWORD OriginX , UDWORD OriginY )
void renderResearchToBuffer (RESEARCH * psResearch , UDWORD OriginX , UDWORD OriginY )
{
UDWORD angle = 0 ;
BASE_STATS * psResGraphic ;
UDWORD compID , IMDType ;
BASE_STATS * psResGraphic ;
UDWORD compID , IMDType ;
Vector3i Rotation ,Position ;
UDWORD basePlateSize , Radius ;
SDWORD scale = 0 ;
SDWORD scale = 0 ;
// Set identity (present) context
pie_MatBegin ();
pie_SetGeometricOffset (OriginX + 10 ,OriginY + 10 );
pie_SetGeometricOffset (OriginX + 10 , OriginY + 10 );
// Pitch down a bit
//pie_MatRotX(DEG(-30));
// Rotate round
// Rotate round
// full rotation once every 2 seconds..
angle = (gameTime2 % ROTATE_TIME ) * 360 / ROTATE_TIME ;
Position .x = 0 ;
Position .x = 0 ;
Position .y = 0 ;
Position .z = BUTTON_DEPTH ;
// Rotate round
// Rotate round
Rotation .x = -30 ;
Rotation .y = angle ;
Rotation .z = 0 ;
//draw the IMD for the research
if (psResearch -> psStat )
{
//we have a Stat associated with this research topic
if (StatIsStructure (psResearch -> psStat ))
{
//this defines how the button is drawn
//draw the IMD for the research
if (psResearch -> psStat )
{
//we have a Stat associated with this research topic
if (StatIsStructure (psResearch -> psStat ))
{
//this defines how the button is drawn
IMDType = IMDTYPE_STRUCTURESTAT ;
psResGraphic = psResearch -> psStat ;
//set up the scale
psResGraphic = psResearch -> psStat ;
//set up the scale
basePlateSize = getStructureStatSize ((STRUCTURE_STATS * )psResearch -> psStat );
if (basePlateSize == 1 )
{
scale = RESEARCH_COMPONENT_SCALE / 2 ;
/*HACK HACK HACK!
if its a 'tall thin (ie tower)' structure stat with something on
the top - offset the position to show the object on top*/
if (((STRUCTURE_STATS * )psResearch -> psStat )-> pIMD -> nconnectors &&
getStructureStatHeight ((STRUCTURE_STATS * )psResearch -> psStat ) > TOWER_HEIGHT )
{
Position .y -= 30 ;
}
/*HACK HACK HACK!
if its a 'tall thin (ie tower)' structure stat with something on
the top - offset the position to show the object on top*/
if (((STRUCTURE_STATS * )psResearch -> psStat )-> pIMD -> nconnectors &&
getStructureStatHeight ((STRUCTURE_STATS * )psResearch -> psStat ) > TOWER_HEIGHT )
{
Position .y -= 30 ;
}
}
else if (basePlateSize == 2 )
{
Expand All
@@ -101,36 +100,44 @@ void renderResearchToBuffer(RESEARCH *psResearch,
{
scale = RESEARCH_COMPONENT_SCALE / 5 ;
}
}
else
{
compID = StatIsComponent (psResearch -> psStat );
}
else
{
compID = StatIsComponent (psResearch -> psStat );
if (compID != COMP_UNKNOWN )
{
//this defines how the button is drawn
IMDType = IMDTYPE_COMPONENT ;
psResGraphic = psResearch -> psStat ;
scale = RESEARCH_COMPONENT_SCALE ;
}
else
{
ASSERT ( false, "intDisplayMessageButton: invalid stat" );
IMDType = IMDTYPE_RESEARCH ;
psResGraphic = (BASE_STATS * )psResearch ;
}
}
}
else
{
//no Stat for this research topic so use the research topic to define what is drawn
psResGraphic = (BASE_STATS * )psResearch ;
IMDType = IMDTYPE_RESEARCH ;
}
//scale the research according to size of IMD
if (IMDType == IMDTYPE_RESEARCH )
{
Radius = getResearchRadius ((BASE_STATS * )psResGraphic );
//this defines how the button is drawn
IMDType = IMDTYPE_COMPONENT ;
psResGraphic = psResearch -> psStat ;
// NOTE: Another kludge to deal with the superTransport to make it "fit" the display.
if (!strcmp ("MP-SuperTransport" , psResearch -> pName ))
{
scale = RESEARCH_COMPONENT_SCALE / 3 ;
}
else
{
scale = RESEARCH_COMPONENT_SCALE ;
}
}
else
{
ASSERT ( false, "intDisplayMessageButton: invalid stat" );
IMDType = IMDTYPE_RESEARCH ;
psResGraphic = (BASE_STATS * )psResearch ;
}
}
}
else
{
//no Stat for this research topic so use the research topic to define what is drawn
psResGraphic = (BASE_STATS * )psResearch ;
IMDType = IMDTYPE_RESEARCH ;
}
//scale the research according to size of IMD
if (IMDType == IMDTYPE_RESEARCH )
{
Radius = getResearchRadius ((BASE_STATS * )psResGraphic );
if (Radius <= 100 )
{
scale = RESEARCH_COMPONENT_SCALE / 2 ;
Expand All
@@ -147,18 +154,24 @@ void renderResearchToBuffer(RESEARCH *psResearch,
{
scale = RESEARCH_COMPONENT_SCALE / 5 ;
}
}
}
/* display the IMDs */
if (IMDType == IMDTYPE_COMPONENT ) {
displayComponentButton (psResGraphic ,& Rotation ,& Position ,true, scale );
} else if (IMDType == IMDTYPE_RESEARCH ) {
displayResearchButton (psResGraphic ,& Rotation ,& Position ,true, scale );
} else if (IMDType == IMDTYPE_STRUCTURESTAT ) {
if (IMDType == IMDTYPE_COMPONENT )
{
displayComponentButton (psResGraphic , & Rotation , & Position , true, scale );
}
else if (IMDType == IMDTYPE_RESEARCH )
{
displayResearchButton (psResGraphic , & Rotation , & Position , true, scale );
}
else if (IMDType == IMDTYPE_STRUCTURESTAT )
{
displayStructureStatButton ((STRUCTURE_STATS * )psResGraphic , & Rotation , & Position , true, scale );
} else {
ASSERT ( false, "renderResearchToBuffer: Unknown PIEType" );
}
else
{
ASSERT ( false, "Unknown PIEType" );
}
// close matrix context
Expand Down