SBSPSS/source/friend/fgary.cpp

84 lines
1.5 KiB
C++
Raw Normal View History

2001-04-27 16:39:10 +02:00
/*=========================================================================
fgary.cpp
Author: CRB
Created:
Project: Spongebob
Purpose:
Copyright (c) 2000 Climax Development Ltd
===========================================================================*/
2001-04-27 17:09:10 +02:00
#ifndef __FRIEND_FGARY_H__
#include "friend\fgary.h"
2001-04-27 16:39:10 +02:00
#endif
#ifndef __GAME_GAME_H__
#include "game\game.h"
#endif
2001-04-27 17:09:10 +02:00
void CNpcGaryFriend::think( int _frames )
2001-04-27 16:39:10 +02:00
{
2001-05-08 16:13:40 +02:00
CNpcFriend::think(_frames);
2001-04-27 17:09:10 +02:00
2001-04-27 16:39:10 +02:00
s8 multiplier = -1 + ( 2 * m_extension );
s32 maxHeight = 20;
s32 fallSpeed = 3;
s8 yMovement = fallSpeed * _frames;
s8 groundHeight;
// check vertical collision
groundHeight = m_layerCollision->getHeightFromGround( Pos.vx, Pos.vy, yMovement + 16 );
if ( groundHeight <= 0 )
{
// groundHeight <= 0 indicates either on ground or below ground
// check horizontal collision
if ( m_layerCollision->getHeightFromGround( Pos.vx + ( multiplier * _frames ), Pos.vy ) < -maxHeight )
{
// reverse direction
m_extension = !m_extension;
}
else
{
// make sure we are on the ground, not below it
Pos.vy += groundHeight;
Pos.vx += multiplier * _frames;
}
}
else
{
// above ground
if ( groundHeight < yMovement )
{
// colliding with ground
Pos.vy += groundHeight;
if ( m_layerCollision->getHeightFromGround( Pos.vx + ( multiplier * _frames ), Pos.vy ) < -maxHeight )
{
// reverse direction
m_extension = !m_extension;
}
else
{
Pos.vx += multiplier * _frames;
}
}
else
{
Pos.vy += yMovement;
}
}
}