コード例 #1
0
ファイル: Flipper.cs プロジェクト: magnusjerre/FlippaChippa
    public void Flip(List <GameObject> chips, Transform stackTransform)
    {
        if (IsFlipping)                 //Can't start a new flip during a flip
        {
            return;
        }

        float sumLocalYPos = 0f;

        foreach (GameObject chip in chips)
        {
            sumLocalYPos += chip.transform.localPosition.y;
        }

        transform.parent        = stackTransform;
        transform.localPosition = new Vector3(0f, sumLocalYPos / chips.Count, 0f);

        rotator.StartRotation();
        translator.StartTranslation();

        foreach (GameObject chip in chips)
        {
            chip.transform.parent = transform;
        }

        isFlipping      = true;
        targetTransform = stackTransform;
        observable.NotifyListeners(FCEvent.BEGIN, gameObject);
    }
コード例 #2
0
ファイル: Rotator.cs プロジェクト: magnusjerre/FlippaChippa
 // Update is called once per frame
 void Update()
 {
     if (isRotating)
     {
         elapsedTime += Time.deltaTime;
         float      progress         = elapsedTime / rotationTime;
         Vector3    rotationProgress = Vector3.Lerp(startEuler, endEuler, progress);
         Quaternion lerp             = Quaternion.Euler(rotationProgress);
         transform.rotation = lerp;
         if (!hasNotifiedHalfWay && progress >= 0.5f)
         {
             hasNotifiedHalfWay = true;
             observable.NotifyListeners(FCEvent.MIDDLE, gameObject);
         }
         else if (progress >= 1f)
         {
             isRotating         = false;
             transform.rotation = Quaternion.Euler(endEuler);
             observable.NotifyListeners(FCEvent.END, gameObject);
         }
     }
 }
コード例 #3
0
 // Update is called once per frame
 void Update()
 {
     if (isTranslating)
     {
         elapsedTime += Time.deltaTime;
         float y = startY + a * elapsedTime * elapsedTime + b * elapsedTime;
         if (y < startY)                     //has finished the rotation
         {
             isTranslating           = false;
             transform.localPosition = new Vector3(transform.localPosition.x, startY, transform.localPosition.z);
             observable.NotifyListeners(FCEvent.END, gameObject);
         }
         else
         {
             transform.localPosition = new Vector3(transform.localPosition.x, y, transform.localPosition.z);
             if (!hasNotifiedHalfWay && elapsedTime > halfTranslateTime)
             {
                 hasNotifiedHalfWay = true;
                 observable.NotifyListeners(FCEvent.MIDDLE, gameObject);
             }
         }
     }
 }
コード例 #4
0
ファイル: Mover.cs プロジェクト: magnusjerre/FlippaChippa
 // Update is called once per frame
 void Update()
 {
     if (isMoving)
     {
         elapsedTime += Time.deltaTime;
         if (elapsedTime >= moveTime)
         {
             isMoving = false;
             transform.localPosition = endPosition;
             observable.NotifyListeners(FCEvent.END, gameObject);
         }
         else
         {
             Vector3 currentDiff = totalDiff * MJMath.LerpExp(elapsedTime / moveTime);
             transform.localPosition = startPosition + currentDiff;
         }
     }
 }
コード例 #5
0
ファイル: Scaler.cs プロジェクト: magnusjerre/FlippaChippa
 // Update is called once per frame
 void Update()
 {
     if (isScaling)
     {
         elapsedTime += Time.deltaTime;
         if (elapsedTime > scaleTime)
         {
             isScaling            = false;
             transform.localScale = initalScale;
             observable.NotifyListeners(FCEvent.END, gameObject);
         }
         else
         {
             float   timeAmount = (scaleTime - elapsedTime) / scaleTime;
             float   sinTime    = timeAmount * maxtime;              //sin(ax), where a = nScalingPoints, x= timeAmount * maxTime
             Vector3 scale      = scaleDiff * timeAmount * Mathf.Sin(sinTime);
             Vector3 finalScale = initalScale + scale;
             transform.localScale = finalScale;
         }
     }
 }
コード例 #6
0
    public void OnEvent(FCEvent fcEvent, GameObject gameObject)
    {
        if (fcEvent == FCEvent.END)
        {
            nFinishedMovements++;
            if (gameObject.GetComponent <Scaler>() != null)
            {
                observable.NotifyListeners(FCEvent.END, gameObject);
                isFalling = false;
                ClearMovers();

                List <Chip> childChips = GetAllChips();
                foreach (Chip chip in childChips)
                {
                    chip.transform.parent = targetTransform;
                }
                transform.parent = null;
            }
            else if (movers.Count == nFinishedMovements)
            {
                List <Chip> chips = GetChipsForMovers();
                foreach (Chip chip in chips)
                {
                    chip.transform.parent = targetTransform;
                }
                Transform lowest = GetLowestChip(chips);
                Vector3   lowestAsFallerLocal = transform.InverseTransformPoint(lowest.position);
                scaler.transform.localPosition = new Vector3(lowestAsFallerLocal.x, lowestAsFallerLocal.y - chips [0].chipMeta.Height / 2, lowestAsFallerLocal.z);
                foreach (Chip chip in chips)
                {
                    chip.transform.parent = scaler.transform;
                }
                scaler.StartScaling();
            }
        }
    }