/** * Average two colors together according to the given weight. This simply * averages each channel of the RGB color according to the given weight. */ static Color_t averageColors(Color_t a, Color_t b, float weight) { Color_t avg; avg.red = weightedAverage(a.red, b.red, weight); avg.green = weightedAverage(a.green, b.green, weight); avg.blue = weightedAverage(a.blue, b.blue, weight); return avg; }
dimensioned<Type> DimensionedField<Type, GeoMesh>::weightedAverage ( const tmp<DimensionedField<scalar, GeoMesh> >& tweightField ) const { dimensioned<Type> wa = weightedAverage(tweightField()); tweightField.clear(); return wa; }
void StatusWindow::updateHPBar(ProgressBar *bar, bool showMax) { if (showMax) bar->setText(toString(player_node->getHp()) + "/" + toString(player_node->getMaxHp())); else bar->setText(toString(player_node->getHp())); // HP Bar coloration float r1 = 255; float g1 = 255; float b1 = 255; float r2 = 255; float g2 = 255; float b2 = 255; float weight = 1.0f; int curHP = player_node->getHp(); int thresholdLevel = player_node->getMaxHp() / 4; int thresholdProgress = curHP % thresholdLevel; weight = 1-((float)thresholdProgress) / ((float)thresholdLevel); if (curHP < (thresholdLevel)) { gcn::Color color1 = guiPalette->getColor(Palette::HPBAR_ONE_HALF); gcn::Color color2 = guiPalette->getColor(Palette::HPBAR_ONE_QUARTER); r1 = color1.r; r2 = color2.r; g1 = color1.g; g2 = color2.g; b1 = color1.b; b2 = color2.b; } else if (curHP < (thresholdLevel*2)) { gcn::Color color1 = guiPalette->getColor(Palette::HPBAR_THREE_QUARTERS); gcn::Color color2 = guiPalette->getColor(Palette::HPBAR_ONE_HALF); r1 = color1.r; r2 = color2.r; g1 = color1.g; g2 = color2.g; b1 = color1.b; b2 = color2.b; } else if (curHP < thresholdLevel*3) { gcn::Color color1 = guiPalette->getColor(Palette::HPBAR_FULL); gcn::Color color2 = guiPalette->getColor(Palette::HPBAR_THREE_QUARTERS); r1 = color1.r; r2 = color2.r; g1 = color1.g; g2 = color2.g; b1 = color1.b; b2 = color2.b; } else { gcn::Color color1 = guiPalette->getColor(Palette::HPBAR_FULL); gcn::Color color2 = guiPalette->getColor(Palette::HPBAR_FULL); r1 = color1.r; r2 = color2.r; g1 = color1.g; g2 = color2.g; b1 = color1.b; b2 = color2.b; } // Safety checks if (weight > 1.0f) weight = 1.0f; if (weight < 0.0f) weight = 0.0f; // Do the color blend r1 = (int) weightedAverage(r1, r2,weight); g1 = (int) weightedAverage(g1, g2, weight); b1 = (int) weightedAverage(b1, b2, weight); // More safety checks if (r1 > 255) r1 = 255; if (g1 > 255) g1 = 255; if (b1 > 255) b1 = 255; bar->setColor(r1, g1, b1); bar->setProgress((float) player_node->getHp() / (float) player_node->getMaxHp()); }