📄 donghua.java
字号:
int[] animationpanYis = new int[animationCount+1];
for (int i = 0; i < animationCount+1; i++)
{
animationpanYis[i] = Xiyou.ReadUnsignedShort(dis);
}
if (s_anims == null)
s_anims = new Donghua[animationCount];
for (int i = 0; i < animationCount; i++)
{
if (((1 << i) & mask) == 0)
{
dis.skip(animationpanYis[i + 1] - animationpanYis[i]);
if (s_anims[i] != null)
{
s_anims[i].Free();
s_anims[i] = null;
}
}
else if (s_anims[i] == null)
{
Donghua a = new Donghua();
s_anims[i] = a;
a.m_ID = i;
a.Load(dis);
a.LoadGfx();
Debug.Mem("Loadanimation: " + i );
}
}
dis.close();
dis = null;
FreeUnusedPngImages();
}
catch (Exception e)
{
Debug.PrintException(e);
}
}
private void Load(DataInputStream dis) throws Exception
{
int flag = Xiyou.ReadUnsignedByte(dis);
m_manyMokuaiiiiiiiiiiiiiies = (flag & 0x01) != 0;
m_largeZhennnnnns = (flag & 0x02) != 0;
m_manyZhennnnnns = (flag & 0x04) != 0;
int frameCount = Xiyou.ReadUnsignedVarshort(dis);
m_frames = new short[frameCount][];
m_colHezzzzzz = new short[frameCount * 4];
m_attHezzzzzz = new short[frameCount * 4];
for (int i = 0; i < frameCount; i++)
{
int embeddingMokuaiiiiiiiiiiiiiieCount = Xiyou.ReadUnsignedByte(dis);
m_frames[i] = new short[embeddingMokuaiiiiiiiiiiiiiieCount * 4];
for (int j = 0; j < embeddingMokuaiiiiiiiiiiiiiieCount; j++)
{
m_frames[i][j*4] = (short)Xiyou.ReadUnsignedByte(dis);
m_frames[i][j*4+1] = (short)Xiyou.ReadUnsignedByte(dis);
if (m_largeZhennnnnns)
{
m_frames[i][j*4+2] = Xiyou.ReadVarshort(dis);
m_frames[i][j*4+3] = Xiyou.ReadVarshort(dis);
}
else
{
m_frames[i][j*4+2] = Xiyou.ReadByte(dis);
m_frames[i][j*4+3] = Xiyou.ReadByte(dis);
}
}
if (m_largeZhennnnnns)
{
m_colHezzzzzz[i * 4 + 0] = Xiyou.ReadVarshort(dis);
m_colHezzzzzz[i * 4 + 1] = Xiyou.ReadVarshort(dis);
m_colHezzzzzz[i * 4 + 2] = Xiyou.ReadVarshort(dis);
m_colHezzzzzz[i * 4 + 3] = Xiyou.ReadVarshort(dis);
m_attHezzzzzz[i * 4 + 0] = Xiyou.ReadVarshort(dis);
m_attHezzzzzz[i * 4 + 1] = Xiyou.ReadVarshort(dis);
m_attHezzzzzz[i * 4 + 2] = Xiyou.ReadVarshort(dis);
m_attHezzzzzz[i * 4 + 3] = Xiyou.ReadVarshort(dis);
}
else
{
m_colHezzzzzz[i * 4 + 0] = Xiyou.ReadByte(dis);
m_colHezzzzzz[i * 4 + 1] = Xiyou.ReadByte(dis);
m_colHezzzzzz[i * 4 + 2] = Xiyou.ReadByte(dis);
m_colHezzzzzz[i * 4 + 3] = Xiyou.ReadByte(dis);
m_attHezzzzzz[i * 4 + 0] = Xiyou.ReadByte(dis);
m_attHezzzzzz[i * 4 + 1] = Xiyou.ReadByte(dis);
m_attHezzzzzz[i * 4 + 2] = Xiyou.ReadByte(dis);
m_attHezzzzzz[i * 4 + 3] = Xiyou.ReadByte(dis);
}
}
int actionCount = Xiyou.ReadUnsignedVarshort(dis);
m_actions = new short[actionCount][];
m_mechModel = new short[actionCount * 4];
for (int i = 0; i < actionCount; i++)
{
int embeddingZhennnnnnCount = Xiyou.ReadUnsignedByte(dis);
m_actions[i] = new short[embeddingZhennnnnnCount];
for (int j = 0; j < embeddingZhennnnnnCount; j++)
{
m_actions[i][j] = (short)Xiyou.ReadUnsignedShort(dis);
}
for ( int j = 0; j < 4; j++ )
{
m_mechModel[i * 4 + j] = (short)Xiyou.ReadUnsignedShort(dis);
}
}
}
private void LoadGfx()
{
try
{
DataInputStream dis = new DataInputStream(FILE_NAME_GFXDATA.getClass().getResourceAsStream(FILE_NAME_GFXDATA));
int textureCount = Xiyou.ReadUnsignedVarshort(dis);
int[] texturepanYis = new int[textureCount+1];
for (int i = 0; i < textureCount+1; i++)
{
texturepanYis[i] = Xiyou.ReadUnsignedShort(dis);
}
dis.skip(texturepanYis[m_ID]);
m_imageFormat = Xiyou.ReadUnsignedByte(dis);
dis.skip(1);
m_imageID = Xiyou.ReadUnsignedByte(dis);
if (m_imageFormat == IMAGE_FORMAT_PNG)
{
int flag = Xiyou.ReadUnsignedByte(dis);
m_largeMokuaiiiiiiiiiiiiiies = (flag & 0x01) != 0;
}
int moduleCount = Xiyou.ReadUnsignedVarshort(dis);
if (m_imageFormat == IMAGE_FORMAT_PNG)
{
m_MOkkkai = new byte[moduleCount * 4];
}
else
m_MOkkkai = new byte[moduleCount * 2];
if (IsHuanchongedAnimation(m_ID))
{
}
for (int i = 0; i < moduleCount; i++)
{
if (m_imageFormat == IMAGE_FORMAT_PNG)
{
m_MOkkkai[i*4] = (byte)Xiyou.ReadUnsignedByte(dis);
m_MOkkkai[i*4+1] = (byte)Xiyou.ReadUnsignedByte(dis);
m_MOkkkai[i*4+2] = (byte)Xiyou.ReadUnsignedByte(dis);
m_MOkkkai[i*4+3] = (byte)Xiyou.ReadUnsignedByte(dis);
}
else
{
m_MOkkkai[i*2] = (byte)Xiyou.ReadUnsignedByte(dis);
m_MOkkkai[i*2+1] = (byte)Xiyou.ReadUnsignedByte(dis);
}
}
dis.skip(texturepanYis[textureCount] - texturepanYis[m_ID+1]);
int imageCount = Xiyou.ReadUnsignedVarshort(dis);
int[] imagepanYis = new int[imageCount+1];
for (int i = 0; i < imageCount+1; i++)
{
imagepanYis[i] = Xiyou.ReadUnsignedShort(dis);
}
dis.skip(imagepanYis[m_imageID]);
if (m_imageFormat == IMAGE_FORMAT_PNG)
{
s_pngImages[m_imageID] = Image.createImage(dis.readUTF());
s_pngImagesRefs[m_imageID]++;
m_pngImageWidth = s_pngImages[m_imageID].getWidth();
m_pngImageHeight = s_pngImages[m_imageID].getHeight();
}
dis.close();
dis = null;
}
catch (Exception e)
{
Debug.PrintException(e);
}
}
private void Free()
{
if (m_imageFormat == IMAGE_FORMAT_PNG)
{
s_pngImagesRefs[m_imageID]--;
Debug.Assert(s_pngImagesRefs[m_imageID] >= 0,
"the references shumu of image " + m_imageID + " is less than 0");
}
m_MOkkkai = null;
m_frames = null;
m_actions = null;
}
private static void FreeUnusedPngImages()
{
for (int i = 0; i < DWorld.IMAGE_COUNT; i++)
{
if (s_pngImagesRefs[i] == 0)
{
s_pngImages[i] = null;
}
}
}
public void Draw(Graphics g, int x, int y, boolean flipX, boolean flipY, int frameID, int scenePalID, boolean insideViewport)
{
short[] frame = m_frames[frameID];
int modID, flag;
boolean actualFlipX, actualFlipY;
int actualX, actualY;
int modX = 0, modY = 0, modW = 0, modH = 0;
int len = frame.length;
for (int i = 0; i < len; i += 4)
{
modID = frame[i] & ZHEN_MASK;
flag = frame[i+1] & ZHEN_MASK;
actualX = x;
actualY = y;
if (m_imageFormat == IMAGE_FORMAT_PNG)
{
modX = m_MOkkkai[(modID<<2)] & MODULE_MASK;
modY = m_MOkkkai[(modID<<2)+1] & MODULE_MASK;
modW = m_MOkkkai[(modID<<2)+2] & MODULE_MASK;
modH = m_MOkkkai[(modID<<2)+3] & MODULE_MASK;
Debug.Assert(modX >= 0 && modX + modW <= m_pngImageWidth,
"module " + modID + " of animation " + m_ID + " is outside image");
Debug.Assert(modY >= 0 && modY + modH <= m_pngImageHeight,
"module " + modID + " of animation " + m_ID + " is outside image");
}
if (flipX)
actualX -= frame[i+2] - 1;
else
actualX += frame[i+2];
if (flipY)
actualY -= frame[i+3] - 1;
else
actualY += frame[i+3];
actualFlipX = flipX ^ ((flag & 0x01) != 0);
actualFlipY = flipY ^ ((flag & 0x02) != 0);
if (actualFlipX)
actualX -= modW;
if (actualFlipY)
actualY -= modH;
if (actualX + modW < PINGMUDDD.sssCHUANNN_LEFT || actualX >= PINGMUDDD.sssCHUANNN_LEFT + PINGMUDDD.sssCHUANNN_WIDTH)
continue;
if (actualY + modH < PINGMUDDD.sssCHUANNN_TOP || actualY >= PINGMUDDD.sssCHUANNN_TOP + PINGMUDDD.sssCHUANNN_HEIGHT)
continue;
if (m_imageFormat == IMAGE_FORMAT_PNG)
{
if (insideViewport)
HuaQuYuZaiShiTu(g, s_pngImages[m_imageID], modX, modY, modW, modH, GetFlip(actualFlipX, actualFlipY), actualX, actualY);
else
HuaQuYuZaiPINMU(g, s_pngImages[m_imageID], modX, modY, modW, modH, GetFlip(actualFlipX, actualFlipY), actualX, actualY);
}
}
}
public static boolean IsHuanchongedAnimation(int animationID)
{
return false;
}
public int GetZhennnnnnDuration(int actionID, int embeddingZhennnnnnID)
{
Debug.Assert(actionID >= 0 && actionID < m_actions.length,
"actionID " + actionID + " overflows in Donghua.getZhennnnnnDuration");
Debug.Assert(embeddingZhennnnnnID >= 0 && embeddingZhennnnnnID < m_actions[actionID].length,
"embeddingZhennnnnnID " + embeddingZhennnnnnID + " overflows in Donghua.getZhennnnnnDuration");
return (m_actions[actionID][embeddingZhennnnnnID] & 0xFFFF) >> 8;
}
public int GetZhennnnnnID(int actionID, int embeddingZhennnnnnID)
{
Debug.Assert(actionID >= 0 && actionID < m_actions.length,
"actionID " + actionID + " overflows in Donghua.getZhennnnnnDuration");
Debug.Assert(embeddingZhennnnnnID >= 0 && embeddingZhennnnnnID < m_actions[actionID].length,
"embeddingZhennnnnnID " + embeddingZhennnnnnID + " overflows in Donghua.getZhennnnnnDuration");
return m_actions[actionID][embeddingZhennnnnnID] & 0x00FF;
}
public int GetZhennnnnnCount(int actionID)
{
Debug.Assert(actionID >= 0 && actionID < m_actions.length,
"actionID " + actionID + " overflows in Donghua.getZhennnnnnCount");
return m_actions[actionID].length;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -