Exemple #1
0
    private List <PetalLocalData> DistributePetalLocalData(FlowerLocalData flower, PetalData petalData)
    {
        List <PetalLocalData> dataList = new List <PetalLocalData>();

        int PetalLayerCount = flower.PetalLayerCount;

        int[] PetalCounts          = flower.PetalCounts;
        float PetalMinClosedTime   = petalData.MinClosedTime;
        float PetalMaxClosedTime   = petalData.MaxClosedTime;
        float PetalMinOpenTime     = petalData.MinOpenTime;
        float PetalMaxOpenTime     = petalData.MaxOpenTime;
        float PetalRandomTimeValue = petalData.RandomTimeValue;

        for (int i = 0; i < flower.PetalLayerCount; i++)
        {
            float petalLayerClosedTime = (PetalMaxClosedTime - PetalMinClosedTime) / PetalLayerCount * i + PetalMinClosedTime;
            float petalLayerOpenTime   = (PetalMaxOpenTime - PetalMinOpenTime) / PetalLayerCount * i + PetalMinOpenTime;
            for (int j = 0; j < flower.PetalCounts[i]; j++)
            {
                PetalLocalData petalLocalData = new PetalLocalData();

                float RandomValue = Util.RandomRange(PetalRandomTimeValue);

                petalLocalData.Rotation   = (360 / PetalCounts[i] * j) + i * 30;
                petalLocalData.PetalLayer = i;
                petalLocalData.PetalIndex = j;
                petalLocalData.StartTime  = petalLayerClosedTime + RandomValue;
                petalLocalData.EndTime    = petalLayerOpenTime + RandomValue;
                petalLocalData.Color      = flower.PetalColor;

                dataList.Add(petalLocalData);
            }
        }
        return(dataList);
    }
Exemple #2
0
    private void InitFlowerChildren(GameObject flowerObject, FlowerLocalData flowerData, List <PetalLocalData> petalDatas)
    {
        flowerObject.AddComponent <FlowerLocalData>();
        flowerData = flowerObject.GetComponent <FlowerLocalData>().AssignValues(flowerData);
        GameObject Pistil = Util.InitWithParent(PistilPrefab, flowerObject.transform);
        GameObject Petals = Util.InitWithParent("Petals", flowerObject.transform);

        List <GameObject> tempPetalLayers = new List <GameObject>();

        for (int i = 0; i < flowerData.PetalLayerCount; ++i)
        {
            GameObject petalLayer = Util.InitWithParent("PetalLayer" + i, Petals.transform);
            tempPetalLayers.Add(petalLayer);
        }

        for (int i = 0; i < petalDatas.Count; ++i)
        {
            GameObject petal = Util.InitWithParent(PetalPrefab, tempPetalLayers[petalDatas[i].PetalLayer].transform);
            petal.AddComponent <PetalLocalData>();
            PetalLocalData petalData = petal.GetComponent <PetalLocalData>().AssignValues(petalDatas[i]);
            petal.transform.Rotate(new Vector3(0, petalData.Rotation, 0));
            petal.GetComponent <Animator>().SetFloat("Time", petalData.StartTime);
            petal.transform.Find("Plane").GetComponent <SkinnedMeshRenderer>().material.color = petalData.Color;

            PetalsList.Add(petal);
        }

        UpdateTransformOnSpline(flowerObject, CurrentMainSpline, 1f, 0f, 0f);
        flowerObject.SetActive(false);
    }
Exemple #3
0
    /// <summary> 활성화 상태에서 비활성화 상태 사이에 천천히 꽃이 지는 에니메이션 </summary>
    public void FallA(float progress)
    {
        List <int> tempDestroyIndex = new List <int>();

        // Flower Petal, Pistils Normalize Value에 따라 닫히거나 쪼그라듬
        for (int i = 0; i < PetalsList.Count; i++)
        {
            GameObject     p            = PetalsList[i];
            PetalLocalData pData        = p.GetComponent <PetalLocalData>();
            float          tempFallTime = Util.RandomRange(0f, 5f);
            bool           isOnFlower   = pData.isOnFlower;
            //if (pData.waitForDisable)
            //{
            //    tempDestroyIndex.Add(i);
            //}
            //else
            //{
            if (tempFallTime > 0 && tempFallTime < progress && isOnFlower)
            {
                p.GetComponent <Rigidbody>().isKinematic = false;
                p.GetComponent <Rigidbody>().useGravity  = true;
                p.GetComponent <Rigidbody>().AddForce(Vector3.up * 4);
            }
            else if (tempFallTime < 0f)
            {
                p.GetComponent <PetalLocalData>().isOnFlower = false;
            }
        }
        //}
        //for (var j = 0; j < tempDestroyIndex.Count; j++)
        //{
        //    PetalsList.RemoveAt(tempDestroyIndex[tempDestroyIndex.Count - 1 - j]);
        //    Destroy(PetalsList[tempDestroyIndex[tempDestroyIndex.Count - 1 - j]]);
        //}
    }
Exemple #4
0
 /// <summary> 꽃이 진 상태에서 봉우리까지의 상태로 에니메이션 (꽃이 고유하게 가진 Fall Time) </summary>
 public void RebloomA(float progress)
 {
     foreach (GameObject p in PetalsList)
     {
         PetalLocalData petalData     = p.GetComponent <PetalLocalData>();
         float          localProgress = CalculateTimeByMaxToMin(petalData.EndTime, petalData.StartTime, progress);
         SetAnimationNormalizedTime(p, "Time", localProgress);
     }
 }
Exemple #5
0
 public PetalLocalData(PetalLocalData data)
 {
     PetalLayer     = data.PetalLayer;
     PetalIndex     = data.PetalIndex;
     Rotation       = data.Rotation;
     Color          = data.Color;
     StartTime      = data.StartTime;
     EndTime        = data.EndTime;
     FallTime       = data.FallTime;
     isOnFlower     = data.isOnFlower;
     waitForDisable = data.waitForDisable;
 }