home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-09-29 | 4.5 KB | 202 lines | [TEXT/KAHL] |
- #include <QuickDraw.h>
-
- #include "C_randomizer.h"
- #include "screenarea.h"
- #include "screendots.h"
-
- void screendots::init( int aantaldots)
- {
- numdots = aantaldots;
- current_intensity = 0;
-
- dot_addresses = new unsigned char *[ numdots];
- old_dot_addresses = new unsigned char *[ numdots];
-
- for( int i = 0; i < numdots; i++)
- {
- dot_addresses[ i] = waste_area;
- old_dot_addresses[ i] = waste_area;
- }
- }
-
- void screendots::make_a_move( const unsigned char diff)
- {
- compute_addresses();
- MoveDots( diff);
- swap();
- }
-
- void screendots::make_a_multimove(
- const int *offsets, int numoffsets, const unsigned char diff)
- {
- compute_addresses();
- MoveMultiDots( offsets, numoffsets, diff);
- swap();
- }
-
- void screendots::make_a_stereo_move( const char disparity)
- {
- compute_addresses();
- MoveStereoDots( disparity);
- swap();
- }
-
- void screendots::EraseDots()
- {
- unsigned char **the_dots = old_dot_addresses;
-
- const unsigned char intensity = current_intensity;
- const int limit = numdots;
- for( int i = 0; i < limit; i++)
- {
- **the_dots++ -= intensity;
- }
- current_intensity = 0;
- }
-
- void screendots::EraseMultiDots( const int *offsets, int numoffsets)
- {
- unsigned char **the_dots = old_dot_addresses;
-
- const unsigned char intensity = current_intensity;
- const int limit = numdots;
- for( int i = 0; i < limit; i++)
- {
- unsigned char *centerdot = *the_dots++;
- const int *curoffset = offsets;
- for( int j = 0; j < numoffsets; j++)
- {
- centerdot[ *curoffset++] -= intensity;
- }
- }
- current_intensity = 0;
- }
-
- void screendots::EraseStereoDots()
- {
- unsigned char **the_dots = old_dot_addresses;
-
- const int right_disparity = current_disparity / 2;
- const int left_disparity = right_disparity - current_disparity;
-
- const int limit = numdots;
- for( int i = 0; i < limit; i++)
- {
- (*the_dots)[ left_disparity] += 1;
- (*the_dots)[ right_disparity] += 8;
- the_dots += 1;
- }
- current_disparity = 0;
- }
-
- void screendots::SetDots( const unsigned char diff)
- {
- unsigned char **the_dots = dot_addresses;
- const int limit = numdots;
-
- for( int i = 0; i < limit; i++)
- {
- **the_dots++ += diff;
- }
- current_intensity = diff;
- }
-
- void screendots::SetMultiDots(
- const int *offsets, int numoffsets, const unsigned char diff)
- {
- unsigned char **the_dots = dot_addresses;
-
- const int limit = numdots;
- for( int i = 0; i < limit; i++)
- {
- unsigned char *centerdot = *the_dots++;
- const int *curoffset = offsets;
- for( int j = 0; j < numoffsets; j++)
- {
- centerdot[ *curoffset++] += diff;
- }
- }
- current_intensity = diff;
- }
-
- void screendots::SetStereoDots( const char disparity)
- {
- unsigned char **the_dots = dot_addresses;
-
- const int right_disparity = disparity / 2;
- const int left_disparity = right_disparity - disparity;
-
- const int limit = numdots;
- for( int i = 0; i < limit; i++)
- {
- (*the_dots)[ left_disparity] -= 1;
- (*the_dots)[ right_disparity] -= 8;
- the_dots += 1;
- }
- current_disparity = disparity;
- }
-
- void screendots::MoveDots( const unsigned char diff)
- {
- unsigned char **old_dots = old_dot_addresses;
- unsigned char **new_dots = dot_addresses;
- const unsigned char intensity = current_intensity;
- const int limit = numdots;
-
- for( int i = 0; i < limit; i++)
- {
- **old_dots++ -= intensity;
- **new_dots++ += diff;
- }
- current_intensity = diff;
- }
-
- void screendots::MoveMultiDots(
- const int *offsets, int numoffsets, const unsigned char diff)
- {
- unsigned char **old_dots = old_dot_addresses;
- unsigned char **new_dots = dot_addresses;
- const unsigned char intensity = current_intensity;
- const int limit = numdots;
-
- for( int i = 0; i < limit; i++)
- {
- unsigned char *old_centerdot = *old_dots;
- unsigned char *new_centerdot = *new_dots;
-
- for( int j = 0; j < numoffsets; j++)
- {
- const int curoffset = offsets[ j];
- old_centerdot[ curoffset] -= intensity;
- new_centerdot[ curoffset] += diff;
- }
- old_dots += 1;
- new_dots += 1;
- }
- current_intensity = diff;
- }
-
- void screendots::MoveStereoDots( const char disparity)
- {
- unsigned char **old_dots = old_dot_addresses;
- unsigned char **new_dots = dot_addresses;
-
- const int old_right_disparity = current_disparity / 2;
- const int old_left_disparity = old_right_disparity - current_disparity;
-
- const int new_right_disparity = disparity / 2;
- const int new_left_disparity = new_right_disparity - disparity;
-
- const int limit = numdots;
- for( int i = 0; i < limit; i++)
- {
- (*old_dots)[ old_left_disparity] += 1;
- (*old_dots)[ old_right_disparity] += 8;
- (*new_dots)[ new_left_disparity] -= 1;
- (*new_dots)[ new_right_disparity] -= 8;
- old_dots += 1;
- new_dots += 1;
- }
- current_disparity = disparity;
- }
-