1 package erland.game.tileadventure; 2 3 import org.apache.commons.logging.Log; 4 import org.apache.commons.logging.LogFactory; 5 6 import java.awt.*; 7 8 /* 9 * Copyright (C) 2004 Erland Isaksson (erland_i@hotmail.com) 10 * 11 * This program is free software; you can redistribute it and/or 12 * modify it under the terms of the GNU General Public License 13 * as published by the Free Software Foundation; either version 2 14 * of the License, or (at your option) any later version. 15 * 16 * This program is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 * GNU General Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License 22 * along with this program; if not, write to the Free Software 23 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 24 * 25 */ 26 27 public class LivingObject extends MovableObject { 28 /*** Logging instance */ 29 private static Log LOG = LogFactory.getLog(LivingObject.class); 30 private boolean bJumping; 31 private final static int JUMPING_PROGRESS_PER_LEVEL_MAX=15; 32 private float jumpingProgress; 33 private ActionInterface jumpingAction; 34 private final static int JUMPING_HEIGHT=2; 35 private int lastJumpingProgress; 36 private float jumpingSpeed; 37 private double jumpingEnd; 38 /* 39 protected Action isActionPossible(Action action) { 40 if(!super.isMoving()) { 41 if(!bJumping && !isDropping()) { 42 if(action==Action.JUMP && !getActionMap().isFree(this,(int)getPosX(),(int)getPosY(),(int)getPosZ()-1)) { 43 return getActionMap().isActionPossibleOnObject(this,action); 44 }else { 45 return super.isActionPossible(action); 46 } 47 }else { 48 return super.isActionPossible(action); 49 } 50 } 51 return Action.NONE; 52 } 53 protected boolean actionChild(Action action) { 54 if(!super.isMoving()) { 55 if(!bJumping && !isDropping()) { 56 if(action==Action.JUMP && !getActionMap().isFree(this,(int)getPosX(),(int)getPosY(),(int)getPosZ()-1)) { 57 ActionInterface a = getActionMap().startActionOnObject(this,action); 58 LOG.debug("Starting JUMP trying"); 59 if(a!=null && a!=Action.NONE) { 60 LOG.debug("Starting JUMP success"); 61 bJumping = true; 62 jumpingProgress = 0; 63 lastJumpingProgress =0; 64 jumpingAction = a; 65 jumpingEnd = Math.sqrt(JUMPING_HEIGHT); 66 jumpingSpeed = (float)jumpingEnd/(JUMPING_HEIGHT*(JUMPING_PROGRESS_PER_LEVEL_MAX-1)); 67 LOG.debug("jumpingSpeed="+jumpingSpeed); 68 return true; 69 } 70 }else { 71 return super.actionChild(action); 72 } 73 }else { 74 return super.actionChild(action); 75 } 76 } 77 return true; 78 } 79 80 public boolean update() { 81 boolean bUpdated = false; 82 if(!bJumping) { 83 bUpdated = super.update(); 84 }else { 85 LOG.debug(getMovingProgressZ()+","+lastJumpingProgress); 86 jumpingProgress+=jumpingSpeed; 87 if(jumpingProgress>=jumpingEnd) { 88 getActionMap().endActionOnObject(this,jumpingAction); 89 LOG.debug("Jumping finished "+getPosZ()); 90 bJumping = false; 91 bUpdated = true; 92 }else if(lastJumpingProgress!=(int)getJumpingProgress()) { 93 getActionMap().endActionOnObject(this,jumpingAction); 94 lastJumpingProgress=(int)getJumpingProgress(); 95 ActionInterface a = getActionMap().startActionOnObject(this,jumpingAction); 96 if(a==jumpingAction) { 97 LOG.debug("Jumping, next block "+getPosZ()+" allowed"); 98 }else { 99 LOG.debug("Jumping, next block not allowed"); 100 bJumping=false; 101 } 102 bUpdated = true; 103 } 104 if(isMoving()) { 105 bUpdated = super.update()?true:bUpdated; 106 } 107 } 108 return bUpdated; 109 } 110 111 protected float getJumpingProgress() { 112 return (float)(2f*jumpingProgress*Math.sqrt(JUMPING_HEIGHT)-jumpingProgress*jumpingProgress); 113 } 114 protected float getMovingProgressZ() { 115 if(!bJumping) { 116 return super.getMovingProgressZ(); 117 }else { 118 return getJumpingProgress()-lastJumpingProgress; 119 } 120 } 121 122 public float getMovingPosZ() { 123 if(bJumping) { 124 return super.getMovingPosZ()+(int)getJumpingProgress()-lastJumpingProgress; 125 }else { 126 return super.getMovingPosZ(); 127 } 128 } 129 */ 130 public void draw(Graphics g) { 131 super.draw(g); //To change body of overridden methods use File | Settings | File Templates. 132 if(LOG.isDebugEnabled()) { 133 if(getContainer().getVisible(getPosX(),getPosY(),getPosZ())) { 134 Box3D box = getBoundingBox(); 135 int x1 = getContainer().getPixelDrawingPositionX(box.getMinX(),box.getMinY(),box.getMinZ()); 136 int x2 = getContainer().getPixelDrawingPositionX(box.getMinX(),box.getMinY(),box.getMaxZ()); 137 int x3 = getContainer().getPixelDrawingPositionX(box.getMinX(),box.getMaxY(),box.getMinZ()); 138 int x4 = getContainer().getPixelDrawingPositionX(box.getMinX(),box.getMaxY(),box.getMaxZ()); 139 int x5 = getContainer().getPixelDrawingPositionX(box.getMaxX(),box.getMinY(),box.getMinZ()); 140 int x6 = getContainer().getPixelDrawingPositionX(box.getMaxX(),box.getMinY(),box.getMaxZ()); 141 int x7 = getContainer().getPixelDrawingPositionX(box.getMaxX(),box.getMaxY(),box.getMinZ()); 142 int x8 = getContainer().getPixelDrawingPositionX(box.getMaxX(),box.getMaxY(),box.getMaxZ()); 143 144 int y1 = getContainer().getPixelDrawingPositionY(box.getMinX(),box.getMinY(),box.getMinZ()); 145 int y2 = getContainer().getPixelDrawingPositionY(box.getMinX(),box.getMinY(),box.getMaxZ()); 146 int y3 = getContainer().getPixelDrawingPositionY(box.getMinX(),box.getMaxY(),box.getMinZ()); 147 int y4 = getContainer().getPixelDrawingPositionY(box.getMinX(),box.getMaxY(),box.getMaxZ()); 148 int y5 = getContainer().getPixelDrawingPositionY(box.getMaxX(),box.getMinY(),box.getMinZ()); 149 int y6 = getContainer().getPixelDrawingPositionY(box.getMaxX(),box.getMinY(),box.getMaxZ()); 150 int y7 = getContainer().getPixelDrawingPositionY(box.getMaxX(),box.getMaxY(),box.getMinZ()); 151 int y8 = getContainer().getPixelDrawingPositionY(box.getMaxX(),box.getMaxY(),box.getMaxZ()); 152 153 g.setColor(Color.WHITE); 154 g.drawLine(x1,y1,x2,y2); 155 g.drawLine(x3,y3,x4,y4); 156 g.drawLine(x1,y1,x3,y3); 157 g.drawLine(x2,y2,x4,y4); 158 159 g.setColor(Color.WHITE); 160 g.drawLine(x5,y5,x6,y6); 161 g.drawLine(x7,y7,x8,y8); 162 g.drawLine(x5,y5,x7,y7); 163 g.drawLine(x6,y6,x8,y8); 164 165 g.setColor(Color.WHITE); 166 g.drawLine(x1,y1,x5,y5); 167 g.drawLine(x2,y2,x6,y6); 168 g.drawLine(x3,y3,x7,y7); 169 g.drawLine(x4,y4,x8,y8); 170 } 171 } 172 } 173 }