Mercurial > hg > Game > Games
diff Orchestland/Assets/LeapMotion/DemoResources/Scripts/FlowerGrower.cs @ 3:0030a1b971fb default tip
merge
author | Yuta ANSE <e135745@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2015 23:23:43 +0900 |
parents | f7675884f2a1 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Orchestland/Assets/LeapMotion/DemoResources/Scripts/FlowerGrower.cs Fri Jul 17 23:23:43 2015 +0900 @@ -0,0 +1,117 @@ +/******************************************************************************\ +* Copyright (C) Leap Motion, Inc. 2011-2014. * +* Leap Motion proprietary. Licensed under Apache 2.0 * +* Available at http://www.apache.org/licenses/LICENSE-2.0.html * +\******************************************************************************/ + +using UnityEngine; +using System.Collections; + +public class FlowerGrower : MonoBehaviour { + + public float growthRate = 1.0f; + public float deathRate = 1.0f; + public float growthProgress = 0.0f; + + public StemMesh stem; + public float stemStartGrowth = 0.0f; + public float stemEndGrowth = 0.6f; + + public Transform flowerHead; + public float flowerHeadStartGrowth = 0.5f; + public float flowerHeadEndGrowth = 0.8f; + + public Light lightSource; + public float lightSourceStartGrowth = 0.0f; + public float lightSourceEndGrowth = 0.8f; + + public PetalMesh[] leaves; + public float leavesStartGrowth = 0.4f; + public float leavesEndGrowth = 0.8f; + + public PetalMesh[] pedals; + public float pedalsStartGrowth = 0.8f; + public float pedalsEndGrowth = 1.0f; + + public FlowerBloom flowerToBloom; + + private Vector3 flower_head_scale_ = Vector3.zero; + private float light_source_intensity_ = 0.0f; + private bool growing_ = true; + private bool dieing_ = false; + + void Start() { + flower_head_scale_ = flowerHead.localScale; + light_source_intensity_ = lightSource.intensity; + flowerHead.localScale = Vector3.zero; + + foreach (PetalMesh pedal in pedals) + pedal.growthProgress = 0; + + foreach (PetalMesh leaf in leaves) + leaf.growthProgress = 0; + } + + float ComputeGrowthAmount(float start, float end) { + return Mathf.Clamp((growthProgress - start) / (end - start), 0.0f, 1.0f); + } + + void SetSizes() { + stem.growthProgress = ComputeGrowthAmount(stemStartGrowth, stemEndGrowth); + + float flower_head_growth = ComputeGrowthAmount(flowerHeadStartGrowth, flowerHeadEndGrowth); + flowerHead.localScale = flower_head_growth * flower_head_scale_; + + float light_source_growth = ComputeGrowthAmount(lightSourceStartGrowth, lightSourceEndGrowth); + lightSource.intensity = light_source_growth * light_source_intensity_; + + float leaf_growth = ComputeGrowthAmount(leavesStartGrowth, leavesEndGrowth); + foreach (PetalMesh leaf in leaves) + leaf.growthProgress = leaf_growth; + + float pedal_growth = ComputeGrowthAmount(pedalsStartGrowth, pedalsEndGrowth); + foreach (PetalMesh pedal in pedals) + pedal.growthProgress = pedal_growth; + } + + public void RemoveStump() { + stem.RemoveStump(); + } + + public bool IsStumpClear() { + return stem.IsStumpClear(); + } + + public void Die() { + dieing_ = true; + } + + public bool IsDead() { + return growthProgress == 0.0f; + } + + public bool IsBroken() { + return stem.IsBroken(); + } + + public bool IsGrabbed() { + GrabbableObject[] grabbables = GetComponentsInChildren<GrabbableObject>(); + foreach (GrabbableObject grabbable in grabbables) { + if (grabbable.IsGrabbed()) + return true; + } + return false; + } + + void Update() { + if (dieing_) + growthProgress = Mathf.Clamp(growthProgress - Time.deltaTime * deathRate, 0.0f, 1.0f); + else if (growing_) + growthProgress = Mathf.Clamp(growthProgress + Time.deltaTime * growthRate, 0.0f, 1.0f); + + SetSizes(); + + if (growthProgress == 1.0f && flowerToBloom != null) + flowerToBloom.open = true; + } +}