package Ġc ga . exercise . game ĊĊ Ċ import Ġc ga . exercise . components . camera . Tr on Camera Ċ import Ġc ga . exercise . components . geometry .* Ċ import Ġc ga . exercise . components . shader . Shader Program Ċ import Ġc ga . exercise . components . texture . Texture 2 D Ċ import Ġc ga . framework . GLE rror Ċ import Ġc ga . framework . Game Window Ċ import Ġc ga . framework . Model Loader Ċ import Ġc ga . framework . OBJ Loader Ċ import Ġorg . j om l . Vector 3 f Ċ import Ġorg . lwjgl . opengl . GL 1 1 Ċ import Ġorg . lwjgl . opengl . GL 1 5 .* Ċ import Ġorg . j om l . Math Ċ import Ġorg . j om l . Vector 2 f Ċ import Ġorg . lwjgl . glfw . GLFW .* ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby ĠF ab ian Ġon Ġ 1 6 . 0 9 . 2 0 1 7 . Ċ Ġ*/ Ċ class ĠScene ( private Ġval Ġwindow : ĠGame Window ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġstatic Shader : ĠShader Program ĊĠĠĠ Ġprivate Ġval Ġdr one Shader : Shader Program ĊĠĠĠ Ġprivate Ġval Ġcloud Shader : Shader Program ĊĠĠĠ Ġprivate Ġval Ġring Shader : Shader Program ĊĊĊĠĠĠ Ġ// Object Loader ĊĊĠĠĠĠ Ġ// Object Ġl aden ĊĠĠĠ Ġprivate Ġval Ġres Ground Ġ: ĠOBJ Loader . OBJ Result Ġ= ĠOBJ Loader . load OBJ (" assets / models / ground . obj ") ĊĠĠĠ Ġprivate Ġval Ġres Cloud : OBJ Loader . OBJ Result = OBJ Loader . load OBJ (" assets / cloud / cloud . obj ") ĊĠĠĠ Ġprivate Ġvar Ġdr one R end Ġ= ĠModel Loader . load Model (" assets / drone / drone . obj ", Math . to Radians ( 0 . 0 f ), Math . to Radians ( 9 0 . 0 f ), Ġ 0 . 0 f ) Ġ?: Ġthrow ĠIllegalArgumentException (" Could Ġnot Ġload Ġthe Ġmodel ") ĊĠĠĠ Ġprivate Ġvar Ġring R end = Model Loader . load Model (" assets / ring / checkpoint Ġring 2 . obj ", Math . to Radians ( 0 . 0 f ), Math . to Radians ( 9 0 . 0 f ), Ġ 0 . 0 f ) Ġ?: Ġthrow ĠIllegalArgumentException (" Could Ġnot Ġload Ġthe Ġmodel ") ĊĠĠĠ Ġprivate Ġvar Ġring R end 1 = Model Loader . load Model (" assets / ring / checkpoint Ġring 2 . obj ", Math . to Radians ( 0 . 0 f ), Math . to Radians ( 9 0 . 0 f ), Ġ 0 . 0 f ) Ġ?: Ġthrow ĠIllegalArgumentException (" Could Ġnot Ġload Ġthe Ġmodel ") ĊĠĠĠ Ġprivate Ġvar Ġring R end 2 = Model Loader . load Model (" assets / ring / checkpoint Ġring 2 . obj ", Math . to Radians ( 0 . 0 f ), Math . to Radians ( 9 0 . 0 f ), Ġ 0 . 0 f ) Ġ?: Ġthrow ĠIllegalArgumentException (" Could Ġnot Ġload Ġthe Ġmodel ") ĊĠĠĠ Ġprivate Ġvar Ġring R end 3 = Model Loader . load Model (" assets / ring / checkpoint Ġring 2 . obj ", Math . to Radians ( 0 . 0 f ), Math . to Radians ( 9 0 . 0 f ), Ġ 0 . 0 f ) Ġ?: Ġthrow ĠIllegalArgumentException (" Could Ġnot Ġload Ġthe Ġmodel ") ĊĠĠĠ Ġprivate Ġvar Ġring R end 4 = Model Loader . load Model (" assets / ring / checkpoint Ġring 2 . obj ", Math . to Radians ( 0 . 0 f ), Math . to Radians ( 9 0 . 0 f ), Ġ 0 . 0 f ) Ġ?: Ġthrow ĠIllegalArgumentException (" Could Ġnot Ġload Ġthe Ġmodel ") ĊĊĠĠĠĠ Ġ// Mesh ĠfÃ¼r Ġdie ĠDaten Ġvon ĠVertex Ġund ĠIndex Ġl aden ĊĠĠĠ Ġprivate Ġval Ġobj Mesh Ground Ġ: ĠOBJ Loader . OBJ Mesh Ġ= Ġres Ground . objects [ 0 ]. meshes [ 0 ] ĊĠĠĠ Ġprivate Ġval Ġobj Mesh Cloud : OBJ Loader . OBJ Mesh = res Cloud . objects [ 0 ]. meshes [ 0 ] ĊĊĠĠĠ Ġ// Mes hes ĊĠĠĠ Ġ// private Ġvar Ġground Mesh Ġ: ĠMesh ĊĠĠĠ Ġprivate Ġval Ġcloud Mesh : Mesh ĊĠĠĠ Ġprivate Ġvar Ġplane Bottom Mesh Ġ: ĠMesh ĊĠĠĠ Ġprivate Ġvar Ġplane Back Mesh Ġ: ĠMesh ĊĠĠĠ Ġprivate Ġvar Ġplane Front Mesh Ġ: ĠMesh ĊĠĠĠ Ġprivate Ġvar Ġplane Left Mesh Ġ: ĠMesh ĊĠĠĠ Ġprivate Ġvar Ġplane Right Mesh Ġ: ĠMesh ĊĠĠĠ Ġprivate Ġvar Ġplane Top Mesh Ġ: ĠMesh ĊĊĊĊĠĠĠ Ġ// Render ables ĊĠĠĠ Ġprivate Ġvar Ġground R end Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 1 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 2 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 3 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 4 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 5 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 6 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 7 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 8 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 9 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 1 0 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 1 2 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 1 3 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 1 4 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 1 5 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 1 6 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 1 7 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 1 8 Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġval Ġcloud R end 1 9 Ġ= ĠRender able () ĊĊĊĠĠĠ Ġ// Planes ĊĠĠĠ Ġprivate Ġvar Ġplane Bottom R end Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġvar Ġplane Back R end Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġvar Ġplane Front R end Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġvar Ġplane Left R end Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġvar Ġplane Right R end Ġ= ĠRender able () ĊĠĠĠ Ġprivate Ġvar Ġplane Top R end Ġ= ĠRender able () ĊĊĊĠĠĠ Ġ// Camera ĊĠĠĠ Ġprivate Ġvar Ġtr on Camera Ġ Ġ= ĠTr on Camera () ĊĊĠĠĠ Ġ// Ma us position ĠfÃ¼r ĠB ew eg ung ĊĠĠĠ Ġprivate Ġvar Ġold Mouse Pos X Ġ: ĠDouble Ġ= Ġ- 1 . 0 ĊĠĠĠ Ġprivate Ġvar Ġold Mouse Pos Y Ġ: ĠDouble Ġ= Ġ- 1 . 0 ĊĠĠĠ Ġprivate Ġvar Ġpr ue f Boolean Ġ: ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ// Pr Ã¼ f variable ĊĠĠĠ Ġprivate Ġvar Ġring Boolean Ġ: ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġring Boolean 1 Ġ: ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġring Boolean 2 Ġ: ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġring Boolean 3 Ġ: ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġring Boolean 4 Ġ: ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġvar Ġring zahl Ġ= Ġ 2 ĊĊĠĠĠ Ġ// scene Ġsetup ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġstatic Shader Ġ= ĠShader Program (" assets / shaders / tron _ vert . glsl ", Ġ" assets / shaders / tron _ frag . glsl ", 0 ) ĊĠĠĠĠĠĠĠ Ġdr one Shader = ĠShader Program (" assets / shaders / drone _ vert . glsl "," assets / shaders / drone _ frag . glsl ", 1 ) ĊĠĠĠĠĠĠĠ Ġcloud Shader = ĠShader Program (" assets / shaders / cloud _ vert . glsl "," assets / shaders / cloud _ frag . glsl ", 2 ) ĊĠĠĠĠĠĠĠ Ġring Shader = ĠShader Program (" assets / shaders / ring _ vert . glsl "," assets / shaders / ring _ frag . glsl ", 3 ) ĊĊĠĠĠĠĠĠĠ Ġ// initial Ġop eng l Ġstate ĊĠĠĠĠĠĠĠ Ġ// gl Clear Color ( 0 . 6 f , Ġ 1 . 0 f , Ġ 1 . 0 f , Ġ 1 . 0 f ); ĠG LError . check Throw () ĊĠĠĠĠĠĠĠ Ġgl Clear Color ( 0 . 0 f , Ġ 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f ); ĠG LError . check Throw () ĊĠĠĠĠĠĠĠ Ġgl Disable ( GL _ C ULL _ FACE ); ĠG LError . check Throw () ĊĠĠĠĠĠĠĠ Ġgl Enable ( GL _ C ULL _ FACE ) ĊĠĠĠĠĠĠĠ Ġgl Front Face ( GL _ CC W ) ĊĠĠĠĠĠĠĠ Ġgl Cull Face ( GL _ BACK ) ĊĠĠĠĠĠĠĠ Ġgl Enable ( GL _ DEPTH _ TEST ); ĠG LError . check Throw () ĊĠĠĠĠĠĠĠ Ġgl Depth Func ( GL _ LESS ); ĠG LError . check Throw () ĊĊĊĠĠĠĠĠĠĠ Ġ// Attribute Vertex Ġdefin ieren ĊĠĠĠĠĠĠĠ Ġval Ġstride Ġ= Ġ 8 Ġ* Ġ 4 ĊĠĠĠĠĠĠĠ Ġval Ġcloud Stride = 6 * 4 ĊĊĠĠĠĠĠĠĠ Ġval Ġvertex Attribute Position Ġ= ĠVertex Attribute ( 3 , ĠGL _ FLOAT , Ġstride , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġvertex Attribute Texture Ġ= ĠVertex Attribute ( 2 , ĠGL _ FLOAT , Ġstride , Ġ 3 * 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġvertex Attribute Color Ġ= ĠVertex Attribute ( 3 , ĠGL _ FLOAT , Ġstride , Ġ 5 * 4 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcloud Vertex Attribute Position = Vertex Attribute ( 3 , ĠGL _ FLOAT , cloud Stride , 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcloud Vertex Attribute Normals = Vertex Attribute ( 3 , ĠGL _ FLOAT , cloud Stride , 3 * 4 ) ĊĊĠĠĠĠĠĠĠ Ġ// Attribute Ġz usam men fÃ¼ gen ĊĠĠĠĠĠĠĠ Ġval Ġvertex Attributes Ġ= ĠarrayOf ( vertex Attribute Position , Ġvertex Attribute Texture , Ġvertex Attribute Color ) ĊĠĠĠĠĠĠĠ Ġval Ġcloud Vertex Attributes = ĠarrayOf ( cloud Vertex Attribute Position , cloud Vertex Attribute Normals ) ĊĊĠĠĠĠĠĠĠ Ġ// Material ĊĠĠĠĠĠĠĠĠ Ġ// lad en ĊĠĠĠĠĠĠĠ Ġval Ġemit Tex Ġ= ĠTexture 2 D (" assets / textures / ground _ emit . png ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġdiff Tex Ġ= ĠTexture 2 D (" assets / textures / ground _ diff . png ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġspec Tex Ġ= ĠTexture 2 D (" assets / textures / ground _ spec . png ", Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcloud Tex = Texture 2 D (" assets / cloud / white . t ga ", true ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPlane ĠMaterial ĊĠĠĠĠĠĠĠ Ġval Ġplane Bottom Tex Ġ= ĠTexture 2 D (" assets / textures / sky box / bottom . jpg ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġplane Back Tex Ġ= ĠTexture 2 D (" assets / textures / sky box / back . jpg ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġplane Front Tex Ġ= ĠTexture 2 D (" assets / textures / sky box / front . jpg ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġplane Left Tex Ġ= ĠTexture 2 D (" assets / textures / sky box / left . jpg ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġplane Right Tex Ġ= ĠTexture 2 D (" assets / textures / sky box / right . jpg ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġplane Top Tex Ġ= ĠTexture 2 D (" assets / textures / sky box / top . jpg ", Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// er ze ue gn ĊĠĠĠĠĠĠĠ Ġ// val Ġground Material Ġ= ĠMaterial ( diff Tex , Ġemit Tex , Ġspec Tex , Ġ 6 0 . 0 f , ĠVector 2 f ( 6 4 . 0 f , 6 4 . 0 f )) ĊĠĠĠĠĠĠĠ Ġval Ġcloud Material = Material ( cloud Tex , cloud Tex , cloud Tex , 6 0 . 0 f , ĠVector 2 f ( 6 4 . 0 f , 6 4 . 0 f )) ĊĠĠĠĠĠĠĠ Ġval Ġplane Bottom Material Ġ= ĠMaterial ( plane Bottom Tex , plane Bottom Tex , plane Bottom Tex , 6 0 . 0 f , ĠVector 2 f ( 6 4 . 0 f , 6 4 . 0 f )) ĊĠĠĠĠĠĠĠ Ġval Ġplane Back Material Ġ= ĠMaterial ( plane Back Tex , plane Back Tex , plane Back Tex , 6 0 . 0 f , ĠVector 2 f ( 6 4 . 0 f , 6 4 . 0 f )) ĊĠĠĠĠĠĠĠ Ġval Ġplane Front Material Ġ= ĠMaterial ( plane Front Tex , plane Front Tex , plane Front Tex , 6 0 . 0 f , ĠVector 2 f ( 6 4 . 0 f , 6 4 . 0 f )) ĊĠĠĠĠĠĠĠ Ġval Ġplane Left Material Ġ= ĠMaterial ( plane Left Tex , plane Left Tex , plane Left Tex , 6 0 . 0 f , ĠVector 2 f ( 6 4 . 0 f , 6 4 . 0 f )) ĊĠĠĠĠĠĠĠ Ġval Ġplane Right Material Ġ= ĠMaterial ( plane Right Tex , plane Right Tex , plane Right Tex , 6 0 . 0 f , ĠVector 2 f ( 6 4 . 0 f , 6 4 . 0 f )) ĊĠĠĠĠĠĠĠ Ġval Ġplane Top Material Ġ= ĠMaterial ( plane Top Tex , plane Top Tex , plane Top Tex , 6 0 . 0 f , ĠVector 2 f ( 6 4 . 0 f , 6 4 . 0 f )) ĊĊĠĠĠĠĠĠĠ Ġ// Text ur parameter ĠfÃ¼r ĠOb jek tende ĊĠĠĠĠĠĠĠ Ġemit Tex . set Tex Params ( GL _ REPEAT , ĠGL _ REPEAT , ĠGL 1 1 . GL _ LINEAR _ MIP MAP _ LINEAR , ĠGL _ LINEAR ) ĠĠĠĠ Ġ// Linear Ġ= Ġz wis chen Ġfar bw erten Ġinterpol ieren ĊĠĠĠĠĠĠĠ Ġdiff Tex . set Tex Params ( GL _ REPEAT , ĠGL _ REPEAT , ĠGL 1 1 . GL _ LINEAR _ MIP MAP _ LINEAR , ĠGL _ LINEAR ) ĊĠĠĠĠĠĠĠ Ġspec Tex . set Tex Params ( GL _ REPEAT , ĠGL _ REPEAT , ĠGL 1 1 . GL _ LINEAR _ MIP MAP _ LINEAR , ĠGL _ LINEAR ) ĊĊĠĠĠĠĠĠĠ Ġ// Mesh Ġer zeug en ĊĠĠĠĠĠĠĠ Ġ// ground Mesh Ġ= ĠMesh ( obj Mesh Ground . vertex Data , Ġobj Mesh Ground . index Data , Ġvertex Attributes , Ġground Material ) ĊĠĠĠĠĠĠĠ Ġcloud Mesh = Mesh ( obj Mesh Cloud . vertex Data , obj Mesh Cloud . index Data , cloud Vertex Attributes , Ġcloud Material ) ĊĊĠĠĠĠĠĠĠ Ġplane Bottom Mesh Ġ= ĠMesh ( obj Mesh Ground . vertex Data , Ġobj Mesh Ground . index Data , Ġvertex Attributes , Ġplane Bottom Material ) ĊĠĠĠĠĠĠĠ Ġplane Back Mesh Ġ= ĠMesh ( obj Mesh Ground . vertex Data , Ġobj Mesh Ground . index Data , Ġvertex Attributes , Ġplane Back Material ) ĊĠĠĠĠĠĠĠ Ġplane Front Mesh Ġ= ĠMesh ( obj Mesh Ground . vertex Data , Ġobj Mesh Ground . index Data , Ġvertex Attributes , plane Front Material ) ĊĠĠĠĠĠĠĠ Ġplane Left Mesh Ġ= ĠMesh ( obj Mesh Ground . vertex Data , Ġobj Mesh Ground . index Data , Ġvertex Attributes , Ġplane Left Material ) ĊĠĠĠĠĠĠĠ Ġplane Right Mesh Ġ= ĠMesh ( obj Mesh Ground . vertex Data , Ġobj Mesh Ground . index Data , Ġvertex Attributes , Ġplane Right Material ) ĊĠĠĠĠĠĠĠ Ġplane Top Mesh Ġ= ĠMesh ( obj Mesh Ground . vertex Data , Ġobj Mesh Ground . index Data , Ġvertex Attributes , Ġplane Top Material ) ĊĊĊĠĠĠĠĠĠĠ Ġ// Mes hes Ġzu ĠRand erable Ġhin zufÃ¼gen ĊĠĠĠĠĠĠĠ Ġ// ground R end . mesh List . add ( ground Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 2 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 3 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 4 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 5 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 6 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 7 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 8 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 9 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 0 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 2 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 3 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 4 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 5 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 6 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 7 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 8 . mesh List . add ( cloud Mesh ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 9 . mesh List . add ( cloud Mesh ) ĊĊĠĠĠĠĠĠĠ Ġplane Bottom R end . mesh List . add ( plane Bottom Mesh ) ĊĠĠĠĠĠĠĠ Ġplane Back R end . mesh List . add ( plane Back Mesh ) ĊĠĠĠĠĠĠĠ Ġplane Front R end . mesh List . add ( plane Front Mesh ) ĊĠĠĠĠĠĠĠ Ġplane Left R end . mesh List . add ( plane Left Mesh ) ĊĠĠĠĠĠĠĠ Ġplane Right R end . mesh List . add ( plane Right Mesh ) ĊĠĠĠĠĠĠĠ Ġplane Top R end . mesh List . add ( plane Top Mesh ) ĊĊĊĠĠĠĠĠĠĠ Ġ// D ro h ne ĠSk al ieren / Transform ieren ĊĠĠĠĠĠĠĠ Ġdr one R end . scale Local ( Vector 3 f ( 0 . 0 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġdr one R end . translate Local ( Vector 3 f ( 0 . 0 f , 1 0 0 0 0 . 0 f ,- 1 . 0 f )) ĊĊĠĠĠĠĠĠĠ Ġ// Ring ĠSk al ieren / Tran form ieren ĊĠĠĠĠĠĠĠ Ġring R end . scale Local ( Vector 3 f ( 0 . 0 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġring R end . translate Local ( random Position ()) ĊĠĠĠĠĠĠĠ Ġring R end 1 . scale Local ( Vector 3 f ( 0 . 0 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġring R end 1 . translate Local ( random Position ()) ĊĠĠĠĠĠĠĠ Ġring R end 2 . scale Local ( Vector 3 f ( 0 . 0 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġring R end 2 . translate Local ( random Position ()) ĊĠĠĠĠĠĠĠ Ġring R end 3 . scale Local ( Vector 3 f ( 0 . 0 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġring R end 3 . translate Local ( random Position ()) ĊĠĠĠĠĠĠĠ Ġring R end 4 . scale Local ( Vector 3 f ( 0 . 0 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġring R end 4 . translate Local ( random Position ()) ĊĊĠĠĠĠĠĠĠ Ġ// W ol ken ĠSk al ieren / Transform ieren ĊĠĠĠĠĠĠĠ Ġcloud R end . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 . translate Local ( Vector 3 f (- 1 0 0 . 0 f , Ġ 5 0 . 0 f ,- 1 0 0 . 0 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 2 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 2 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 3 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 3 . translate Local ( Vector 3 f ( 1 5 0 0 . 0 f , 5 0 . 0 f ,- 1 . 0 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 4 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 4 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 5 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 5 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 6 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 6 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 7 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 7 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 8 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 8 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 9 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 9 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 0 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 0 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 2 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 2 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 3 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 3 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 4 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 4 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 5 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 5 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 6 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 6 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 7 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 7 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 8 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 8 . translate Local ( random Position Cloud ()) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 9 . scale Local ( Vector 3 f ( 0 . 0 0 2 5 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 9 . translate Local ( random Position Cloud ()) ĊĊĠĠĠĠĠĠĠ Ġ// Planes Ġrot ieren / transform ieren ĊĠĠĠĠĠĠĠ Ġplane Top R end . rotate Local ( Math . to Radians ( 1 8 0 . 0 f ), Ġ 0 f , 0 f ) Ġ// a usr icht ung ĊĠĠĠĠĠĠĠ Ġplane Top R end . translate Local ( Vector 3 f ( 0 f ,- 3 2 . 8 3 f , 0 f )) Ġ// hÃ¶ he ĊĊĠĠĠĠĠĠĠ Ġplane Left R end . rotate Local ( Math . to Radians ( 9 0 . 0 f ), ĠMath . PI . toFloat (), 0 f ) ĊĠĠĠĠĠĠĠ Ġplane Left R end . translate Local ( Vector 3 f ( 0 f ,- 2 2 . 3 8 f , 2 2 . 3 8 f )) ĊĊĠĠĠĠĠĠĠ Ġplane Right R end . rotate Local ( Math . to Radians (- 9 0 . 0 f ), Ġ 0 f , 0 f ) ĊĠĠĠĠĠĠĠ Ġplane Right R end . translate Local ( Vector 3 f ( 0 f ,- 2 2 . 3 8 f , 2 2 . 3 8 f )) ĊĊĊĠĠĠĠĠĠĠ Ġplane Front R end . rotate Local ( Math . to Radians ( 9 0 . 0 f ), Ġ 0 f , Math . to Radians ( 9 0 . 0 f )) ĊĠĠĠĠĠĠĠ Ġplane Front R end . translate Local ( Vector 3 f ( 0 f ,- 2 2 . 3 8 f ,- 2 2 . 3 8 f )) ĊĊĠĠĠĠĠĠĠ Ġplane Back R end . rotate Local ( Math . to Radians ( 9 0 . 0 f ), Ġ 0 f , Math . to Radians (- 9 0 . 0 f )) ĊĠĠĠĠĠĠĠ Ġplane Back R end . translate Local ( Vector 3 f ( 0 f ,- 2 2 . 3 8 f ,- 2 2 . 3 8 f )) ĊĊĠĠĠĠĠĠĠ Ġtr on Camera . parent Ġ= Ġdr one R end ĊĊĠĠĠĠĠĠĠ Ġ// K amer at rans formation en ĊĠĠĠĠĠĠĠ Ġtr on Camera . rotate Local ( Math . to Radians (- 3 5 . 0 f ), Ġ 0 . 0 f , Ġ 0 . 0 f ) ĊĠĠĠĠĠĠĠ Ġ// Be i Ġdr one ĠW erte Ġwe gen Ġder ĠSk al ierung Ġso Ġho ch ĊĠĠĠĠĠĠĠ Ġtr on Camera . translate Local ( Vector 3 f ( 0 . 0 f , Ġ 1 . 0 f , Ġ 4 0 0 0 . 0 f )) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġrender ( dt : ĠFloat , Ġt : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgl Clear ( GL _ COLOR _ BUFFER _ BIT Ġor ĠGL _ DEPTH _ BUFFER _ BIT ) ĊĊĠĠĠĠĠĠĠ Ġdr one Shader . use () ĊĠĠĠĠĠĠĠ Ġtr on Camera . bind ( drone Shader ) ĊĠĠĠĠĠĠĠ Ġdr one Shader . set Uniform (" color Change ", ĠVector 3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f )) ĊĠĠĠĠĠĠĠ Ġplane Bottom R end . render ( drone Shader ) ĊĠĠĠĠĠĠĠ Ġplane Top R end . render ( drone Shader ) ĊĠĠĠĠĠĠĠ Ġplane Left R end . render ( drone Shader ) ĊĠĠĠĠĠĠĠ Ġplane Right R end . render ( drone Shader ) ĊĠĠĠĠĠĠĠ Ġplane Front R end . render ( drone Shader ) ĊĠĠĠĠĠĠĠ Ġplane Back R end . render ( drone Shader ) ĊĠĠĠĠĠĠĠ Ġdr one R end . render ( drone Shader ) ĊĊĠĠĠĠĠĠĠ Ġring Shader . use () ĊĠĠĠĠĠĠĠ Ġtr on Camera . bind ( ring Shader ) ĊĠĠĠĠĠĠĠ Ġring Shader . set Uniform (" color Change ", ĠVector 3 f ( 1 . 0 f , 0 . 0 f , 0 . 5 f )) ĊĠĠĠĠĠĠĠ Ġif Ġ( ring Boolean ) ring R end . render ( ring Shader ) ĊĠĠĠĠĠĠĠ Ġif Ġ( ring Boolean 1 ) ring R end 1 . render ( ring Shader ) ĊĠĠĠĠĠĠĠ Ġif Ġ( ring Boolean 2 ) ring R end 2 . render ( ring Shader ) ĊĠĠĠĠĠĠĠ Ġif Ġ( ring Boolean 3 ) ring R end 3 . render ( ring Shader ) ĊĠĠĠĠĠĠĠ Ġif Ġ( ring Boolean 4 ) ring R end 4 . render ( ring Shader ) ĊĊĊĠĠĠĠĠĠĠ Ġcloud Shader . use () ĊĠĠĠĠĠĠĠ Ġtr on Camera . bind ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud Shader . set Uniform (" color Change ", ĠVector 3 f ( 1 . 0 f )) ĊĠĠĠĠĠĠĠ Ġcloud R end . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 2 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 3 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 4 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 5 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 6 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 7 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 8 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 9 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 0 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 2 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 3 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 4 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 5 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 6 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 7 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 8 . render ( cloud Shader ) ĊĠĠĠĠĠĠĠ Ġcloud R end 1 9 . render ( cloud Shader ) ĊĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// W ol ken ĠPosition Ġ--> ĠDa Ġsie Ġeine Ġandere ĠGr Ã¶ ÃŁ e Ġhaben , Ġb ra uch en Ġsie Ġeine Ġeig ene ĠFunktion ĊĠĠĠ Ġfun Ġrandom Position Cloud (): ĠVector 3 f Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġrandom Position X Ġ= Ġ(- 1 0 0 0 0 .. 1 0 0 0 0 ). random () ĊĠĠĠĠĠĠĠ Ġvar Ġrandom Position Y Ġ= Ġ( 2 0 0 .. 5 0 0 0 ). random () ĊĠĠĠĠĠĠĠ Ġvar Ġrandom Position Z Ġ= Ġ(- 1 0 0 0 0 .. 1 0 0 0 0 ). random () ĊĠĠĠĠĠĠĠ Ġreturn ĠVector 3 f ( random Position X . toFloat (), random Position Y . toFloat (), random Position Z . toFloat ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrandom Position (): ĠVector 3 f Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġrandom Position X Ġ= Ġ(- 5 0 0 0 0 .. 5 0 0 0 0 ). random () ĊĠĠĠĠĠĠĠ Ġvar Ġrandom Position Y Ġ= Ġ( 1 5 0 0 .. 5 0 0 0 0 ). random () ĊĠĠĠĠĠĠĠ Ġvar Ġrandom Position Z Ġ= Ġ(- 5 0 0 0 0 .. 5 0 0 0 0 ). random () ĊĠĠĠĠĠĠĠ Ġreturn ĠVector 3 f ( random Position X . toFloat (), random Position Y . toFloat (), random Position Z . toFloat ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// All geme ines Pr Ã¼ fen Ġauf ĠK oll ision ĊĠĠĠ Ġfun Ġcollision Check ( drone : Render able , Ġobject 2 : Render able ): ĠFloat { ĊĠĠĠĠĠĠĠ Ġval Ġx Distance = drone . getPosition (). x - object 2 . getPosition (). x ĊĠĠĠĠĠĠĠ Ġval Ġy Distance = drone . getPosition (). y - object 2 . getPosition (). y ĊĠĠĠĠĠĠĠ Ġval Ġz Distance = drone . getPosition (). z - object 2 . getPosition (). z ĊĊĠĠĠĠĠĠĠ Ġreturn ĠMath . sqrt (( x Distance * x Distance ). toDouble ()+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( y Distance * y Distance ). toDouble () +( z Distance * z Distance ). toDouble ()). toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// K oll isions ver halten Ġmit ĠW ol ke ĊĠĠĠ Ġfun Ġcollision Detection Cloud ( drone : Render able , cloud : Render able ){ ĊĠĠĠĠĠĠĠ Ġ// Dist an zen Ġpr Ã¼ fen ĊĠĠĠĠĠĠĠ Ġif Ġ( collision Check ( drone , cloud ) <= 0 . 2 f ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// w enn Ġget ro ff en , ĠD ro h ne Ġne ue ĠPosition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdr one . translate Local ( random Position ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// K oll ision ver halten ĠfÃ¼r ĠR inge ĊĠĠĠ Ġfun Ġcollision Detection Ring ( drone : Render able , ring : Render able ){ ĊĠĠĠĠĠĠĠ Ġ// Dist an ze Ġpr Ã¼ fen ĊĠĠĠĠĠĠĠ Ġif Ġ( collision Check ( drone , ring ) <= 0 . 2 f ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// " L Ã¶sch en " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ring == ring R end ) ring Boolean = false ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ring == ring R end 1 ) ring Boolean 1 = false ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ring == ring R end 2 ) ring Boolean 2 = false ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ring == ring R end 3 ) ring Boolean 3 = false ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ring == ring R end 4 ) ring Boolean 4 = false ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Pr Ã¼ fen Ġob ĠPac our Ġbeen det Ġund Ġevent ue ll Ġne u Ġl aden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ring Boolean Ġ&& Ġ! ring Boolean 1 Ġ&& Ġ! ring Boolean 2 Ġ&& Ġ! ring Boolean 3 Ġ&& Ġ! ring Boolean 4 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring Boolean Ġ Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring Boolean 1 Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring Boolean 2 Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring Boolean 3 Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring Boolean 4 Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring R end . translate Local ( random Position ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring R end 1 . translate Local ( random Position ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring R end 2 . translate Local ( random Position ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring R end 3 . translate Local ( random Position ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring R end 4 . translate Local ( random Position ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ab fr age Ġder Ġein zel nen Ġm Ã¶g lichen ĠK oll ision en ĊĠĠĠ Ġfun Ġcollision Detection (){ ĊĠĠĠĠĠĠĠ Ġcollision Detection Ring ( drone R end , ring R end ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Ring ( drone R end , ring R end 1 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Ring ( drone R end , ring R end 2 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Ring ( drone R end , ring R end 3 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Ring ( drone R end , ring R end 4 ) ĊĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 1 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 2 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 3 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 4 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 5 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 6 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 7 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 8 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 9 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 1 0 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 1 2 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 1 3 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 1 4 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 1 5 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 1 6 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 1 7 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 1 8 ) ĊĠĠĠĠĠĠĠ Ġcollision Detection Cloud ( drone R end , cloud R end 1 9 ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// unter sch ied liche ĠW ol ken b ew eg ungen ĊĠĠĠ Ġfun Ġcloud Move Left ( cloud : ĠRender able ){ ĊĠĠĠĠĠĠĠ Ġcloud . translate Local ( Vector 3 f ( cloud . getPosition (). x - 1 . 0 f , cloud . getPosition (). y , cloud . getPosition (). z )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġcloud Move Right ( cloud : ĠRender able ){ ĊĠĠĠĠĠĠĠ Ġcloud . translate Local ( Vector 3 f ( cloud . getPosition (). x + 1 . 0 f , cloud . getPosition (). y , cloud . getPosition (). z )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġcloud Move Rotate ( cloud : ĠRender able , Ġrotation : Vector 3 f ){ ĊĠĠĠĠĠĠĠ Ġcloud . rotate Around Point ( rotation . x , rotation . y , rotation . z , cloud . getPosition ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// zuf Ã¤ l li ge ĠW ahl Ġder ĠW ol ken b ew eg ung ĊĠĠĠ Ġfun Ġcloud Random Movement ( cloud : Render able ){ ĊĠĠĠĠĠĠĠ Ġvar Ġrandom Move Ġ= Ġ( 0 .. 2 ). random () ĊĠĠĠĠĠĠĠ Ġif ( random Move == 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcloud Move Rotate ( cloud , Vector 3 f ( 0 . 0 f , Math . to Radians ( 1 . 0 f ), 0 . 0 f )) ĊĠĠĠĠĠĠĠ Ġ} else Ġif Ġ( random Move == 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcloud Move Left ( cloud ) ĊĠĠĠĠĠĠĠ Ġ} else Ġif Ġ( random Move == 2 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcloud Move Right ( cloud ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( dt : ĠFloat , Ġt : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// W ol ken b ew eg ung ĊĠĠĠĠĠĠĠ Ġcloud Random Movement ( cloud R end 1 ) ĊĠĠĠĠĠĠĠ Ġcloud Random Movement ( cloud R end 3 ) ĊĠĠĠĠĠĠĠ Ġcloud Move Rotate ( cloud R end 2 , Vector 3 f ( 0 . 0 f , Math . to Radians ( 1 . 0 f ), 0 . 0 f )) ĊĠĠĠĠĠĠĠ Ġcloud Move Rotate ( cloud R end 1 5 , Vector 3 f ( 0 . 0 f , Math . to Radians ( 1 . 0 f ), 0 . 0 f )) ĊĠĠĠĠĠĠĠ Ġcloud Move Rotate ( cloud R end 1 0 , Vector 3 f ( 0 . 0 f , Math . to Radians ( 1 . 0 f ), 0 . 0 f )) ĊĠĠĠĠĠĠĠ Ġcloud Move Rotate ( cloud R end 6 , Vector 3 f ( 0 . 0 f , Math . to Radians ( 1 . 0 f ), 0 . 0 f )) ĊĠĠĠĠĠĠĠ Ġcloud Move Rotate ( cloud R end 9 , Vector 3 f ( 0 . 0 f , Math . to Radians ( 1 . 0 f ), 0 . 0 f )) ĊĊĠĠĠĠĠĠĠ Ġ// B ew eg ung Ġder ĠD ro h ne ĊĠĠĠĠĠĠĠ Ġ// D ro h ne Ġsink t Ġab ĊĠĠĠĠĠĠĠ Ġif Ġ( window . getKey State ( GLFW _ KEY _ LEFT _ SHIFT )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdr one R end . translate Local ( Vector 3 f ( 0 . 0 f ,- 5 0 0 0 . 0 f * dt , 0 . 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollision Detection () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// D ro h ne Ġste igt Ġauf ĊĠĠĠĠĠĠĠ Ġif Ġ( window . getKey State ( GLFW _ KEY _ SPACE )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdr one R end . translate Local ( Vector 3 f ( 0 . 0 f , 5 0 0 0 . 0 f * dt , 0 . 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollision Detection () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( window . getKey State ( GLFW _ KEY _ W )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// z - W ert Ġmuss Ġje Ġnach Ġdr one - Gr Ã¶ ÃŁ e Ġange pas st Ġwerden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdr one R end . translate Local ( Vector 3 f ( 0 . 0 f , Ġ 0 . 0 f , Ġ- 5 0 0 0 * dt )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollision Detection () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( window . getKey State ( GLFW _ KEY _ S )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdr one R end . translate Local ( Vector 3 f ( 0 . 0 f , Ġ 0 . 0 f , Ġ 5 0 0 0 * dt )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollision Detection () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( window . getKey State ( GLFW _ KEY _ A )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdr one R end . rotate Local ( 0 . 0 f , Ġ 2 f * dt , Ġ 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollision Detection () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( window . getKey State ( GLFW _ KEY _ D )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdr one R end . rotate Local ( 0 . 0 f , Ġ- 2 f * dt , Ġ 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollision Detection () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Key ( key : ĠInt , Ġscan code : ĠInt , Ġaction : ĠInt , Ġmode : ĠInt ) Ġ{} ĊĊĠĠĠ Ġfun ĠonMouse Move ( x pos : ĠDouble , Ġy pos : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// B ew eg ung Ġin Ġx ĠRicht ung Ġdurch ĠD iffer enz Ġz wis chen Ġalter Ġund Ġne uer ĠPosition ĊĠĠĠĠĠĠĠ Ġvar Ġdelta X Ġ: ĠDouble Ġ= Ġx pos Ġ- Ġold Mouse Pos X ĊĠĠĠĠĠĠĠ Ġvar Ġdelta Y Ġ: ĠDouble Ġ= Ġy pos Ġ- Ġold Mouse Pos Y ĊĠĠĠĠĠĠĠ Ġold Mouse Pos X Ġ= Ġx pos ĊĠĠĠĠĠĠĠ Ġold Mouse Pos Y Ġ= Ġy pos ĊĊĠĠĠĠĠĠĠ Ġif ( pr ue f Boolean ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr on Camera . rotate Around Point ( 0 . 0 f , ĠMath . to Radians ( delta X . toFloat ()* 0 . 0 5 f ), Ġ 0 . 0 f , ĠVector 3 f ( 0 . 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr on Camera . rotate Around Point ( Math . to Radians ( delta Y . toFloat () *- 0 . 0 5 f ), 0 . 0 f , 0 . 0 f , ĠVector 3 f ( 0 . 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// H ier ĠPosition Ġder ĠD ro h ne Ġan pass en , Ġbez Ã¼ g lich Ġder ĠH Ã¶ he ? Ġrotate Ġoder Ġtranslate ? Ġoder Ġand ers ? ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpr ue f Boolean Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcleanup () Ġ{} Ċ } Ċ