Changeset 8edd04e in lost-haven for main/Creature.java


Ignore:
Timestamp:
Jun 7, 2020, 3:04:32 PM (4 years ago)
Author:
Dmitry Portnoy <dmitry.portnoy@…>
Branches:
master
Children:
a49176d
Parents:
155577b
Message:

Make the decompiled game code compile successfully

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/Creature.java

    r155577b r8edd04e  
    11package main;
    22
    3 import java.awt.image.*;
    4 
    5 public class Creature {
    6         private String name;
    7         private CreatureType type;
    8         private BufferedImage img;
    9         private Gender gender;
    10         private int level;
    11         private Point loc;
    12         private int speed;
    13         private long lastMoved;
    14         private int attackSpeed;
    15         private int damage;
    16         private long lastAttacked;
    17         private int strength;
    18         private int dexterity;
    19         private int constitution;
    20         private int charisma;
    21         private int wisdom;
    22         private int intelligence;
    23         private int hitpoints;
    24         private int manapoints;
    25         private int maxHitpoints;
    26         private int maxManapoints;
    27        
    28         public Creature() {
    29                 name = "";
    30                 gender = Gender.None;
    31                 loc = new Point(0, 0);
    32         }
    33 
    34         public Creature(String name) {
    35                 this.name = name;
    36                 loc = new Point(0, 0);
    37         }
    38        
    39         public Creature(String name, Gender gender) {
    40                 this.name = name;
    41                 this.gender = gender;
    42                 loc = new Point(0, 0);
    43         }
    44        
    45         public int getAttackSpeed() {
    46                 return attackSpeed;
    47         }
    48 
    49         public int getCharisma() {
    50                 return charisma;
    51         }
    52 
    53         public int getConstitution() {
    54                 return constitution;
    55         }
    56 
    57         public int getDamage() {
    58                 return damage;
    59         }
    60 
    61         public int getDexterity() {
    62                 return dexterity;
    63         }
    64 
    65         public Gender getGender() {
    66                 return gender;
    67         }
    68 
    69         public int getHitpoints() {
    70                 return hitpoints;
    71         }
    72        
    73         public BufferedImage getImg() {
    74                 return img;
    75         }
    76 
    77         public int getIntelligence() {
    78                 return intelligence;
    79         }
    80 
    81         public long getLastAttacked() {
    82                 return lastAttacked;
    83         }
    84 
    85         public long getLastMoved() {
    86                 return lastMoved;
    87         }
    88 
    89         public int getLevel() {
    90                 return level;
    91         }
    92 
    93         public Point getLoc() {
    94                 return loc;
    95         }
    96 
    97         public int getManapoints() {
    98                 return manapoints;
    99         }
    100 
    101         public int getMaxHitpoints() {
    102                 return maxHitpoints;
    103         }
    104 
    105         public int getMaxManapoints() {
    106                 return maxManapoints;
    107         }
    108 
    109         public String getName() {
    110                 return name;
    111         }
    112 
    113         public int getSpeed() {
    114                 return speed;
    115         }
    116 
    117         public int getStrength() {
    118                 return strength;
    119         }
    120        
    121         public CreatureType getType() {
    122                 return type;
    123         }
    124 
    125         public int getWisdom() {
    126                 return wisdom;
    127         }
    128 
    129         public void setAttackSpeed(int attackSpeed) {
    130                 this.attackSpeed = attackSpeed;
    131         }
    132 
    133         public void setCharisma(int charisma) {
    134                 this.charisma = charisma;
    135         }
    136 
    137         public void setConstitution(int constitution) {
    138                 this.constitution = constitution;
    139         }
    140 
    141         public void setDamage(int damage) {
    142                 this.damage = damage;
    143         }
    144 
    145         public void setDexterity(int dexterity) {
    146                 this.dexterity = dexterity;
    147         }
    148 
    149         public void setGender(Gender gender) {
    150                 this.gender = gender;
    151         }
    152 
    153         public void setHitpoints(int hitpoints) {
    154                 this.hitpoints = hitpoints;
    155         }
    156        
    157         public void setImg(BufferedImage img) {
    158                 this.img = img;
    159         }
    160  
    161         public void setIntelligence(int intelligence) {
    162                 this.intelligence = intelligence;
    163         }
    164 
    165         public void setLastAttacked(long lastAttacked) {
    166                 this.lastAttacked = lastAttacked;
    167         }
    168 
    169         public void setLastMoved(long lastMoved) {
    170                 this.lastMoved = lastMoved;
    171         }
    172 
    173         public void setLevel(int level) {
    174                 this.level = level;
    175         }
    176 
    177         public void setLoc(Point loc) {
    178                 this.loc = loc;
    179         }
    180 
    181         public void setManapoints(int manapoints) {
    182                 this.manapoints = manapoints;
    183         }
    184 
    185         public void setMaxHitpoints(int maxHitpoints) {
    186                 this.maxHitpoints = maxHitpoints;
    187         }
    188 
    189         public void setMaxManapoints(int maxManapoints) {
    190                 this.maxManapoints = maxManapoints;
    191         }
    192 
    193         public void setName(String name) {
    194                 this.name = name;
    195         }
    196 
    197         public void setSpeed(int speed) {
    198                 this.speed = speed;
    199         }
    200 
    201         public void setStrength(int strength) {
    202                 this.strength = strength;
    203         }
    204        
    205         public void setType(CreatureType type) {
    206                 this.type = type;
    207         }
    208 
    209         public void setWisdom(int wisdom) {
    210                 this.wisdom = wisdom;
    211         }
    212        
    213         public String toString() {
    214                 return name;
    215         }
    216        
    217         public boolean equals(Object c) {
    218                 return name.trim().equals(((Creature)c).name.trim());
    219         }
     3import java.awt.*;
     4import java.awt.image.BufferedImage;
     5import java.io.*;
     6import java.util.*;
     7import javax.imageio.ImageIO;
     8
     9import gamegui.Animation;
     10
     11public class Creature implements Comparable<Creature> {
     12
     13  public int passive;
     14  public int thorns;
     15  public int confused;
     16  public int sand;
     17
     18  protected String name;
     19  protected CreatureType type;
     20  protected Model model;
     21  protected int level;
     22  protected Point loc;
     23  protected int[] attributes; 
     24  protected int hitpoints;
     25  protected int manapoints;
     26  protected int maxHitpoints;
     27  protected int maxManapoints;
     28  protected int experience;
     29  protected EquippedWeapon weapon;
     30  protected EquippedWeapon spell;
     31
     32  private Point target;
     33  private Creature enemyTarget;
     34  private int speed;
     35  private long lastMoved;
     36  private long lastAttacked;
     37  private LinkedList<ItemDrop> drops;
     38  private LinkedList<EffectTimer> effectTimers;
     39  private boolean disabled;
     40  private SpawnPoint spawnPoint;
     41  private boolean dying;
     42
     43  public Creature() {
     44    this.name = "";
     45    this.loc = new Point(0, 0);
     46    this.target = this.loc;
     47    this.attributes = new int[4];
     48    this.experience = 0;
     49    this.weapon = null;
     50    this.spell = null;
     51    this.drops = new LinkedList<ItemDrop>();
     52    this.effectTimers = new LinkedList<EffectTimer>();
     53    this.disabled = false;
     54    this.spawnPoint = null;
     55    this.passive = 0;
     56    this.thorns = 0;
     57    this.confused = 0;
     58    this.sand = 0;
     59    this.dying = false;
     60  }
     61
     62  public Creature(String name, CreatureType type) {
     63    this.name = name;
     64    this.type = type;
     65    this.loc = new Point(0, 0);
     66    this.target = this.loc;
     67    this.attributes = new int[4];
     68    this.experience = 0;
     69    this.weapon = null;
     70    this.spell = null;
     71    this.drops = new LinkedList<ItemDrop>();
     72    this.effectTimers = new LinkedList<EffectTimer>();
     73    this.disabled = false;
     74    this.spawnPoint = null;
     75    this.passive = 0;
     76    this.thorns = 0;
     77    this.confused = 0;
     78    this.sand = 0;
     79    this.dying = false;
     80  }
     81
     82  public Creature(Creature cr) {
     83    this.name = cr.name;
     84    this.type = cr.type;
     85    this.model = new Model(cr.model);
     86    this.level = cr.level;
     87    this.loc = new Point(cr.loc);
     88    this.target = cr.target;
     89    this.speed = cr.speed;
     90    this.lastMoved = cr.lastMoved;
     91    this.lastAttacked = cr.lastAttacked;
     92    this.attributes = (int[])cr.attributes.clone();
     93    this.hitpoints = cr.hitpoints;
     94    this.manapoints = cr.manapoints;
     95    this.maxHitpoints = cr.maxHitpoints;
     96    this.maxManapoints = cr.maxManapoints;
     97    this.experience = cr.experience;
     98    this.weapon = cr.weapon.copy((Point)null);
     99    if (cr.spell != null)
     100      this.spell = cr.spell.copy((Point)null);
     101    this.drops = cr.drops;
     102    this.effectTimers = new LinkedList<EffectTimer>(cr.effectTimers);
     103    this.disabled = cr.disabled;
     104    this.spawnPoint = null;
     105    this.passive = cr.passive;
     106    this.thorns = cr.thorns;
     107    this.confused = cr.confused;
     108    this.sand = cr.sand;
     109    this.dying = cr.dying;
     110  }
     111
     112  public Creature copy() {
     113    return new Creature(this);
     114  }
     115
     116  public void setDying(boolean dying) {
     117    if (!this.model.hasDeath())
     118      return;
     119    if (dying) {
     120      this.model.setAction(Action.Dying);
     121    } else {
     122      this.model.getAnimation(Direction.West, Action.Dying).reset();
     123    }
     124    this.dying = dying;
     125  }
     126
     127  public boolean isDying() {
     128    return this.dying;
     129  }
     130
     131  public void checkTimedEffects() {
     132    Iterator<EffectTimer> iter = this.effectTimers.iterator();
     133    while (iter.hasNext()) {
     134      EffectTimer cur = iter.next();
     135      if (cur.expired()) {
     136        cur.getEffect().cancelEffect(this);
     137        iter.remove();
     138      }
     139    }
     140  }
     141
     142  public void addEffect(TimedEffect e) {
     143    this.effectTimers.add(new EffectTimer(e, e.getDuration()));
     144  }
     145
     146  public Point move() {
     147    Point newLoc;
     148    double dist = (this.speed * (System.currentTimeMillis() - this.lastMoved) / 1000L);
     149    if (this.lastMoved == 0L) {
     150      dist = 0.0D;
     151    }
     152    if (this.enemyTarget != null) {
     153      this.target = this.enemyTarget.loc;
     154    }
     155    this.lastMoved = System.currentTimeMillis();
     156    if (Point.dist(this.loc, this.target) <= dist) {
     157      newLoc = this.target;
     158      if (this.model.getAction() != Action.Attacking) {
     159        this.model.setAction(Action.Standing);
     160      }
     161    } else {
     162      if (this.model.getAction() != Action.Attacking) {
     163        this.model.setAction(Action.Walking);
     164      }
     165      int xDif = (int)(Point.xDif(this.loc, this.target) * dist / Point.dist(this.loc, this.target));
     166      int yDif = (int)(Point.yDif(this.loc, this.target) * dist / Point.dist(this.loc, this.target));
     167      newLoc = new Point(this.loc.getX(), this.loc.getXMin() + xDif, this.loc.getY(), this.loc.getYMin() + yDif);
     168      newLoc.setX(newLoc.getX() + newLoc.getXMin() / 100);
     169      newLoc.setXMin(newLoc.getXMin() % 100);
     170      newLoc.setY(newLoc.getY() + newLoc.getYMin() / 100);
     171      newLoc.setYMin(newLoc.getYMin() % 100);
     172      if (newLoc.getXMin() < 0) {
     173        newLoc.setX(newLoc.getX() - 1);
     174        newLoc.setXMin(newLoc.getXMin() + 100);
     175      } else if (newLoc.getYMin() < 0) {
     176        newLoc.setY(newLoc.getY() - 1);
     177        newLoc.setYMin(newLoc.getYMin() + 100);
     178      }
     179      this.model.setDirection(calcDirection());
     180    }
     181    return newLoc;
     182  }
     183
     184  private Direction calcDirection() {
     185    Direction dir;
     186    int xDif2 = Point.xDif(this.loc, this.target);
     187    int yDif2 = Point.yDif(this.target, this.loc);
     188    double angle = 1.5707963267948966D;
     189    if (xDif2 == 0) {
     190      if (yDif2 != 0) {
     191        angle *= Math.abs(yDif2 / yDif2);
     192      }
     193    } else {
     194      angle = Math.atan(yDif2 / xDif2);
     195    }
     196    if (angle >= 0.7853981633974483D) {
     197      dir = Direction.North;
     198    } else if (-0.7853981633974483D <= angle && angle <= 0.7853981633974483D) {
     199      dir = Direction.East;
     200    } else {
     201      dir = Direction.South;
     202    }
     203    if (xDif2 < 0)
     204      switch (dir) {
     205        case North:
     206          dir = Direction.South;
     207          break;
     208        case South:
     209          dir = Direction.North;
     210          break;
     211        case East:
     212          dir = Direction.West;
     213          break;
     214      }
     215    return dir;
     216  }
     217
     218  public Projectile attack(Creature enemy, AttackType attType) {
     219    Weapon weap = selectWeapon(attType);
     220    if (System.currentTimeMillis() - this.lastAttacked >= (weap.getAttackSpeed() * 100) && !this.disabled) {
     221      this.lastAttacked = System.currentTimeMillis();
     222      Point oldTarget = this.target;
     223      this.target = enemy.getLoc();
     224      this.model.setDirection(calcDirection());
     225      this.target = oldTarget;
     226      if (attType != AttackType.Spell) {
     227        this.model.setAction(Action.Attacking);
     228        this.model.getAnimation(this.model.getDirection(), this.model.getAction()).reset();
     229      }
     230      if (weap.getType() == ItemType.RangedWeapon || weap.getType() == ItemType.Spell) {
     231        Point loc = new Point(this.loc);
     232        loc.setY(loc.getY() - 55);
     233        return weap.spawnProjectile(loc, enemy.getLoc());
     234      }
     235      weap.applyContactEffects(enemy);
     236    }
     237    return null;
     238  }
     239
     240  public Projectile attack(Point targ, AttackType attType) {
     241    Weapon weap = selectWeapon(attType);
     242    if ((System.currentTimeMillis() - this.lastAttacked) / 100L >= weap.getAttackSpeed() && !this.disabled) {
     243      this.lastAttacked = System.currentTimeMillis();
     244      Point oldTarget = this.target;
     245      this.target = targ;
     246      this.model.setDirection(calcDirection());
     247      this.target = oldTarget;
     248      if (attType != AttackType.Spell) {
     249        this.model.setAction(Action.Attacking);
     250        this.model.getAnimation(this.model.getDirection(), this.model.getAction()).reset();
     251      }
     252      if (weap.getType() == ItemType.RangedWeapon || weap.getType() == ItemType.Spell) {
     253        Point loc = new Point(this.loc);
     254        loc.setY(loc.getY() - 30);
     255        return weap.spawnProjectile(loc, targ);
     256      }
     257    }
     258    return null;
     259  }
     260
     261  private Weapon selectWeapon(AttackType attType) {
     262    switch (attType) {
     263      case Weapon:
     264        return this.weapon;
     265      case Spell:
     266        return this.spell;
     267    }
     268    return this.weapon;
     269  }
     270
     271  public void addDrop(ItemDrop item) {
     272    this.drops.add(item);
     273  }
     274
     275  public LinkedList<ItemDrop> getDrops() {
     276    return this.drops;
     277  }
     278
     279  public LinkedList<Item> spawnDrops() {
     280    LinkedList<Item> newDrops = new LinkedList<Item>();
     281    Iterator<ItemDrop> iter = this.drops.iterator();
     282    Random gen = new Random();
     283    while (iter.hasNext()) {
     284      ItemDrop cur = iter.next();
     285      if (gen.nextDouble() <= cur.getDropChance()) {
     286        newDrops.add(cur.getItem());
     287      }
     288    }
     289    return newDrops;
     290  }
     291
     292  public void draw(Graphics g, int playerX, int playerY) {
     293    if (this.passive > 0) {
     294      g.drawImage(LostHavenRPG.passiveAura, 375 + this.loc.getX() - playerX, 300 - this.model.getHeight() + this.loc.getY() - playerY, null);
     295    }
     296    if (this.thorns > 0) {
     297      g.drawImage(LostHavenRPG.thornsAura, 375 + this.loc.getX() - playerX, 300 - this.model.getHeight() + this.loc.getY() - playerY, null);
     298    }
     299    this.model.draw(g, 400 + this.loc.getX() - playerX, 300 + this.loc.getY() - playerY);
     300    if (this.confused > 0) {
     301      g.drawImage(LostHavenRPG.confuseAura, 375 + this.loc.getX() - playerX, 300 - this.model.getHeight() + this.loc.getY() - playerY, null);
     302    }
     303    if (this.sand > 0) {
     304      g.drawImage(LostHavenRPG.sandAura, 375 + this.loc.getX() - playerX, 300 - this.model.getHeight() + this.loc.getY() - playerY, null);
     305    }
     306    g.setColor(Color.red);
     307    g.fillRect(360 + this.loc.getX() - playerX, 290 - this.model.getHeight() + this.loc.getY() - playerY, 80 * this.hitpoints / this.maxHitpoints, 10);
     308    g.setColor(Color.black);
     309    Font font12 = new Font("Arial", 0, 12);
     310    FontMetrics metrics = g.getFontMetrics(font12);
     311    g.setFont(font12);
     312    g.drawString(this.name, 400 + this.loc.getX() - playerX - metrics.stringWidth(this.name) / 2, 300 - this.model.getHeight() + this.loc.getY() - playerY);
     313  }
     314
     315  public void save(PrintWriter out) {
     316    out.println(this.type);
     317    if (this.spawnPoint == null) {
     318      out.println(-1);
     319    } else {
     320      out.println(this.spawnPoint.idNum);
     321    }
     322    out.println(String.valueOf(this.loc.getX()) + "," + this.loc.getY());
     323    out.println(this.model.getDirection());
     324    out.println(this.model.getAction());
     325    out.println(this.hitpoints);
     326    out.println(this.manapoints);
     327    out.println(this.passive);
     328    out.println(this.thorns);
     329    out.println(this.confused);
     330    out.println(this.sand);
     331    if (this.weapon == null) {
     332      out.println("None");
     333    } else {
     334      out.println(this.weapon.getName());
     335    }
     336  }
     337
     338  public static Creature loadTemplate(BufferedReader in) {
     339    Creature cr = new Creature();
     340    BufferedImage[] imgProj = new BufferedImage[8];
     341    try {
     342      cr.name = in.readLine();
     343      cr.type = CreatureType.valueOf(cr.name);
     344      if (cr.type == CreatureType.Player) {
     345        cr = Player.loadTemplate(in);
     346      }
     347      cr.setSpeed(Integer.parseInt(in.readLine()));
     348      cr.setAttribute(Attribute.Strength, Integer.parseInt(in.readLine()));
     349      cr.setAttribute(Attribute.Dexterity, Integer.parseInt(in.readLine()));
     350      cr.setAttribute(Attribute.Constitution, Integer.parseInt(in.readLine()));
     351      cr.setAttribute(Attribute.Wisdom, Integer.parseInt(in.readLine()));
     352      ItemType wType = ItemType.valueOf(in.readLine());
     353      if (wType == ItemType.RangedWeapon) {
     354        imgProj = LostHavenRPG.imgBow;
     355      } else if (wType == ItemType.Spell) {
     356        imgProj[0] = ImageIO.read(cr.getClass().getResource("../images/" + cr.type.toString() + "/proj.png"));
     357        imgProj[1] = ImageIO.read(cr.getClass().getResource("../images/" + cr.type.toString() + "/proj.png"));
     358        imgProj[2] = ImageIO.read(cr.getClass().getResource("../images/" + cr.type.toString() + "/proj.png"));
     359        imgProj[3] = ImageIO.read(cr.getClass().getResource("../images/" + cr.type.toString() + "/proj.png"));
     360        imgProj[4] = ImageIO.read(cr.getClass().getResource("../images/" + cr.type.toString() + "/proj.png"));
     361        imgProj[5] = ImageIO.read(cr.getClass().getResource("../images/" + cr.type.toString() + "/proj.png"));
     362        imgProj[6] = ImageIO.read(cr.getClass().getResource("../images/" + cr.type.toString() + "/proj.png"));
     363        imgProj[7] = ImageIO.read(cr.getClass().getResource("../images/" + cr.type.toString() + "/proj.png"));
     364      }
     365      cr.model = cr.loadModel(cr.type.toString());
     366      cr.setWeapon(new Weapon("None", wType, "Dagger.png", imgProj, 10, Integer.parseInt(in.readLine()), Integer.parseInt(in.readLine())));
     367      cr.setExperience(Integer.parseInt(in.readLine()));
     368    } catch (IOException ioe) {
     369      ioe.printStackTrace();
     370    }
     371    return cr;
     372  }
     373
     374  public Model loadModel(String folder) {
     375    boolean noAnims = false;
     376    Animation anmStandN = new Animation("north", 0, 0, 40, 60, 300, true);
     377    Animation anmStandS = new Animation("south", 0, 0, 40, 60, 300, true);
     378    Animation anmStandE = new Animation("east", 0, 0, 40, 60, 300, true);
     379    Animation anmStandW = new Animation("west", 0, 0, 40, 60, 300, true);
     380    Animation anmWalkN = new Animation("north", 0, 0, 40, 60, 300, true);
     381    Animation anmWalkS = new Animation("south", 0, 0, 40, 60, 300, true);
     382    Animation anmWalkE = new Animation("east", 0, 0, 40, 60, 300, true);
     383    Animation anmWalkW = new Animation("west", 0, 0, 40, 60, 300, true);
     384    Animation anmAttackN = new Animation("north", 0, 0, 40, 60, 500, false);
     385    Animation anmAttackS = new Animation("south", 0, 0, 40, 60, 500, false);
     386    Animation anmAttackE = new Animation("east", 0, 0, 40, 60, 500, false);
     387    Animation anmAttackW = new Animation("west", 0, 0, 40, 60, 500, false);
     388    Animation anmDeath = new Animation("west", 0, 0, 40, 60, 1000, false);
     389    BufferedImage walkN = null;
     390    BufferedImage walkS = null;
     391    BufferedImage walkE = null;
     392    BufferedImage walkW = null;
     393    boolean hasDeathAnim = (getClass().getResource("../images/" + folder + "/Death1.png") != null);
     394    try {
     395      if (getClass().getResource("../images/" + folder + "/WalkN.png") != null) {
     396        walkN = ImageIO.read(getClass().getResource("../images/" + folder + "/WalkN.png"));
     397        anmWalkN.addFrame(walkN);
     398        walkS = ImageIO.read(getClass().getResource("../images/" + folder + "/WalkS.png"));
     399        anmWalkS.addFrame(walkS);
     400        walkE = ImageIO.read(getClass().getResource("../images/" + folder + "/WalkE.png"));
     401        anmWalkE.addFrame(walkE);
     402        walkW = ImageIO.read(getClass().getResource("../images/" + folder + "/WalkW.png"));
     403        anmWalkW.addFrame(walkW);
     404      } else if (getClass().getResource("../images/" + folder + "/WalkN1.png") != null) {
     405        walkN = ImageIO.read(getClass().getResource("../images/" + folder + "/WalkN1.png"));
     406        anmWalkN.addFrame(walkN);
     407        anmWalkN.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/WalkN2.png")));
     408        walkS = ImageIO.read(getClass().getResource("../images/" + folder + "/WalkS1.png"));
     409        anmWalkS.addFrame(walkS);
     410        anmWalkS.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/WalkS2.png")));
     411        walkE = ImageIO.read(getClass().getResource("../images/" + folder + "/WalkE1.png"));
     412        anmWalkE.addFrame(walkE);
     413        anmWalkE.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/WalkE2.png")));
     414        walkW = ImageIO.read(getClass().getResource("../images/" + folder + "/WalkW1.png"));
     415        anmWalkW.addFrame(walkW);
     416        anmWalkW.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/WalkW2.png")));
     417      } else {
     418        noAnims = true;
     419        anmStandN.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     420        anmStandS.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     421        anmStandE.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     422        anmStandW.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     423        anmWalkN.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     424        anmWalkN.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     425        anmWalkS.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     426        anmWalkS.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     427        anmWalkE.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     428        anmWalkE.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     429        anmWalkW.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     430        anmWalkW.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     431        anmAttackN.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     432        anmAttackS.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     433        anmAttackE.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     434        anmAttackW.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/" + folder + ".png")));
     435      }
     436      if (!noAnims) {
     437        BufferedImage standN, standS, standE, standW;
     438        if (getClass().getResource("../images/" + folder + "/StandN.png") == null) {
     439          standN = walkN;
     440          standS = walkS;
     441          standE = walkE;
     442          standW = walkW;
     443        } else {
     444          standN = ImageIO.read(getClass().getResource("../images/" + folder + "/StandN.png"));
     445          standS = ImageIO.read(getClass().getResource("../images/" + folder + "/StandS.png"));
     446          standE = ImageIO.read(getClass().getResource("../images/" + folder + "/StandE.png"));
     447          standW = ImageIO.read(getClass().getResource("../images/" + folder + "/StandW.png"));
     448          anmWalkN = new Animation("north", 0, 0, 40, 60, 150, true);
     449          anmWalkS = new Animation("south", 0, 0, 40, 60, 150, true);
     450          anmWalkE = new Animation("east", 0, 0, 40, 60, 150, true);
     451          anmWalkW = new Animation("west", 0, 0, 40, 60, 150, true);
     452          anmWalkN.addFrame(walkN);
     453          anmWalkN.addFrame(standN);
     454          anmWalkN.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/WalkN2.png")));
     455          anmWalkN.addFrame(standN);
     456          anmWalkS.addFrame(walkS);
     457          anmWalkS.addFrame(standS);
     458          anmWalkS.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/WalkS2.png")));
     459          anmWalkS.addFrame(standS);
     460          anmWalkE.addFrame(walkE);
     461          anmWalkE.addFrame(standE);
     462          anmWalkE.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/WalkE2.png")));
     463          anmWalkE.addFrame(standE);
     464          anmWalkW.addFrame(walkW);
     465          anmWalkW.addFrame(standW);
     466          anmWalkW.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/WalkW2.png")));
     467          anmWalkW.addFrame(standW);
     468        }
     469        anmStandN.addFrame(standN);
     470        anmStandS.addFrame(standS);
     471        anmStandE.addFrame(standE);
     472        anmStandW.addFrame(standW);
     473        if (getClass().getResource("../images/" + folder + "/AttackN.png") != null) {
     474          anmAttackN.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/AttackN.png")));
     475          anmAttackN.addFrame(standN);
     476          anmAttackS.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/AttackS.png")));
     477          anmAttackS.addFrame(standS);
     478          anmAttackE.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/AttackE.png")));
     479          anmAttackE.addFrame(standE);
     480          anmAttackW.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/AttackW.png")));
     481          anmAttackW.addFrame(standW);
     482        } else if (getClass().getResource("../images/" + folder + "/AttackN1.png") != null) {
     483          anmAttackN.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/AttackN1.png")));
     484          anmAttackN.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/AttackN2.png")));
     485          anmAttackS.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/AttackS1.png")));
     486          anmAttackS.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/AttackS2.png")));
     487          anmAttackE.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/AttackE1.png")));
     488          anmAttackE.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/AttackE2.png")));
     489          anmAttackW.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/AttackW1.png")));
     490          anmAttackW.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/AttackW2.png")));
     491        } else {
     492          anmAttackN.addFrame(standN);
     493          anmAttackS.addFrame(standS);
     494          anmAttackE.addFrame(standE);
     495          anmAttackW.addFrame(standW);
     496        }
     497        if (hasDeathAnim) {
     498          anmDeath.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/Death1.png")));
     499          anmDeath.addFrame(ImageIO.read(getClass().getResource("../images/" + folder + "/Death2.png")));
     500        }
     501      }
     502    } catch (IOException ioe) {
     503      ioe.printStackTrace();
     504    }
     505    Model model = new Model(hasDeathAnim);
     506    model.addAnimation(Direction.North, Action.Standing, anmStandN);
     507    model.addAnimation(Direction.South, Action.Standing, anmStandS);
     508    model.addAnimation(Direction.East, Action.Standing, anmStandE);
     509    model.addAnimation(Direction.West, Action.Standing, anmStandW);
     510    model.addAnimation(Direction.North, Action.Walking, anmWalkN);
     511    model.addAnimation(Direction.South, Action.Walking, anmWalkS);
     512    model.addAnimation(Direction.East, Action.Walking, anmWalkE);
     513    model.addAnimation(Direction.West, Action.Walking, anmWalkW);
     514    model.addAnimation(Direction.North, Action.Attacking, anmAttackN);
     515    model.addAnimation(Direction.South, Action.Attacking, anmAttackS);
     516    model.addAnimation(Direction.East, Action.Attacking, anmAttackE);
     517    model.addAnimation(Direction.West, Action.Attacking, anmAttackW);
     518    if (hasDeathAnim) {
     519      model.addAnimation(Direction.West, Action.Dying, anmDeath);
     520    }
     521    return model;
     522  }
     523
     524  public void load(BufferedReader in) {
     525    try {
     526      this.spawnPoint = LostHavenRPG.getSpawnPoint(Integer.parseInt(in.readLine()));
     527      if (this.spawnPoint != null) {
     528        this.spawnPoint.numSpawns++;
     529      }
     530      String strLoc = in.readLine();
     531      getLoc().setX(Integer.valueOf(strLoc.substring(0, strLoc.indexOf(","))).intValue());
     532      getLoc().setY(Integer.valueOf(strLoc.substring(strLoc.indexOf(",") + 1)).intValue());
     533      getModel().setDirection(Direction.valueOf(in.readLine()));
     534      getModel().setAction(Action.valueOf(in.readLine()));
     535      setHitpoints(Integer.valueOf(in.readLine()).intValue());
     536      setManapoints(Integer.valueOf(in.readLine()).intValue());
     537      this.passive = Integer.valueOf(in.readLine()).intValue();
     538      this.thorns = Integer.valueOf(in.readLine()).intValue();
     539      this.confused = Integer.valueOf(in.readLine()).intValue();
     540      this.sand = Integer.valueOf(in.readLine()).intValue();
     541      String strWeapon = in.readLine();
     542      if (!strWeapon.equals("None")) {
     543        setWeapon((Weapon)LostHavenRPG.items.get(strWeapon));
     544      }
     545    } catch (IOException ioe) {
     546      ioe.printStackTrace();
     547    }
     548  }
     549
     550  protected int attributeIndex(Attribute attribute) {
     551    switch (attribute) {
     552      case Strength:
     553        return 0;
     554      case Dexterity:
     555        return 1;
     556      case Constitution:
     557        return 2;
     558      case Wisdom:
     559        return 3;
     560    }
     561    return -1;
     562  }
     563
     564  public int getAttribute(Attribute attribute) {
     565    return this.attributes[attributeIndex(attribute)];
     566  }
     567
     568  public void setAttribute(Attribute attribute, int num) {
     569    this.attributes[attributeIndex(attribute)] = num;
     570    updateStats();
     571  }
     572
     573  private void updateStats() {
     574    this.hitpoints = 2 * this.attributes[2];
     575    this.maxHitpoints = 2 * this.attributes[2];
     576    this.manapoints = 2 * this.attributes[3];
     577    this.maxManapoints = 2 * this.attributes[3];
     578  }
     579
     580  public Creature getEnemyTarget() {
     581    return this.enemyTarget;
     582  }
     583
     584  public int getExperience() {
     585    return this.experience;
     586  }
     587
     588  public int getHitpoints() {
     589    return this.hitpoints;
     590  }
     591
     592  public Model getModel() {
     593    return this.model;
     594  }
     595
     596  public long getLastAttacked() {
     597    return this.lastAttacked;
     598  }
     599
     600  public long getLastMoved() {
     601    return this.lastMoved;
     602  }
     603
     604  public int getLevel() {
     605    return this.level;
     606  }
     607
     608  public Point getLoc() {
     609    return this.loc;
     610  }
     611
     612  public int getManapoints() {
     613    return this.manapoints;
     614  }
     615
     616  public int getMaxHitpoints() {
     617    return this.maxHitpoints;
     618  }
     619
     620  public int getMaxManapoints() {
     621    return this.maxManapoints;
     622  }
     623
     624  public String getName() {
     625    return this.name;
     626  }
     627
     628  public int getSpeed() {
     629    return this.speed;
     630  }
     631
     632  public Point getTarget() {
     633    return this.target;
     634  }
     635
     636  public CreatureType getType() {
     637    return this.type;
     638  }
     639
     640  public EquippedWeapon getWeapon() {
     641    return this.weapon;
     642  }
     643
     644  public EquippedWeapon getSpell() {
     645    return this.spell;
     646  }
     647
     648  public void setEnemyTarget(Creature enemyTarget) {
     649    this.enemyTarget = enemyTarget;
     650  }
     651
     652  public void setExperience(int experience) {
     653    this.experience = experience;
     654  }
     655
     656  public void setHitpoints(int hitpoints) {
     657    if (hitpoints > 0) {
     658      this.hitpoints = hitpoints;
     659    } else {
     660      this.hitpoints = 0;
     661    }
     662  }
     663
     664  public void setModel(Model model) {
     665    this.model = model;
     666  }
     667
     668  public void setLastAttacked(long lastAttacked) {
     669    this.lastAttacked = lastAttacked;
     670  }
     671
     672  public void setLastMoved(long lastMoved) {
     673    this.lastMoved = lastMoved;
     674  }
     675
     676  public void setLevel(int level) {
     677    this.level = level;
     678  }
     679
     680  public void setLoc(Point loc) {
     681    this.loc = loc;
     682  }
     683
     684  public void setManapoints(int manapoints) {
     685    if (manapoints > 0) {
     686      this.manapoints = manapoints;
     687    } else {
     688      this.manapoints = 0;
     689    }
     690  }
     691
     692  public void setMaxHitpoints(int maxHitpoints) {
     693    this.maxHitpoints = maxHitpoints;
     694  }
     695
     696  public void setMaxManapoints(int maxManapoints) {
     697    this.maxManapoints = maxManapoints;
     698  }
     699
     700  public void setName(String name) {
     701    this.name = name;
     702  }
     703
     704  public void setSpeed(int speed) {
     705    this.speed = speed;
     706  }
     707
     708  public void setTarget(Point target) {
     709    this.target = target;
     710  }
     711
     712  public void setType(CreatureType type) {
     713    this.type = type;
     714  }
     715
     716  public void setWeapon(Weapon weapon) {
     717    this.weapon = new EquippedWeapon(this, weapon);
     718    this.weapon.update();
     719    (this.model.getAnimation(Direction.North, Action.Attacking)).drawInterval = (this.weapon.getAttackSpeed() * 100 / (this.model.getAnimation(Direction.North, Action.Attacking)).frames.size());
     720    (this.model.getAnimation(Direction.South, Action.Attacking)).drawInterval = (this.weapon.getAttackSpeed() * 100 / (this.model.getAnimation(Direction.South, Action.Attacking)).frames.size());
     721    (this.model.getAnimation(Direction.East, Action.Attacking)).drawInterval = (this.weapon.getAttackSpeed() * 100 / (this.model.getAnimation(Direction.East, Action.Attacking)).frames.size());
     722    (this.model.getAnimation(Direction.West, Action.Attacking)).drawInterval = (this.weapon.getAttackSpeed() * 100 / (this.model.getAnimation(Direction.West, Action.Attacking)).frames.size());
     723  }
     724
     725  public void setSpell(Weapon spell) {
     726    this.spell = new EquippedWeapon(this, spell);
     727    this.spell.update();
     728  }
     729
     730  public SpawnPoint getSpawnPoint() {
     731    return this.spawnPoint;
     732  }
     733
     734  public void setSpawnPoint(SpawnPoint sp) {
     735    this.spawnPoint = sp;
     736  }
     737
     738  public boolean farFromSpawnPoint() {
     739    if (this.spawnPoint == null)
     740      return false;
     741    return (Point.dist(this.spawnPoint.getLoc(), this.loc) > 800.0D);
     742  }
     743
     744  public boolean closerToSpawnPoint(Point newLoc) {
     745    if (this.spawnPoint == null)
     746      return false;
     747    return (Point.dist(this.spawnPoint.getLoc(), this.loc) >= Point.dist(this.spawnPoint.getLoc(), newLoc));
     748  }
     749
     750  public void disable() {
     751    this.disabled = true;
     752  }
     753
     754  public void enable() {
     755    this.disabled = false;
     756  }
     757
     758  public String toString() {
     759    return this.name;
     760  }
     761
     762  public int compareTo(Creature c) {
     763    return 0;
     764  }
    220765}
Note: See TracChangeset for help on using the changeset viewer.