32
32
import com .badlogic .gdx .math .Vector3 ;
33
33
import com .badlogic .gdx .scenes .scene2d .Stage ;
34
34
import com .badlogic .gdx .scenes .scene2d .utils .Drawable ;
35
+ import com .badlogic .gdx .scenes .scene2d .utils .TextureRegionDrawable ;
35
36
import com .badlogic .gdx .utils .viewport .Viewport ;
36
37
import com .bladecoder .engine .i18n .I18N ;
37
38
import com .bladecoder .engine .model .BaseActor ;
@@ -75,7 +76,8 @@ public class SceneScreen implements BladeScreen {
75
76
private BaseActor currentActor = null ;
76
77
77
78
private boolean drawHotspots = false ;
78
- private final boolean showDesc = Config .getProperty (Config .SHOW_DESC_PROP , true );
79
+ private final boolean showDesc = Config .getProperty (Config .SHOW_DESC_PROP ,
80
+ true );
79
81
80
82
private float speed = 1.0f ;
81
83
@@ -87,82 +89,90 @@ private static enum UIStates {
87
89
88
90
private final GlyphLayout textLayout = new GlyphLayout ();
89
91
90
- private final GestureDetector inputProcessor = new GestureDetector (new GestureDetector .GestureListener () {
91
- @ Override
92
- public boolean touchDown (float x , float y , int pointer , int button ) {
93
- return true ;
94
- }
95
-
96
- @ Override
97
- public boolean tap (float x , float y , int count , int button ) {
98
- EngineLogger .debug ("Event TAP button: " + button );
99
-
100
- World w = World .getInstance ();
101
-
102
- if (state == UIStates .PAUSE_MODE || state == UIStates .PLAY_MODE || state == UIStates .TESTER_BOT_MODE )
103
- return true ;
104
-
105
- if (pie .isVisible ())
106
- pie .hide ();
107
-
108
- if (drawHotspots )
109
- drawHotspots = false ;
110
- else {
111
- viewport .getInputUnProject (unprojectTmp );
92
+ private final GestureDetector inputProcessor = new GestureDetector (
93
+ new GestureDetector .GestureListener () {
94
+ @ Override
95
+ public boolean touchDown (float x , float y , int pointer ,
96
+ int button ) {
97
+ return true ;
98
+ }
112
99
113
- if (w .inCutMode () && !recorder .isRecording ()) {
114
- w .getTextManager ().next ();
115
- } else if (state == UIStates .INVENTORY_MODE ) {
116
- inventoryUI .hide ();
117
- } else if (state == UIStates .SCENE_MODE ) {
118
- if (button == 2 ) { // Show inventory with the middle button
119
- if (!inventoryUI .isVisible ())
120
- inventoryUI .show ();
121
- } else {
122
- sceneClick (button == 1 );
100
+ @ Override
101
+ public boolean tap (float x , float y , int count , int button ) {
102
+ EngineLogger .debug ("Event TAP button: " + button );
103
+
104
+ World w = World .getInstance ();
105
+
106
+ if (state == UIStates .PAUSE_MODE
107
+ || state == UIStates .PLAY_MODE
108
+ || state == UIStates .TESTER_BOT_MODE )
109
+ return true ;
110
+
111
+ if (pie .isVisible ())
112
+ pie .hide ();
113
+
114
+ if (drawHotspots )
115
+ drawHotspots = false ;
116
+ else {
117
+ viewport .getInputUnProject (unprojectTmp );
118
+
119
+ if (w .inCutMode () && !recorder .isRecording ()) {
120
+ w .getTextManager ().next ();
121
+ } else if (state == UIStates .INVENTORY_MODE ) {
122
+ inventoryUI .hide ();
123
+ } else if (state == UIStates .SCENE_MODE ) {
124
+ if (button == 2 ) { // Show inventory with the middle
125
+ // button
126
+ if (!inventoryUI .isVisible ())
127
+ inventoryUI .show ();
128
+ } else {
129
+ sceneClick (button == 1 );
130
+ }
131
+ }
123
132
}
124
- }
125
- }
126
133
127
- return true ;
128
- }
134
+ return true ;
135
+ }
129
136
130
- @ Override
131
- public boolean longPress (float x , float y ) {
132
- EngineLogger .debug ("Event LONG PRESS" );
137
+ @ Override
138
+ public boolean longPress (float x , float y ) {
139
+ EngineLogger .debug ("Event LONG PRESS" );
133
140
134
- if (state == UIStates .SCENE_MODE ) {
135
- drawHotspots = true ;
136
- }
141
+ if (state == UIStates .SCENE_MODE ) {
142
+ drawHotspots = true ;
143
+ }
137
144
138
- return false ;
139
- }
145
+ return false ;
146
+ }
140
147
141
- @ Override
142
- public boolean pan (float x , float y , float deltaX , float deltaY ) {
143
- return true ;
144
- }
148
+ @ Override
149
+ public boolean pan (float x , float y , float deltaX , float deltaY ) {
150
+ return true ;
151
+ }
145
152
146
- @ Override
147
- public boolean panStop (float x , float y , int pointer , int button ) {
148
- return true ;
149
- }
153
+ @ Override
154
+ public boolean panStop (float x , float y , int pointer , int button ) {
155
+ return true ;
156
+ }
150
157
151
- @ Override
152
- public boolean fling (float velocityX , float velocityY , int button ) {
153
- return false ;
154
- }
158
+ @ Override
159
+ public boolean fling (float velocityX , float velocityY ,
160
+ int button ) {
161
+ return false ;
162
+ }
155
163
156
- @ Override
157
- public boolean zoom (float initialDistance , float distance ) {
158
- return false ;
159
- }
164
+ @ Override
165
+ public boolean zoom (float initialDistance , float distance ) {
166
+ return false ;
167
+ }
160
168
161
- @ Override
162
- public boolean pinch (Vector2 initialPointer1 , Vector2 initialPointer2 , Vector2 pointer1 , Vector2 pointer2 ) {
163
- return false ;
164
- }
165
- }) {
169
+ @ Override
170
+ public boolean pinch (Vector2 initialPointer1 ,
171
+ Vector2 initialPointer2 , Vector2 pointer1 ,
172
+ Vector2 pointer2 ) {
173
+ return false ;
174
+ }
175
+ }) {
166
176
@ Override
167
177
public boolean keyUp (int keycode ) {
168
178
switch (keycode ) {
@@ -244,13 +254,17 @@ public boolean keyTyped(char character) {
244
254
245
255
@ Override
246
256
public boolean scrolled (int amount ) {
247
- if (state == UIStates .SCENE_MODE || state == UIStates .INVENTORY_MODE ) {
248
-
249
- boolean fromDown = (inventoryUI .getInvPosition () == InventoryUI .CENTER || inventoryUI .getInvPosition () == InventoryUI .DOWN );
257
+ if (state == UIStates .SCENE_MODE
258
+ || state == UIStates .INVENTORY_MODE ) {
259
+
260
+ boolean fromDown = (inventoryUI .getInvPosition () == InventoryUI .CENTER || inventoryUI
261
+ .getInvPosition () == InventoryUI .DOWN );
250
262
251
- if ((amount > 0 && fromDown || amount < 0 && !fromDown ) && inventoryUI .isVisible ())
263
+ if ((amount > 0 && fromDown || amount < 0 && !fromDown )
264
+ && inventoryUI .isVisible ())
252
265
inventoryUI .hide ();
253
- else if ((amount > 0 && !fromDown || amount < 0 && fromDown ) && !inventoryUI .isVisible ())
266
+ else if ((amount > 0 && !fromDown || amount < 0 && fromDown )
267
+ && !inventoryUI .isVisible ())
254
268
inventoryUI .show ();
255
269
}
256
270
@@ -423,15 +437,18 @@ else if (w.getCurrentDialog() != null)
423
437
if (state == UIStates .INVENTORY_MODE ) {
424
438
unproject2Tmp .set (Gdx .input .getX (), Gdx .input .getY ());
425
439
inventoryUI .screenToLocalCoordinates (unproject2Tmp );
426
- currentActor = inventoryUI .getItemAt (unproject2Tmp .x , unproject2Tmp .y );
440
+ currentActor = inventoryUI .getItemAt (unproject2Tmp .x ,
441
+ unproject2Tmp .y );
427
442
} else if (state == UIStates .SCENE_MODE ) {
428
443
w .getSceneCamera ().getInputUnProject (viewport , unprojectTmp );
429
444
430
- currentActor = w .getCurrentScene ().getActorAt (unprojectTmp .x , unprojectTmp .y );
445
+ currentActor = w .getCurrentScene ().getActorAt (unprojectTmp .x ,
446
+ unprojectTmp .y );
431
447
432
448
if (!w .getInventory ().isVisible () && inventoryButton .isVisible ())
433
449
inventoryButton .setVisible (false );
434
- else if (w .getInventory ().isVisible () && !inventoryButton .isVisible ())
450
+ else if (w .getInventory ().isVisible ()
451
+ && !inventoryButton .isVisible ())
435
452
inventoryButton .setVisible (true );
436
453
}
437
454
@@ -442,7 +459,7 @@ else if (w.getInventory().isVisible() && !inventoryButton.isVisible())
442
459
ui .getPointer ().setDesc (currentActor .getDesc ());
443
460
444
461
if (currentActor .getVerb ("leave" ) != null ) {
445
- ui .getPointer ().setLeaveIcon (calcLeaveArrowRotation ());
462
+ ui .getPointer ().setLeaveIcon (calcLeaveArrowRotation (currentActor ));
446
463
} else
447
464
ui .getPointer ().setHotspotIcon ();
448
465
} else {
@@ -454,9 +471,9 @@ else if (w.getInventory().isVisible() && !inventoryButton.isVisible())
454
471
/**
455
472
* Calcs the rotation based in the actor screen position
456
473
*/
457
- private float calcLeaveArrowRotation () {
474
+ private float calcLeaveArrowRotation (BaseActor actor ) {
458
475
459
- currentActor .getBBox ().getBoundingRectangle ().getCenter (unproject2Tmp );
476
+ actor .getBBox ().getBoundingRectangle ().getCenter (unproject2Tmp );
460
477
461
478
if (unproject2Tmp .x < stage .getViewport ().getWorldWidth () / 3f ) {
462
479
return 180 ;
@@ -494,7 +511,8 @@ public void render(float delta) {
494
511
w .draw ();
495
512
496
513
// DRAW DEBUG BBOXES
497
- if (EngineLogger .debugMode () && EngineLogger .getDebugLevel () == EngineLogger .DEBUG1 ) {
514
+ if (EngineLogger .debugMode ()
515
+ && EngineLogger .getDebugLevel () == EngineLogger .DEBUG1 ) {
498
516
renderer .setProjectionMatrix (w .getSceneCamera ().combined );
499
517
w .getCurrentScene ().drawBBoxLines (renderer );
500
518
renderer .end ();
@@ -531,9 +549,11 @@ public void render(float delta) {
531
549
String strDebug = sb .toString ();
532
550
533
551
textLayout .setText (ui .getSkin ().getFont ("debug" ), strDebug );
534
- RectangleRenderer .draw (batch , 0 , viewport .getScreenHeight () - textLayout .height - 10 , textLayout .width ,
552
+ RectangleRenderer .draw (batch , 0 , viewport .getScreenHeight ()
553
+ - textLayout .height - 10 , textLayout .width ,
535
554
textLayout .height + 10 , Color .BLACK );
536
- ui .getSkin ().getFont ("debug" ).draw (batch , textLayout , 0 , viewport .getScreenHeight ());
555
+ ui .getSkin ().getFont ("debug" )
556
+ .draw (batch , textLayout , 0 , viewport .getScreenHeight ());
537
557
538
558
// Draw actor states when debug
539
559
if (EngineLogger .getDebugLevel () == EngineLogger .DEBUG1 ) {
@@ -547,13 +567,17 @@ public void render(float delta) {
547
567
548
568
unprojectTmp .set (r .getX (), r .getY (), 0 );
549
569
w .getSceneCamera ().scene2screen (viewport , unprojectTmp );
550
- ui .getSkin ().getFont ("debug" ).draw (batch , sb .toString (), unprojectTmp .x , unprojectTmp .y );
570
+ ui .getSkin ()
571
+ .getFont ("debug" )
572
+ .draw (batch , sb .toString (), unprojectTmp .x ,
573
+ unprojectTmp .y );
551
574
}
552
575
553
576
}
554
577
}
555
578
556
- if (!World .getInstance ().inCutMode () && !recorder .isPlaying () && !testerBot .isEnabled ()) {
579
+ if (!World .getInstance ().inCutMode () && !recorder .isPlaying ()
580
+ && !testerBot .isEnabled ()) {
557
581
ui .getPointer ().draw (batch , viewport );
558
582
}
559
583
@@ -572,8 +596,10 @@ public void render(float delta) {
572
596
573
597
private void drawHotspots (SpriteBatch batch ) {
574
598
575
- for (BaseActor a : World .getInstance ().getCurrentScene ().getActors ().values ()) {
576
- if (a == World .getInstance ().getCurrentScene ().getPlayer () || !a .hasInteraction () || !a .isVisible ())
599
+ for (BaseActor a : World .getInstance ().getCurrentScene ().getActors ()
600
+ .values ()) {
601
+ if (a == World .getInstance ().getCurrentScene ().getPlayer ()
602
+ || !a .hasInteraction () || !a .isVisible ())
577
603
continue ;
578
604
579
605
Polygon p = a .getBBox ();
@@ -584,16 +610,32 @@ private void drawHotspots(SpriteBatch batch) {
584
610
585
611
Rectangle r = a .getBBox ().getBoundingRectangle ();
586
612
587
- unprojectTmp .set (r .getX () + r .getWidth () / 2 , r .getY () + r .getHeight () / 2 , 0 );
588
- World .getInstance ().getSceneCamera ().scene2screen (viewport , unprojectTmp );
613
+ unprojectTmp .set (r .getX () + r .getWidth () / 2 ,
614
+ r .getY () + r .getHeight () / 2 , 0 );
615
+ World .getInstance ().getSceneCamera ()
616
+ .scene2screen (viewport , unprojectTmp );
589
617
590
618
if (!showDesc || a .getDesc () == null ) {
591
- Drawable drawable = getUI ().getSkin ().getDrawable ("circle" );
592
- batch .setColor (Color .RED );
619
+
593
620
float size = DPIUtils .ICON_SIZE * DPIUtils .getSizeMultiplier ();
594
621
595
- drawable .draw (batch , unprojectTmp .x - size / 2 , unprojectTmp .y - size / 2 , size , size );
596
- batch .setColor (Color .WHITE );
622
+ if (a .getVerb ("leave" ) != null ) {
623
+ TextureRegionDrawable drawable = (TextureRegionDrawable ) getUI ()
624
+ .getSkin ().getDrawable ("leave" );
625
+
626
+ // drawable.draw(batch, unprojectTmp.x - size / 2,
627
+ // unprojectTmp.y - size / 2, size, size);
628
+
629
+ drawable .draw (batch , unprojectTmp .x - size / 2 ,
630
+ unprojectTmp .y - size / 2 , size / 2 , size / 2 ,
631
+ size , size , 1.0f , 1.0f , calcLeaveArrowRotation (a ));
632
+ } else {
633
+ Drawable drawable = ((TextureRegionDrawable ) getUI ()
634
+ .getSkin ().getDrawable ("circle" )).tint (Color .RED );
635
+
636
+ drawable .draw (batch , unprojectTmp .x - size / 2 ,
637
+ unprojectTmp .y - size / 2 , size , size );
638
+ }
597
639
} else {
598
640
BitmapFont font = getUI ().getSkin ().getFont ("desc" );
599
641
String desc = a .getDesc ();
@@ -605,7 +647,8 @@ private void drawHotspots(SpriteBatch batch) {
605
647
float textX = unprojectTmp .x - textLayout .width / 2 ;
606
648
float textY = unprojectTmp .y + textLayout .height ;
607
649
608
- RectangleRenderer .draw (batch , textX - 8 , textY - textLayout .height - 8 , textLayout .width + 16 ,
650
+ RectangleRenderer .draw (batch , textX - 8 , textY
651
+ - textLayout .height - 8 , textLayout .width + 16 ,
609
652
textLayout .height + 16 , Color .BLACK );
610
653
font .draw (batch , textLayout , textX , textY );
611
654
}
@@ -616,18 +659,23 @@ private void drawHotspots(SpriteBatch batch) {
616
659
public void resize (int width , int height ) {
617
660
618
661
if (!World .getInstance ().isDisposed ()) {
619
- viewport .setWorldSize (World .getInstance ().getWidth (), World .getInstance ().getHeight ());
662
+ viewport .setWorldSize (World .getInstance ().getWidth (), World
663
+ .getInstance ().getHeight ());
620
664
viewport .update (width , height , true );
621
- World .getInstance ().resize (viewport .getWorldWidth (), viewport .getWorldHeight ());
665
+ World .getInstance ().resize (viewport .getWorldWidth (),
666
+ viewport .getWorldHeight ());
622
667
} else {
623
668
viewport .setWorldSize (width , height );
624
669
viewport .update (width , height , true );
625
670
}
626
671
627
672
pie .resize (viewport .getScreenWidth (), viewport .getScreenHeight ());
628
- inventoryUI .resize (viewport .getScreenWidth (), viewport .getScreenHeight ());
629
- textManagerUI .resize (viewport .getScreenWidth (), viewport .getScreenHeight ());
630
- inventoryButton .resize (viewport .getScreenWidth (), viewport .getScreenHeight ());
673
+ inventoryUI .resize (viewport .getScreenWidth (),
674
+ viewport .getScreenHeight ());
675
+ textManagerUI .resize (viewport .getScreenWidth (),
676
+ viewport .getScreenHeight ());
677
+ inventoryButton .resize (viewport .getScreenWidth (),
678
+ viewport .getScreenHeight ());
631
679
}
632
680
633
681
public void dispose () {
@@ -677,7 +725,8 @@ public void actorClick(BaseActor a, boolean lookat) {
677
725
String verb = Verb .LOOKAT_VERB ;
678
726
679
727
if (!lookat ) {
680
- verb = a .getVerb (Verb .TALKTO_VERB ) != null ? Verb .TALKTO_VERB : Verb .ACTION_VERB ;
728
+ verb = a .getVerb (Verb .TALKTO_VERB ) != null ? Verb .TALKTO_VERB
729
+ : Verb .ACTION_VERB ;
681
730
}
682
731
683
732
runVerb (a , verb , null );
0 commit comments