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; 
    } 
    
}