From bc0b457ca6a7bf89524f27910f8e7a6ed7a91e1b Mon Sep 17 00:00:00 2001 From: Rynhardt P Kruger Date: Sun, 12 Dec 2010 21:50:55 +0200 Subject: [PATCH] Modified the EspeakParadise testing game a bit -- experimenting with dinamicly adding walls. Also added a (hopefully) temperary fix for solid collisions. --- src/EspeakParadise.java | 26 +++++++++++++++++++++----- src/org/alterverse/world/MovableObject.java | 20 +++++++++++++------- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/EspeakParadise.java b/src/EspeakParadise.java index 1d8269f..950262b 100644 --- a/src/EspeakParadise.java +++ b/src/EspeakParadise.java @@ -48,6 +48,10 @@ Sound oops; SoundManager sm; SpeechEngine espeak; Area area; +double mx=0; +double my=0; +double mz=0; + GameObject me; GameObject fo; public EspeakParadise() { @@ -92,10 +96,18 @@ fo.addSound(eina); me.addSound(vang); area.add(me); area.add(fo); -int [] lk = {Keyboard.KEY_S, Keyboard.KEY_W}; +int [] lk = {Keyboard.KEY_S, Keyboard.KEY_W,Keyboard.KEY_SPACE,Keyboard.KEY_A}; KeyboardHandler kh = new KeyboardHandler(lk,new KeyboardListener() { public void keyDown(int key) { switch(key) { +case Keyboard.KEY_SPACE: +mx=me.getX(); +my=me.getY(); +break; +case Keyboard.KEY_A: +area.add(new Wall(new +Box(Math.min(mx,me.getX()),Math.min(my,me.getY()),-1,Math.abs(me.getX()-mx),Math.abs(me.getY()-my),10))); +break; case Keyboard.KEY_S: if (me.isSolid()) me.setSolid(false); @@ -113,14 +125,18 @@ int fps=40; while (! (Keyboard.isKeyDown(Keyboard.KEY_Q)||Display.isCloseRequested())) { long sec = System.currentTimeMillis(); kh.listen(); +double dx=0; +double dy=0; if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) -me.setX(me.getX()-0.5); +dx=-0.5; if (Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) -me.setX(me.getX()+0.5); +dx=0.5; if (Keyboard.isKeyDown(Keyboard.KEY_UP)) -me.setY(me.getY()+0.5); +dy=0.5; if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) -me.setY(me.getY()-0.5); +dy=-0.5; +if (!(dx==0&&dy==0)) +me.setPosition(me.getX()+dx,me.getY()+dy,me.getZ()); // movement of fo double fx = ((double)Math.random()*2)-1f; double fy = ((double)Math.random()*2)-1f; diff --git a/src/org/alterverse/world/MovableObject.java b/src/org/alterverse/world/MovableObject.java index a508d99..e6f92a7 100644 --- a/src/org/alterverse/world/MovableObject.java +++ b/src/org/alterverse/world/MovableObject.java @@ -34,21 +34,27 @@ oldZ=0; public void onBump(GameObject other) { if (other.isSolid() && this.isSolid()) { +double dx=oldX-x; +double dy =oldY-y; +double dz=oldZ-z; +if (dx==0&&dy==0&&dz==0) +return; +while (this.isTouching(other)) { +setPosition(getX()+dx,getY()+dy,getZ()+dz); +// System.out.printf("%f,%f,%f delta %f,%f,%f\n",x,y,z,dx,dy,dz); +} /* -x=oldX; -y=oldY; -z=oldZ; -*/ setX(getX()*2-other.getX()); setY(getY()*2-other.getY()); // setZ(getZ()*2-other.getZ()); +*/ } } public void setPosition(double x,double y,double z) { -oldX=x; -oldY=y; -oldZ=z; +oldX=this.x; +oldY=this.y; +oldZ=this.z; super.setPosition(x,y,z); } } -- 2.11.4.GIT