From 7fda99a19d5658220ae41fe281da3578d6624bb4 Mon Sep 17 00:00:00 2001 From: Charles Date: Fri, 1 Jun 2001 18:35:55 +0000 Subject: [PATCH] --- source/platform/pcbubble.cpp | 196 +++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 source/platform/pcbubble.cpp diff --git a/source/platform/pcbubble.cpp b/source/platform/pcbubble.cpp new file mode 100644 index 000000000..a015971b0 --- /dev/null +++ b/source/platform/pcbubble.cpp @@ -0,0 +1,196 @@ +/*========================================================================= + + pcbubble.cpp + + Author: CRB + Created: + Project: Spongebob + Purpose: + + Copyright (c) 2001 Climax Development Ltd + +===========================================================================*/ + +#ifndef __PLATFORM_PCBUBBLE_H__ +#include "platform\pcbubble.h" +#endif + +#ifndef __GAME_GAME_H__ +#include "game\game.h" +#endif + +#ifndef __SPR_SPRITES_H__ +#include +#endif + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CNpcCollapsingBubblePlatform::postInit() +{ + CNpcPlatform::postInit(); + + m_pop = false; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CNpcCollapsingBubblePlatform::render() +{ + if ( m_isActive || m_pop ) + { + CPlatformThing::render(); + + // Render + if (canRender()) + { + DVECTOR &renderPos=getRenderPos(); + + if ( m_pop ) + { + POLY_FT4 *SprFrame = CGameScene::getSpriteBank()->printRotatedScaledSprite( FRM__BALLOONBURST, renderPos.vx, renderPos.vy - 16, 4096 << 1, 4096 << 1, 0, 10 ); + setRGB0( SprFrame, 128, 128, 255 ); + } + else + { + m_modelGfx->Render(renderPos); + } + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CNpcCollapsingBubblePlatform::processLifetime( int _frames ) +{ + switch( m_lifetimeType ) + { + case NPC_PLATFORM_FINITE_LIFE: + { + m_lifetime -= _frames; + + if ( m_lifetime <= 0 ) + { + setToShutdown(); + + return; + } + + break; + } + + case NPC_PLATFORM_FINITE_LIFE_RESPAWN: + { + m_lifetime -= _frames; + + if ( m_lifetime <= 0 ) + { + reinit(); + } + + break; + } + + case NPC_PLATFORM_INFINITE_LIFE_COLLAPSIBLE: + { + if ( m_pop ) + { + m_lifetime -= _frames; + + if ( m_lifetime <= 0 ) + { + m_isActive = false; + m_timer = 3 * GameState::getOneSecondInFrames(); + m_timerType = NPC_PLATFORM_TIMER_RESPAWN; + m_pop = false; + } + } + else + { + if ( m_contact ) + { + m_lifetime -= _frames; + + if ( m_lifetime <= 0 ) + { + m_lifetime = GameState::getOneSecondInFrames() >> 2; + m_pop = true; + } + } + } + + break; + } + + default: + break; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +int CNpcCollapsingBubblePlatform::checkCollisionAgainst(CThing *_thisThing, int _frames) +{ + switch(_thisThing->getThingType()) + { + case TYPE_PLAYERPROJECTILE: + return( false ); + + default: + { + int collided = false; + + if ( m_detectCollision && m_isActive && !isSetToShutdown() && !m_pop ) + { + CRECT thisRect, thatRect; + + thisRect = getCollisionArea(); + thatRect = _thisThing->getCollisionArea(); + + DVECTOR posDelta = getPosDelta(); + + thisRect.y1 -= abs( posDelta.vy ) >> 1; + thisRect.y2 += abs( posDelta.vy ) >> 1; + + posDelta = _thisThing->getPosDelta(); + + thatRect.y1 -= abs( posDelta.vy ) >> 1; + thatRect.y2 += abs( posDelta.vy ) >> 1; + + if(((thisRect.x1>=thatRect.x1&&thisRect.x1<=thatRect.x2)||(thisRect.x2>=thatRect.x1&&thisRect.x2<=thatRect.x2)||(thisRect.x1<=thatRect.x1&&thisRect.x2>=thatRect.x2))&& + ((thisRect.y1>=thatRect.y1&&thisRect.y1<=thatRect.y2)||(thisRect.y2>=thatRect.y1&&thisRect.y2<=thatRect.y2)||(thisRect.y1<=thatRect.y1&&thisRect.y2>=thatRect.y2))) + { + collided = true; + } + } + + return( collided ); + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CNpcCollapsingAcridPlatform::render() +{ + if ( m_isActive || m_pop ) + { + CPlatformThing::render(); + + // Render + if (canRender()) + { + DVECTOR &renderPos=getRenderPos(); + + if ( m_pop ) + { + POLY_FT4 *SprFrame = CGameScene::getSpriteBank()->printRotatedScaledSprite( FRM__BALLOONBURST, renderPos.vx, renderPos.vy - 16, 4096 << 1, 4096 << 1, 0, 10 ); + setRGB0( SprFrame, 255, 255, 128 ); + } + else + { + m_modelGfx->Render(renderPos); + } + } + } +}