UDWORD getComponentRadius(BASE_STATS *psComponent) { iIMDShape *ComponentIMD = nullptr; iIMDShape *MountIMD = nullptr; SDWORD compID; compID = StatIsComponent(psComponent); if (compID >= 0) { StatGetComponentIMD(psComponent, compID, &ComponentIMD, &MountIMD); if (ComponentIMD) { return GetRadius(ComponentIMD); } } /* VTOL bombs are only stats allowed to have NULL ComponentIMD */ if (StatIsComponent(psComponent) != COMP_WEAPON || (((WEAPON_STATS *)psComponent)->weaponSubClass != WSC_BOMB && ((WEAPON_STATS *)psComponent)->weaponSubClass != WSC_EMP)) { ASSERT(ComponentIMD, "No ComponentIMD!"); } return COMPONENT_RADIUS; }
// 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(); }
// Render a component given a BASE_STATS structure. // void displayComponentButton(BASE_STATS *Stat, const Vector3i *Rotation, const Vector3i *Position, int scale) { iIMDShape *ComponentIMD = nullptr; iIMDShape *MountIMD = nullptr; int compID = StatIsComponent(Stat); if (compID >= 0) { StatGetComponentIMD(Stat, compID, &ComponentIMD, &MountIMD); } else { return; } glm::mat4 matrix = setMatrix(Position, Rotation, scale); /* 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, matrix); /* translate for weapon mount point */ if (MountIMD->nconnectors) { matrix *= glm::translate(glm::vec3(MountIMD->connectors->xzy())); } } if (ComponentIMD) { pie_Draw3DShape(ComponentIMD, 0, getPlayerColour(selectedPlayer), WZCOL_WHITE, pie_BUTTON, 0, matrix); } }