// Render a composite droid given a DROID_TEMPLATE structure. // void displayComponentButtonTemplate(DROID_TEMPLATE *psTemplate, Vector3i *Rotation, Vector3i *Position, BOOL RotXYZ, SDWORD scale) { static DROID Droid; // Made static to reduce stack usage. SDWORD difference; /* init to NULL */ memset( &Droid, 0, sizeof(DROID) ); setMatrix(Position, Rotation, RotXYZ); pie_MatScale(scale / 100.f); // Decide how to sort it. difference = Rotation->y%360; if((difference>0 && difference <180) || difference<-180) { leftFirst = false; } else { leftFirst = true; } droidSetBits(psTemplate,&Droid); Droid.player = (UBYTE)selectedPlayer; Droid.pos.x = Droid.pos.y = Droid.pos.z = 0; //draw multi component object as a button object displayCompObj(&Droid, true); unsetMatrix(); }
// Render a component given a BASE_STATS structure. // void displayComponentButton(BASE_STATS *Stat, Vector3i *Rotation, Vector3i *Position, bool RotXYZ, SDWORD scale) { iIMDShape *ComponentIMD = NULL; iIMDShape *MountIMD = NULL; SDWORD compID; setMatrix(Position, Rotation, RotXYZ); pie_MatScale(scale / 100.f); compID = StatIsComponent(Stat); if (compID > 0) { StatGetComponentIMD(Stat, compID,&ComponentIMD, &MountIMD); } else { unsetMatrix(); return; } /* VTOL bombs are only stats allowed to have NULL ComponentIMD */ if (StatIsComponent(Stat) != COMP_WEAPON || (((WEAPON_STATS *)Stat)->weaponSubClass != WSC_BOMB && ((WEAPON_STATS *)Stat)->weaponSubClass != WSC_EMP)) { ASSERT(ComponentIMD, "No ComponentIMD"); } if (MountIMD) { pie_Draw3DShape(MountIMD, 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); /* translate for weapon mount point */ if (MountIMD->nconnectors) { pie_TRANSLATE(MountIMD->connectors->x, MountIMD->connectors->z, MountIMD->connectors->y); } } if (ComponentIMD) { pie_Draw3DShape(ComponentIMD, 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); } unsetMatrix(); }
void displayIMDButton(iIMDShape *IMDShape, Vector3i *Rotation, Vector3i *Position, bool RotXYZ, SDWORD scale) { setMatrix(Position, Rotation, RotXYZ); pie_MatScale(scale / 100.f); pie_SetFogStatus(false); pie_Draw3DShape(IMDShape, 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); unsetMatrix(); }
// Render a composite droid given a DROID structure. // void displayComponentButtonObject(DROID *psDroid, const Vector3i *Rotation, const Vector3i *Position, int scale) { SDWORD difference; setMatrix(Position, Rotation, scale); // Decide how to sort it. difference = Rotation->y % 360; leftFirst = !((difference > 0 && difference < 180) || difference < -180); // And render the composite object. //draw multi component object as a button object displayCompObj(psDroid, true); unsetMatrix(); }
// Render a research item given a BASE_STATS structure. // void displayResearchButton(BASE_STATS *Stat, Vector3i *Rotation, Vector3i *Position, bool RotXYZ, SDWORD scale) { iIMDShape *ResearchIMD = ((RESEARCH *)Stat)->pIMD; iIMDShape *MountIMD = ((RESEARCH *)Stat)->pIMD2; ASSERT(ResearchIMD, "ResearchIMD is NULL"); if (ResearchIMD) { setMatrix(Position, Rotation, RotXYZ, scale); if(MountIMD) { pie_Draw3DShape(MountIMD, 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); } pie_Draw3DShape(ResearchIMD, 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); unsetMatrix(); } }
// Render a composite droid given a DROID_TEMPLATE structure. // void displayComponentButtonTemplate(DROID_TEMPLATE *psTemplate, const Vector3i *Rotation, const Vector3i *Position, int scale) { setMatrix(Position, Rotation, scale); // Decide how to sort it. leftFirst = angleDelta(DEG(Rotation->y)) < 0; DROID Droid(0, selectedPlayer); memset(Droid.asBits, 0, sizeof(Droid.asBits)); droidSetBits(psTemplate, &Droid); Droid.pos = Vector3i(0, 0, 0); Droid.rot = Vector3i(0, 0, 0); //draw multi component object as a button object displayCompObj(&Droid, true); unsetMatrix(); }
// Render a research item given a BASE_STATS structure. // void displayResearchButton(BASE_STATS *Stat, Vector3i *Rotation, Vector3i *Position, bool RotXYZ, SDWORD scale) { iIMDShape *ResearchIMD = ((RESEARCH *)Stat)->pIMD; iIMDShape *MountIMD = ((RESEARCH *)Stat)->pIMD2; if(ResearchIMD) { setMatrix(Position, Rotation, RotXYZ); pie_MatScale(scale / 100.f); if(MountIMD) { pie_Draw3DShape(MountIMD, 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); } pie_Draw3DShape(ResearchIMD, 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); unsetMatrix(); } else { debug(LOG_ERROR, "ResearchIMD == NULL"); } }
static void sharedStructureButton(STRUCTURE_STATS *Stats, iIMDShape *strImd, const Vector3i *Rotation, const Vector3i *Position, int scale) { iIMDShape *baseImd, *mountImd[STRUCT_MAXWEAPS], *weaponImd[STRUCT_MAXWEAPS]; Vector3i pos = *Position; /* 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 (strImd->nconnectors && scale == SMALL_STRUCT_SCALE && getStructureStatHeight(Stats) > TOWER_HEIGHT) { pos.y -= 20; } setMatrix(&pos, Rotation, scale); /* Draw the building's base first */ baseImd = Stats->pBaseIMD; if (baseImd != NULL) { pie_Draw3DShape(baseImd, 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); } pie_Draw3DShape(strImd, 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); //and draw the turret if (strImd->nconnectors) { weaponImd[0] = NULL; mountImd[0] = NULL; for (int i = 0; i < Stats->numWeaps; i++) { weaponImd[i] = NULL;//weapon is gun ecm or sensor mountImd[i] = NULL; } //get an imd to draw on the connector priority is weapon, ECM, sensor //check for weapon //can only have the STRUCT_MAXWEAPS for (int i = 0; i < MAX(1, Stats->numWeaps); i++) { //can only have the one if (Stats->psWeapStat[i] != NULL) { weaponImd[i] = Stats->psWeapStat[i]->pIMD; mountImd[i] = Stats->psWeapStat[i]->pMountGraphic; } if (weaponImd[i] == NULL) { //check for ECM if (Stats->pECM != NULL) { weaponImd[i] = Stats->pECM->pIMD; mountImd[i] = Stats->pECM->pMountGraphic; } } if (weaponImd[i] == NULL) { //check for sensor if (Stats->pSensor != NULL) { weaponImd[i] = Stats->pSensor->pIMD; mountImd[i] = Stats->pSensor->pMountGraphic; } } } //draw Weapon/ECM/Sensor for structure if (weaponImd[0] != NULL) { for (int i = 0; i < MAX(1, Stats->numWeaps); i++) { pie_MatBegin(); pie_TRANSLATE(strImd->connectors[i].x, strImd->connectors[i].z, strImd->connectors[i].y); if (mountImd[i] != NULL) { pie_Draw3DShape(mountImd[i], 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); if (mountImd[i]->nconnectors) { pie_TRANSLATE(mountImd[i]->connectors->x, mountImd[i]->connectors->z, mountImd[i]->connectors->y); } } pie_Draw3DShape(weaponImd[i], 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); //we have a droid weapon so do we draw a muzzle flash pie_MatEnd(); } } } unsetMatrix(); }
void displayIMDButton(iIMDShape *IMDShape, const Vector3i *Rotation, const Vector3i *Position, int scale) { setMatrix(Position, Rotation, scale); pie_Draw3DShape(IMDShape, 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); unsetMatrix(); }
//changed it to loop thru and draw all weapons void displayStructureButton(STRUCTURE *psStructure, Vector3i *rotation, Vector3i *Position, bool RotXYZ, SDWORD scale) { iIMDShape *baseImd,*strImd;//*mountImd,*weaponImd; iIMDShape *mountImd[STRUCT_MAXWEAPS]; iIMDShape *weaponImd[STRUCT_MAXWEAPS]; UDWORD nWeaponStat; int i; /*HACK HACK HACK! if its a 'tall thin (ie tower)' structure with something on the top - offset the position to show the object on top*/ if (psStructure->pStructureType->pIMD[0]->nconnectors && scale == SMALL_STRUCT_SCALE && getStructureHeight(psStructure) > TOWER_HEIGHT) { Position->y -= 20; } setMatrix(Position, rotation, RotXYZ); pie_MatScale(scale / 100.f); /* Draw the building's base first */ baseImd = psStructure->pStructureType->pBaseIMD; if(baseImd!=NULL) { pie_Draw3DShape(baseImd, 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); } pie_Draw3DShape(psStructure->sDisplay.imd, 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); //and draw the turret if(psStructure->sDisplay.imd->nconnectors) { for (i = 0;i < STRUCT_MAXWEAPS;i++) { weaponImd[i] = NULL;//weapon is gun ecm or sensor mountImd[i] = NULL; } strImd = psStructure->sDisplay.imd; //get an imd to draw on the connector priority is weapon, ECM, sensor //check for weapon for (i = 0; i < MAX(1, psStructure->numWeaps); i++) { if (psStructure->asWeaps[i].nStat > 0) { nWeaponStat = psStructure->asWeaps[i].nStat; weaponImd[i] = asWeaponStats[nWeaponStat].pIMD; mountImd[i] = asWeaponStats[nWeaponStat].pMountGraphic; } if (weaponImd[i] == NULL) { //check for ECM if (psStructure->pStructureType->pECM != NULL) { weaponImd[i] = psStructure->pStructureType->pECM->pIMD; mountImd[i] = psStructure->pStructureType->pECM->pMountGraphic; } } if (weaponImd[i] == NULL) { //check for sensor if (psStructure->pStructureType->pSensor != NULL) { weaponImd[i] = psStructure->pStructureType->pSensor->pIMD; mountImd[i] = psStructure->pStructureType->pSensor->pMountGraphic; } } } //draw Weapon/ECM/Sensor for structure //uses 0 if (weaponImd[0] != NULL) { for (i = 0; i < MAX(1, psStructure->numWeaps); i++) { Rotation rot = structureGetInterpolatedWeaponRotation(psStructure, i, graphicsTime); pie_MatBegin(); pie_TRANSLATE(strImd->connectors[i].x,strImd->connectors[i].z,strImd->connectors[i].y); pie_MatRotY(-rot.direction); if (mountImd[i] != NULL) { pie_Draw3DShape(mountImd[i], 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); if(mountImd[i]->nconnectors) { pie_TRANSLATE(mountImd[i]->connectors->x,mountImd[i]->connectors->z,mountImd[i]->connectors->y); } } pie_MatRotX(rot.pitch); pie_Draw3DShape(weaponImd[i], 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0); //we have a droid weapon so do we draw a muzzle flash pie_MatEnd(); } } } unsetMatrix(); }