Skip to content

Commit 5296dc6

Browse files
committed
added arrow icon for exits when showing spots
1 parent a933bc3 commit 5296dc6

File tree

1 file changed

+146
-97
lines changed

1 file changed

+146
-97
lines changed

blade-engine/src/com/bladecoder/engine/ui/SceneScreen.java

Lines changed: 146 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.badlogic.gdx.math.Vector3;
3333
import com.badlogic.gdx.scenes.scene2d.Stage;
3434
import com.badlogic.gdx.scenes.scene2d.utils.Drawable;
35+
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
3536
import com.badlogic.gdx.utils.viewport.Viewport;
3637
import com.bladecoder.engine.i18n.I18N;
3738
import com.bladecoder.engine.model.BaseActor;
@@ -75,7 +76,8 @@ public class SceneScreen implements BladeScreen {
7576
private BaseActor currentActor = null;
7677

7778
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);
7981

8082
private float speed = 1.0f;
8183

@@ -87,82 +89,90 @@ private static enum UIStates {
8789

8890
private final GlyphLayout textLayout = new GlyphLayout();
8991

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+
}
11299

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+
}
123132
}
124-
}
125-
}
126133

127-
return true;
128-
}
134+
return true;
135+
}
129136

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");
133140

134-
if (state == UIStates.SCENE_MODE) {
135-
drawHotspots = true;
136-
}
141+
if (state == UIStates.SCENE_MODE) {
142+
drawHotspots = true;
143+
}
137144

138-
return false;
139-
}
145+
return false;
146+
}
140147

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+
}
145152

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+
}
150157

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+
}
155163

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+
}
160168

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+
}) {
166176
@Override
167177
public boolean keyUp(int keycode) {
168178
switch (keycode) {
@@ -244,13 +254,17 @@ public boolean keyTyped(char character) {
244254

245255
@Override
246256
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);
250262

251-
if ((amount > 0 && fromDown || amount < 0 && !fromDown) && inventoryUI.isVisible())
263+
if ((amount > 0 && fromDown || amount < 0 && !fromDown)
264+
&& inventoryUI.isVisible())
252265
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())
254268
inventoryUI.show();
255269
}
256270

@@ -423,15 +437,18 @@ else if (w.getCurrentDialog() != null)
423437
if (state == UIStates.INVENTORY_MODE) {
424438
unproject2Tmp.set(Gdx.input.getX(), Gdx.input.getY());
425439
inventoryUI.screenToLocalCoordinates(unproject2Tmp);
426-
currentActor = inventoryUI.getItemAt(unproject2Tmp.x, unproject2Tmp.y);
440+
currentActor = inventoryUI.getItemAt(unproject2Tmp.x,
441+
unproject2Tmp.y);
427442
} else if (state == UIStates.SCENE_MODE) {
428443
w.getSceneCamera().getInputUnProject(viewport, unprojectTmp);
429444

430-
currentActor = w.getCurrentScene().getActorAt(unprojectTmp.x, unprojectTmp.y);
445+
currentActor = w.getCurrentScene().getActorAt(unprojectTmp.x,
446+
unprojectTmp.y);
431447

432448
if (!w.getInventory().isVisible() && inventoryButton.isVisible())
433449
inventoryButton.setVisible(false);
434-
else if (w.getInventory().isVisible() && !inventoryButton.isVisible())
450+
else if (w.getInventory().isVisible()
451+
&& !inventoryButton.isVisible())
435452
inventoryButton.setVisible(true);
436453
}
437454

@@ -442,7 +459,7 @@ else if (w.getInventory().isVisible() && !inventoryButton.isVisible())
442459
ui.getPointer().setDesc(currentActor.getDesc());
443460

444461
if (currentActor.getVerb("leave") != null) {
445-
ui.getPointer().setLeaveIcon(calcLeaveArrowRotation());
462+
ui.getPointer().setLeaveIcon(calcLeaveArrowRotation(currentActor));
446463
} else
447464
ui.getPointer().setHotspotIcon();
448465
} else {
@@ -454,9 +471,9 @@ else if (w.getInventory().isVisible() && !inventoryButton.isVisible())
454471
/**
455472
* Calcs the rotation based in the actor screen position
456473
*/
457-
private float calcLeaveArrowRotation() {
474+
private float calcLeaveArrowRotation(BaseActor actor) {
458475

459-
currentActor.getBBox().getBoundingRectangle().getCenter(unproject2Tmp);
476+
actor.getBBox().getBoundingRectangle().getCenter(unproject2Tmp);
460477

461478
if (unproject2Tmp.x < stage.getViewport().getWorldWidth() / 3f) {
462479
return 180;
@@ -494,7 +511,8 @@ public void render(float delta) {
494511
w.draw();
495512

496513
// DRAW DEBUG BBOXES
497-
if (EngineLogger.debugMode() && EngineLogger.getDebugLevel() == EngineLogger.DEBUG1) {
514+
if (EngineLogger.debugMode()
515+
&& EngineLogger.getDebugLevel() == EngineLogger.DEBUG1) {
498516
renderer.setProjectionMatrix(w.getSceneCamera().combined);
499517
w.getCurrentScene().drawBBoxLines(renderer);
500518
renderer.end();
@@ -531,9 +549,11 @@ public void render(float delta) {
531549
String strDebug = sb.toString();
532550

533551
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,
535554
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());
537557

538558
// Draw actor states when debug
539559
if (EngineLogger.getDebugLevel() == EngineLogger.DEBUG1) {
@@ -547,13 +567,17 @@ public void render(float delta) {
547567

548568
unprojectTmp.set(r.getX(), r.getY(), 0);
549569
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);
551574
}
552575

553576
}
554577
}
555578

556-
if (!World.getInstance().inCutMode() && !recorder.isPlaying() && !testerBot.isEnabled()) {
579+
if (!World.getInstance().inCutMode() && !recorder.isPlaying()
580+
&& !testerBot.isEnabled()) {
557581
ui.getPointer().draw(batch, viewport);
558582
}
559583

@@ -572,8 +596,10 @@ public void render(float delta) {
572596

573597
private void drawHotspots(SpriteBatch batch) {
574598

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())
577603
continue;
578604

579605
Polygon p = a.getBBox();
@@ -584,16 +610,32 @@ private void drawHotspots(SpriteBatch batch) {
584610

585611
Rectangle r = a.getBBox().getBoundingRectangle();
586612

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);
589617

590618
if (!showDesc || a.getDesc() == null) {
591-
Drawable drawable = getUI().getSkin().getDrawable("circle");
592-
batch.setColor(Color.RED);
619+
593620
float size = DPIUtils.ICON_SIZE * DPIUtils.getSizeMultiplier();
594621

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+
}
597639
} else {
598640
BitmapFont font = getUI().getSkin().getFont("desc");
599641
String desc = a.getDesc();
@@ -605,7 +647,8 @@ private void drawHotspots(SpriteBatch batch) {
605647
float textX = unprojectTmp.x - textLayout.width / 2;
606648
float textY = unprojectTmp.y + textLayout.height;
607649

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,
609652
textLayout.height + 16, Color.BLACK);
610653
font.draw(batch, textLayout, textX, textY);
611654
}
@@ -616,18 +659,23 @@ private void drawHotspots(SpriteBatch batch) {
616659
public void resize(int width, int height) {
617660

618661
if (!World.getInstance().isDisposed()) {
619-
viewport.setWorldSize(World.getInstance().getWidth(), World.getInstance().getHeight());
662+
viewport.setWorldSize(World.getInstance().getWidth(), World
663+
.getInstance().getHeight());
620664
viewport.update(width, height, true);
621-
World.getInstance().resize(viewport.getWorldWidth(), viewport.getWorldHeight());
665+
World.getInstance().resize(viewport.getWorldWidth(),
666+
viewport.getWorldHeight());
622667
} else {
623668
viewport.setWorldSize(width, height);
624669
viewport.update(width, height, true);
625670
}
626671

627672
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());
631679
}
632680

633681
public void dispose() {
@@ -677,7 +725,8 @@ public void actorClick(BaseActor a, boolean lookat) {
677725
String verb = Verb.LOOKAT_VERB;
678726

679727
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;
681730
}
682731

683732
runVerb(a, verb, null);

0 commit comments

Comments
 (0)