dialogues half working nice

master
Jonathan Hager 5 years ago
parent 9567de50f2
commit 2071e3e69b

@ -23,11 +23,34 @@ public class DialogueParser {
file = text.split("\\r?\\n"); file = text.split("\\r?\\n");
} }
public Dialogue nextDialog(int selectedAns) { public Dialogue firstDialogue() {
Dialogue result = new Dialogue();
result.question = file[line];
ArrayList<String> ans = new ArrayList<>();
for(int i = line + 1; i < file.length; i++) {
String tempAns = file[i];
if(tempAns.equals("")) {
break;
}
else {
ans.add(tempAns);
}
}
String[] answers = new String[ans.size()];
for(int i = 0; i < answers.length; i++) {
answers[i] = ans.get(i);
}
result.ans = answers;
return result;
}
public Dialogue nextDialogue(int selectedAns) {
Dialogue result = new Dialogue(); Dialogue result = new Dialogue();
String s = file[line + selectedAns]; String s = file[line + selectedAns];
String[] newLine = s.split("#"); String[] newLine = s.split("#");
line = Integer.parseInt(newLine[1]); line = Integer.parseInt(newLine[1]) - 1;
if(line == -1) { if(line == -1) {
return null; return null;

@ -126,11 +126,13 @@ public class MapContainer {
t = (Textbox)a; t = (Textbox)a;
if(t.getState() == 2){ if(t.getState() == 2){
a.remove(); a.remove();
System.out.println("aösdkjf");
Main.gamestate = 0; Main.gamestate = 0;
t.getSelectedAsw(); // DO STUFF NICENICE t.getSelectedAsw(); // DO STUFF NICENICE
} }
} }
} }
System.out.println();
} }
// center camera // center camera

@ -30,6 +30,8 @@ public class MovingNpc extends Actor{
float movementX; float movementX;
float movementY; float movementY;
boolean currentlyTalking;
DialogueParser parser; DialogueParser parser;
Vector2 POI; Vector2 POI;
@ -37,7 +39,9 @@ public class MovingNpc extends Actor{
public MovingNpc(Rectangle area, float xPos, float yPos){ public MovingNpc(Rectangle area, float xPos, float yPos){
setName("npc"); setName("npc");
Texture t = new Texture(Gdx.files.internal("player.png")); Texture t = new Texture(Gdx.files.internal("player.png"));
parser = new DialogueParser("dialogues/test.txt");
currentlyTalking = false;
animatedSprite = new AnimatedSprite(t, 64, 64); animatedSprite = new AnimatedSprite(t, 64, 64);
animatedSprite.setRow(0); animatedSprite.setRow(0);
collisionRect = new Rectangle(xPos + 16, yPos, 32, 48); collisionRect = new Rectangle(xPos + 16, yPos, 32, 48);
@ -47,13 +51,18 @@ public class MovingNpc extends Actor{
movementX = 0; movementX = 0;
movementY = 0; movementY = 0;
String[] ans = {"Das ist Wahr", "sehr wahr..."}; parser = new DialogueParser("dialogues/test.txt");
this.t = new Textbox("Frage ist eine gute Frage, eine sehr gute Frage jaja VoltaicMoth ist ein Noob in r6 jajajajajja jajaja jajaaj ja jajaaj aj aj jaj aja j" Dialogue nextDialogue = parser.firstDialogue();
+ "Frage ist eine gute Frage, eine sehr gute Frage jaja VoltaicMoth ist ein Noob in r6 jajajajajja jajaja jajaaj ja jajaaj aj aj jaj aja j", ans, getX()+getWidth()/2, getY()+getHeight()/2); this.t = new Textbox(nextDialogue.question, nextDialogue.ans, getX()+getWidth()/2, getY()+getHeight()/2);
setBounds(xPos, yPos, animatedSprite.getSprite().getWidth(), animatedSprite.getSprite().getHeight()); 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 @Override
protected void positionChanged() { protected void positionChanged() {
animatedSprite.setSpritePosition((int)getX(), (int)getY()); animatedSprite.setSpritePosition((int)getX(), (int)getY());
@ -63,71 +72,95 @@ public class MovingNpc extends Actor{
@Override @Override
public void act(float delta) { public void act(float delta) {
if(Main.gamestate == 0) {
if(POI == null || Math.random() < 0.01f){ if(POI == null || Math.random() < 0.01f){
POI = new Vector2(area.getX() + ((float) Math.random() * (float) area.getWidth()), area.getY() + ((float) Math.random() * (float) area.getHeight())); POI = new Vector2(area.getX() + ((float) Math.random() * (float) area.getWidth()), area.getY() + ((float) Math.random() * (float) area.getHeight()));
} }
Vector2 movement = new Vector2(speed,0); Vector2 movement = new Vector2(speed,0);
movement.setAngleRad(StaticMath.calculateAngle(getX(), getY(), POI.x, POI.y)); movement.setAngleRad(StaticMath.calculateAngle(getX(), getY(), POI.x, POI.y));
if(movement.angleDeg() < 135 && movement.angleDeg() >= 45) { if(movement.angleDeg() < 135 && movement.angleDeg() >= 45) {
facing = 0; facing = 0;
} }
else if(movement.angleDeg() >= 135 && movement.angleDeg() < 225) { else if(movement.angleDeg() >= 135 && movement.angleDeg() < 225) {
facing = 1; facing = 1;
} }
else if(movement.angleDeg() >= 225 && movement.angleDeg() < 315) { else if(movement.angleDeg() >= 225 && movement.angleDeg() < 315) {
facing = 2; facing = 2;
} }
else { else {
facing = 3; facing = 3;
}
if(StaticMath.calculateDistance(getX(), getY(), POI.x, POI.y, movement.angleRad()) < 10f) {
movementX = 0;
movementY = 0;
}
else {
movementX = movement.x;
movementY = movement.y;
}
if(movementX == 0 && movementY == 0){
}
else if(movementX == 0 && movementY != 0){
setY(getY()+movementY);
if(collidingWithMapCollisionObject()){
setY(getY()-movementY);
}
}
else if(movementY == 0 && movementX != 0){
setX(getX()+movementX);
if(collidingWithMapCollisionObject()){
setX(getX()-movementX);
}
}
else if(movementX != 0 && movementY != 0){
setX(getX()+ (movementX));
if(collidingWithMapCollisionObject()){
setX(getX() - (movementX));
}
setY(getY() + (movementY));
if(collidingWithMapCollisionObject()){
setY(getY()- (movementY));
}
}
int animationRow = 0;
if(movementX != 0 || movementY != 0) {
animationRow = 8;
}
animatedSprite.setRow(animationRow + facing);
movementX = 0;
movementY = 0;
} }
else if(Main.gamestate == 1) {
if(StaticMath.calculateDistance(getX(), getY(), POI.x, POI.y, movement.angleRad()) < 10f) { animatedSprite.setRow(facing);
movementX = 0;
movementY = 0;
}
else {
movementX = movement.x;
movementY = movement.y;
}
if(movementX == 0 && movementY == 0){
} if(currentlyTalking) {
else if(movementX == 0 && movementY != 0){ for(Actor a : getStage().getActors()) {
setY(getY()+movementY); if(a instanceof Textbox) {
if(collidingWithMapCollisionObject()){ if(((Textbox) a).state == 2) {
setY(getY()-movementY); int answer = ((Textbox) a).getSelectedAsw();
} Dialogue newDialogue = parser.nextDialogue(answer + 1);
}
else if(movementY == 0 && movementX != 0){ if(newDialogue == null) {
setX(getX()+movementX); currentlyTalking = false;
if(collidingWithMapCollisionObject()){ }
setX(getX()-movementX); else {
} t.update(newDialogue);
} }
else if(movementX != 0 && movementY != 0){ }
setX(getX()+ (movementX)); }
if(collidingWithMapCollisionObject()){ }
setX(getX() - (movementX)); }
}
setY(getY() + (movementY));
if(collidingWithMapCollisionObject()){
setY(getY()- (movementY));
}
} }
int animationRow = 0;
if(movementX != 0 || movementY != 0) {
animationRow = 8;
}
animatedSprite.setRow(animationRow + facing);
animatedSprite.updateAnimation(delta); animatedSprite.updateAnimation(delta);
movementX = 0;
movementY = 0;
} }
@Override @Override

@ -90,6 +90,19 @@ public class Textbox extends Actor{
setName("textbox"); setName("textbox");
} }
public void update(Dialogue d) {
this.splitted = getSplitted(d.question, (int) Main.CAMERA_WIDTH / 2);
this.ans = d.ans;
float height = this.splitted.size() * 1.2f * textHeight + (this.ans.length+2) * 1.2f * textHeight;
r = new Rectangle(getX(), getY(), Main.CAMERA_WIDTH - 40, height);
setBounds(r.getX(), r.getY(), r.getWidth(), r.getHeight());
this.state = 0;
printLine = 0;
printChar = 0;
}
@Override @Override
public void act(float delta) { public void act(float delta) {

Loading…
Cancel
Save