예제 #1
0
파일: Player.cpp 프로젝트: yashihei/Alone
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;
	}
}
예제 #2
0
// 毎フレーム 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;
	}
}
예제 #3
0
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);
        }
    }
}
예제 #4
0
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);
    }
}
예제 #5
0
HSV invertBrightness(const HSV &hsv) {
    return HSV(hsv.h(), hsv.s(), (1.0-hsv.v()), hsv.a());
}
예제 #6
0
HSV fade(const HSV &hsv, double amount) {
    double s = clip(hsv.s() - hsv.s()*amount);
    return HSV(hsv.h(), s, hsv.v(), hsv.a());
}
예제 #7
0
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());
}
예제 #8
0
HSV darken(const HSV &hsv, double amount) {
    double v = clip(hsv.v() - hsv.v()*amount);
    return HSV(hsv.h(), hsv.s(), v, hsv.a());
}
예제 #9
0
		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);
		}
예제 #10
0
 Color Indexed(int i, double s, double v) noexcept {
     double x = i * 1.61803398874989484820;
     return HSV(x - int(x), s, v);
 }
예제 #11
0
파일: Effect.cpp 프로젝트: yashihei/Alone
bool ScoreEffect::update(double sec) {
	FontAsset(L"middleLog").drawCenter(Format(score), pos, HSV(Palette::Lightgreen).toColorF(1.0 - sec));

	return sec < 1.0;
}
예제 #12
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);
    }
}
예제 #13
0
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);
    }
}
예제 #14
0
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);
}
예제 #15
0
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();
}
예제 #16
0
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();

}
예제 #17
0
파일: Effect.cpp 프로젝트: yashihei/Alone
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;
}