📄 jiaose.java
字号:
import java.io.*;
import javax.microedition.lcdui.*;
import com.nokia.mid.ui.*;
public class Jiaose
{
public static int s_ajiaoseCount;
public static int ALLOCATE_ACTOR_NUMBER = 60;
public static int STATIC_ACTOR_NUMBER = 100;
public static int DYNAMIC_ACTOR_NUMBER = 30;
public static int MAX_ACTOR_NUMBER = STATIC_ACTOR_NUMBER + DYNAMIC_ACTOR_NUMBER;
public static Jiaose[] s_ajiaoses;
public static int s_inCameraJiaosesCount;
public static Jiaose[] s_inCameraJiaosess;
public int m_ID;
public int m_ajiaoseClassID;
public int m_activeZoneLeft;
public int m_activeZoneTop;
public int m_activeZoneRight;
public int m_activeZoneBottom;
public int m_level = LV_OTHER;
public static final int LV_FG_STATIC = 0;
public static final int LV_FG_DYNAMIC = 1;
public static final int LV_FG_LIGHT = 2;
public static final int LV_BG = 3;
public static final int LV_OTHER = 4;
public int m_animID;
public Donghua m_anim;
public int m_flag;
public int m_x;
public int m_y;
public int m_vX;
public int m_vY;
public int m_aX;
public int m_aY;
public int[] m_collisionHezzzzzz = new int[6];
public int[] m_attackHezzzzzz = new int[4];
public static int[] s_hezzz1 = new int[4];
public static int[] s_hezzz2 = new int[4];
public static int[] s_preColHezzzzzz = new int[4];
public static int[] s_hezzzPrincess = new int[4];
public static final int FOLLOW_TOOTHY = 1;
public static final int FOLLOW_GIGGLES = 2;
public static final int FOLLOW_NONE = 0;
public int m_followType = FOLLOW_NONE;
boolean m_isColliding = false;
public byte[] m_parameters; // parameters
public static final int ALLOCATE_ACTOR_MAX_PARA_NUM = 15;
public Jiaose()
{
m_parameters = new byte[ALLOCATE_ACTOR_MAX_PARA_NUM];
m_flag = 0;
}
public static byte s_originData[];
public static int s_ajiaosepanYi[];
public static short s_ajiaoseFangjianID[];
public static short m_ajiaoseFangjianID[];
public static short s_freeFangjianID = 0;
public static boolean s_ajiaoseDie = false;
public int m_ajiaoseID;
public short m_roomID;
public static short[] s_activeZones;
private static final String FILE_NAME_SCENE = "/scene.bin";
public static int s_sceneAnimationMask;
public static void LoadScene(int sceneID)
{
try
{
DataInputStream dis = new DataInputStream(FILE_NAME_SCENE.getClass().getResourceAsStream(FILE_NAME_SCENE));
Xiyou.LocateToBlock(dis, sceneID);
s_sceneAnimationMask = Xiyou.ReadInt(dis);
int len = Xiyou.ReadInt(dis);
s_originData = new byte[len];
for (int i=0; i<len; i++)
s_originData[i] = dis.readByte();
LoadJiaosess();
dis.skip(2);
dis.close();
dis = null;
s_ajiaoses = new Jiaose[ALLOCATE_ACTOR_NUMBER];
for (int i = 0; i < ALLOCATE_ACTOR_NUMBER; i++)
{
s_ajiaoses[i] = new Jiaose();
s_ajiaoses[i].CleanFangjian();
}
s_inCameraJiaosess = new Jiaose[ALLOCATE_ACTOR_NUMBER]; //!
s_ajiaoseFangjianID = new short[MAX_ACTOR_NUMBER];
Jiaose.ClearFangjians();
}
catch (Exception e)
{
Debug.PrintException(e);
}
}
public static void FreeActos()
{
s_originData = null;
s_inCameraJiaosess = null;
s_ajiaoseFangjianID = null;
s_ajiaoses = null;
}
public static final int ACTORCLASSID_OFFSET = 2;
public static final int ANIMATIONID_OFFSET = 3;
public static final int FLAG_OFFSET = 6;
public static final int MAP_X_OFFSET = 7;
public static final int MAP_Y_OFFSET = 9;
public static final int ACTIVEZONE_OFFSET = 11;
private static void LoadJiaosess() throws Exception
{
s_ajiaoseCount = Xiyou.ReadShort(s_originData, 0); // ajiaose data shumu
s_ajiaosepanYi = new int[s_ajiaoseCount];
int len = 2;
s_activeZones = new short[s_ajiaoseCount * 4];
for (int i = 0; i < s_ajiaoseCount; i++)
{
s_ajiaosepanYi[i] = len;
int diTUX = (short) Xiyou.ReadShort(s_originData, len + MAP_X_OFFSET);
int diTUY = (short) Xiyou.ReadShort(s_originData, len + MAP_Y_OFFSET);
s_activeZones[i * 4] = (short) (Xiyou.ReadShort(s_originData, len + ACTIVEZONE_OFFSET) + diTUX);
s_activeZones[i * 4 + 1] = (short) (Xiyou.ReadShort(s_originData, len + ACTIVEZONE_OFFSET + 2) + diTUY);
s_activeZones[i * 4 + 2] = (short) (Xiyou.ReadShort(s_originData, len + ACTIVEZONE_OFFSET + 4) + diTUX);
s_activeZones[i * 4 + 3] = (short) (Xiyou.ReadShort(s_originData, len + ACTIVEZONE_OFFSET + 6) + diTUY);
len += 2 + Xiyou.ReadShort(s_originData, len);
}
}
public static void SetAnims()
{
for (int i = 0; i < s_ajiaoseCount; i++)
s_ajiaoses[i].m_anim = Donghua.s_anims[s_ajiaoses[i].m_animID];
}
private static final String FILE_NAME_GLOBAL_DATA = "/global.bin";
public static final int CLASS_INFO_FLAG = 0;
public static final int CLASS_INFO_ANIMATION_ID = 1;
public static final int CLASS_INFO_ACTION_ID = 2;
public static final int CLASS_INFO_ACTIVEZONE_L = 3;
public static final int CLASS_INFO_ACTIVEZONE_T = 4;
public static final int CLASS_INFO_ACTIVEZONE_R = 5;
public static final int CLASS_INFO_ACTIVEZONE_B = 6;
public static final int CLASS_INFO_PARAMETERS = 7;
public static final int CLASS_INFO_BASE_INFO_LEN = 7;
public static short[][] s_ajiaoseClassInfo;
public static void LoadGlobalData()
{
try
{
DataInputStream dis = new DataInputStream(FILE_NAME_GLOBAL_DATA.getClass().getResourceAsStream(FILE_NAME_GLOBAL_DATA));
int ajiaoseClassCount = Xiyou.ReadByte(dis);
s_ajiaoseClassInfo = new short[ajiaoseClassCount][];
for (int i=0; i < ajiaoseClassCount; i++)
{
int infoSize = Xiyou.ReadByte(dis);
s_ajiaoseClassInfo[i] = new short[infoSize];
s_ajiaoseClassInfo[i][CLASS_INFO_FLAG] = Xiyou.ReadShort(dis);
s_ajiaoseClassInfo[i][CLASS_INFO_ANIMATION_ID] = Xiyou.ReadShort(dis);
s_ajiaoseClassInfo[i][CLASS_INFO_ACTION_ID] = Xiyou.ReadShort(dis);
s_ajiaoseClassInfo[i][CLASS_INFO_ACTIVEZONE_L] = Xiyou.ReadShort(dis);
s_ajiaoseClassInfo[i][CLASS_INFO_ACTIVEZONE_T] = Xiyou.ReadShort(dis);
s_ajiaoseClassInfo[i][CLASS_INFO_ACTIVEZONE_R] = Xiyou.ReadShort(dis);
s_ajiaoseClassInfo[i][CLASS_INFO_ACTIVEZONE_B] = Xiyou.ReadShort(dis);
int paraSize = infoSize - 7;
for (int j=0; j<paraSize; j++)
s_ajiaoseClassInfo[i][CLASS_INFO_PARAMETERS + j] = Xiyou.ReadShort(dis);
}
}catch(Exception e)
{
}
}
void LoadJiaoses(int type)
{
m_animID = s_ajiaoseClassInfo[type][CLASS_INFO_ANIMATION_ID];
m_anim = Donghua.s_anims[m_animID];
m_actionID = s_ajiaoseClassInfo[type][CLASS_INFO_ACTION_ID];
m_flag = s_ajiaoseClassInfo[type][CLASS_INFO_FLAG];
SetAliveFlag(true);
m_x = m_y = 0;
if (s_ajiaoseClassInfo[type].length > CLASS_INFO_BASE_INFO_LEN)
{
}
}
void LoadJiaoses(byte[] data, int offset)
{
offset += 2;
m_ajiaoseClassID = data[offset++];
m_animID = data[offset++];
m_anim = (m_animID != -1) ? Donghua.s_anims[m_animID] : null;
m_actionID = Xiyou.ReadShort(data, offset);
offset += 2;
m_level = LV_FG_DYNAMIC;
m_flag = data[offset++];
m_flipX = (m_flag & 0x01) != 0;
m_flipY = (m_flag & 0x02) != 0;
m_x = Xiyou.ReadShort(data, offset) << 8;
offset += 2;
m_y = Xiyou.ReadShort(data, offset) << 8;;
offset += 2;
offset += 8;
int parameterSize = data[offset++];
if (parameterSize > 0)
{
System.arraycopy(data, offset, m_parameters, 0, parameterSize);
}
Parameters2Varible();
}
void PackJiaoses(byte[] data, int offset)
{
offset += 4;
data[offset++] = (byte) (m_actionID >> 8);
data[offset++] = (byte) m_actionID;
data[offset++] = (byte) m_flag;
int temp = m_x >> 8;
data[offset++] = (byte) (temp >> 8);
data[offset++] = (byte) temp;
temp = m_y >> 8;
data[offset++] = (byte) (temp >> 8);
data[offset++] = (byte) temp;
}
public static Jiaose FenPeijiaose(int ajiaoseID, boolean isStatic)
{
if (s_freeFangjianID < ALLOCATE_ACTOR_NUMBER)
{
Jiaose a = s_ajiaoses[s_freeFangjianID];
a.m_roomID = s_freeFangjianID;
if (isStatic)
{
a.m_ajiaoseID = ajiaoseID;
s_ajiaoseFangjianID[ajiaoseID] = s_freeFangjianID;
a.LoadJiaoses(s_originData, s_ajiaosepanYi[ajiaoseID]);
}
else
{
for (int i = STATIC_ACTOR_NUMBER; i < MAX_ACTOR_NUMBER; i++)
if (s_ajiaoseFangjianID[i] == -1)
{
a.m_ajiaoseID = i;
s_ajiaoseFangjianID[i] = s_freeFangjianID;
break;
}
a.m_ajiaoseClassID = ajiaoseID;
a.LoadJiaoses(ajiaoseID);
}
s_freeFangjianID++;
a.InitAI();
return a;
}
return null;
}
public static void DisallocJiaoses(Jiaose ajiaose, boolean isTrue)
{
int ajiaoseID = ajiaose.m_ajiaoseID;
s_ajiaoseFangjianID[ajiaoseID] = -1;
if (isTrue && ajiaoseID < 100)
ajiaose.PackJiaoses(s_originData, s_ajiaosepanYi[ajiaoseID]);
s_freeFangjianID--;
if (ajiaose.m_roomID != s_freeFangjianID)
{
s_ajiaoseDie = true;
short tmp = (short) ajiaose.m_roomID;
if (s_ajiaoses[s_freeFangjianID].m_ajiaoseID >= 0)
{
s_ajiaoseFangjianID[s_ajiaoses[s_freeFangjianID].m_ajiaoseID] = tmp;
}
s_ajiaoses[tmp] = s_ajiaoses[s_freeFangjianID];
s_ajiaoses[tmp].m_roomID = tmp;
s_ajiaoses[s_freeFangjianID] = ajiaose;
}
ajiaose.CleanFangjian();
}
static void ClearFangjians()
{
for (int i = 0; i < ALLOCATE_ACTOR_NUMBER; i++)
s_ajiaoses[i].CleanFangjian();
for (int i = 0; i < MAX_ACTOR_NUMBER; i++)
s_ajiaoseFangjianID[i] = -1;
s_freeFangjianID = 0;
}
static Jiaose GetJiaoses(int ajiaoseID)
{
if (ajiaoseID < 0)
return null;
if (s_ajiaoseFangjianID[ajiaoseID] >= 0)
return s_ajiaoses[s_ajiaoseFangjianID[ajiaoseID]];
else return null;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -