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 }