mission is possible 2
[carveJwlIkooP6JGAAIwe30JlM.git] / pointcloud.h
index f29197f6e491bb13e8f1c4caac8446733be3aa1b..4775dd747fd2b18affbb708d0ac73648d2188420 100644 (file)
@@ -14,9 +14,11 @@ struct pointcloud{
    f64 anim_start;
    f32 visibility;
    enum pointcloud_anim{
-      k_pointcloud_anim_opening = 0,
-      k_pointcloud_anim_hiding  = 1,
-      k_pointcloud_anim_idle    = 2
+      k_pointcloud_anim_opening,
+      k_pointcloud_anim_hiding,
+      k_pointcloud_anim_idle_any,
+      k_pointcloud_anim_idle_open,
+      k_pointcloud_anim_idle_closed,
    }
    anim;
 }
@@ -102,23 +104,35 @@ static void pointcloud_init(void)
    shader_point_map_register();
 }
 
+static void pointcloud_animate( enum pointcloud_anim anim )
+{
+   pointcloud.anim = anim;
+   pointcloud.anim_start = vg.time;
+}
+
+static int pointcloud_idle(void)
+{
+   if( pointcloud.anim >= k_pointcloud_anim_idle_any ) return 1;
+   else return 0;
+}
+
 static void pointcloud_render( world_instance *world, camera *cam, m4x3f model )
 {
-   if( pointcloud.anim != k_pointcloud_anim_idle ){
-      f32 const k_transition = 1.0f;
+   if( pointcloud.anim < k_pointcloud_anim_idle_any ){
+      f32 const k_transition = 0.6f;
       f32 t = (vg.time - pointcloud.anim_start) / k_transition;
 
       if( pointcloud.anim == k_pointcloud_anim_hiding ){
          if( t > 1.0f ){
             pointcloud.visibility = 0.0f;
-            pointcloud.anim = k_pointcloud_anim_idle;
+            pointcloud.anim = k_pointcloud_anim_idle_closed;
          }
          else pointcloud.visibility = 1.0f-t;
       }
       else if( pointcloud.anim == k_pointcloud_anim_opening ){
          if( t > 1.0f ){
             pointcloud.visibility = 1.0f;
-            pointcloud.anim = k_pointcloud_anim_idle;
+            pointcloud.anim = k_pointcloud_anim_idle_open;
          }
          else pointcloud.visibility = t;
       }