From 4c316fe234faf537a8e91b185c57a1208a7e0bb1 Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Wed, 23 Dec 2020 11:07:15 +0100 Subject: [PATCH] Interactive objects with dialogues added --- core/assets/map1.tmx | 11 +- core/assets/sign.png | Bin 0 -> 1022 bytes core/src/com/trs/main/AnimatedSprite.java | 13 ++- core/src/com/trs/main/InteractionObject.java | 104 +++++++++++++++++++ core/src/com/trs/main/MapContainer.java | 20 +++- core/src/com/trs/main/MovingNpc.java | 2 +- core/src/com/trs/main/Player.java | 27 +++-- 7 files changed, 158 insertions(+), 19 deletions(-) create mode 100644 core/assets/sign.png create mode 100644 core/src/com/trs/main/InteractionObject.java diff --git a/core/assets/map1.tmx b/core/assets/map1.tmx index c710ca8..2f665f8 100644 --- a/core/assets/map1.tmx +++ b/core/assets/map1.tmx @@ -1,5 +1,5 @@ - + @@ -290,7 +290,14 @@ - + + + + + + + + diff --git a/core/assets/sign.png b/core/assets/sign.png new file mode 100644 index 0000000000000000000000000000000000000000..7387c5d2632bcbcf0e80167a5614a0d9c4c2e821 GIT binary patch literal 1022 zcmVEX>4Tx04R}tkv&MmKpe$iTcs)$2MZQ)$WS|35EXIMDionYs1;guFuC*#nlvOS zE{=k0!NHHks)LKOt`4q(Aou~|}?mh0_0scmXsb<$WplX(p zP9}tGZdC}rB7`CIB8G^>OnpuiQ}7&L_we!cF3z*O&;2?2mAuISpFljzbi*RvAfDc| zbk6(4VOEk9;&b9LgDyz?$aUG}H_klWYY7*VPc`!!Ey()lA#h$5l0nOqkMnX zWrgz=XSGset$XqphVt6VGS_L2Ac;jRL4*JqHIz|-g*dGmDJIgipYZSxJARQ|GP%lN z5bWxZD9EPr77CjufEjFBE|HGy0|+Fn9~}t+~Cm_Hp_EWT>mu4RCM> z#EO)??(y!P&ffk#)9UXBb31aUs_Ha(00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00GuXL_t(o!|j&OO9DX@$GJ_x4i?lcDDarlC4>%KI+^g0KCS5y|qP?Q$y$hAj6FcW&&7UnIk$bN9HF2 zW&${S5E1qDb%AM6;{Y=OM16fU2YwZzA@qJGGzWGHR;Yg3E1(U2`IH9$yk1?PSZ1r$?2jK&J4%qdEY3Xt-bN|$hdx9b?} za66}}3YZBzBn6BzrqU(bwh>JEXsS{HhO|R7uACH@21A?E(H_u3XknDLHa!Z6(pS?d z^w{@+0#SRc0081U8M5$|VlyF?=A{Yqi zQsV^7>J)fcFOWnyCc6c*Qo!|9YV~#iKm-$|uKi`?#Dam4nl|IaB*mDH;kbVH7 z2(7v~F%N#(W&ksQzYnl~6PP~0Rz5BR!1{Fvw+E7LY-$SdSxzm(e3nD2!@Gju+^qgN sSK}floAT1a7XYBu;US#AxVqTB0X5PQVGyhHu>b%707*qoM6N<$f= 0.1f) { this.delta = 0; - if(getFrame() >= ROWLENGTHS[getRow()] - 1){ + if(getFrame() >= rowlengths[getRow()] - 1){ setFrame(0); } else{ diff --git a/core/src/com/trs/main/InteractionObject.java b/core/src/com/trs/main/InteractionObject.java new file mode 100644 index 0000000..cd1a47e --- /dev/null +++ b/core/src/com/trs/main/InteractionObject.java @@ -0,0 +1,104 @@ +package com.trs.main; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.math.Intersector; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.scenes.scene2d.Actor; + +public class InteractionObject extends Actor{ + Textbox t; + Rectangle collisionRect; + private AnimatedSprite animatedSprite; + + boolean currentlyTalking; + DialogueParser parser; + + int id; + + public InteractionObject(Rectangle collisionRect, float xPos, float yPos, int id, String texture){ + setName("interactive"); + this.id = id; + Texture t = new Texture(Gdx.files.internal(texture)); + + currentlyTalking = false; + + animatedSprite = new AnimatedSprite(t, 32, 32, false); + animatedSprite.setRow(0); + this.collisionRect = collisionRect; + + parser = new DialogueParser("npcs/1/dialogue/test.txt"); + Dialogue nextDialogue = parser.firstDialogue(); + this.t = new Textbox(nextDialogue.question, nextDialogue.ans, getX()+getWidth()/2, getY()+getHeight()/2); + + setBounds(xPos, yPos, animatedSprite.getSprite().getWidth(), animatedSprite.getSprite().getHeight()); + } + + public void startDialogue(float xPos, float yPos) { + currentlyTalking = true; + getStage().addActor(new Textbox(t, xPos, yPos)); + } + + @Override + protected void positionChanged() { + animatedSprite.setSpritePosition((int)getX(), (int)getY()); + collisionRect = new Rectangle(getX() + 16, getY(), 32, 48); + super.positionChanged(); + } + + @Override + public void act(float delta) { + if(Main.gamestate == 1 && currentlyTalking) { + if(currentlyTalking) { + for(Actor a : getStage().getActors().toArray(Actor.class)) { + if(a instanceof Textbox) { + if(((Textbox) a).getState() == 2) { + int answer = ((Textbox) a).getSelectedAsw(); + Dialogue newDialogue = parser.nextDialogue(answer + 1); + + if(newDialogue == null) { + currentlyTalking = false; + parser = new DialogueParser("npcs/1/dialogue/test.txt"); + System.out.println("asdfasdf"); + } + else { + ((Textbox)a).update(newDialogue); + System.out.println("update nicencie"); + } + } + } + } + } + } + + animatedSprite.updateAnimation(delta); + + } + + @Override + public void draw(Batch batch, float parentAlpha) { + animatedSprite.draw(batch); + super.draw(batch, parentAlpha); //To change body of generated methods, choose Tools | Templates. + } + + public boolean collidingWithMapCollisionObject(){ + boolean value = false; + for(Actor a : getStage().getActors()){ + if(a.getName().equals("mapobject")){ + //Rectangle p = new Rectangle(getX(), getY(), getWidth(), getHeight()); + Rectangle o = new Rectangle(a.getX(), a.getY(), a.getWidth(), a.getHeight()); + if(Intersector.overlaps(collisionRect, o)){ + value = true; + break; + } + } + } + return value; + } + + public Textbox getTextbox(){ + return t; + } + +} diff --git a/core/src/com/trs/main/MapContainer.java b/core/src/com/trs/main/MapContainer.java index 0b404ef..85c4383 100644 --- a/core/src/com/trs/main/MapContainer.java +++ b/core/src/com/trs/main/MapContainer.java @@ -40,13 +40,13 @@ public class MapContainer { Stage stage; OrthographicCamera camera; TmxMapLoader maploader; - TiledMap map; - OrthogonalTiledMapRenderer renderer; + TiledMap map; + OrthogonalTiledMapRenderer renderer; Door[] doors; public Door collidingDoor; - final int[] layersBelowPlayer = {0, 1, 2}; - final int[] layersAbovePlayer = {3, 4}; + final int[] layersBelowPlayer = {0, 1, 2}; + final int[] layersAbovePlayer = {3, 4}; // TODO: Value which shows from which door the player is coming? public MapContainer(float CAMERA_WIDTH, float CAMERA_HEIGHT, Player p, String mapString, int inDoor) { @@ -96,6 +96,18 @@ public class MapContainer { stage.addActor(new MovingNpc(rect, rect.getX() + (float)(Math.random()*rect.getWidth()), rect.getY()+(float)(Math.random()*rect.getHeight()), id)); } + // adding the InteractionObjects + for(MapObject object : map.getLayers().get(7).getObjects().getByType(RectangleMapObject.class)){ + Rectangle rect = ((RectangleMapObject) object).getRectangle(); + MapProperties props = object.getProperties(); + + int id = props.get("id", Integer.class); + String texture = props.get("texture", String.class); + + stage.addActor(new InteractionObject(rect, rect.getX(), rect.getY(), id, texture)); + stage.addActor(new MapCollisionObject((int) rect.x, (int) rect.y, (int) rect.width, (int) rect.height)); + } + doors = new Door[tempDoors.size()]; for(int i = 0; i < doors.length; i++) { doors[i] = tempDoors.get(i); diff --git a/core/src/com/trs/main/MovingNpc.java b/core/src/com/trs/main/MovingNpc.java index eaf8d6b..891d128 100644 --- a/core/src/com/trs/main/MovingNpc.java +++ b/core/src/com/trs/main/MovingNpc.java @@ -44,7 +44,7 @@ public class MovingNpc extends Actor{ currentlyTalking = false; - animatedSprite = new AnimatedSprite(t, 64, 64); + animatedSprite = new AnimatedSprite(t, 64, 64, true); animatedSprite.setRow(0); collisionRect = new Rectangle(xPos + 16, yPos, 32, 48); this.area = area; diff --git a/core/src/com/trs/main/Player.java b/core/src/com/trs/main/Player.java index c86f732..a09f4f6 100644 --- a/core/src/com/trs/main/Player.java +++ b/core/src/com/trs/main/Player.java @@ -35,9 +35,9 @@ public class Player extends Actor{ public Player(int xPos, int yPos){ setName("player"); t = new Texture(Gdx.files.internal("player.png")); - playerSprite = new AnimatedSprite(t, 64, 64); + playerSprite = new AnimatedSprite(t, 64, 64, true); playerSprite.setRow(0); - collisionRect = new Rectangle(xPos + 16, yPos, 32, 48); + collisionRect = new Rectangle(xPos + 16, yPos, 32, 16); setBounds(xPos, yPos, playerSprite.getSprite().getWidth(), playerSprite.getSprite().getHeight()); } @@ -79,11 +79,20 @@ public class Player extends Actor{ } if(Gdx.input.isKeyJustPressed(Input.Keys.E)) { Actor a = collidingActor(); - if(a != null && a instanceof MovingNpc){ - Main.gamestate = 1; - ((MovingNpc)a).startDialogue(getX()+32, getY()+32); - movementX = 0; - movementY = 0; + if(a != null) { + if(a instanceof MovingNpc){ + Main.gamestate = 1; + ((MovingNpc)a).startDialogue(getX()+32, getY()+32); + movementX = 0; + movementY = 0; + } + else if(a instanceof InteractionObject) { + System.out.println("kfdjfkdjfladjflajdfjadlfj"); + Main.gamestate = 1; + ((InteractionObject)a).startDialogue(getX()+32, getY()+32); + movementX = 0; + movementY = 0; + } } } } @@ -150,7 +159,7 @@ public class Player extends Actor{ public boolean collidingWithMapCollisionObject(){ boolean value = false; for(Actor a : getStage().getActors()){ - if(a.getName().equals("mapobject")){ + if(a instanceof MapCollisionObject){ //Rectangle p = new Rectangle(getX(), getY(), getWidth(), getHeight()); Rectangle o = new Rectangle(a.getX(), a.getY(), a.getWidth(), a.getHeight()); if(Intersector.overlaps(collisionRect, o)){ @@ -192,7 +201,7 @@ public class Player extends Actor{ public Actor collidingActor(){ for(Actor a : getStage().getActors()){ - if(a.getName().equals("npc")){ + if(a instanceof InteractionObject || a instanceof MovingNpc){ Rectangle p = new Rectangle(getX(), getY(), getWidth(), getHeight()); Rectangle npc = new Rectangle(a.getX(), a.getY(), a.getWidth(), a.getHeight()); if(Intersector.overlaps(p, npc)){