QuakeFile.java :  » Game » jake2-ext » jake2 » util » Java Open Source

Java Open Source » Game » jake2 ext 
jake2 ext » jake2 » util » QuakeFile.java
/*
Copyright (C) 1997-2001 Id Software, Inc.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  

See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

 */
// Created on 24.07.2004 by RST.
// $Id: QuakeFile.java,v 1.6 2005/11/20 22:18:34 salomo Exp $
package jake2.util;

import jake2.game.*;
import jake2.qcommon.Com;

import java.io.*;

/**
 * RandomAccessFile, but handles readString/WriteString specially and offers
 * other helper functions
 */
public class QuakeFile extends RandomAccessFile {

  /** Standard Constructor. */
  public QuakeFile(String filename, String mode) throws FileNotFoundException {
    super(filename, mode);
  }

  /** Writes a Vector to a RandomAccessFile. */
  public void writeVector(float v[]) throws IOException {
    for (int n = 0; n < 3; n++) {
      writeFloat(v[n]);
    }
  }

  /** Writes a Vector to a RandomAccessFile. */
  public float[] readVector() throws IOException {
    float res[] = {0, 0, 0};
    for (int n = 0; n < 3; n++) {
      res[n] = readFloat();
    }

    return res;
  }

  /** Reads a length specified string from a file. */
  public String readString() throws IOException {
    int len = readInt();

    if (len == -1) {
      return null;
    }

    if (len == 0) {
      return "";
    }

    byte bb[] = new byte[len];

    super.read(bb, 0, len);

    return new String(bb, 0, len);
  }

  /** Writes a length specified string to a file. */
  public void writeString(String s) throws IOException {
    if (s == null) {
      writeInt(-1);
      return;
    }

    writeInt(s.length());
    if (s.length() != 0) {
      writeBytes(s);
    }
  }

  /** Writes the edict reference. */
  public void writeEdictRef(edict_t ent) throws IOException {
    if (ent == null) {
      writeInt(-1);
    } else {
      writeInt(ent.s.number);
    }
  }

  /**
   * Reads an edict index from a file and returns the edict.
   */
  public edict_t readEdictRef() throws IOException {
    int i = readInt();

    // handle -1
    if (i < 0) {
      return null;
    }

    if (i > GameBase.g_edicts.length) {
      Com.DPrintf("jake2: illegal edict num:" + i + "\n");
      return null;
    }

    // valid edict.
    return GameBase.g_edicts[i];
  }

  /** Writes the Adapter-ID to the file. */
  public void writeAdapter(SuperAdapter a) throws IOException {
    writeInt(3988);
    if (a == null) {
      writeString(null);
    } else {
      String str = a.getID();
      if (a == null) {
        Com.DPrintf("writeAdapter: invalid Adapter id for " + a + "\n");
      }
      writeString(str);
    }
  }

  /** Reads the adapter id and returns the adapter. */
  public SuperAdapter readAdapter() throws IOException {
    if (readInt() != 3988) {
      Com.DPrintf("wrong read position: readadapter 3988 \n");
    }

    String id = readString();

    if (id == null) {
      // null adapter. :-)
      return null;
    }

    return SuperAdapter.getFromID(id);
  }

  /** Writes an item reference. */
  public void writeItem(gitem_t item) throws IOException {
    if (item == null) {
      writeInt(-1);
    } else {
      writeInt(item.index);
    }
  }

  /** Reads the item index and returns the game item. */
  public gitem_t readItem() throws IOException {
    int ndx = readInt();
    if (ndx == -1) {
      return null;
    } else {
      return GameItemList.itemlist[ndx];
    }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.