package org.test.crazyjumpergles; import loon.action.sprite.SpriteBatch; public class ForceField extends Entity { protected boolean m_bExitable; protected float m_fAlphaChangeDir; protected int m_iBlockQuartersFromGround; protected int m_iSizeBlocks; protected int m_iStartPosAtBlock; protected int m_iStartPosDeltaBlockQuarters; public ForceField() { super(); } public final void Create(int iAtBlock, int iDeltaQuarters, int iSizeBlocks, int iQuartersFromGround) { this.Reset(); this.m_iStartPosAtBlock = iAtBlock; this.m_iStartPosDeltaBlockQuarters = iDeltaQuarters; this.m_iSizeBlocks = iSizeBlocks; this.m_iBlockQuartersFromGround = iQuartersFromGround; super.SetSize(this.m_iSizeBlocks * m_game.GetUnitBlockSize(), m_game.GetUnitBlockSize(), false); super.SetCollSize(super.GetSizeX(), super.GetSizeY() * 0.5f); this.m_fAlphaChangeDir = -1f; super.m_pSprite.SetColorAlpha(1f); super.SetSpriteAnimCurrentFrame(0); } public final void CreateExitable(int iAtBlock, int iDeltaQuarters, int iSizeBlocks, int iQuartersFromGround) { this.Create(iAtBlock, iDeltaQuarters, iSizeBlocks, iQuartersFromGround); this.m_bExitable = true; super.SetSpriteAnimCurrentFrame(1); } private int GetEndPosAtBlock() { int num = (int) Math .ceil((double) ((this.m_iStartPosDeltaBlockQuarters + (this.m_iSizeBlocks * 4)) * 0.25f)); return (this.m_iStartPosAtBlock + (num - 1)); } public final float GetPositionFromGround() { return (super.GetHalfSizeY() + (this.m_iBlockQuartersFromGround * m_game .GetUnitBlockQuarterSize())); } @Override public boolean Init() { this.CreateSpriteAnim(1, 0, true); this.CreateSpriteFrame("forcefield"); this.CreateSpriteFrame("forcefield_exitable"); return true; } public final boolean IsExitable() { return this.m_bExitable; } @Override public void Render(SpriteBatch batch) { if (super.m_bVisible) { float num = super.GetPositionX() - super.GetHalfSizeX(); super.SetSize(m_game.GetUnitBlockSize(), m_game.GetUnitBlockSize(), false); for (int i = 0; i < this.m_iSizeBlocks; i++) { super.SetPositionX( (num + super.GetHalfSizeX()) + (i * super.GetSizeX()), false); super.m_pSprite.Render(batch); } super.SetSize(this.m_iSizeBlocks * m_game.GetUnitBlockSize(), m_game.GetUnitBlockSize(), false); super.SetPositionX(num + super.GetHalfSizeX(), false); } } @Override public void Reset() { super.Reset(); this.m_bExitable = false; } @Override public boolean Tick(int deltaMS) { if (!super.Tick(deltaMS)) { return false; } Ground ground = m_game.GetGround(); if (ground.IsBlockVisible(this.m_iStartPosAtBlock) || ground.IsBlockVisible(this.GetEndPosAtBlock())) { super.m_bVisible = true; float num = (ground.GetBlockPosOnScreen(this.m_iStartPosAtBlock) - m_game .GetUnitBlockHalfSize()) + (this.m_iStartPosDeltaBlockQuarters * m_game .GetUnitBlockQuarterSize()); float num2 = this.m_iBlockQuartersFromGround * m_game.GetUnitBlockQuarterSize(); super.SetPositionX(num + super.GetHalfSizeX(), false); super.SetPositionY( (m_game.GetGroundPosY() - num2) - super.GetHalfSizeY(), false); float fAlpha = super.m_pSprite.GetColorAlpha() + ((this.m_fAlphaChangeDir * super.m_fDeltaTime) * 4f); if (fAlpha >= 1f) { fAlpha = 1f; this.m_fAlphaChangeDir = -1f; } else if (fAlpha <= 0.3f) { fAlpha = 0.3f; this.m_fAlphaChangeDir = 1f; } super.m_pSprite.SetColorAlpha(fAlpha); } else { super.m_bVisible = false; } return true; } }