|
Display |
|
/*
* JVirus is a PacMan clone, written in Java.
*
* Please read "http://jvirus.sourceforge.net/jvirus_licence.txt" for copyrights.
*
* The sourcecode is designed and created with
* Sun J2SDK 1.3 and Microsoft Visual J++ 6.0
*
* JVirus homepage: http://jvirus.sourceforge.net
*
* autor: Slawa Weis
* email: slawaweis@animatronik.net
*
*/
package org.game.JVirus;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.swing.*;
/**
* the display for the level array. It has a static size and a buffer.
*/
public class Display extends JPanel implements IFields
{
/**
* tile width 64 pixel
*/
public static final int TILE_WIDTH = 64;
/**
* tile height 64 pixel
*/
public static final int TILE_HEIGHT = 64;
/**
* display width in tiles = 12
*/
public static final int DISPLAY_TILES_WIDTH = 12;
/**
* display height in tiles = 8
*/
public static final int DISPLAY_TILES_HEIGHT = 8;
/**
* half of DISPLAY_TILES_WIDTH
*/
public static final int DISPLAY_TILES_WIDTH2 = DISPLAY_TILES_WIDTH/2;
/**
* half of DISPLAY_TILES_HEIGHT
*/
public static final int DISPLAY_TILES_HEIGHT2 = DISPLAY_TILES_HEIGHT/2;
/**
* display offscreen buffer
*/
protected BufferedImage bufferImage = null;
/**
* reference to the level
*/
protected Matrix level = null;
/**
* current display point of the level, if the level is bigger that the display size
*/
public Point mapOnScreen = new Point(0, 0);
/**
* simply constructor
*/
public Display()
{
super(null);
setDoubleBuffered(false);
setBackground(Color.black);
Dimension bufferSize = new Dimension(DISPLAY_TILES_WIDTH * TILE_WIDTH,
DISPLAY_TILES_HEIGHT * TILE_HEIGHT);
bufferImage = new BufferedImage(bufferSize.width, bufferSize.height, BufferedImage.TYPE_INT_RGB);
setSize(bufferSize);
setPreferredSize(bufferSize);
setMaximumSize(bufferSize);
setMinimumSize(bufferSize);
}
/**
* set the new level and repaint the back buffer
*/
public void reset(Matrix level)
{
this.level = level;
mapOnScreen.setLocation(level.displayPoint);
repaintMatrix();
}
/**
* paintComponent overwritten to paint the back buffer
*/
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(bufferImage, 0, 0, null);
}
/**
* repaints the whole back buffer
*/
protected void repaintMatrix()
{
repaintMatrix(null);
}
/**
* repaints the whole back buffer and the avatar
*/
protected void repaintMatrix(Avatar avatar)
{
int i, j, a, b;
Graphics2D g2 = bufferImage.createGraphics();
for(i = mapOnScreen.y, a = 0; i < level.matrix.length; i++, a++)
for(j = mapOnScreen.x, b = 0; j < level.matrix[i].length; j++, b++)
{
g2.drawImage(Images.imageArray[level.matrix[i][j]].nextImage(), b*64, a*64, null);
}
if(avatar != null)
{
drawAvatar(g2, avatar);
}
}
/**
* repaints only the animated tiles in the back buffer
*/
protected void repaintAnimTiles(Avatar avatar)
{
int i, j, a, b;
Graphics2D g2 = bufferImage.createGraphics();
for(i = mapOnScreen.y, a = 0; (a < DISPLAY_TILES_HEIGHT || i < level.matrix.length); i++, a++)
for(j = mapOnScreen.x, b = 0; (b < DISPLAY_TILES_WIDTH || j < level.matrix[i].length); j++, b++)
{
if((Matrix.actionTyp[level.matrix[i][j]] & AT_ANIM) == AT_ANIM && (avatar.x != j || avatar.y != i))
g2.drawImage(Images.imageArray[level.matrix[i][j]].nextImage(), b*64, a*64, null);
}
}
/**
* repaint the avatar only in the back buffer
*/
public void moveAvatar(Avatar avatar)
{
Graphics2D g2 = bufferImage.createGraphics();
g2.drawImage(Images.imageArray[level.matrix[avatar.ly][avatar.lx]].nextImage(), (avatar.lx-mapOnScreen.x)*64, (avatar.ly-mapOnScreen.y)*64, null);
drawAvatar(g2, avatar);
}
/**
* paints the avatar
*/
public void drawAvatar(Graphics2D g2, Avatar avatar)
{
g2.drawImage((avatar.move_direction ?
(avatar.eat_sequence ? Images.avatar3 : Images.avatar4) :
(avatar.eat_sequence ? Images.avatar1 : Images.avatar2)),
(avatar.x-mapOnScreen.x)*TILE_WIDTH,
(avatar.y-mapOnScreen.y)*TILE_HEIGHT, null);
}
}
|
Display |
|