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 }