Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2015
424
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Vala 6.04 KB | None | 0 0
  1. class Box : Clutter.Actor {
  2.     public Cogl.Color color = Cogl.Color.from_4f(0.0f, 0.0f, 0.0f, 1.0f);
  3.     public float px = 300;
  4.     public float py = 200;
  5.     public float pz = -100;
  6.     public float sx = 250;
  7.     public float sy = 250;
  8.     public float sz = 250;
  9.     private float _rx = 0.0f;
  10.     private float _ry = 0.0f;
  11.  
  12.     public float rx {
  13.         get { return _rx; }
  14.         set {
  15.             while (value > 360)
  16.                 value -= 360;
  17.             while (value < 0)
  18.                 value += 360;
  19.             _rx = value;
  20.         }
  21.     }
  22.  
  23.     public float ry {
  24.         get { return _ry; }
  25.         set {
  26.             while (value > 360)
  27.                 value -= 360;
  28.             while (value < 0)
  29.                 value += 360;
  30.             _ry = value;
  31.         }
  32.     }
  33.  
  34.     public override void paint() {
  35.         Cogl.push_matrix();
  36.         Cogl.translate(px, py, pz);
  37.         Cogl.rotate(rx, 1, 0, 0);
  38.         Cogl.rotate(ry, 0, 1, 0);
  39.         Cogl.set_depth_test_enabled(true);
  40.  
  41.         Cogl.TextureVertex front[4];
  42.         Cogl.TextureVertex back[4];
  43.         Cogl.TextureVertex left[4];
  44.         Cogl.TextureVertex right[4];
  45.         Cogl.TextureVertex top[4];
  46.         Cogl.TextureVertex bottom[4];
  47.  
  48.         Cogl.Color front_color = color;
  49.         front_color.set_red_float((float)(Math.cos(ry / 180.0f * Math.PI) * Math.cos(rx / 180.0f * Math.PI)));
  50.         Cogl.Color back_color = color;
  51.         back_color.set_red_float((float)(-Math.cos(ry / 180.0f * Math.PI) * Math.cos(rx / 180.0f * Math.PI)));
  52.         Cogl.Color left_color = color;
  53.         left_color.set_red_float((float)(Math.sin(ry / 180.0f * Math.PI) * Math.cos(rx / 180.0f * Math.PI)));
  54.         Cogl.Color right_color = color;
  55.         right_color.set_red_float((float)(-Math.sin(ry / 180.0f * Math.PI) * Math.cos(rx / 180.0f * Math.PI)));
  56.         Cogl.Color top_color = color;
  57.         top_color.set_red_float((float)(-Math.sin(rx / 180.0f * Math.PI)));
  58.         Cogl.Color bottom_color = color;
  59.         bottom_color.set_red_float((float)(Math.sin(rx / 180.0f * Math.PI)));
  60.  
  61.         front[0].x = -sx / 2;
  62.         front[0].y = -sy / 2;
  63.         front[0].z = sz / 2;
  64.         front[0].color = front_color;
  65.  
  66.         front[1].x = sx / 2;
  67.         front[1].y = -sy / 2;
  68.         front[1].z = sz / 2;
  69.         front[1].color = front_color;
  70.  
  71.         front[2].x = sx / 2;
  72.         front[2].y = sy / 2;
  73.         front[2].z = sz / 2;
  74.         front[2].color= front_color;
  75.  
  76.         front[3].x = -sx / 2;
  77.         front[3].y = sy / 2;
  78.         front[3].z = sz / 2;
  79.         front[3].color= front_color;
  80.  
  81.         Cogl.polygon(front, true);
  82.  
  83.         back[0].x = -sx / 2;
  84.         back[0].y = -sy / 2;
  85.         back[0].z = -sz / 2;
  86.         back[0].color = back_color;
  87.  
  88.         back[1].x = sx / 2;
  89.         back[1].y = -sy / 2;
  90.         back[1].z = -sz / 2;
  91.         back[1].color = back_color;
  92.  
  93.         back[2].x = sx / 2;
  94.         back[2].y = sy / 2;
  95.         back[2].z = -sz / 2;
  96.         back[2].color = back_color;
  97.  
  98.         back[3].x = -sx / 2;
  99.         back[3].y = sy / 2;
  100.         back[3].z = -sz / 2;
  101.         back[3].color = back_color;
  102.  
  103.         Cogl.polygon(back, true);
  104.  
  105.         left[0].x = -sx / 2;
  106.         left[0].y = -sy / 2;
  107.         left[0].z = sz / 2;
  108.         left[0].color = left_color;
  109.  
  110.         left[1].x = -sx / 2;
  111.         left[1].y = -sy / 2;
  112.         left[1].z = -sz / 2;
  113.         left[1].color = left_color;
  114.  
  115.         left[2].x = -sx / 2;
  116.         left[2].y = sy / 2;
  117.         left[2].z = -sz / 2;
  118.         left[2].color = left_color;
  119.  
  120.         left[3].x = -sx / 2;
  121.         left[3].y = sy / 2;
  122.         left[3].z = sz / 2;
  123.         left[3].color = left_color;
  124.  
  125.         Cogl.polygon(left, true);
  126.  
  127.         right[0].x = sx / 2;
  128.         right[0].y = -sy / 2;
  129.         right[0].z = sz / 2;
  130.         right[0].color = right_color;
  131.  
  132.         right[1].x = sx / 2;
  133.         right[1].y = -sy / 2;
  134.         right[1].z = -sz / 2;
  135.         right[1].color = right_color;
  136.  
  137.         right[2].x = sx / 2;
  138.         right[2].y = sy / 2;
  139.         right[2].z = -sz / 2;
  140.         right[2].color = right_color;
  141.  
  142.         right[3].x = sx / 2;
  143.         right[3].y = sy / 2;
  144.         right[3].z = sz / 2;
  145.         right[3].color = right_color;
  146.  
  147.         Cogl.polygon(right, true);
  148.  
  149.         top[0].x = -sx / 2;
  150.         top[0].y = -sy / 2;
  151.         top[0].z = sz / 2;
  152.         top[0].color = top_color;
  153.  
  154.         top[1].x = -sx / 2;
  155.         top[1].y = -sy / 2;
  156.         top[1].z = -sz / 2;
  157.         top[1].color = top_color;
  158.  
  159.         top[2].x = sx / 2;
  160.         top[2].y = -sy / 2;
  161.         top[2].z = -sz / 2;
  162.         top[2].color = top_color;
  163.  
  164.         top[3].x = sx / 2;
  165.         top[3].y = -sy / 2;
  166.         top[3].z = sz / 2;
  167.         top[3].color = top_color;
  168.  
  169.         Cogl.polygon(top, true);
  170.  
  171.         bottom[0].x = -sx / 2;
  172.         bottom[0].y = sy / 2;
  173.         bottom[0].z = sz / 2;
  174.         bottom[0].color = bottom_color;
  175.  
  176.         bottom[1].x = -sx / 2;
  177.         bottom[1].y = sy / 2;
  178.         bottom[1].z = -sz / 2;
  179.         bottom[1].color = bottom_color;
  180.  
  181.         bottom[2].x = sx / 2;
  182.         bottom[2].y = sy / 2;
  183.         bottom[2].z = -sz / 2;
  184.         bottom[2].color = bottom_color;
  185.  
  186.         bottom[3].x = sx / 2;
  187.         bottom[3].y = sy / 2;
  188.         bottom[3].z = sz / 2;
  189.         bottom[3].color = bottom_color;
  190.  
  191.         Cogl.polygon(bottom, true);
  192.  
  193.         Cogl.pop_matrix();
  194.    }
  195.  
  196.     public static int main(string[] args) {
  197.         Clutter.init(ref args);
  198.         var stage = new Clutter.Stage();
  199.         stage.background_color = Clutter.Color.from_string("#aed");
  200.         stage.hide.connect(Clutter.main_quit);
  201.  
  202.         var box = new Box();
  203.         stage.add_child(box);
  204.         stage.show();
  205.  
  206.         var transition = new Clutter.PropertyTransition("ry");
  207.         transition.animatable = box;
  208.         transition.duration = 1000  ;
  209.         transition.set_from_value(0.0f);
  210.         transition.set_to_value(60.0f);
  211.         transition.auto_reverse = true;
  212.         box.add_transition("rotate", transition);
  213.  
  214.         Clutter.main();
  215.  
  216.         return 0;
  217.     }
  218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement