www.pudn.com > BlackCross.rar > camera.java
import java.io.InputStream;
class camera
{
sinCosTab gradTab;
int time[];
int setDir[];
int setSpd[];
int dirChange[];
int spdChange[];
int total;
int position[];
int direction;
int speed;
int camPos;
int camCounter;
boolean reachedEnd;
int xPos;
int yPos;
public camera()
{
gradTab = new sinCosTab();
time = new int[30];
setDir = new int[30];
setSpd = new int[30];
dirChange = new int[30];
spdChange = new int[30];
position = new int[2];
camPos = 0;
camCounter = 0;
reachedEnd = false;
xPos = 0;
yPos = 0;
}
public void load(int i, int j, int k)
{
try
{
byte abyte0[] = new byte[8];
InputStream inputstream = getClass().getResourceAsStream("/sets/cam" + i + ".set");
inputstream.read(abyte0, 0, 2);
int l = (abyte0[0] * abyte0[1]) / 8 - 1;
//level 1£ºabyte0[0]=8 abyte0[1]=5 l=4
//level 2£ºabyte0[0]=8 abyte0[1]=4 l=3
//level 3£ºabyte0[0]=8 abyte0[1]=5 l=4
//level 4£ºabyte0[0]=8 abyte0[1]=5 l=4
if(l > 30)
l = 30;
total = l;
inputstream.read(abyte0, 0, 8);
//level 1£ºabyte0[0]=0
//level 2£ºabyte0[0]=0
//level 3£ºabyte0[0]=0
//level 4£ºabyte0[0]=0
if(abyte0[0] == 0)
{
position[0] = 0;
position[1] = k * 32 - 160;
position[0] *= 64;
position[1] *= 64;
}
if(abyte0[0] == 1)
{
position[0] = 0;
position[1] = 0;
position[0] *= 64;
position[1] *= 64;
}
if(abyte0[0] == 2)
{
position[0] = j * 32 - 160;
position[1] = 0;
position[0] *= 64;
position[1] *= 64;
}
if(abyte0[0] == 3)
{
position[0] = j * 32 - 160;
position[1] = k * 32 - 160;
position[0] *= 64;
position[1] *= 64;
}
for(int i1 = 0; i1 < l; i1++)
{
inputstream.read(abyte0, 0, 8);
time[i1] = abyte0[0];
//level 1£ºtime[0]=3 time[1]=1 time[2]=120 time[3]=120
//level 2£ºtime[0]=2 time[1]=120 time[2]=120
//level 3£ºtime[0/1/2/3]=120
//level 4£ºtime[0/1/2/3]=120
setDir[i1] = abyte0[1];
//level 1£ºsetDir[0]=45 setDir[1/2/3]=-1
//level 2£ºsetDir[0]=45 setDir[1/2]=-1
//level 3£ºsetDir[0]=45 setDir[1/2/3]=-1
//level 4£ºsetDir[0]=45 setDir[1/2/3]=-1
setSpd[i1] = abyte0[2];
//level 1£ºsetSpd[0]=0 setSpd[1/2/3]=-1
//level 2£ºsetSpd[0]=0 setSpd[1/2]=-1
//level 3£ºsetSpd[0]=2 setSpd[1/2/3]=-1
//level 4£ºsetSpd[0]=2 setSpd[1/2/3]=-1
dirChange[i1] = abyte0[3];
//level 1£ºdirChange[0/1/2/3]=0
//level 2£ºdirChange[0/1/2]=0
//level 3£ºdirChange[0/1/2/3]=0
//level 4£ºdirChange[0/1/2/3]=0
spdChange[i1] = abyte0[4];
//level 1£ºspdChange[0]=0 spdChange[1]=1 spdChange[2/3]=0
//level 2£ºspdChange[0]=1 spdChange[1/2]=0
//level 3£ºspdChange[0/1/2/3]=0
//level 4£ºspdChange[0/1/2/3]=0
}
inputstream.close();
}
catch(Exception exception) { }
camPos = 0;
camCounter = 0;
reachedEnd = false;
}
public void run()
{
if(reachedEnd)
return;
int i = camPos;
if(camCounter == 0)
{
if(setDir[i] != -1)
direction = setDir[i] * 15;
if(setSpd[i] != -1)
speed = setSpd[i] * 15;
}
speed += spdChange[i];
direction += dirChange[i];
camCounter++;
if(camCounter >= time[i] * 15)
{
camPos++;
camCounter = 0;
if(camPos == total)
reachedEnd = true;
}
if(direction >= 1350)
direction -= 1350;
if(direction < 0)
direction += 1350;
int j = direction / 15;
int k = speed / 15;
position[0] += sinCosTab.gradTab[j][0] * k;
position[1] += sinCosTab.gradTab[j][1] * k;
xPos = position[0] / 64;
yPos = position[1] / 64;
}
}