Logo Search packages:      
Sourcecode: bb version File versions  Download package

scene2.c

/*
 * BB: The portable demo
 *
 * (C) 1997 by AA-group (e-mail: aa@horac.ta.jcu.cz)
 *
 * 3rd August 1997
 * version: 1.2 [final3]
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public Licences as by published
 * by the Free Software Foundation; either version 2; or (at your option)
 * any later version
 *
 * This program is distributed in the hope that it will entertaining,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILTY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 * Publis License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.
 * 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <math.h>
#include <string.h>
#include "bb.h"

#define ETIME 650000
#define RATE 60
static char *mesg;
static char *lastmesg;
static char pos, lastpos;
#define MAXPOS (ETIME1)
#define STATE (TIME-starttime)
#define N 10000
#define ETIME1 2500000


void blur(int n)
{
    unsigned char *pos = context->imagebuffer, *posend = pos + aa_imgwidth(context) * aa_imgheight(context);

    while (pos < posend) {
      (*pos) >>= n;
      pos++;
    }
}

void dvojprujezd(int starttime, char *text2, char *text1)
{
    int pos = (getwidth(2) * strlen(text1) + 1);
    centerprint(-pos / 2 + (aa_imgwidth(context) + pos * 1.2) * STATE / (endtime - starttime), 2 * aa_imgheight(context) / 3, 2, 255, text1, 0);
    pos = (getwidth(2) * strlen(text2) + 1);
    centerprint(aa_imgwidth(context) + pos / 2 - (aa_imgwidth(context) + pos * 1.2) * STATE / (endtime - starttime), aa_imgheight(context) / 3, 2, 255, text2, 0);
}

static void dvojprujezd2(int starttime, char *text1, char *text2)
{
    int pos = (getwidth(2) * strlen(text1) + 1);
    centerprint(-pos / 2 + (aa_imgwidth(context) + pos * 1.2) * STATE / (endtime - starttime), aa_imgheight(context) / 3, 2, 255, text1, 0);
    pos = (getwidth(2) * strlen(text2) + 1);
    centerprint(aa_imgwidth(context) + pos / 2 - (aa_imgwidth(context) + pos * 1.2) * STATE / (endtime - starttime), 2 * aa_imgheight(context) / 3, 2, 255, text2, 0);
}

void message(char *text, int starttime)
{
    if (STATE > 0 && STATE < MAXPOS) {
      double pp = STATE * M_PI / MAXPOS * 2;
      double width = (1 + cos(pp)) * 5 + 2;
      int pos = aa_imgheight(context) - aa_imgheight(context) * STATE / MAXPOS;
      if (width <= 0)
          return;
      centerprint(aa_imgwidth(context) / 2, pos, width, sin(pp / 2) * 255, text, 0);
    }
}

static float xpos, xpos1, f, t;

#define TTIME1 80
#define TTIME 100
#define G 0.02
#define AMP 40

void ctrllepic(int i)
{
    for (; i; i--) {
      t++;
      f += G,
          f *= 0.96;
      if (t < TTIME) {
          if (t < TTIME1)
            f -= xpos / (double) AMP;
          else
            f -= xpos / (double) AMP / 2;
          xpos += f;
      }
      else {
          xpos1 += f;
          xpos += G;
      }
      if (xpos < 0)
          xpos = 0, f = -f;
    }
}

void drawlepic(char *mesg)
{
    print(0, xpos1 * aa_imgheight(context), aa_imgwidth(context) / (double) strlen(mesg), aa_imgheight(context) * xpos, font, 255, mesg);
}

void drawzoomer(char *mesg, int starttime, int pos)
{
    float width = 1000000.0 / (STATE);
    if (width > 1.0) {
      int color = (width - 1) * 255;
      if (color > 255)
          color = 255;
      centerprint(aa_imgwidth(context) / 2, pos * aa_imgheight(context) / 6, width, color, mesg, 0);
    }
}

#define ETIME2 1000000

void drawlevotoc(char *mesg, char *mesg1, int starttime)
{
    if (STATE < ETIME2 && STATE > 0) {
      print(0, 0, aa_imgwidth(context) / (double) strlen(mesg) * ((float) STATE / ETIME2), aa_imgheight(context), font, 255, mesg);
      print(aa_imgwidth(context) * ((float) STATE / ETIME2), 0, aa_imgwidth(context) / (double) strlen(mesg1) * (1 - (float) STATE / ETIME2), aa_imgheight(context), font, 255, mesg1);
    }
    if (STATE > ETIME2)
      print(0, 0, aa_imgwidth(context) / (double) strlen(mesg), aa_imgheight(context), font, 255, mesg);
}

void drawpravotoc(char *mesg, char *mesg1, int starttime)
{
    if (STATE < ETIME2 && STATE > 0) {
      print(0, 0, aa_imgwidth(context) / (double) strlen(mesg1) * (1 - (float) STATE / ETIME2), aa_imgheight(context), font, 255, mesg1);
      print(aa_imgwidth(context) * (1 - (float) STATE / ETIME2), 0, aa_imgwidth(context) / (double) strlen(mesg) * ((float) STATE / ETIME2), aa_imgheight(context), font, 255, mesg);
    }
    if (STATE > ETIME2)
      print(0, 0, aa_imgwidth(context) / (double) strlen(mesg), aa_imgheight(context), font, 255, mesg);
}

void drawhorotoc(char *mesg, char *mesg1, int starttime)
{
    if (STATE < ETIME2 && STATE > 0) {
      print(0, 0, aa_imgwidth(context) / strlen(mesg), aa_imgheight(context) * ((float) STATE / ETIME2), font, 255, mesg);
      print(0, aa_imgheight(context) * ((float) STATE / ETIME2), aa_imgwidth(context) / strlen(mesg1), aa_imgheight(context) * (1 - (float) STATE / ETIME2), font, 255, mesg1);
    }
    if (STATE > ETIME2)
      print(0, 0, aa_imgwidth(context) / strlen(mesg), aa_imgheight(context), font, 255, mesg);
}

#define LTIME 200000

void drawprujezd(char *mesg, int starttime)
{
    double height = aa_imgheight(context) / 3 + aa_imgheight(context) / 4 * cos(STATE / (double) LTIME);
    double width = (double) aa_imgwidth(context) * 0.75 * 2.0 / 3.0 / 3;
    int pos = aa_imgwidth(context) - width * STATE / LTIME;
    print(pos + height, (aa_imgheight(context) - height) / 2, width, height, font, 255, mesg);
}

void initlepic()
{
    t = 0;
    f = 0;
    xpos = 0;
    xpos1 = 0;
}

static void messaguj()
{
    clrscr();
    drawzoomer(lastmesg, starttime - ETIME, lastpos);
    drawzoomer(mesg, starttime, pos);
}

static void mydraw()
{
    clrscr();
    dvojprujezd2(starttime, "Greetings", "To");
    /*drawpravotoc(mesg, lastmesg, starttime); */
}

void scene2(void)
{
    char *pokec[] =
    {
      "Future",
      "Crew",
      "Triton",
      "Cascada",
      "Complex",
      "Pascal",
      "Titans",
      "Xography",
      "Sonic PC",
      "Scrymag",
      "...",
      "Microsoft",
      "",
      "!?!",
    };
    int i;
    params->randomval = 0;
    drawptr = mydraw;
    timestuff(60, NULL, draw, 2.75 * 1000000);

    drawptr = messaguj;
    mesg = "";
    pos = 2;
    lastpos = 1;
    for (i = 0; i < sizeof(pokec) / sizeof(char *); i++) {
      lastpos = pos;
      pos++;
      if (pos > 4)
          pos = 2;
      lastmesg = mesg;
      mesg = pokec[i];
      if (i == sizeof(pokec) / sizeof(char *) - 1)
           timestuff(0, NULL, draw, 3 * ETIME);
      else
          timestuff(0, NULL, draw, ETIME);
    }
}

Generated by  Doxygen 1.6.0   Back to index