1 module ball;
2 
3 import unecht;
4 
5 import app;
6 
7 ///
8 final class BallLogic : UEComponent
9 {
10     mixin(UERegisterComponent!());
11 
12     TestControls controls;
13     static UEMaterial sharedMaterial;
14     
15     override void onCreate() {
16         super.onCreate;
17         
18         auto shape = entity.addComponent!UEShapeSphere;
19         _physicsBody = entity.addComponent!UEPhysicsBody;
20         _physicsBody.setDamping(0);
21         entity.addComponent!UEPhysicsColliderSphere;
22         
23         if(!sharedMaterial)
24         {
25             sharedMaterial = entity.addComponent!UEMaterial;
26             sharedMaterial.setProgram(UEMaterial.vs_shaded,UEMaterial.fs_shaded,"shaded");
27             sharedMaterial.uniforms.setColor(vec4(1,0,0,1));
28         }
29         shape.renderer.material = sharedMaterial;
30         
31         auto material = entity.addComponent!UEPhysicsMaterial;
32         material.materialInfo.bouncyness = 1.0f;
33         material.materialInfo.friction = 0;
34         
35         reset();
36     }
37     
38     override void onCollision(UEComponent _collider) {
39         if(_collider && _collider.entity.name == "border-out")
40         {
41             controls.onBallOut(_collider.entity);
42             reset();
43         }
44     }
45     
46     private void reset()
47     {
48         import std.random;
49         sceneNode.position = vec3(0,sceneNode.position.y,0);
50         _physicsBody.setVelocity(vec3(uniform(-5,5),0,uniform(-5,5)));
51     }
52     
53 private:
54     UEPhysicsBody _physicsBody;
55 }