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