/*
* Seven Kingdoms: Ancient Adversaries
*
* Copyright 1997,1998 Enlight Software Ltd.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
// Filename : ORAIN1.CPP
// Description: Class RainDrop
// Ownership : Gilbert
#include
#include
#include
#include
//--------- Begin of function RainDrop::init ------------//
//
void RainDrop::init(Rain *, short fromX, short fromY, short toX, short toY, short speed )
{
cur_x = fromX;
cur_y = fromY;
dest_x = toX;
dest_y = toY;
fall_speed = speed;
}
//--------- End of function RainDrop::init ------------//
//--------- Begin of function RainDrop::fall ------------//
//
void RainDrop::fall()
{
if( cur_y + fall_speed >= dest_y )
{
cur_y = dest_y;
cur_x = dest_x;
}
else
{
cur_x += (dest_x - cur_x) * fall_speed / (dest_y - cur_y);
cur_y += fall_speed;
}
}
//--------- End of function RainDrop::fall ------------//
//--------- Begin of function RainDrop::is_goal ------------//
//
int RainDrop::is_goal()
{
return( cur_y + fall_speed >= dest_y);
}
//--------- End of function RainDrop::is_goal ------------//
//--------- Begin of function RainDrop::draw_step ------------//
//
void RainDrop::draw_step(VgaBuf *vgabuf)
{
short preX = cur_x;
short preY = cur_y;
fall();
preX = (preX + cur_x) /2;
preY = (preY + cur_y) /2;
// ####### begin Gilbert 8/5 ######//
if( preX >= ZOOM_X1 && cur_x >= ZOOM_X1 &&
preX <= ZOOM_X2 && cur_x <= ZOOM_X2 &&
preY >= ZOOM_Y1 && cur_y >= ZOOM_Y1 &&
preY <= ZOOM_Y2 && cur_y <= ZOOM_Y2 )
{
short q2X = (preX + cur_x) /2;
short q2Y = (preY + cur_y) /2;
short q3X = (preX + 3*cur_x) /4;
short q3Y = (preY + 3*cur_y) /4;
vgabuf->line(preX, preY, q2X, q2Y, VGA_GRAY+8);
vgabuf->line(q2X, q2Y, q3X, q3Y, VGA_GRAY+10);
vgabuf->line(q3X, q3Y, cur_x, cur_y, VGA_GRAY+12);
}
else
{
int wrap_size = ZOOM_X2 - ZOOM_X1;
// if the drop goes outside the screen, come back from the other side
if( cur_x < ZOOM_X1)
{
cur_x += wrap_size;
dest_x += wrap_size;
}
else if( cur_x > ZOOM_X2)
{
cur_x -= wrap_size;
dest_x -= wrap_size;
}
}
// ####### end Gilbert 8/5 ######//
}
//--------- End of function RainDrop::draw_step ------------//