//TBorderLayer border;

    public THeartToken(bool isBroken)
    {
        this.isBroken = isBroken;

        if (isBroken)
        {
            sprite = new FSprite("brokenHeart.psd");
        }
        else
        {
            sprite = new FSprite("heart.psd");
        }

        sprite.scale    = 0.6f;
        sprite.color    = new Color(1.0f, Random.Range(0.3f, 0.6f), Random.Range(0.3f, 0.6f), 1.0f);
        sprite.rotation = -10f;

        float      duration = Random.Range(0.15f, 0.45f);
        Tween      rotOut   = new Tween(sprite, duration, new TweenConfig().floatProp("rotation", 10f));
        Tween      rotIn    = new Tween(sprite, duration, new TweenConfig().floatProp("rotation", -10f));
        TweenChain chain    = new TweenChain();

        chain.setIterations(-1);
        chain.append(rotOut).append(rotIn);
        Go.addTween(chain);
        chain.play();
    }
    public void AddHeart()
    {
        FSprite heart = new FSprite("heart.psd");

        heart.x        = Random.Range(heart.width / 2f, Futile.screen.width - heart.width / 2f);
        heart.y        = Random.Range(heart.height / 2f, Futile.screen.height - heart.height / 2f - 50f /*UI bar*/);
        heart.scale    = 0;
        heart.rotation = Random.Range(0, 359f);
        heart.color    = new Color(1.0f, Random.Range(0.0f, 0.3f), Random.Range(0.0f, 0.3f), 1.0f);
        AddChild(heart);
        hearts.Add(heart);

        Go.to(heart, Random.Range(1.0f, 5.0f), new TweenConfig()
              .setIterations(-1)
              .floatProp("rotation", 360 * (RXRandom.Float() < 0.5f ? 1 : -1), true));

        float inflationDuration = Random.Range(1.0f, 2.0f);
        Tween tweenUp           = new Tween(heart, inflationDuration, new TweenConfig()
                                            .floatProp("scale", Random.Range(0.3f, 1.0f))
                                            .setEaseType(EaseType.SineInOut));

        Tween tweenDown = new Tween(heart, inflationDuration, new TweenConfig()
                                    .floatProp("scale", 0)
                                    .onComplete(OnHeartDisappearedWithoutBeingTouched)
                                    .setEaseType(EaseType.SineInOut));

        TweenChain chain = new TweenChain();

        chain.append(tweenUp);
        chain.append(tweenDown);

        Go.addTween(chain);
        chain.play();
    }
Beispiel #3
0
 private void Pulsate()
 {
     Debug.Log("PULSATE!!! " + (secondsPerBeat * (float)beatScale));
     var scaleUp = new Tween(transform, secondsPerBeat * (float)beatScale, new TweenConfig().scale(defaultScale * scaleTo));
     var scaleDown = new Tween(transform, secondsPerBeat * (float)beatScale, new TweenConfig().scale(defaultScale));
     var scaleChain = new TweenChain().append(scaleUp).append(scaleDown);
     scaleChain.play();
 }
Beispiel #4
0
    // sets up the tweens so the flashingColor will actually flash bright/dark
    private void InitFlashingColorForCompletedLines()
    {
        Tween      colorDown = new Tween(this, 0.2f, new TweenConfig().floatProp("flashingColorPercentage", 0.5f));
        Tween      colorUp   = new Tween(this, 0.2f, new TweenConfig().floatProp("flashingColorPercentage", 1.0f));
        TweenChain chain     = new TweenChain();

        chain.setIterations(-1);
        chain.append(colorDown).append(colorUp);
        Go.addTween(chain);
        chain.play();
    }
Beispiel #5
0
    public void StartWalking()
    {
        if (isWalking)
        {
            return;
        }

        isWalking = true;

        chain.play();
    }
    void MakeUIElements()
    {
        scoreLabel         = new FLabel("SoftSugar", "0");
        scoreLabel.anchorX = 1.0f;
        scoreLabel.anchorY = 1.0f;
        scoreLabel.scale   = 0.75f;
        scoreLabel.x       = Futile.screen.width + scoreLabel.textRect.width;
        scoreLabel.y       = Futile.screen.height - 10f;
        scoreLabel.color   = new Color(0.12f, 0.12f, 0.12f, 1.0f);
        AddChild(scoreLabel);

        missedLabel         = new FLabel("SoftSugar", "Misses left: 0");
        missedLabel.anchorX = 0.0f;
        missedLabel.anchorY = 1.0f;
        missedLabel.scale   = 0.75f;
        missedLabel.x       = -missedLabel.textRect.width;
        missedLabel.y       = Futile.screen.height - 10f;
        missedLabel.color   = new Color(0.75f, 0.12f, 0.12f, 1.0f);
        AddChild(missedLabel);

        startLabel1       = new FLabel("SoftSugar", "How much do I love you?");
        startLabel2       = new FLabel("SoftSugar", "Click the hearts to find out,\nbut don't miss too many!");
        startLabel1.color = new Color(0.75f, 0.12f, 0.12f, 1.0f);
        startLabel2.color = new Color(0.12f, 0.12f, 0.12f, 1.0f);
        float adj = 40f;

        startLabel1.x     = startLabel2.x = Futile.screen.halfWidth;
        startLabel1.y     = Futile.screen.halfHeight + adj;
        startLabel2.y     = startLabel1.y - startLabel1.textRect.height / 2f - startLabel2.textRect.height / 2f - 10f + adj;
        startLabel1.scale = startLabel2.scale = 0;
        AddChild(startLabel1);
        AddChild(startLabel2);

        TweenConfig config1 = new TweenConfig()
                              .floatProp("scale", 1.0f)
                              .setEaseType(EaseType.SineInOut);

        TweenConfig config2 = new TweenConfig()
                              .floatProp("scale", 0.5f)
                              .setEaseType(EaseType.SineInOut);

        float duration = 0.5f;

        TweenChain chain = new TweenChain();

        chain.append(new Tween(startLabel1, duration, config1));
        chain.append(new Tween(startLabel2, duration, config2));
        chain.setOnCompleteHandler(OnGameShouldBeReadyToStart);

        Go.addTween(chain);
        chain.play();
    }
    public WTBlahGame()
        : base("")
    {
        nursesPass = new FSprite("nursesPass.psd");
        nursesPass.x = Futile.screen.halfWidth;
        nursesPass.y = Futile.screen.halfHeight;
        nursesPass.scale = 0.5f;
        AddChild(nursesPass);

        Go.defaultEaseType = EaseType.SineInOut;

        Tween tweenUp = new Tween(nursesPass, 0.3f, new TweenConfig()
            .floatProp("scale", 0.6f));
        Tween tweenDown = new Tween(nursesPass, 0.3f, new TweenConfig()
            .floatProp("scale", 0.5f));
        TweenChain chain = new TweenChain();
        chain.setIterations(-1);
        chain.append(tweenUp).append(tweenDown);
        Go.addTween(chain);
        chain.play();
    }
Beispiel #8
0
        public void ShowWave(int lvl)
        {
            _text.text = $"Wave {lvl}";

            var scaleInTween = Go.to(transform, 0.5f, new TweenConfig()
                                     .scale(1)
                                     .setEaseType(EaseType.ElasticOut)
                                     );

            var scaleOutTween = Go.to(transform, 0.5f, new TweenConfig()
                                      .scale(0)
                                      .setEaseType(EaseType.ElasticOut)
                                      );

            var chain = new TweenChain();

            chain
            .append(scaleInTween)
            .appendDelay(3f)
            .append(scaleOutTween);
            chain.play();
        }
    public void OnWinLabelDoneAppearing(AbstractTween tween)
    {
        gameFullyOver = true;

        FLabel label = (tween as Tween).target as FLabel;

        Tween up = new Tween(label, 0.3f, new TweenConfig()
                             .floatProp("scale", 1.1f)
                             .setEaseType(EaseType.SineInOut));

        Tween down = new Tween(label, 0.3f, new TweenConfig()
                               .floatProp("scale", 1.0f)
                               .setEaseType(EaseType.SineInOut));

        TweenChain upDownChain = new TweenChain();

        upDownChain.setIterations(-1);
        upDownChain.append(up);
        upDownChain.append(down);

        Go.addTween(upDownChain);
        upDownChain.play();
    }
    //TBorderLayer border;
    public THeartToken(bool isBroken)
    {
        this.isBroken = isBroken;

        if (isBroken) {
            sprite = new FSprite("brokenHeart.psd");
        }
        else {
            sprite = new FSprite("heart.psd");
        }

        sprite.scale = 0.6f;
        sprite.color = new Color(1.0f, Random.Range(0.3f, 0.6f), Random.Range(0.3f, 0.6f), 1.0f);
        sprite.rotation = -10f;

        float duration = Random.Range(0.15f, 0.45f);
        Tween rotOut = new Tween(sprite, duration, new TweenConfig().floatProp("rotation", 10f));
        Tween rotIn = new Tween(sprite, duration, new TweenConfig().floatProp("rotation", -10f));
        TweenChain chain = new TweenChain();
        chain.setIterations(-1);
        chain.append(rotOut).append(rotIn);
        Go.addTween(chain);
        chain.play();
    }
Beispiel #11
0
    private void showGrid(float width, float height)
    {
        TweenChain chainY = new TweenChain();
        TweenChain chainX = new TweenChain();

        for(float y = height/2;y >= -height/2;y-=64) {
            FSliceSprite ss = new FSliceSprite(Futile.whiteElement, width, 1, 0, 0, 0, 0);
            ss.y = y;
            ss.x = -width;
            AddChild(ss);
            Tween t = new Tween(ss, 3 / (height / 64), new TweenConfig().floatProp("x", 0), null);
            chainY.append(t);
        }
        for(float x = -width/2;x<= width/2;x+=64) {
            FSliceSprite ss = new FSliceSprite(Futile.whiteElement, 1, height, 0, 0, 0, 0);
            ss.x = x;
            ss.y = height;
            AddChild(ss);
            Tween t = new Tween(ss, 3 / (width / 64), new TweenConfig().floatProp("y", 0), null);
            chainX.append(t);
        }
        chainY.play();
        chainX.play();
    }
Beispiel #12
0
	public void ShakeWord(FSprite word) {
		/*float dur = Random.Range(0.05f, 0.15f);
		float xDelta = Random.Range(-5f, 5f);
		float yDelta = Random.Range(-5f, 5f);*/
		
		float dur = 0.3f;
		float xDelta = -40f;
		float yDelta = -40f;
		
		Tween tweenIn = new Tween(word, dur, new TweenConfig().floatProp("x", xDelta, true).floatProp("y", yDelta, true));
		Tween tweenOut = new Tween(word, dur, new TweenConfig().floatProp("x", -xDelta, true).floatProp("y", -yDelta, true).onComplete(HandleWordFinishedShake));
		
		TweenChain tweenChain = new TweenChain();
		tweenChain.append(tweenIn);
		tweenChain.append(tweenOut);
		
		if ((int)word.data == 0) {
			tweenChain1 = tweenChain;
		}
		else if ((int)word.data == 1) {
			tweenChain2 = tweenChain;
		}
		
		Go.addTween(tweenChain);
		
		tweenChain.play();
	}
    public void AddHeart()
    {
        FSprite heart = new FSprite("heart.psd");
        heart.x = Random.Range(heart.width / 2f, Futile.screen.width - heart.width / 2f);
        heart.y = Random.Range(heart.height / 2f, Futile.screen.height - heart.height / 2f - 50f /*UI bar*/);
        heart.scale = 0;
        heart.rotation = Random.Range(0, 359f);
        heart.color = new Color(1.0f, Random.Range(0.0f, 0.3f), Random.Range(0.0f, 0.3f), 1.0f);
        AddChild(heart);
        hearts.Add(heart);

        Go.to(heart, Random.Range(1.0f, 5.0f), new TweenConfig()
            .setIterations(-1)
            .floatProp("rotation", 360 * (RXRandom.Float() < 0.5f ? 1 : -1), true));

        float inflationDuration = Random.Range(1.0f, 2.0f);
        Tween tweenUp = new Tween(heart, inflationDuration, new TweenConfig()
            .floatProp("scale", Random.Range(0.3f, 1.0f))
            .setEaseType(EaseType.SineInOut));

        Tween tweenDown = new Tween(heart, inflationDuration, new TweenConfig()
            .floatProp("scale", 0)
            .onComplete(OnHeartDisappearedWithoutBeingTouched)
            .setEaseType(EaseType.SineInOut));

        TweenChain chain = new TweenChain();
        chain.append(tweenUp);
        chain.append(tweenDown);

        Go.addTween(chain);
        chain.play();
    }
    public void EndGame()
    {
        FlyOutUIElements();

        scoreLabel.text = string.Format("{0:#,###0}", score);

        for (int i = hearts.Count - 1; i >= 0; i--) {
            FSprite heart = hearts[i];
            foreach (AbstractTween tween in Go.tweensWithTarget(heart)) Go.removeTween(tween);
            heart.RemoveFromContainer();
            hearts.Remove(heart);
        }

        if (score >= 1000000) {
            StartHeartShower();
            FSoundManager.StopMusic();
            FSoundManager.PlaySound("happyPiano");
            gameIsOver = true;
            FLabel label = new FLabel("SoftSugar", "I love you times a million!");
            label.color = new Color(0.12f, 0.12f, 0.12f, 1.0f);
            label.x = Futile.screen.halfWidth;
            label.y = Futile.screen.halfHeight;
            label.scale = 0;
            AddChild(label);

            TweenConfig config = new TweenConfig()
                .floatProp("scale", 1.0f)
                .setEaseType(EaseType.SineInOut)
                .onComplete(OnWinLabelDoneAppearing);

            Go.to(label, 0.5f, config);
        }

        if (numHeartsMissed >= 5) {
            gameIsOver = true;
            FSoundManager.StopMusic();
            FSoundManager.PlaySound("sadPiano");
            FLabel topLabel = new FLabel("SoftSugar", "Are you kidding me?!");
            FLabel bottomLabel = new FLabel("SoftSugar", string.Format("I love you way more than x{0:#,###0}!", score));
            topLabel.color = new Color(0.75f, 0.12f, 0.12f, 1.0f);
            bottomLabel.color = new Color(0.12f, 0.12f, 0.12f, 1.0f);
            bottomLabel.x = topLabel.x = Futile.screen.halfWidth;
            float bottomBeginning = 300f;
            float segmentHeight = (Futile.screen.height - bottomBeginning * 2f) / 3f;
            bottomLabel.y = segmentHeight - bottomLabel.textRect.height / 2f + bottomBeginning;
            topLabel.y = segmentHeight * 3f - topLabel.textRect.height / 2f + bottomBeginning;
            bottomLabel.scale = topLabel.scale = 0;
            AddChild(topLabel);
            AddChild(bottomLabel);

            TweenConfig config1 = new TweenConfig()
                .floatProp("scale", 1.0f)
                .setEaseType(EaseType.SineInOut);
            TweenConfig config2 = new TweenConfig()
                .floatProp("scale", 0.75f)
                .setEaseType(EaseType.SineInOut);

            float duration = 0.5f;

            TweenChain chain = new TweenChain();
            chain.append(new Tween(topLabel, duration, config1));
            chain.append(new Tween(bottomLabel, duration, config2));
            chain.setOnCompleteHandler(OnGameShouldBeFullyOver);

            Go.addTween(chain);
            chain.play();
        }
    }
    public void DisplayNextString()
    {
        if (stringQueue.Count == 0)
        {
            hasStringsToShow = false;
            NoStringsLeftToShow();
            return;
        }

        float startX = defaultX;
        float startY = defaultY;
        float holdX  = defaultX;
        float holdY  = defaultY;
        float endX   = defaultX;
        float endY   = defaultY;

        label.text = stringQueue[0];
        label.CreateTextQuads();

        if (labelShowType == LabelShowType.SlideFromLeft)
        {
            startX = -label.textRect.width / 2f;
        }
        else if (labelShowType == LabelShowType.SlideFromRight)
        {
            startX = Futile.screen.width + label.textRect.width / 2f;
        }
        else if (labelShowType == LabelShowType.SlideFromTop)
        {
            startY = Futile.screen.height + label.textRect.height / 2f;
        }
        else if (labelShowType == LabelShowType.SlideFromBottom)
        {
            startY = -label.textRect.height / 2f;
        }

        if (labelHideType == LabelHideType.SlideToLeft)
        {
            endX = -label.textRect.width / 2f;
        }
        else if (labelHideType == LabelHideType.SlideToRight)
        {
            endX = Futile.screen.width + label.textRect.width / 2f;
        }
        else if (labelHideType == LabelHideType.SlideToTop)
        {
            endY = Futile.screen.height + label.textRect.height / 2f;
        }
        else if (labelHideType == LabelHideType.SlideToBottom)
        {
            endY = -label.textRect.height / 2f;
        }

        label.x = startX;
        label.y = startY;

        Tween inTween = new Tween(label, inDuration, new TweenConfig()
                                  .floatProp("x", holdX)
                                  .floatProp("y", holdY)
                                  .onComplete(DoneMovingLabelIntoPlace)
                                  .setEaseType(easeType));

        float holdDuration = defaultHoldDuration;

        if (shouldIncreaseHoldDurationBasedOnStringLength)
        {
            holdDuration = Mathf.Max((float)(label.text.Length / 10), 3.0f);
        }

        Tween holdTween = new Tween(label, holdDuration, new TweenConfig()
                                    .floatProp("x", 0, true) // just to fake it into thinking it has a real tween
                                    .onComplete(StartingToAnimateLabelOut));

        Tween outTween = new Tween(label, outDuration, new TweenConfig()
                                   .floatProp("x", endX)
                                   .floatProp("y", endY)
                                   .setEaseType(easeType));

        TweenChain chain = new TweenChain();

        chain.append(inTween).append(holdTween).append(outTween);
        chain.setOnCompleteHandler(DoneShowingLabel);
        Go.addTween(chain);
        chain.play();

        labelIsAnimating = true;
        label.isVisible  = true;
    }
    public void UpdateGoal()
    {
        if (totalDistance < goalDistance - 1000f || initiatedSceneSwitch) return;

        if (goalType == GoalType.GoalOne) {
            if (faceCoin == null) {
                faceCoin = new FSprite("danaHappy.png");
                faceCoin.x = Futile.screen.width + 100f;
                faceCoin.y = 250f;
                everythingContainer.AddChild(faceCoin);
                everythingContainer.AddChild(whit); // move him to top

                Tween tween1 = new Tween(faceCoin, 0.5f, new TweenConfig()
                    .floatProp("scaleX", -1.0f)
                    .setEaseType(EaseType.SineInOut));

                Tween tween2 = new Tween(faceCoin, 0.5f, new TweenConfig()
                    .floatProp("scaleX", 1.0f)
                    .setEaseType(EaseType.SineInOut));

                TweenChain chain = new TweenChain();
                chain.setIterations(-1);
                chain.append(tween1);
                chain.append(tween2);
                Go.addTween(chain);
                chain.play();
            }

            faceCoin.x += Time.fixedDeltaTime * universalVelocity;

            if (faceCoin.x < 100f) {
                initiatedSceneSwitch = true;
                FSoundManager.PlaySound("success");
                TMain.SwitchToScene(TMain.SceneType.DreamSceneOne);
            }
        }

        else if (goalType == GoalType.GoalTwo) {
            if (bigHeartCoin == null) {
                bigHeartCoin = new FSprite("heart.psd");
                bigHeartCoin.scale = 2.0f;
                bigHeartCoin.x = Futile.screen.width + 100f;
                bigHeartCoin.color = new Color(1.0f, 0.2f, 0.2f, 1.0f);
                bigHeartCoin.y = 250f;
                everythingContainer.AddChild(bigHeartCoin);
                everythingContainer.AddChild(whit); // move to top

                Tween tween1 = new Tween(bigHeartCoin, 0.5f, new TweenConfig()
                    .floatProp("scaleX", -1.0f)
                    .setEaseType(EaseType.SineInOut));

                Tween tween2 = new Tween(bigHeartCoin, 0.5f, new TweenConfig()
                    .floatProp("scaleX", 1.0f)
                    .setEaseType(EaseType.SineInOut));

                TweenChain chain = new TweenChain();
                chain.setIterations(-1);
                chain.append(tween1);
                chain.append(tween2);
                Go.addTween(chain);
                chain.play();
            }

            bigHeartCoin.x += Time.fixedDeltaTime * universalVelocity;

            if (bigHeartCoin.x < 100f) {
                initiatedSceneSwitch = true;
                FSoundManager.StopMusic();
                FSoundManager.PlaySound("success");
                TMain.SwitchToScene(TMain.SceneType.DreamSceneTwo);
            }
        }

        else if (goalType == GoalType.GoalThree) {
            if (dana == null) {
                dana = new TWalkingCharacter("danaHead.png");
                dana.x = Futile.screen.width + 100f;
                dana.y = 250f;
                everythingContainer.AddChild(dana);
                dana.StartWalking();
            }

            dana.x += Time.fixedDeltaTime * universalVelocity * 0.25f;

            if (dana.x < 350f) {
                start.isVisible = goal.isVisible = false;
                FSoundManager.PlayMusic("yay");
                foundEachother = true;
                dana.TurnAround();
                dana.StopWalking();
                whit.StopWalking();
                parallaxScene.StopUpdating();
                whit.StopCrouching();
                StartHeartShower();
            }
        }
    }
    public void DisplayNextString()
    {
        if (stringQueue.Count == 0) {
            hasStringsToShow = false;
            NoStringsLeftToShow();
            return;
        }

        float startX = defaultX;
        float startY = defaultY;
        float holdX = defaultX;
        float holdY = defaultY;
        float endX = defaultX;
        float endY = defaultY;

        label.text = stringQueue[0];
        label.CreateTextQuads();

        if (labelShowType == LabelShowType.SlideFromLeft) {
            startX = -label.textRect.width / 2f;
        }
        else if (labelShowType == LabelShowType.SlideFromRight) {
            startX = Futile.screen.width + label.textRect.width / 2f;
        }
        else if (labelShowType == LabelShowType.SlideFromTop) {
            startY = Futile.screen.height + label.textRect.height / 2f;
        }
        else if (labelShowType == LabelShowType.SlideFromBottom) {
            startY = -label.textRect.height / 2f;
        }

        if (labelHideType == LabelHideType.SlideToLeft) {
            endX = -label.textRect.width / 2f;
        }
        else if (labelHideType == LabelHideType.SlideToRight) {
            endX = Futile.screen.width + label.textRect.width / 2f;
        }
        else if (labelHideType == LabelHideType.SlideToTop) {
            endY = Futile.screen.height + label.textRect.height / 2f;
        }
        else if (labelHideType == LabelHideType.SlideToBottom) {
            endY = -label.textRect.height / 2f;
        }

        label.x = startX;
        label.y = startY;

        Tween inTween = new Tween(label, inDuration, new TweenConfig()
            .floatProp("x", holdX)
            .floatProp("y", holdY)
            .onComplete(DoneMovingLabelIntoPlace)
            .setEaseType(easeType));

        float holdDuration = defaultHoldDuration;
        if (shouldIncreaseHoldDurationBasedOnStringLength) holdDuration = Mathf.Max((float)(label.text.Length / 10), 3.0f);

        Tween holdTween = new Tween(label, holdDuration, new TweenConfig()
            .floatProp("x", 0, true) // just to fake it into thinking it has a real tween
            .onComplete(StartingToAnimateLabelOut));

        Tween outTween = new Tween(label, outDuration, new TweenConfig()
            .floatProp("x", endX)
            .floatProp("y", endY)
            .setEaseType(easeType));

        TweenChain chain = new TweenChain();
        chain.append(inTween).append(holdTween).append(outTween);
        chain.setOnCompleteHandler(DoneShowingLabel);
        Go.addTween(chain);
        chain.play();

        labelIsAnimating = true;
        label.isVisible = true;
    }
 // sets up the tweens so the flashingColor will actually flash bright/dark
 private void InitFlashingColorForCompletedLines()
 {
     Tween colorDown = new Tween(this, 0.2f, new TweenConfig().floatProp("flashingColorPercentage", 0.5f));
     Tween colorUp = new Tween(this, 0.2f, new TweenConfig().floatProp("flashingColorPercentage", 1.0f));
     TweenChain chain = new TweenChain();
     chain.setIterations(-1);
     chain.append(colorDown).append(colorUp);
     Go.addTween(chain);
     chain.play();
 }
    public void UpdateSolidifyingTrebellaLetters()
    {
        timeSinceLastSolidifiedLetter += Time.deltaTime;

        if (timeSinceLastSolidifiedLetter > 0.5f) {
            timeSinceLastSolidifiedLetter -= 0.5f;

            FLabel nextLetterToChange = null;

            switch (numLettersSolidified) {
            case 0:
                foreach (FLabel letter in unsolidifiedTrebellaLetters) {
                    if (letter.text == "T") {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;
            case 1:
                foreach (FLabel letter in unsolidifiedTrebellaLetters) {
                    if (letter.text == "R") {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;
            case 2:
                foreach (FLabel letter in unsolidifiedTrebellaLetters) {
                    if (letter.text == "E") {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;
            case 3:
                foreach (FLabel letter in unsolidifiedTrebellaLetters) {
                    if (letter.text == "B") {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;
            case 4:
                foreach (FLabel letter in unsolidifiedTrebellaLetters) {
                    if (letter.text == "E") {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;
            case 5:
                foreach (FLabel letter in unsolidifiedTrebellaLetters) {
                    if (letter.text == "L") {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;
            case 6:
                foreach (FLabel letter in unsolidifiedTrebellaLetters) {
                    if (letter.text == "L") {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;
            case 7:
                foreach (FLabel letter in unsolidifiedTrebellaLetters) {
                    if (letter.text == "A") {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;
            }

            FSoundManager.PlaySound("bomb", 2.0f);
            FLabel solidifiedLetter = trebellaLetters[numLettersSolidified];
            solidifiedLetter.x = nextLetterToChange.x;
            solidifiedLetter.y = nextLetterToChange.y;
            nextLetterToChange.RemoveFromContainer();

            float duration = 0.2f;
            float distance = 5f;

            Tween bounce = new Tween(solidifiedLetter, duration, new TweenConfig()
                .setEaseType(EaseType.SineInOut)
                .floatProp("y", distance, true));

            Tween bounceBack = new Tween(solidifiedLetter, duration, new TweenConfig()
                .setEaseType(EaseType.SineInOut)
                .floatProp("y", -distance, true));

            TweenChain chain = new TweenChain();
            chain.setIterations(-1, LoopType.RestartFromBeginning);
            chain.append(bounce);
            chain.append(bounceBack);

            Go.addTween(chain);

            chain.play();

            numLettersSolidified++;

            if (numLettersSolidified >= 8) trebellaLettersDoneSolidifying = true;
        }
    }
    public void UpdateSolidifyingTrebellaLetters()
    {
        timeSinceLastSolidifiedLetter += Time.deltaTime;

        if (timeSinceLastSolidifiedLetter > 0.5f)
        {
            timeSinceLastSolidifiedLetter -= 0.5f;

            FLabel nextLetterToChange = null;

            switch (numLettersSolidified)
            {
            case 0:
                foreach (FLabel letter in unsolidifiedTrebellaLetters)
                {
                    if (letter.text == "T")
                    {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;

            case 1:
                foreach (FLabel letter in unsolidifiedTrebellaLetters)
                {
                    if (letter.text == "R")
                    {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;

            case 2:
                foreach (FLabel letter in unsolidifiedTrebellaLetters)
                {
                    if (letter.text == "E")
                    {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;

            case 3:
                foreach (FLabel letter in unsolidifiedTrebellaLetters)
                {
                    if (letter.text == "B")
                    {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;

            case 4:
                foreach (FLabel letter in unsolidifiedTrebellaLetters)
                {
                    if (letter.text == "E")
                    {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;

            case 5:
                foreach (FLabel letter in unsolidifiedTrebellaLetters)
                {
                    if (letter.text == "L")
                    {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;

            case 6:
                foreach (FLabel letter in unsolidifiedTrebellaLetters)
                {
                    if (letter.text == "L")
                    {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;

            case 7:
                foreach (FLabel letter in unsolidifiedTrebellaLetters)
                {
                    if (letter.text == "A")
                    {
                        nextLetterToChange = letter;
                        unsolidifiedTrebellaLetters.Remove(letter);
                        break;
                    }
                }
                break;
            }

            FSoundManager.PlaySound("bomb", 2.0f);
            FLabel solidifiedLetter = trebellaLetters[numLettersSolidified];
            solidifiedLetter.x = nextLetterToChange.x;
            solidifiedLetter.y = nextLetterToChange.y;
            nextLetterToChange.RemoveFromContainer();

            float duration = 0.2f;
            float distance = 5f;

            Tween bounce = new Tween(solidifiedLetter, duration, new TweenConfig()
                                     .setEaseType(EaseType.SineInOut)
                                     .floatProp("y", distance, true));

            Tween bounceBack = new Tween(solidifiedLetter, duration, new TweenConfig()
                                         .setEaseType(EaseType.SineInOut)
                                         .floatProp("y", -distance, true));

            TweenChain chain = new TweenChain();
            chain.setIterations(-1, LoopType.RestartFromBeginning);
            chain.append(bounce);
            chain.append(bounceBack);

            Go.addTween(chain);

            chain.play();

            numLettersSolidified++;

            if (numLettersSolidified >= 8)
            {
                trebellaLettersDoneSolidifying = true;
            }
        }
    }
    void MakeUIElements()
    {
        scoreLabel = new FLabel("SoftSugar", "0");
        scoreLabel.anchorX = 1.0f;
        scoreLabel.anchorY = 1.0f;
        scoreLabel.scale = 0.75f;
        scoreLabel.x = Futile.screen.width + scoreLabel.textRect.width;
        scoreLabel.y = Futile.screen.height - 10f;
        scoreLabel.color = new Color(0.12f, 0.12f, 0.12f, 1.0f);
        AddChild(scoreLabel);

        missedLabel = new FLabel("SoftSugar", "Misses left: 0");
        missedLabel.anchorX = 0.0f;
        missedLabel.anchorY = 1.0f;
        missedLabel.scale = 0.75f;
        missedLabel.x = -missedLabel.textRect.width;
        missedLabel.y = Futile.screen.height - 10f;
        missedLabel.color = new Color(0.75f, 0.12f, 0.12f, 1.0f);
        AddChild(missedLabel);

        startLabel1 = new FLabel("SoftSugar", "How much do I love you?");
        startLabel2 = new FLabel("SoftSugar", "Click the hearts to find out,\nbut don't miss too many!");
        startLabel1.color = new Color(0.75f, 0.12f, 0.12f, 1.0f);
        startLabel2.color = new Color(0.12f, 0.12f, 0.12f, 1.0f);
        float adj = 40f;
        startLabel1.x = startLabel2.x = Futile.screen.halfWidth;
        startLabel1.y = Futile.screen.halfHeight + adj;
        startLabel2.y = startLabel1.y - startLabel1.textRect.height / 2f - startLabel2.textRect.height / 2f - 10f + adj;
        startLabel1.scale = startLabel2.scale = 0;
        AddChild(startLabel1);
        AddChild(startLabel2);

        TweenConfig config1 = new TweenConfig()
            .floatProp("scale", 1.0f)
            .setEaseType(EaseType.SineInOut);

        TweenConfig config2 = new TweenConfig()
            .floatProp("scale", 0.5f)
            .setEaseType(EaseType.SineInOut);

        float duration = 0.5f;

        TweenChain chain = new TweenChain();
        chain.append(new Tween(startLabel1, duration, config1));
        chain.append(new Tween(startLabel2, duration, config2));
        chain.setOnCompleteHandler(OnGameShouldBeReadyToStart);

        Go.addTween(chain);
        chain.play();
    }
    public void HandleTouchOnBlackallAndTesser(FTouch touch)
    {
        FLabel touchedLetter = null;

        for (int i = 0; i < tesserLetters.Count; i++)
        {
            FLabel label = tesserLetters[i];
            if (label == null)
            {
                continue;
            }
            Vector2 touchPos = label.GlobalToLocal(touch.position);
            if (label.textRect.Contains(touchPos))
            {
                touchedLetter = label;
                break;
            }
        }

        for (int i = 0; i < blackallLetters.Count; i++)
        {
            FLabel label = blackallLetters[i];
            if (label == null)
            {
                continue;
            }
            Vector2 touchPos = label.GlobalToLocal(touch.position);
            if (label.textRect.Contains(touchPos))
            {
                touchedLetter = label;
                break;
            }
        }

        if (touchedLetter == null)
        {
            return;
        }

        touchWasUsedCorrectly = true;

        TweenChain chain         = null;
        float      duration      = 0.2f;
        float      extraRotation = 0f;

        // TESSER

        // T
        if (touchedLetter == tesserLetters[0])
        {
            if (unsolidifiedTrebellaLetters.Contains(touchedLetter))
            {
                FSoundManager.PlaySound("error");
                return;
            }

            if (!movedT)
            {
                chain  = TweenChainForLetter(touchedLetter, duration, trebellaFinalPositions[0].x, trebellaFinalPositions[0].y, extraRotation);
                movedT = true;
                unsolidifiedTrebellaLetters.Add(touchedLetter);
            }
        }

        // E
        if (touchedLetter == tesserLetters[1] || touchedLetter == tesserLetters[4])
        {
            if (unsolidifiedTrebellaLetters.Contains(touchedLetter))
            {
                FSoundManager.PlaySound("error");
                return;
            }

            int index;

            if (numTouchedEs == 0)
            {
                index = 2;
            }
            else if (numTouchedEs == 1)
            {
                index = 4;
            }
            else
            {
                index = -1;
            }

            if (index != -1)
            {
                chain = TweenChainForLetter(touchedLetter, duration, trebellaFinalPositions[index].x, trebellaFinalPositions[index].y, extraRotation);
                numTouchedEs++;
                unsolidifiedTrebellaLetters.Add(touchedLetter);
            }
            else
            {
                int tesserIndex = 0;
                if (touchedLetter == tesserLetters[1])
                {
                    tesserIndex = 0;
                }
                else if (touchedLetter == tesserLetters[4])
                {
                    tesserIndex = 4;
                }
                KillLetter(touchedLetter);
                tesserLetters[tesserIndex] = null;
                numNonTrebellaLettersLeft--;
            }
        }

        // S
        if (touchedLetter == tesserLetters[2])
        {
            KillLetter(touchedLetter);
            numNonTrebellaLettersLeft--;
            tesserLetters[2] = null;
        }

        // S
        if (touchedLetter == tesserLetters[3])
        {
            KillLetter(touchedLetter);
            numNonTrebellaLettersLeft--;
            tesserLetters[3] = null;
        }

        // R
        if (touchedLetter == tesserLetters[5])
        {
            if (unsolidifiedTrebellaLetters.Contains(touchedLetter))
            {
                FSoundManager.PlaySound("error");
                return;
            }

            if (!movedR)
            {
                chain  = TweenChainForLetter(touchedLetter, duration, trebellaFinalPositions[1].x, trebellaFinalPositions[1].y, extraRotation);
                movedR = true;
                unsolidifiedTrebellaLetters.Add(touchedLetter);
            }
        }

        // BLACKALL

        // B
        if (touchedLetter == blackallLetters[0])
        {
            if (unsolidifiedTrebellaLetters.Contains(touchedLetter))
            {
                FSoundManager.PlaySound("error");
                return;
            }

            if (!movedB)
            {
                chain  = TweenChainForLetter(touchedLetter, duration, trebellaFinalPositions[3].x, trebellaFinalPositions[3].y, extraRotation);
                movedB = true;
                unsolidifiedTrebellaLetters.Add(touchedLetter);
            }
        }

        // L
        if (touchedLetter == blackallLetters[1] || touchedLetter == blackallLetters[6] || touchedLetter == blackallLetters[7])
        {
            if (unsolidifiedTrebellaLetters.Contains(touchedLetter))
            {
                FSoundManager.PlaySound("error");
                return;
            }

            int index;

            if (numTouchedLs == 0)
            {
                index = 5;
            }
            else if (numTouchedLs == 1)
            {
                index = 6;
            }
            else
            {
                index = -1;
            }

            if (index != -1)
            {
                chain = TweenChainForLetter(touchedLetter, duration, trebellaFinalPositions[index].x, trebellaFinalPositions[index].y, extraRotation);
                numTouchedLs++;
                unsolidifiedTrebellaLetters.Add(touchedLetter);
            }
            else
            {
                int blackallIndex = 0;
                if (touchedLetter == blackallLetters[1])
                {
                    blackallIndex = 1;
                }
                else if (touchedLetter == blackallLetters[6])
                {
                    blackallIndex = 6;
                }
                else if (touchedLetter == blackallLetters[7])
                {
                    blackallIndex = 7;
                }
                KillLetter(touchedLetter);
                blackallLetters[blackallIndex] = null;
                numNonTrebellaLettersLeft--;
            }
        }

        // A
        if (touchedLetter == blackallLetters[2] || touchedLetter == blackallLetters[5])
        {
            if (unsolidifiedTrebellaLetters.Contains(touchedLetter))
            {
                FSoundManager.PlaySound("error");
                return;
            }

            int index;

            if (numTouchedAs == 0)
            {
                index = 7;
            }
            else
            {
                index = -1;
            }

            if (index != -1)
            {
                chain = TweenChainForLetter(touchedLetter, duration, trebellaFinalPositions[index].x, trebellaFinalPositions[index].y, extraRotation);
                numTouchedAs++;
                unsolidifiedTrebellaLetters.Add(touchedLetter);
            }
            else
            {
                int blackallIndex = 0;
                if (touchedLetter == blackallLetters[2])
                {
                    blackallIndex = 2;
                }
                else if (touchedLetter == blackallLetters[5])
                {
                    blackallIndex = 5;
                }
                KillLetter(touchedLetter);
                blackallLetters[blackallIndex] = null;
                numNonTrebellaLettersLeft--;
            }
        }

        // C
        if (touchedLetter == blackallLetters[3])
        {
            KillLetter(touchedLetter);
            blackallLetters[3] = null;
            numNonTrebellaLettersLeft--;
        }

        // K
        if (touchedLetter == blackallLetters[4])
        {
            KillLetter(touchedLetter);
            blackallLetters[4] = null;
            numNonTrebellaLettersLeft--;
        }

        if (chain != null)
        {
            chain.setOnCompleteHandler(OnTrebellaLetterInPlace);
            Go.addTween(chain);
            chain.play();
        }
    }
    public void EndGame()
    {
        FlyOutUIElements();

        scoreLabel.text = string.Format("{0:#,###0}", score);

        for (int i = hearts.Count - 1; i >= 0; i--)
        {
            FSprite heart = hearts[i];
            foreach (AbstractTween tween in Go.tweensWithTarget(heart))
            {
                Go.removeTween(tween);
            }
            heart.RemoveFromContainer();
            hearts.Remove(heart);
        }

        if (score >= 1000000)
        {
            StartHeartShower();
            FSoundManager.StopMusic();
            FSoundManager.PlaySound("happyPiano");
            gameIsOver = true;
            FLabel label = new FLabel("SoftSugar", "I love you times a million!");
            label.color = new Color(0.12f, 0.12f, 0.12f, 1.0f);
            label.x     = Futile.screen.halfWidth;
            label.y     = Futile.screen.halfHeight;
            label.scale = 0;
            AddChild(label);

            TweenConfig config = new TweenConfig()
                                 .floatProp("scale", 1.0f)
                                 .setEaseType(EaseType.SineInOut)
                                 .onComplete(OnWinLabelDoneAppearing);

            Go.to(label, 0.5f, config);
        }

        if (numHeartsMissed >= 5)
        {
            gameIsOver = true;
            FSoundManager.StopMusic();
            FSoundManager.PlaySound("sadPiano");
            FLabel topLabel    = new FLabel("SoftSugar", "Are you kidding me?!");
            FLabel bottomLabel = new FLabel("SoftSugar", string.Format("I love you way more than x{0:#,###0}!", score));
            topLabel.color    = new Color(0.75f, 0.12f, 0.12f, 1.0f);
            bottomLabel.color = new Color(0.12f, 0.12f, 0.12f, 1.0f);
            bottomLabel.x     = topLabel.x = Futile.screen.halfWidth;
            float bottomBeginning = 300f;
            float segmentHeight   = (Futile.screen.height - bottomBeginning * 2f) / 3f;
            bottomLabel.y     = segmentHeight - bottomLabel.textRect.height / 2f + bottomBeginning;
            topLabel.y        = segmentHeight * 3f - topLabel.textRect.height / 2f + bottomBeginning;
            bottomLabel.scale = topLabel.scale = 0;
            AddChild(topLabel);
            AddChild(bottomLabel);

            TweenConfig config1 = new TweenConfig()
                                  .floatProp("scale", 1.0f)
                                  .setEaseType(EaseType.SineInOut);
            TweenConfig config2 = new TweenConfig()
                                  .floatProp("scale", 0.75f)
                                  .setEaseType(EaseType.SineInOut);

            float duration = 0.5f;

            TweenChain chain = new TweenChain();
            chain.append(new Tween(topLabel, duration, config1));
            chain.append(new Tween(bottomLabel, duration, config2));
            chain.setOnCompleteHandler(OnGameShouldBeFullyOver);

            Go.addTween(chain);
            chain.play();
        }
    }
 private void HandleGameComplete(AbstractTween tween)
 {
     Go.to(playArea, 0.3f, new TweenConfig().floatProp("scale", 0f).floatProp("alpha", 0.0f));
     TweenChain chain = new TweenChain();
     chain.append(new Tween(_bestScoreLabel, 1f, new TweenConfig().setEaseType(EaseType.SineOut).floatProp("anchorX", 0.5f)
                 .floatProp("anchorY", 0.5f)
                 .floatProp("scale", 1f)
                 .floatProp("x", 0.0f)
                 .floatProp("y", 0.0f)));
     bool highscoreGET = false;
     for(int i = 0; i < FScoreManager.Scores.Count; i++){
         if(BaseMain.Instance._score > (long)FScoreManager.Scores[i])
             highscoreGET = true;
     }
     if(highscoreGET){
         _bestScoreLabel.text = string.Format("new high score:\n{0}", BaseMain.Instance._score);
         Tween move = new Tween(_bestScoreLabel, 0.5f, new TweenConfig().floatProp("alpha", 0).setIterations(6, LoopType.PingPong));
         this.AddChild(new FKeyBoard("BitOut", HandleUpdate, setText));
         chain.append(move);
     }else{
         _bestScoreLabel.text = string.Format("score: {0}", BaseMain.Instance._score);
     }
     chain.setOnCompleteHandler(HandleGameComplete2);
     chain.play();
 }
    public void UpdateGoal()
    {
        if (totalDistance < goalDistance - 1000f || initiatedSceneSwitch)
        {
            return;
        }

        if (goalType == GoalType.GoalOne)
        {
            if (faceCoin == null)
            {
                faceCoin   = new FSprite("danaHappy.png");
                faceCoin.x = Futile.screen.width + 100f;
                faceCoin.y = 250f;
                everythingContainer.AddChild(faceCoin);
                everythingContainer.AddChild(whit);                 // move him to top

                Tween tween1 = new Tween(faceCoin, 0.5f, new TweenConfig()
                                         .floatProp("scaleX", -1.0f)
                                         .setEaseType(EaseType.SineInOut));

                Tween tween2 = new Tween(faceCoin, 0.5f, new TweenConfig()
                                         .floatProp("scaleX", 1.0f)
                                         .setEaseType(EaseType.SineInOut));

                TweenChain chain = new TweenChain();
                chain.setIterations(-1);
                chain.append(tween1);
                chain.append(tween2);
                Go.addTween(chain);
                chain.play();
            }

            faceCoin.x += Time.fixedDeltaTime * universalVelocity;

            if (faceCoin.x < 100f)
            {
                initiatedSceneSwitch = true;
                FSoundManager.PlaySound("success");
                TMain.SwitchToScene(TMain.SceneType.DreamSceneOne);
            }
        }

        else if (goalType == GoalType.GoalTwo)
        {
            if (bigHeartCoin == null)
            {
                bigHeartCoin       = new FSprite("heart.psd");
                bigHeartCoin.scale = 2.0f;
                bigHeartCoin.x     = Futile.screen.width + 100f;
                bigHeartCoin.color = new Color(1.0f, 0.2f, 0.2f, 1.0f);
                bigHeartCoin.y     = 250f;
                everythingContainer.AddChild(bigHeartCoin);
                everythingContainer.AddChild(whit);                 // move to top

                Tween tween1 = new Tween(bigHeartCoin, 0.5f, new TweenConfig()
                                         .floatProp("scaleX", -1.0f)
                                         .setEaseType(EaseType.SineInOut));

                Tween tween2 = new Tween(bigHeartCoin, 0.5f, new TweenConfig()
                                         .floatProp("scaleX", 1.0f)
                                         .setEaseType(EaseType.SineInOut));

                TweenChain chain = new TweenChain();
                chain.setIterations(-1);
                chain.append(tween1);
                chain.append(tween2);
                Go.addTween(chain);
                chain.play();
            }

            bigHeartCoin.x += Time.fixedDeltaTime * universalVelocity;

            if (bigHeartCoin.x < 100f)
            {
                initiatedSceneSwitch = true;
                FSoundManager.StopMusic();
                FSoundManager.PlaySound("success");
                TMain.SwitchToScene(TMain.SceneType.DreamSceneTwo);
            }
        }

        else if (goalType == GoalType.GoalThree)
        {
            if (dana == null)
            {
                dana   = new TWalkingCharacter("danaHead.png");
                dana.x = Futile.screen.width + 100f;
                dana.y = 250f;
                everythingContainer.AddChild(dana);
                dana.StartWalking();
            }

            dana.x += Time.fixedDeltaTime * universalVelocity * 0.25f;

            if (dana.x < 350f)
            {
                start.isVisible = goal.isVisible = false;
                FSoundManager.PlayMusic("yay");
                foundEachother = true;
                dana.TurnAround();
                dana.StopWalking();
                whit.StopWalking();
                parallaxScene.StopUpdating();
                whit.StopCrouching();
                StartHeartShower();
            }
        }
    }
    public void OnWinLabelDoneAppearing(AbstractTween tween)
    {
        gameFullyOver = true;

        FLabel label = (tween as Tween).target as FLabel;

        Tween up = new Tween(label, 0.3f, new TweenConfig()
            .floatProp("scale", 1.1f)
            .setEaseType(EaseType.SineInOut));

        Tween down = new Tween(label, 0.3f, new TweenConfig()
            .floatProp("scale", 1.0f)
            .setEaseType(EaseType.SineInOut));

        TweenChain upDownChain = new TweenChain();
        upDownChain.setIterations(-1);
        upDownChain.append(up);
        upDownChain.append(down);

        Go.addTween(upDownChain);
        upDownChain.play();
    }