@@ -44,25 +44,32 @@ private void init() {
4444 glBlendFunc (GL_SRC_ALPHA , GL_ONE_MINUS_SRC_ALPHA );
4545
4646 glfwSetCursorPosCallback (window , (win , x , y ) -> {
47- float nx = (float ) (x / 400.0 - 1.0 );
48- float ny = (float ) (1.0 - y / 400.0 );
49- if (model != null ) model .setDragging (nx , ny );
47+ try (MemoryStack stack = MemoryStack .stackPush ()) {
48+ IntBuffer wb = stack .mallocInt (1 ), hb = stack .mallocInt (1 );
49+ glfwGetWindowSize (window , wb , hb );
50+ float nx = (float ) (x / (wb .get (0 ) / 2.0 ) - 1.0 );
51+ float ny = (float ) (1.0 - y / (hb .get (0 ) / 2.0 ));
52+ if (model != null ) model .setDragging (nx , ny );
53+ }
5054 });
5155
5256 glfwSetMouseButtonCallback (window , (win , button , action , mods ) -> {
5357 if (button == GLFW_MOUSE_BUTTON_LEFT && action == GLFW_PRESS ) {
5458 try (MemoryStack stack = MemoryStack .stackPush ()) {
55- DoubleBuffer x = stack .mallocDouble (1 ), y = stack .mallocDouble (1 );
56- glfwGetCursorPos ( window , x , y );
57- float nx = ( float ) ( x . get ( 0 ) / 400.0 - 1.0 );
58- float ny = ( float ) ( 1.0 - y . get ( 0 ) / 400.0 );
59+ DoubleBuffer xb = stack .mallocDouble (1 ), yb = stack .mallocDouble (1 );
60+ IntBuffer wb = stack . mallocInt ( 1 ), hb = stack . mallocInt ( 1 );
61+ glfwGetCursorPos ( window , xb , yb );
62+ glfwGetWindowSize ( window , wb , hb );
5963
60- if ( model . isHit ( "Head" , nx , ny )) {
61- System . out . println ( "Hit Head!" );
62- model . startMotion ( load ( "/model/Hiyori/motions/Hiyori_m01.motion3.json" ), 2 , null );
63- } else if (model .isHit ("Body " , nx , ny )) {
64+ float nx = ( float ) ( xb . get ( 0 ) / ( wb . get ( 0 ) / 2.0 ) - 1.0 );
65+ float ny = ( float ) ( 1.0 - yb . get ( 0 ) / ( hb . get ( 0 ) / 2.0 ) );
66+
67+ if (model .isHit ("HitArea " , nx , ny )) {
6468 System .out .println ("Hit Body!" );
65- model .startMotion (load ("/model/Hiyori/motions/Hiyori_m02.motion3.json" ), 2 , null );
69+ model .startMotion (load ("/model/Hiyori/motions/Hiyori_m04.motion3.json" ), 2 , null );
70+ } else if (model .isHit ("ArtMesh12" , nx , ny ) || model .isHit ("ArtMesh01" , nx , ny )) {
71+ System .out .println ("Hit Head/Face!" );
72+ model .startMotion (load ("/model/Hiyori/motions/Hiyori_m01.motion3.json" ), 2 , null );
6673 }
6774 } catch (Exception e ) { e .printStackTrace (); }
6875 }
@@ -79,13 +86,25 @@ private void setup() throws Exception {
7986 model .loadPhysics (load ("/model/Hiyori/Hiyori.physics3.json" ));
8087 model .createRenderer ();
8188
89+ System .out .println ("Drawable IDs:" );
90+ for (String id : model .getDrawableIds ()) {
91+ System .out .println (" " + id );
92+ }
93+
8294 model .registerTexture (0 , loadTex ("/model/Hiyori/Hiyori.2048/texture_00.png" ));
8395 model .registerTexture (1 , loadTex ("/model/Hiyori/Hiyori.2048/texture_01.png" ));
8496 }
8597
8698 private void loop () {
8799 while (!glfwWindowShouldClose (window )) {
88100 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
101+
102+ try (MemoryStack stack = MemoryStack .stackPush ()) {
103+ IntBuffer w = stack .mallocInt (1 ), h = stack .mallocInt (1 );
104+ glfwGetWindowSize (window , w , h );
105+ glViewport (0 , 0 , w .get (0 ), h .get (0 ));
106+ }
107+
89108 model .update (0.016f );
90109 model .draw (mvp );
91110 glfwSwapBuffers (window );
0 commit comments