diff --git a/source/platform/plantern.cpp b/source/platform/plantern.cpp new file mode 100644 index 000000000..10446b745 --- /dev/null +++ b/source/platform/plantern.cpp @@ -0,0 +1,114 @@ +/*========================================================================= + + plantern.cpp + + Author: CRB + Created: + Project: Spongebob + Purpose: + + Copyright (c) 2001 Climax Development Ltd + +===========================================================================*/ + +#ifndef __PLATFORM_PLANTERN_H__ +#include "platform\plantern.h" +#endif + +#ifndef __UTILS_HEADER__ +#include "utils\utils.h" +#endif + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CNpcLanternPlatform::postInit() +{ + m_extension = 0; + m_heading = 1024; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CNpcLanternPlatform::setWaypoints( sThingPlatform *ThisPlatform ) +{ + int pointNum; + + u16 *PntList=(u16*)MakePtr(ThisPlatform,sizeof(sThingPlatform)); + + u16 newXPos, newYPos; + + newXPos = (u16) *PntList; + PntList++; + newYPos = (u16) *PntList; + PntList++; + + DVECTOR startPos; + startPos.vx = newXPos << 4; + startPos.vy = newYPos << 4; + + if ( ThisPlatform->PointCount > 1 ) + { + newXPos = (u16) *PntList; + PntList++; + newYPos = (u16) *PntList; + PntList++; + + DVECTOR pivotPos; + pivotPos.vx = newXPos << 4; + pivotPos.vy = newYPos << 4; + + s32 xDist = startPos.vx - pivotPos.vx; + s32 yDist = startPos.vy - pivotPos.vy; + + m_maxExtension = 1024 - ratan2( abs( yDist ), abs( xDist ) ); + + m_length = isqrt2( ( xDist * xDist ) + ( yDist * yDist ) ); + + init( pivotPos ); + + if ( xDist > 0 ) + { + m_extendDir = EXTEND_LEFT; + } + else + { + m_extendDir = EXTEND_RIGHT; + } + } + else + { + init( startPos ); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CNpcLanternPlatform::processMovement( int _frames ) +{ + if ( m_extendDir == EXTEND_LEFT ) + { + if ( m_extension > m_maxExtension ) + { + m_extendDir = EXTEND_RIGHT; + } + else + { + m_extension += _frames << 3; + } + } + else + { + if ( m_extension < -m_maxExtension ) + { + m_extendDir = EXTEND_LEFT; + } + else + { + m_extension -= _frames << 3; + } + } + + Pos.vx = m_base.vx + ( ( m_length * rcos( m_heading + m_extension ) ) >> 12 ); + Pos.vy = m_base.vy + ( ( m_length * rsin( m_heading + m_extension ) ) >> 12 ); +} + diff --git a/source/platform/plantern.h b/source/platform/plantern.h new file mode 100644 index 000000000..eae37c6dd --- /dev/null +++ b/source/platform/plantern.h @@ -0,0 +1,33 @@ +/*========================================================================= + + plantern.h + + Author: CRB + Created: + Project: Spongebob + Purpose: + + Copyright (c) 2001 Climax Development Ltd + +===========================================================================*/ + +#ifndef __PLATFORM_PLANTERN_H__ +#define __PLATFORM_PLANTERN_H__ + +#ifndef __PLATFORM_PLATFORM_H__ +#include "platform\platform.h" +#endif + +class CNpcLanternPlatform : public CNpcPlatform +{ +public: + virtual void postInit(); +protected: + virtual void setWaypoints( sThingPlatform *ThisPlatform ); + virtual void processMovement( int _frames ); + + s32 m_length; + s32 m_maxExtension; +}; + +#endif \ No newline at end of file