void Player::draw(Game* game) { Triangle(pos, 30.0).rotated(rad + HalfPi).draw(Color(150, 150, 255, 122)).drawFrame(); shotManager->draw(game); Circle(pos, 1.0).draw(Color(255, 100, 100, 122)); //Circle(pos, 30.0).drawArc(0.0, TwoPi * (static_cast<double>(shield) / SHIELD_MAX), 0.0, 2.0, Color(200, 200, 255, 122)); //Circle(pos, 25.0).drawArc(0.0, TwoPi * (static_cast<double>(hp) / HP_MAX), 0.0, 2.0, Color(255, 150, 150, 122)); int i = 0; Vec2 beforePos = pos; for (auto trackPos : tracks) { Line(beforePos, trackPos).draw(1.0, HSV(Color(150, 150, 255)).toColorF(1.0 - (1.0 / tracks.size()) * i)); i++; beforePos = trackPos; } }
// 毎フレーム updateAndDraw() で呼ばれる void Rule::update() { Graphics::SetBackground(HSV(System::FrameCount(),0.6,0.9)); for (int i = 0; i < 40; i++){ switch (i % 4){ case 0: cir[i].rightmove(); break; case 1: cir[i].leftmove(); break; case 2: cir[i].sinmove(); break; case 3: cir[i].sinmove2(); break; default: break; } cir[i].update(); if (cir[i].getE())click.drawCenter(L"click", { cir[i].getX(), cir[i].getY() }, Palette::White); } button_m.update(); if (button_m.isClicked()){ SoundAsset(bgm_m).stop(); changeScene(L"Start"); } static int frameCounter = 0; if(frameCounter >= 60 * 90) { frameCounter = 0; SoundAsset(bgm_m).pause(1000); changeScene(L"Start", 1000); return; } else { ++frameCounter; } }
static void applyLedIndicatorLayer(bool updateNow, uint32_t *timer) { static bool flash = 0; if (updateNow) { if (rxIsReceivingSignal()) { // calculate update frequency int scale = MAX(ABS(rcCommand[ROLL]), ABS(rcCommand[PITCH])); // 0 - 500 scale += (50 - INDICATOR_DEADBAND); // start increasing frequency right after deadband *timer += LED_STRIP_HZ(5) * 50 / MAX(50, scale); // 5 - 50Hz update, 2.5 - 25Hz blink flash = !flash; } else { *timer += LED_STRIP_HZ(5); // try again soon } } if (!flash) return; const hsvColor_t *flashColor = &HSV(ORANGE); // TODO - use user color? quadrant_e quadrants = 0; if (rcCommand[ROLL] > INDICATOR_DEADBAND) { quadrants |= QUADRANT_NORTH_EAST | QUADRANT_SOUTH_EAST; } else if (rcCommand[ROLL] < -INDICATOR_DEADBAND) { quadrants |= QUADRANT_NORTH_WEST | QUADRANT_SOUTH_WEST; } if (rcCommand[PITCH] > INDICATOR_DEADBAND) { quadrants |= QUADRANT_NORTH_EAST | QUADRANT_NORTH_WEST; } else if (rcCommand[PITCH] < -INDICATOR_DEADBAND) { quadrants |= QUADRANT_SOUTH_EAST | QUADRANT_SOUTH_WEST; } for (int ledIndex = 0; ledIndex < ledCounts.count; ledIndex++) { const ledConfig_t *ledConfig = &masterConfig.ledConfigs[ledIndex]; if (ledGetOverlayBit(ledConfig, LED_OVERLAY_INDICATOR)) { if (getLedQuadrant(ledIndex) & quadrants) setLedHsv(ledIndex, flashColor); } } }
static void applyLedWarningLayer(bool updateNow, uint32_t *timer) { static uint8_t warningFlashCounter = 0; static uint8_t warningFlags = 0; // non-zero during blinks if (updateNow) { // keep counter running, so it stays in sync with blink warningFlashCounter++; warningFlashCounter &= 0xF; if (warningFlashCounter == 0) { // update when old flags was processed warningFlags = 0; if (feature(FEATURE_VBAT) && getBatteryState() != BATTERY_OK) warningFlags |= 1 << WARNING_LOW_BATTERY; if (feature(FEATURE_FAILSAFE) && failsafeIsActive()) warningFlags |= 1 << WARNING_FAILSAFE; if (!ARMING_FLAG(ARMED) && !ARMING_FLAG(OK_TO_ARM)) warningFlags |= 1 << WARNING_ARMING_DISABLED; } *timer += LED_STRIP_HZ(10); } if (warningFlags) { const hsvColor_t *warningColor = NULL; bool colorOn = (warningFlashCounter % 2) == 0; // w_w_ warningFlags_e warningId = warningFlashCounter / 4; if (warningFlags & (1 << warningId)) { switch (warningId) { case WARNING_ARMING_DISABLED: warningColor = colorOn ? &HSV(GREEN) : &HSV(BLACK); break; case WARNING_LOW_BATTERY: warningColor = colorOn ? &HSV(RED) : &HSV(BLACK); break; case WARNING_FAILSAFE: warningColor = colorOn ? &HSV(YELLOW) : &HSV(BLUE); break; default:; } } if (warningColor) applyLedHsv(LED_MOV_OVERLAY(LED_FLAG_OVERLAY(LED_OVERLAY_WARNING)), warningColor); } }
HSV invertBrightness(const HSV &hsv) { return HSV(hsv.h(), hsv.s(), (1.0-hsv.v()), hsv.a()); }
HSV fade(const HSV &hsv, double amount) { double s = clip(hsv.s() - hsv.s()*amount); return HSV(hsv.h(), s, hsv.v(), hsv.a()); }
HSV lighten(const HSV &hsv, double amount) { double v = clip((1.0 - hsv.v())*amount + hsv.v()); return HSV(hsv.h(), hsv.s(), v, hsv.a()); }
HSV darken(const HSV &hsv, double amount) { double v = clip(hsv.v() - hsv.v()*amount); return HSV(hsv.h(), hsv.s(), v, hsv.a()); }
static std::shared_ptr<GUIColorPalette> Create(const HSV& color = HSV(30.0, 0.9, 0.9), bool enabled = true, const WidgetStyle& style = WidgetStyle()) { return std::make_shared<GUIColorPalette>(color, 240, 160, 15, 20, enabled, style); }
Color Indexed(int i, double s, double v) noexcept { double x = i * 1.61803398874989484820; return HSV(x - int(x), s, v); }
bool ScoreEffect::update(double sec) { FontAsset(L"middleLog").drawCenter(Format(score), pos, HSV(Palette::Lightgreen).toColorF(1.0 - sec)); return sec < 1.0; }
static void applyLedVtxLayer(bool updateNow, timeUs_t *timer) { static uint16_t frequency = 0; static uint8_t power = 255; static uint8_t pit = 255; static uint8_t showSettings = false; static uint16_t lastCheck = 0; static bool blink = false; const vtxDevice_t *vtxDevice = vtxCommonDevice(); if (!vtxDevice) { return; } uint8_t band = 255, channel = 255; uint16_t check = 0; if (updateNow) { // keep counter running, so it stays in sync with vtx vtxCommonGetBandAndChannel(vtxDevice, &band, &channel); vtxCommonGetPowerIndex(vtxDevice, &power); vtxCommonGetPitMode(vtxDevice, &pit); frequency = vtx58frequencyTable[band - 1][channel - 1]; //subtracting 1 from band and channel so that correct frequency is returned. //might not be correct for tramp but should fix smart audio. // check if last vtx values have changed. check = pit + (power << 1) + (band << 4) + (channel << 8); if (!showSettings && check != lastCheck) { // display settings for 3 seconds. showSettings = 15; } lastCheck = check; // quick way to check if any settings changed. if (showSettings) { showSettings--; } blink = !blink; *timer += HZ_TO_US(5); // check 5 times a second } hsvColor_t color = {0, 0, 0}; if (showSettings) { // show settings uint8_t vtxLedCount = 0; for (int i = 0; i < ledCounts.count && vtxLedCount < 6; ++i) { const ledConfig_t *ledConfig = &ledStripConfig()->ledConfigs[i]; if (ledGetOverlayBit(ledConfig, LED_OVERLAY_VTX)) { if (vtxLedCount == 0) { color.h = HSV(GREEN).h; color.s = HSV(GREEN).s; color.v = blink ? 15 : 0; // blink received settings } else if (vtxLedCount > 0 && power >= vtxLedCount && !pit) { // show power color.h = HSV(ORANGE).h; color.s = HSV(ORANGE).s; color.v = blink ? 15 : 0; // blink received settings } else { // turn rest off color.h = HSV(BLACK).h; color.s = HSV(BLACK).s; color.v = HSV(BLACK).v; } setLedHsv(i, &color); ++vtxLedCount; } } } else { // show frequency // calculate the VTX color based on frequency int colorIndex = 0; if (frequency <= 5672) { colorIndex = COLOR_WHITE; } else if (frequency <= 5711) { colorIndex = COLOR_RED; } else if (frequency <= 5750) { colorIndex = COLOR_ORANGE; } else if (frequency <= 5789) { colorIndex = COLOR_YELLOW; } else if (frequency <= 5829) { colorIndex = COLOR_GREEN; } else if (frequency <= 5867) { colorIndex = COLOR_BLUE; } else if (frequency <= 5906) { colorIndex = COLOR_DARK_VIOLET; } else { colorIndex = COLOR_DEEP_PINK; } hsvColor_t color = ledStripConfig()->colors[colorIndex]; color.v = pit ? (blink ? 15 : 0) : 255; // blink when in pit mode applyLedHsv(LED_MOV_OVERLAY(LED_FLAG_OVERLAY(LED_OVERLAY_VTX)), &color); } }
static void applyLedFixedLayers(void) { for (int ledIndex = 0; ledIndex < ledCounts.count; ledIndex++) { const ledConfig_t *ledConfig = &ledStripConfig()->ledConfigs[ledIndex]; hsvColor_t color = *getSC(LED_SCOLOR_BACKGROUND); int fn = ledGetFunction(ledConfig); int hOffset = HSV_HUE_MAX + 1; switch (fn) { case LED_FUNCTION_COLOR: color = ledStripConfig()->colors[ledGetColor(ledConfig)]; hsvColor_t nextColor = ledStripConfig()->colors[(ledGetColor(ledConfig) + 1 + LED_CONFIGURABLE_COLOR_COUNT) % LED_CONFIGURABLE_COLOR_COUNT]; hsvColor_t previousColor = ledStripConfig()->colors[(ledGetColor(ledConfig) - 1 + LED_CONFIGURABLE_COLOR_COUNT) % LED_CONFIGURABLE_COLOR_COUNT]; if (ledGetOverlayBit(ledConfig, LED_OVERLAY_THROTTLE)) { //smooth fade with selected Aux channel of all HSV values from previousColor through color to nextColor int centerPWM = (PWM_RANGE_MIN + PWM_RANGE_MAX) / 2; if (auxInput < centerPWM) { color.h = scaleRange(auxInput, PWM_RANGE_MIN, centerPWM, previousColor.h, color.h); color.s = scaleRange(auxInput, PWM_RANGE_MIN, centerPWM, previousColor.s, color.s); color.v = scaleRange(auxInput, PWM_RANGE_MIN, centerPWM, previousColor.v, color.v); } else { color.h = scaleRange(auxInput, centerPWM, PWM_RANGE_MAX, color.h, nextColor.h); color.s = scaleRange(auxInput, centerPWM, PWM_RANGE_MAX, color.s, nextColor.s); color.v = scaleRange(auxInput, centerPWM, PWM_RANGE_MAX, color.v, nextColor.v); } } break; case LED_FUNCTION_FLIGHT_MODE: for (unsigned i = 0; i < ARRAYLEN(flightModeToLed); i++) if (!flightModeToLed[i].flightMode || FLIGHT_MODE(flightModeToLed[i].flightMode)) { const hsvColor_t *directionalColor = getDirectionalModeColor(ledIndex, &ledStripConfig()->modeColors[flightModeToLed[i].ledMode]); if (directionalColor) { color = *directionalColor; } break; // stop on first match } break; case LED_FUNCTION_ARM_STATE: color = ARMING_FLAG(ARMED) ? *getSC(LED_SCOLOR_ARMED) : *getSC(LED_SCOLOR_DISARMED); break; case LED_FUNCTION_BATTERY: color = HSV(RED); hOffset += scaleRange(calculateBatteryPercentageRemaining(), 0, 100, -30, 120); break; case LED_FUNCTION_RSSI: color = HSV(RED); hOffset += scaleRange(getRssi() * 100, 0, 1023, -30, 120); break; default: break; } if ((fn != LED_FUNCTION_COLOR) && ledGetOverlayBit(ledConfig, LED_OVERLAY_THROTTLE)) { hOffset += scaleRange(auxInput, PWM_RANGE_MIN, PWM_RANGE_MAX, 0, HSV_HUE_MAX + 1); } color.h = (color.h + hOffset) % (HSV_HUE_MAX + 1); setLedHsv(ledIndex, &color); } }
void TwitterButton::drawPressed(RoundRect shape, String const &text, int frame)const { shape.moveBy(0.0, 2.0).draw(HSV(0, 0.0, 0.75)); //FontAsset(FONT_ASSET_NAME).drawCenter(text, shape.rect.center, Palette::Black); TextureAsset(L"twitterIcon").scale(0.07).drawAt(shape.rect.center); }
void GACHAPON::blur(){ float hue = 210; float ghue = 90; float firstHue = (hue + ghue) > 360 ? (hue + ghue) - 360 : (hue + ghue); float secondHue = (hue + ghue * 2) > 360 ? (hue + ghue * 2) - 360 : (hue + ghue * 2); float thirdHue = (hue + ghue * 3) > 360 ? (hue + ghue * 3) - 360 : (hue + ghue * 3); float fourthHue = (hue + ghue * 4) > 360 ? (hue + ghue * 4) - 360 : (hue + ghue * 4); const int b = 230; //初期化 for (int i = 0; i < LED_NUM; i++){ front->setPixelColor(i, HSV(hue, 100, 15)); fRight->setPixelColor(i, HSV(hue, 100, 15)); fLeft->setPixelColor(i, HSV(hue, 100, 15)); bRight->setPixelColor(i, HSV(hue, 100, 15)); bLeft->setPixelColor(i, HSV(hue, 100, 15)); front->setBrightness(b); fRight->setBrightness(b); fLeft->setBrightness(b); bRight->setBrightness(b); bLeft->setBrightness(b); front->show(); fRight->show(); fLeft->show(); bRight->show(); bLeft->show(); } for (int i = 0; i < 150; i++){ front->setPixelColor(random(LED_NUM), HSV(firstHue, 100, 15)); fRight->setPixelColor(random(LED_NUM), HSV(firstHue, 100, 15)); fLeft->setPixelColor(random(LED_NUM), HSV(firstHue, 100, 15)); bRight->setPixelColor(random(LED_NUM), HSV(firstHue, 100, 15)); bLeft->setPixelColor(random(LED_NUM), HSV(firstHue, 100, 15)); front->setBrightness(b); fRight->setBrightness(b); fLeft->setBrightness(b); bRight->setBrightness(b); bLeft->setBrightness(b); front->show(); fRight->show(); fLeft->show(); bRight->show(); bLeft->show(); } for (int i = 0; i < 150; i++){ front->setPixelColor(random(LED_NUM), HSV(secondHue, 100, 15)); fRight->setPixelColor(random(LED_NUM), HSV(secondHue, 100, 15)); fLeft->setPixelColor(random(LED_NUM), HSV(secondHue, 100, 15)); bRight->setPixelColor(random(LED_NUM), HSV(secondHue, 100, 15)); bLeft->setPixelColor(random(LED_NUM), HSV(secondHue, 100, 15)); front->setBrightness(b); fRight->setBrightness(b); fLeft->setBrightness(b); bRight->setBrightness(b); bLeft->setBrightness(b); front->show(); fRight->show(); fLeft->show(); bRight->show(); bLeft->show(); } for (int i = 0; i < 150; i++){ front->setPixelColor(random(LED_NUM), HSV(thirdHue, 100, 15)); fRight->setPixelColor(random(LED_NUM), HSV(thirdHue, 100, 15)); fLeft->setPixelColor(random(LED_NUM), HSV(thirdHue, 100, 15)); bRight->setPixelColor(random(LED_NUM), HSV(thirdHue, 100, 15)); bLeft->setPixelColor(random(LED_NUM), HSV(thirdHue, 100, 15)); front->setBrightness(b); fRight->setBrightness(b); fLeft->setBrightness(b); bRight->setBrightness(b); bLeft->setBrightness(b); front->show(); fRight->show(); fLeft->show(); bRight->show(); bLeft->show(); delay(1); } delay(500); GradOff(); AllOff(); front->show(); fRight->show(); fLeft->show(); bRight->show(); bLeft->show(); }
void GACHAPON::normalB(){ static unsigned int count = 0; const int MAX_VAL = 4; static float val = 3, gval = 0.1; static int hue = 40; for (int i = 0; i < LED_NUM; i++){ if (i % 2 == 0){ front->setPixelColor(i, HSV(hue, 100, val + 2)); fRight->setPixelColor(i, HSV(hue, 100, val + 2)); fLeft->setPixelColor(i, HSV(hue, 100, val + 2)); bRight->setPixelColor(i, HSV(hue, 100, val + 2)); bLeft->setPixelColor(i, HSV(hue, 100, val + 2)); } else if (i % 3 == 0){ front->setPixelColor(i, HSV((hue + 90) % 360, 100, val + 4)); fRight->setPixelColor(i, HSV((hue + 90) % 360, 100, val + 4)); fLeft->setPixelColor(i, HSV((hue + 90) % 360, 100, val + 4)); bRight->setPixelColor(i, HSV((hue + 90) % 360, 100, val + 4)); bLeft->setPixelColor(i, HSV((hue + 90) % 360, 100, val + 4)); } else if (i % 5 == 0){ front->setPixelColor(i, HSV((hue + 180) % 360, 100, val + 6)); fRight->setPixelColor(i, HSV((hue + 180) % 360, 100, val + 6)); fLeft->setPixelColor(i, HSV((hue + 180) % 360, 100, val + 6)); bRight->setPixelColor(i, HSV((hue + 180) % 360, 100, val + 6)); bLeft->setPixelColor(i, HSV((hue + 180) % 360, 100, val + 6)); } else{ front->setPixelColor(i, HSV((hue + 270) % 360, 100, val)); fRight->setPixelColor(i, HSV((hue + 270) % 360, 100, val)); fLeft->setPixelColor(i, HSV((hue + 270) % 360, 100, val)); bRight->setPixelColor(i, HSV((hue + 270) % 360, 100, val)); bLeft->setPixelColor(i, HSV((hue + 270) % 360, 100, val)); } } val += gval; if (val >= MAX_VAL){ gval *= -1; } else if (val <= 0){ gval *= -1; } hue += 4; if (hue >= 360){ hue = 0; } front->show(); fRight->show(); fLeft->show(); bRight->show(); bLeft->show(); }
bool CrashEffect::update(double sec) { for (auto& particle : particles) { particle.rad += Radians(3.0); particle.pos += particle.vec * sec;//TODO:easing RectF(30.0 * (1.0 - sec)).setCenter(particle.pos.asPoint()).rotated(particle.rad).draw(HSV(Palette::White).toColorF(1.0 - sec)); } return sec < 1.0; }