Removed versioning information from sources
This commit is contained in:
parent
837451bc29
commit
b9c3a15057
53 changed files with 5111 additions and 7641 deletions
|
@ -1,80 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: 3dutils.h,v 1.22 2002/07/22 11:50:26 jkaarlas Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: 3dutils.h,v $
|
|
||||||
* Revision 1.22 2002/07/22 11:50:26 jkaarlas
|
|
||||||
* naama
|
|
||||||
*
|
|
||||||
* Revision 1.21 2002/07/22 11:44:16 jkaarlas
|
|
||||||
* naama
|
|
||||||
*
|
|
||||||
* Revision 1.20 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.19 2002/07/19 18:59:46 msell
|
|
||||||
* Alkuhommaa ja säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.18 2002/07/19 14:05:51 msell
|
|
||||||
* Damagetextuurit näkyy
|
|
||||||
*
|
|
||||||
* Revision 1.17 2002/07/19 12:28:29 msell
|
|
||||||
* 2D-mode
|
|
||||||
*
|
|
||||||
* Revision 1.16 2002/07/17 20:32:47 msell
|
|
||||||
* Detail-optio toimii
|
|
||||||
*
|
|
||||||
* Revision 1.15 2002/07/17 19:06:39 jkaarlas
|
|
||||||
* skyboxin keskitys
|
|
||||||
*
|
|
||||||
* Revision 1.14 2002/07/17 16:40:33 msell
|
|
||||||
* Resoluution vaihto
|
|
||||||
*
|
|
||||||
* Revision 1.13 2002/07/16 17:16:34 msell
|
|
||||||
* Fontit ja valikot
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/07/16 00:42:43 msell
|
|
||||||
* Uusia skyboxeja ja areenan säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/07/15 22:03:22 msell
|
|
||||||
* MultiAppearance
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/07/15 21:42:58 msell
|
|
||||||
* Skybox-testi
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/07/15 15:22:07 msell
|
|
||||||
* Parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/14 21:27:48 jkaarlas
|
|
||||||
* uudet tekstuurit
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/07/14 21:22:40 jkaarlas
|
|
||||||
* skybox ja ukkojen säätö
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/20 22:50:12 msell
|
|
||||||
* Meshit
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/17 19:58:08 msell
|
|
||||||
* #includeiden parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/16 01:04:58 jkaarlas
|
|
||||||
* tulipa säädettyä includejen kanssa. oon tod.näk. eri mieltä aamulla
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/05 23:55:46 msell
|
|
||||||
* Pallo
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/03 23:06:38 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/22 11:50:26 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __3DUTILS_H_INCLUDED__
|
#ifndef __3DUTILS_H_INCLUDED__
|
||||||
#define __3DUTILS_H_INCLUDED__
|
#define __3DUTILS_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -100,11 +23,11 @@
|
||||||
extern int SKYBOX;
|
extern int SKYBOX;
|
||||||
|
|
||||||
typedef struct{
|
typedef struct{
|
||||||
float x,y;
|
float x,y;
|
||||||
} point2d;
|
} point2d;
|
||||||
|
|
||||||
typedef struct{
|
typedef struct{
|
||||||
float x,y,z;
|
float x,y,z;
|
||||||
} point3d;
|
} point3d;
|
||||||
|
|
||||||
extern Texture *flaretexture;
|
extern Texture *flaretexture;
|
||||||
|
|
|
@ -1,41 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: appearance.cpp,v 1.9 2002/07/15 22:03:23 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: appearance.cpp,v $
|
|
||||||
* Revision 1.9 2002/07/15 22:03:23 msell
|
|
||||||
* MultiAppearance
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/06/24 14:12:15 msell
|
|
||||||
* Nyt toimii sphere -> mesh -törmäykset, ihan tosi
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/20 00:21:01 jkaarlas
|
|
||||||
* materiaali- ja tekstuurihommia edistetty
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/17 20:49:04 msell
|
|
||||||
* free -> SDL_FreeSurface
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/16 01:04:58 jkaarlas
|
|
||||||
* tulipa säädettyä includejen kanssa. oon tod.näk. eri mieltä aamulla
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/05 23:55:46 msell
|
|
||||||
* Pallo
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/03 23:20:43 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/03 23:06:38 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/02 16:57:37 msell
|
|
||||||
* Objektirakenteen pohja
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/15 22:03:23 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,19 +15,19 @@ void Appearance::prepare(void){
|
||||||
|
|
||||||
|
|
||||||
/*BoxAppearance::BoxAppearance(void){
|
/*BoxAppearance::BoxAppearance(void){
|
||||||
setDimension(-1, 1, -1, 1, -1, 1);
|
setDimension(-1, 1, -1, 1, -1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
BoxAppearance::setDimension(float x1, float x2, float y1, float y2, float z1, float z2){
|
BoxAppearance::setDimension(float x1, float x2, float y1, float y2, float z1, float z2){
|
||||||
if (x1 > x2) swapFloat(&x1, &x2);
|
if (x1 > x2) swapFloat(&x1, &x2);
|
||||||
if (y1 > y2) swapFloat(&y1, &y2);
|
if (y1 > y2) swapFloat(&y1, &y2);
|
||||||
if (z1 > z2) swapFloat(&z1, &z2);
|
if (z1 > z2) swapFloat(&z1, &z2);
|
||||||
this->x1 = x1;
|
this->x1 = x1;
|
||||||
this->x2 = x2;
|
this->x2 = x2;
|
||||||
this->y1 = y1;
|
this->y1 = y1;
|
||||||
this->y2 = y2;
|
this->y2 = y2;
|
||||||
this->z1 = z1;
|
this->z1 = z1;
|
||||||
this->z2 = z2;
|
this->z2 = z2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BoxAppearance::draw(void){
|
void BoxAppearance::draw(void){
|
||||||
|
@ -74,43 +36,43 @@ void BoxAppearance::draw(void){
|
||||||
|
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
|
|
||||||
//Front Face
|
//Front Face
|
||||||
glNormal3f(0, 0, 1);
|
glNormal3f(0, 0, 1);
|
||||||
glVertex3f(x1, y1, z2);
|
glVertex3f(x1, y1, z2);
|
||||||
glVertex3f(x2, y1, z2);
|
glVertex3f(x2, y1, z2);
|
||||||
glVertex3f(x2, y2, z2);
|
glVertex3f(x2, y2, z2);
|
||||||
glVertex3f(x1, y2, z2);
|
glVertex3f(x1, y2, z2);
|
||||||
// Back Face
|
// Back Face
|
||||||
glNormal3f(0, 0, -1);
|
glNormal3f(0, 0, -1);
|
||||||
glVertex3f(x1, y1, z1);
|
glVertex3f(x1, y1, z1);
|
||||||
glVertex3f(x1, y2, z1);
|
glVertex3f(x1, y2, z1);
|
||||||
glVertex3f(x2, y2, z1);
|
glVertex3f(x2, y2, z1);
|
||||||
glVertex3f(x2, y1, z1);
|
glVertex3f(x2, y1, z1);
|
||||||
// Top Face
|
// Top Face
|
||||||
glNormal3f(0, 1, 0);
|
glNormal3f(0, 1, 0);
|
||||||
glVertex3f(x1, y2, z1);
|
glVertex3f(x1, y2, z1);
|
||||||
glVertex3f(x1, y2, z2);
|
glVertex3f(x1, y2, z2);
|
||||||
glVertex3f(x2, y2, z2);
|
glVertex3f(x2, y2, z2);
|
||||||
glVertex3f(x2, y2, z1);
|
glVertex3f(x2, y2, z1);
|
||||||
// Bottom Face
|
// Bottom Face
|
||||||
glNormal3f(0, -1, 0);
|
glNormal3f(0, -1, 0);
|
||||||
glVertex3f(x1, y1, z1);
|
glVertex3f(x1, y1, z1);
|
||||||
glVertex3f(x2, y1, z1);
|
glVertex3f(x2, y1, z1);
|
||||||
glVertex3f(x2, y1, z2);
|
glVertex3f(x2, y1, z2);
|
||||||
glVertex3f(x1, y1, z2);
|
glVertex3f(x1, y1, z2);
|
||||||
// Right face
|
// Right face
|
||||||
glNormal3f(x2, 0, 0);
|
glNormal3f(x2, 0, 0);
|
||||||
glVertex3f(x2, y1, z1);
|
glVertex3f(x2, y1, z1);
|
||||||
glVertex3f(x2, y2, z1);
|
glVertex3f(x2, y2, z1);
|
||||||
glVertex3f(x2, y2, z2);
|
glVertex3f(x2, y2, z2);
|
||||||
glVertex3f(x2, y1, z2);
|
glVertex3f(x2, y1, z2);
|
||||||
// Left Face
|
// Left Face
|
||||||
glNormal3f(x1, 0, 0);
|
glNormal3f(x1, 0, 0);
|
||||||
glVertex3f(x1, y1, z1);
|
glVertex3f(x1, y1, z1);
|
||||||
glVertex3f(x1, y1, z2);
|
glVertex3f(x1, y1, z2);
|
||||||
glVertex3f(x1, y2, z2);
|
glVertex3f(x1, y2, z2);
|
||||||
glVertex3f(x1, y2, z1);
|
glVertex3f(x1, y2, z1);
|
||||||
glEnd();
|
glEnd();
|
||||||
|
|
||||||
this->material.disable();
|
this->material.disable();
|
||||||
}*/
|
}*/
|
||||||
|
@ -128,28 +90,28 @@ void Appearance::setMaterial(Material matsku){
|
||||||
|
|
||||||
|
|
||||||
MultiAppearance::MultiAppearance(void){
|
MultiAppearance::MultiAppearance(void){
|
||||||
appearances = NULL;
|
appearances = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiAppearance::addAppearance(Appearance *appearance){
|
void MultiAppearance::addAppearance(Appearance *appearance){
|
||||||
appearancelist *node = new appearancelist;
|
appearancelist *node = new appearancelist;
|
||||||
node->data = appearance;
|
node->data = appearance;
|
||||||
node->next = appearances;
|
node->next = appearances;
|
||||||
appearances = node;
|
appearances = node;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiAppearance::prepare(void){
|
void MultiAppearance::prepare(void){
|
||||||
appearancelist *node = appearances;
|
appearancelist *node = appearances;
|
||||||
while (node != NULL){
|
while (node != NULL){
|
||||||
node->data->prepare();
|
node->data->prepare();
|
||||||
node = node->next;
|
node = node->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiAppearance::draw(void){
|
void MultiAppearance::draw(void){
|
||||||
appearancelist *node = appearances;
|
appearancelist *node = appearances;
|
||||||
while (node != NULL){
|
while (node != NULL){
|
||||||
node->data->draw();
|
node->data->draw();
|
||||||
node = node->next;
|
node = node->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,47 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: appearance.h,v 1.11 2002/07/19 20:33:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: appearance.h,v $
|
|
||||||
* Revision 1.11 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/07/15 22:03:23 msell
|
|
||||||
* MultiAppearance
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/07/07 17:53:21 msell
|
|
||||||
* Legoukon alku
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/06/24 14:12:15 msell
|
|
||||||
* Nyt toimii sphere -> mesh -törmäykset, ihan tosi
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/20 00:21:01 jkaarlas
|
|
||||||
* materiaali- ja tekstuurihommia edistetty
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/17 20:49:04 msell
|
|
||||||
* free -> SDL_FreeSurface
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/17 19:58:08 msell
|
|
||||||
* #includeiden parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/03 23:20:43 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/03 23:06:38 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/02 16:57:37 msell
|
|
||||||
* Objektirakenteen pohja
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __APPEARANCE_H_INCLUDED__
|
#ifndef __APPEARANCE_H_INCLUDED__
|
||||||
#define __APPEARANCE_H_INCLUDED__
|
#define __APPEARANCE_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -62,26 +18,26 @@ public:
|
||||||
Material* getMaterial(void);
|
Material* getMaterial(void);
|
||||||
void setMaterial(Material mat);
|
void setMaterial(Material mat);
|
||||||
|
|
||||||
virtual void prepare(void);
|
virtual void prepare(void);
|
||||||
virtual void draw(void) = 0;
|
virtual void draw(void) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct appearancelist{
|
struct appearancelist{
|
||||||
Appearance *data;
|
Appearance *data;
|
||||||
appearancelist *next;
|
appearancelist *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
class MultiAppearance : public Appearance{
|
class MultiAppearance : public Appearance{
|
||||||
private:
|
private:
|
||||||
appearancelist *appearances;
|
appearancelist *appearances;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MultiAppearance(void);
|
MultiAppearance(void);
|
||||||
void addAppearance(Appearance *appearance);
|
void addAppearance(Appearance *appearance);
|
||||||
|
|
||||||
void prepare(void);
|
void prepare(void);
|
||||||
void draw(void);
|
void draw(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
367
src/audio.cpp
367
src/audio.cpp
|
@ -1,42 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: audio.cpp,v 1.9 2002/07/21 15:03:11 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: audio.cpp,v $
|
|
||||||
* Revision 1.9 2002/07/21 15:03:11 msell
|
|
||||||
* Äänet disabloitu
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/19 18:59:46 msell
|
|
||||||
* Alkuhommaa ja säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/07/18 23:05:31 msell
|
|
||||||
* Partikkelit ja kakkospelaajan liike
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/02 16:57:37 msell
|
|
||||||
* Objektirakenteen pohja
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/05/19 13:40:19 msell
|
|
||||||
* Säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/05/18 12:29:35 msell
|
|
||||||
* Valot ja äänijärjestelmän parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/05/15 21:07:23 msell
|
|
||||||
* Äänisäätöä
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/05/15 15:21:00 msell
|
|
||||||
* Äänisäätöä
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/15 14:36:38 msell
|
|
||||||
* Yksinkertainen SDL-runko (Kääntyy toistaiseksi vain windowsissa).
|
|
||||||
* Mukana myös musiikinsoitto fmodilla.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/21 15:03:11 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -51,259 +12,259 @@
|
||||||
|
|
||||||
|
|
||||||
struct soundlist{
|
struct soundlist{
|
||||||
Sound *sound;
|
Sound *sound;
|
||||||
soundlist *next;
|
soundlist *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
soundlist *allsounds = NULL;
|
soundlist *allsounds = NULL;
|
||||||
|
|
||||||
|
|
||||||
Sound::Sound(Sound *source){
|
Sound::Sound(Sound *source){
|
||||||
memcpy(this, source, sizeof(Sound));
|
memcpy(this, source, sizeof(Sound));
|
||||||
soundlist *node = new soundlist;
|
soundlist *node = new soundlist;
|
||||||
node->sound = this;
|
node->sound = this;
|
||||||
node->next = allsounds;
|
node->next = allsounds;
|
||||||
allsounds = node;
|
allsounds = node;
|
||||||
}
|
}
|
||||||
|
|
||||||
Sound::Sound(char *filename){
|
Sound::Sound(char *filename){
|
||||||
load(filename, SOUNDTYPE_AUTODETECT, false);
|
load(filename, SOUNDTYPE_AUTODETECT, false);
|
||||||
//printf("%s: %p, %p, %p, %p\n", filename, this, stream, sample, module);
|
//printf("%s: %p, %p, %p, %p\n", filename, this, stream, sample, module);
|
||||||
}
|
}
|
||||||
|
|
||||||
Sound::Sound(char *filename, int type){
|
Sound::Sound(char *filename, int type){
|
||||||
load(filename, type, false);
|
load(filename, type, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
Sound::Sound(char *filename, bool loops){
|
Sound::Sound(char *filename, bool loops){
|
||||||
load(filename, SOUNDTYPE_AUTODETECT, loops);
|
load(filename, SOUNDTYPE_AUTODETECT, loops);
|
||||||
//printf("%s: %p, %p, %p, %p\n", filename, this, stream, sample, module);
|
//printf("%s: %p, %p, %p, %p\n", filename, this, stream, sample, module);
|
||||||
}
|
}
|
||||||
|
|
||||||
Sound::Sound(char *filename, int type, bool loops){
|
Sound::Sound(char *filename, int type, bool loops){
|
||||||
load(filename, type, loops);
|
load(filename, type, loops);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool endsWith(char *str1, char *str2){
|
bool endsWith(char *str1, char *str2){
|
||||||
char *str3 = str1 + strlen(str1) - strlen(str2);
|
char *str3 = str1 + strlen(str1) - strlen(str2);
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
if (stricmp(str3, str2)) return false;
|
if (stricmp(str3, str2)) return false;
|
||||||
#else
|
#else
|
||||||
if (strcasecmp(str3, str2)) return false;
|
if (strcasecmp(str3, str2)) return false;
|
||||||
#endif
|
#endif
|
||||||
else return true;
|
else return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sound::load(char *filename, int type, bool loops){
|
void Sound::load(char *filename, int type, bool loops){
|
||||||
this->filename = filename;
|
this->filename = filename;
|
||||||
if (type == SOUNDTYPE_AUTODETECT){
|
if (type == SOUNDTYPE_AUTODETECT){
|
||||||
if (endsWith(filename, "mp3") ||
|
if (endsWith(filename, "mp3") ||
|
||||||
endsWith(filename, "mp2") ||
|
endsWith(filename, "mp2") ||
|
||||||
endsWith(filename, "ogg")) type = SOUNDTYPE_STREAM;
|
endsWith(filename, "ogg")) type = SOUNDTYPE_STREAM;
|
||||||
|
|
||||||
if (endsWith(filename, "wav") ||
|
if (endsWith(filename, "wav") ||
|
||||||
endsWith(filename, "raw")) type = SOUNDTYPE_SAMPLE;
|
endsWith(filename, "raw")) type = SOUNDTYPE_SAMPLE;
|
||||||
|
|
||||||
if (endsWith(filename, "s3m") ||
|
if (endsWith(filename, "s3m") ||
|
||||||
endsWith(filename, "xm") ||
|
endsWith(filename, "xm") ||
|
||||||
endsWith(filename, "it") ||
|
endsWith(filename, "it") ||
|
||||||
endsWith(filename, "mid") ||
|
endsWith(filename, "mid") ||
|
||||||
endsWith(filename, "rmi") ||
|
endsWith(filename, "rmi") ||
|
||||||
endsWith(filename, "sgr") ||
|
endsWith(filename, "sgr") ||
|
||||||
endsWith(filename, "mod")) type = SOUNDTYPE_MODULE;
|
endsWith(filename, "mod")) type = SOUNDTYPE_MODULE;
|
||||||
}
|
}
|
||||||
#ifdef AUDIO_FMOD
|
#ifdef AUDIO_FMOD
|
||||||
sample = NULL;
|
sample = NULL;
|
||||||
module = NULL;
|
module = NULL;
|
||||||
stream = NULL;
|
stream = NULL;
|
||||||
this->type = type;
|
this->type = type;
|
||||||
if (type == SOUNDTYPE_MODULE){
|
if (type == SOUNDTYPE_MODULE){
|
||||||
module = FMUSIC_LoadSong(filename);
|
module = FMUSIC_LoadSong(filename);
|
||||||
this->loops = false;
|
this->loops = false;
|
||||||
} else if (type == SOUNDTYPE_SAMPLE){
|
} else if (type == SOUNDTYPE_SAMPLE){
|
||||||
if (loops){
|
if (loops){
|
||||||
sample = FSOUND_Sample_Load(FSOUND_FREE, filename, FSOUND_LOOP_NORMAL, 0);
|
sample = FSOUND_Sample_Load(FSOUND_FREE, filename, FSOUND_LOOP_NORMAL, 0);
|
||||||
FSOUND_Sample_SetLoopMode(sample, FSOUND_LOOP_NORMAL);
|
FSOUND_Sample_SetLoopMode(sample, FSOUND_LOOP_NORMAL);
|
||||||
} else{
|
} else{
|
||||||
sample = FSOUND_Sample_Load(FSOUND_FREE, filename, FSOUND_LOOP_OFF, 0);
|
sample = FSOUND_Sample_Load(FSOUND_FREE, filename, FSOUND_LOOP_OFF, 0);
|
||||||
FSOUND_Sample_SetLoopMode(sample, FSOUND_LOOP_OFF);
|
FSOUND_Sample_SetLoopMode(sample, FSOUND_LOOP_OFF);
|
||||||
}
|
}
|
||||||
this->loops = loops;
|
this->loops = loops;
|
||||||
} else if (type == SOUNDTYPE_STREAM){
|
} else if (type == SOUNDTYPE_STREAM){
|
||||||
if (loops){
|
if (loops){
|
||||||
stream = FSOUND_Stream_OpenFile(filename, FSOUND_LOOP_NORMAL, 0);
|
stream = FSOUND_Stream_OpenFile(filename, FSOUND_LOOP_NORMAL, 0);
|
||||||
} else{
|
} else{
|
||||||
stream = FSOUND_Stream_OpenFile(filename, FSOUND_LOOP_OFF, 0);
|
stream = FSOUND_Stream_OpenFile(filename, FSOUND_LOOP_OFF, 0);
|
||||||
}
|
}
|
||||||
this->loops = loops;
|
this->loops = loops;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
stopcallback = NULL;
|
stopcallback = NULL;
|
||||||
soundlist *node = new soundlist;
|
soundlist *node = new soundlist;
|
||||||
node->sound = this;
|
node->sound = this;
|
||||||
node->next = allsounds;
|
node->next = allsounds;
|
||||||
allsounds = node;
|
allsounds = node;
|
||||||
minduration = 0;
|
minduration = 0;
|
||||||
setVolume(1.0);
|
setVolume(1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Sound::play(){
|
bool Sound::play(){
|
||||||
//printf("Playing %s: %p, %p, %p, %p\n", filename, this, stream, sample, module);
|
//printf("Playing %s: %p, %p, %p, %p\n", filename, this, stream, sample, module);
|
||||||
if (minduration > 0) return false;
|
if (minduration > 0) return false;
|
||||||
running = true;
|
running = true;
|
||||||
finished = false;
|
finished = false;
|
||||||
fademode = SOUND_FADENONE;
|
fademode = SOUND_FADENONE;
|
||||||
minduration = 0;
|
minduration = 0;
|
||||||
#ifdef AUDIO_FMOD
|
#ifdef AUDIO_FMOD
|
||||||
if (type == SOUNDTYPE_MODULE){
|
if (type == SOUNDTYPE_MODULE){
|
||||||
FMUSIC_PlaySong(module);
|
FMUSIC_PlaySong(module);
|
||||||
FMUSIC_SetMasterVolume(module, volume*256);
|
FMUSIC_SetMasterVolume(module, volume*256);
|
||||||
} else if (type == SOUNDTYPE_SAMPLE){
|
} else if (type == SOUNDTYPE_SAMPLE){
|
||||||
channel = FSOUND_PlaySound(FSOUND_FREE, sample);
|
channel = FSOUND_PlaySound(FSOUND_FREE, sample);
|
||||||
FSOUND_SetVolume(channel, volume*256);
|
FSOUND_SetVolume(channel, volume*256);
|
||||||
if (!loops){
|
if (!loops){
|
||||||
running = false;
|
running = false;
|
||||||
finished = false;
|
finished = false;
|
||||||
}
|
}
|
||||||
} else if (type == SOUNDTYPE_STREAM){
|
} else if (type == SOUNDTYPE_STREAM){
|
||||||
channel = FSOUND_Stream_Play(FSOUND_FREE, stream);
|
channel = FSOUND_Stream_Play(FSOUND_FREE, stream);
|
||||||
FSOUND_SetVolume(channel, volume*256);
|
FSOUND_SetVolume(channel, volume*256);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
//printf("Done: %f\n", volume);
|
//printf("Done: %f\n", volume);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sound::play(int minduration){
|
void Sound::play(int minduration){
|
||||||
if (play()) this->minduration = minduration;
|
if (play()) this->minduration = minduration;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sound::stop(){
|
void Sound::stop(){
|
||||||
#ifdef AUDIO_FMOD
|
#ifdef AUDIO_FMOD
|
||||||
if (type == SOUNDTYPE_MODULE){
|
if (type == SOUNDTYPE_MODULE){
|
||||||
FMUSIC_StopSong(module);
|
FMUSIC_StopSong(module);
|
||||||
} else if (type == SOUNDTYPE_SAMPLE){
|
} else if (type == SOUNDTYPE_SAMPLE){
|
||||||
FSOUND_StopSound(channel);
|
FSOUND_StopSound(channel);
|
||||||
} else if (type == SOUNDTYPE_STREAM){
|
} else if (type == SOUNDTYPE_STREAM){
|
||||||
FSOUND_Stream_Stop(stream);
|
FSOUND_Stream_Stop(stream);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sound::setVolume(float volume){
|
void Sound::setVolume(float volume){
|
||||||
//printf("Volume %s: %f\n", filename, volume);
|
//printf("Volume %s: %f\n", filename, volume);
|
||||||
#ifdef AUDIO_FMOD
|
#ifdef AUDIO_FMOD
|
||||||
if (type == SOUNDTYPE_MODULE){
|
if (type == SOUNDTYPE_MODULE){
|
||||||
FMUSIC_SetMasterVolume(module, volume*256);
|
FMUSIC_SetMasterVolume(module, volume*256);
|
||||||
} else if (type == SOUNDTYPE_SAMPLE){
|
} else if (type == SOUNDTYPE_SAMPLE){
|
||||||
FSOUND_SetVolume(channel, volume*256);
|
FSOUND_SetVolume(channel, volume*256);
|
||||||
} else if (type == SOUNDTYPE_STREAM){
|
} else if (type == SOUNDTYPE_STREAM){
|
||||||
FSOUND_SetVolume(channel, volume*256);
|
FSOUND_SetVolume(channel, volume*256);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
this->volume = volume;
|
this->volume = volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef AUDIO_FMOD
|
#ifdef AUDIO_FMOD
|
||||||
signed char streamendcallback(FSOUND_STREAM *stream, void *buff, int len, int param){
|
signed char streamendcallback(FSOUND_STREAM *stream, void *buff, int len, int param){
|
||||||
Sound *sound = (Sound *)param;
|
Sound *sound = (Sound *)param;
|
||||||
sound->setFinished();
|
sound->setFinished();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void Sound::setStopCallback(STOPCALLBACK callback){
|
void Sound::setStopCallback(STOPCALLBACK callback){
|
||||||
stopcallback = callback;
|
stopcallback = callback;
|
||||||
#ifdef AUDIO_FMOD
|
#ifdef AUDIO_FMOD
|
||||||
if (type == SOUNDTYPE_MODULE){
|
if (type == SOUNDTYPE_MODULE){
|
||||||
} else if (type == SOUNDTYPE_SAMPLE){
|
} else if (type == SOUNDTYPE_SAMPLE){
|
||||||
//NOT SUPPORTED
|
//NOT SUPPORTED
|
||||||
} else if (type == SOUNDTYPE_STREAM){
|
} else if (type == SOUNDTYPE_STREAM){
|
||||||
FSOUND_Stream_SetEndCallback(stream, streamendcallback, (int)this);
|
FSOUND_Stream_SetEndCallback(stream, streamendcallback, (int)this);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Sound::setFinished(void){
|
void Sound::setFinished(void){
|
||||||
finished = true;
|
finished = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Sound::isFinished(void){
|
bool Sound::isFinished(void){
|
||||||
#ifdef AUDIO_FMOD
|
#ifdef AUDIO_FMOD
|
||||||
if (type == SOUNDTYPE_MODULE){
|
if (type == SOUNDTYPE_MODULE){
|
||||||
if (FMUSIC_IsFinished(module)) return true;
|
if (FMUSIC_IsFinished(module)) return true;
|
||||||
} else if (type == SOUNDTYPE_SAMPLE){
|
} else if (type == SOUNDTYPE_SAMPLE){
|
||||||
//NOT SUPPORTED
|
//NOT SUPPORTED
|
||||||
} else if (type == SOUNDTYPE_STREAM){
|
} else if (type == SOUNDTYPE_STREAM){
|
||||||
if (finished) return true;
|
if (finished) return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sound::update(void){
|
void Sound::update(void){
|
||||||
if (running){
|
if (running){
|
||||||
if (isFinished()){
|
if (isFinished()){
|
||||||
running = false;
|
running = false;
|
||||||
if (stopcallback != NULL) stopcallback(this);
|
if (stopcallback != NULL) stopcallback(this);
|
||||||
} else{
|
} else{
|
||||||
if (fademode == SOUND_FADEIN){
|
if (fademode == SOUND_FADEIN){
|
||||||
if (fadepos < fadetarget){
|
if (fadepos < fadetarget){
|
||||||
fadepos++;
|
fadepos++;
|
||||||
setVolume((float)fadepos/fadetarget);
|
setVolume((float)fadepos/fadetarget);
|
||||||
} else fademode = SOUND_FADENONE;
|
} else fademode = SOUND_FADENONE;
|
||||||
}
|
}
|
||||||
if (fademode == SOUND_FADEOUT){
|
if (fademode == SOUND_FADEOUT){
|
||||||
if (fadepos < fadetarget){
|
if (fadepos < fadetarget){
|
||||||
fadepos++;
|
fadepos++;
|
||||||
setVolume(1.0 - (float)fadepos/fadetarget);
|
setVolume(1.0 - (float)fadepos/fadetarget);
|
||||||
} else{
|
} else{
|
||||||
fademode = SOUND_FADENONE;
|
fademode = SOUND_FADENONE;
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (minduration > 0) minduration--;
|
if (minduration > 0) minduration--;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sound::fadeIn(int length){
|
void Sound::fadeIn(int length){
|
||||||
fademode = SOUND_FADEIN;
|
fademode = SOUND_FADEIN;
|
||||||
fadepos = 0;
|
fadepos = 0;
|
||||||
fadetarget = length;
|
fadetarget = length;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sound::fadeOut(int length){
|
void Sound::fadeOut(int length){
|
||||||
if (fademode == SOUND_FADEIN){
|
if (fademode == SOUND_FADEIN){
|
||||||
float percent = 1.0 - (float)fadepos/fadetarget;
|
float percent = 1.0 - (float)fadepos/fadetarget;
|
||||||
fadepos = fadetarget * percent;
|
fadepos = fadetarget * percent;
|
||||||
}
|
}
|
||||||
fadepos = 0;
|
fadepos = 0;
|
||||||
fadetarget = length;
|
fadetarget = length;
|
||||||
fademode = SOUND_FADEOUT;
|
fademode = SOUND_FADEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void initAudio(void){
|
void initAudio(void){
|
||||||
#ifdef AUDIO_FMOD
|
#ifdef AUDIO_FMOD
|
||||||
FSOUND_Init(44100, 32, 0);
|
FSOUND_Init(44100, 32, 0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void uninitAudio(void){
|
void uninitAudio(void){
|
||||||
#ifdef AUDIO_FMOD
|
#ifdef AUDIO_FMOD
|
||||||
FSOUND_Close();
|
FSOUND_Close();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateAudio(void){
|
void updateAudio(void){
|
||||||
soundlist *node = allsounds;
|
soundlist *node = allsounds;
|
||||||
while (node != NULL){
|
while (node != NULL){
|
||||||
Sound *sound = node->sound;
|
Sound *sound = node->sound;
|
||||||
sound->update();
|
sound->update();
|
||||||
node = node->next;
|
node = node->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
119
src/audio.h
119
src/audio.h
|
@ -1,54 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: audio.h,v 1.13 2002/07/21 15:12:16 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: audio.h,v $
|
|
||||||
* Revision 1.13 2002/07/21 15:12:16 msell
|
|
||||||
* Äänet enabloitu :)
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/07/21 15:03:12 msell
|
|
||||||
* Äänet disabloitu
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/07/19 18:59:46 msell
|
|
||||||
* Alkuhommaa ja säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/07/18 23:05:31 msell
|
|
||||||
* Partikkelit ja kakkospelaajan liike
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/14 21:22:40 jkaarlas
|
|
||||||
* skybox ja ukkojen säätö
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/05/19 13:40:19 msell
|
|
||||||
* Säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/05/18 12:29:35 msell
|
|
||||||
* Valot ja äänijärjestelmän parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/05/16 18:41:16 msell
|
|
||||||
* Vektorifunctioita ja kamera
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/05/15 21:07:23 msell
|
|
||||||
* Äänisäätöä
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/05/15 15:21:00 msell
|
|
||||||
* Äänisäätöä
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/15 14:36:39 msell
|
|
||||||
* Yksinkertainen SDL-runko (Kääntyy toistaiseksi vain windowsissa).
|
|
||||||
* Mukana myös musiikinsoitto fmodilla.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/21 15:12:16 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __AUDIO_H_INCLUDED__
|
#ifndef __AUDIO_H_INCLUDED__
|
||||||
#define __AUDIO_H_INCLUDED__
|
#define __AUDIO_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -79,47 +28,47 @@ typedef void(* STOPCALLBACK)(Sound *sound);
|
||||||
class Sound{
|
class Sound{
|
||||||
private:
|
private:
|
||||||
#ifdef AUDIO_FMOD
|
#ifdef AUDIO_FMOD
|
||||||
int type;
|
int type;
|
||||||
FMUSIC_MODULE *module;
|
FMUSIC_MODULE *module;
|
||||||
FSOUND_STREAM *stream;
|
FSOUND_STREAM *stream;
|
||||||
FSOUND_SAMPLE *sample;
|
FSOUND_SAMPLE *sample;
|
||||||
int channel;
|
int channel;
|
||||||
#endif
|
#endif
|
||||||
bool loops;
|
bool loops;
|
||||||
bool finished;
|
bool finished;
|
||||||
bool running;
|
bool running;
|
||||||
float volume;
|
float volume;
|
||||||
STOPCALLBACK stopcallback;
|
STOPCALLBACK stopcallback;
|
||||||
bool isFinished(void);
|
bool isFinished(void);
|
||||||
|
|
||||||
int fadepos, fadetarget;
|
int fadepos, fadetarget;
|
||||||
int fademode;
|
int fademode;
|
||||||
|
|
||||||
int minduration;
|
int minduration;
|
||||||
|
|
||||||
char *filename;
|
char *filename;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Sound(Sound *source);
|
Sound(Sound *source);
|
||||||
Sound(char *filename);
|
Sound(char *filename);
|
||||||
Sound(char *filename, int type);
|
Sound(char *filename, int type);
|
||||||
Sound(char *filename, bool loops);
|
Sound(char *filename, bool loops);
|
||||||
Sound(char *filename, int type, bool loops);
|
Sound(char *filename, int type, bool loops);
|
||||||
void load(char *filename, int type, bool loops);
|
void load(char *filename, int type, bool loops);
|
||||||
bool play(void);
|
bool play(void);
|
||||||
|
|
||||||
//Plays sound for at least minduration frames until sound
|
//Plays sound for at least minduration frames until sound
|
||||||
//can be played again. Doesn't prevent stopping of the sound
|
//can be played again. Doesn't prevent stopping of the sound
|
||||||
void play(int minduration);
|
void play(int minduration);
|
||||||
void stop();
|
void stop();
|
||||||
void setStopCallback(STOPCALLBACK callback);
|
void setStopCallback(STOPCALLBACK callback);
|
||||||
void setVolume(float volume);
|
void setVolume(float volume);
|
||||||
void fadeIn(int length);
|
void fadeIn(int length);
|
||||||
void fadeOut(int length);
|
void fadeOut(int length);
|
||||||
|
|
||||||
//Do not use methods below
|
//Do not use methods below
|
||||||
void setFinished(void);
|
void setFinished(void);
|
||||||
void update(void);
|
void update(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
void initAudio(void);
|
void initAudio(void);
|
||||||
|
|
106
src/camera.cpp
106
src/camera.cpp
|
@ -1,29 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: camera.cpp,v 1.5 2002/07/22 01:14:14 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: camera.cpp,v $
|
|
||||||
* Revision 1.5 2002/07/22 01:14:14 msell
|
|
||||||
* Lopetussysteemi
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/17 20:49:04 msell
|
|
||||||
* free -> SDL_FreeSurface
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/16 01:04:58 jkaarlas
|
|
||||||
* tulipa säädettyä includejen kanssa. oon tod.näk. eri mieltä aamulla
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/03 23:06:38 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/16 18:42:07 msell
|
|
||||||
* Vektorifunctioita ja kamera
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/22 01:14:14 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include "camera.h"
|
#include "camera.h"
|
||||||
|
@ -31,83 +5,83 @@
|
||||||
#include "glapi.h"
|
#include "glapi.h"
|
||||||
|
|
||||||
Camera::Camera(void){
|
Camera::Camera(void){
|
||||||
right = &matrix[0];
|
right = &matrix[0];
|
||||||
up = &matrix[3];
|
up = &matrix[3];
|
||||||
forward = &matrix[6];
|
forward = &matrix[6];
|
||||||
|
|
||||||
vectorSet(position, 0, 2, 2);
|
vectorSet(position, 0, 2, 2);
|
||||||
vectorSet(target, 0, 0, 0);
|
vectorSet(target, 0, 0, 0);
|
||||||
vectorSet(up, 0, 1, 0);
|
vectorSet(up, 0, 1, 0);
|
||||||
|
|
||||||
calculateMatrix();
|
calculateMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::setPosition(float position[3]){
|
void Camera::setPosition(float position[3]){
|
||||||
vectorCopy(this->position, position);
|
vectorCopy(this->position, position);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::setPosition(float x, float y, float z){
|
void Camera::setPosition(float x, float y, float z){
|
||||||
this->position[0] = x;
|
this->position[0] = x;
|
||||||
this->position[1] = y;
|
this->position[1] = y;
|
||||||
this->position[2] = z;
|
this->position[2] = z;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::getPosition(float *position){
|
void Camera::getPosition(float *position){
|
||||||
vectorCopy(position, this->position);
|
vectorCopy(position, this->position);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::setTarget(float target[3]){
|
void Camera::setTarget(float target[3]){
|
||||||
vectorCopy(this->target, target);
|
vectorCopy(this->target, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::getTarget(float *target){
|
void Camera::getTarget(float *target){
|
||||||
vectorCopy(target, this->target);
|
vectorCopy(target, this->target);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::setUp(float up[3]){
|
void Camera::setUp(float up[3]){
|
||||||
vectorCopy(this->up, up);
|
vectorCopy(this->up, up);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::getMatrix(float *matrix){
|
void Camera::getMatrix(float *matrix){
|
||||||
vectorCopy(&matrix[0], &this->matrix[0]);
|
vectorCopy(&matrix[0], &this->matrix[0]);
|
||||||
vectorCopy(&matrix[3], &this->matrix[3]);
|
vectorCopy(&matrix[3], &this->matrix[3]);
|
||||||
vectorCopy(&matrix[6], &this->matrix[6]);
|
vectorCopy(&matrix[6], &this->matrix[6]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::moveRight(float amount){
|
void Camera::moveRight(float amount){
|
||||||
float movevector[3];
|
float movevector[3];
|
||||||
vectorScale(movevector, right, amount);
|
vectorScale(movevector, right, amount);
|
||||||
vectorAdd(position, movevector);
|
vectorAdd(position, movevector);
|
||||||
//vectorAdd(target, movevector);
|
//vectorAdd(target, movevector);
|
||||||
calculateMatrix();
|
calculateMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::moveUp(float amount){
|
void Camera::moveUp(float amount){
|
||||||
float movevector[3];
|
float movevector[3];
|
||||||
vectorScale(movevector, up, amount);
|
vectorScale(movevector, up, amount);
|
||||||
vectorAdd(position, movevector);
|
vectorAdd(position, movevector);
|
||||||
//vectorAdd(target, movevector);
|
//vectorAdd(target, movevector);
|
||||||
calculateMatrix();
|
calculateMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::moveForward(float amount){
|
void Camera::moveForward(float amount){
|
||||||
float movevector[3];
|
float movevector[3];
|
||||||
vectorScale(movevector, forward, amount);
|
vectorScale(movevector, forward, amount);
|
||||||
vectorAdd(position, movevector);
|
vectorAdd(position, movevector);
|
||||||
//vectorAdd(target, movevector);
|
//vectorAdd(target, movevector);
|
||||||
calculateMatrix();
|
calculateMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::glUpdate(void){
|
void Camera::glUpdate(void){
|
||||||
//glLoadIdentity();
|
//glLoadIdentity();
|
||||||
|
|
||||||
gluLookAt(position[0], position[1], position[2],
|
gluLookAt(position[0], position[1], position[2],
|
||||||
target[0], target[1], target[2],
|
target[0], target[1], target[2],
|
||||||
up[0], up[1], up[2]);
|
up[0], up[1], up[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::calculateMatrix(void){
|
void Camera::calculateMatrix(void){
|
||||||
vectorSub(forward, target, position);
|
vectorSub(forward, target, position);
|
||||||
vectorNormalize(forward);
|
vectorNormalize(forward);
|
||||||
vectorCross(right, forward, up);
|
vectorCross(right, forward, up);
|
||||||
}
|
}
|
||||||
|
|
57
src/camera.h
57
src/camera.h
|
@ -1,54 +1,31 @@
|
||||||
/*
|
|
||||||
* $Id: camera.h,v 1.4 2002/07/19 20:33:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: camera.h,v $
|
|
||||||
* Revision 1.4 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/03 23:06:38 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/16 18:42:07 msell
|
|
||||||
* Vektorifunctioita ja kamera
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __CAMERA_H_INCLUDED__
|
#ifndef __CAMERA_H_INCLUDED__
|
||||||
#define __CAMERA_H_INCLUDED__
|
#define __CAMERA_H_INCLUDED__
|
||||||
|
|
||||||
class Camera{
|
class Camera{
|
||||||
private:
|
private:
|
||||||
float position[3];
|
float position[3];
|
||||||
float target[3];
|
float target[3];
|
||||||
float matrix[9];
|
float matrix[9];
|
||||||
float *right, *up, *forward;
|
float *right, *up, *forward;
|
||||||
|
|
||||||
void calculateMatrix(void);
|
void calculateMatrix(void);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Camera(void);
|
Camera(void);
|
||||||
|
|
||||||
void setPosition(float position[3]);
|
void setPosition(float position[3]);
|
||||||
void setPosition(float x, float y, float z);
|
void setPosition(float x, float y, float z);
|
||||||
void getPosition(float *position);
|
void getPosition(float *position);
|
||||||
void setTarget(float target[3]);
|
void setTarget(float target[3]);
|
||||||
void getTarget(float *target);
|
void getTarget(float *target);
|
||||||
void setUp(float up[3]);
|
void setUp(float up[3]);
|
||||||
void getMatrix(float *matrix);
|
void getMatrix(float *matrix);
|
||||||
|
|
||||||
void moveRight(float amount);
|
void moveRight(float amount);
|
||||||
void moveUp(float amount);
|
void moveUp(float amount);
|
||||||
void moveForward(float amount);
|
void moveForward(float amount);
|
||||||
|
|
||||||
void glUpdate(void);
|
void glUpdate(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
1209
src/collision.cpp
1209
src/collision.cpp
File diff suppressed because it is too large
Load diff
|
@ -1,61 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: collision.h,v 1.15 2002/07/19 20:33:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: collision.h,v $
|
|
||||||
* Revision 1.15 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.14 2002/07/15 20:32:35 msell
|
|
||||||
* Uudet valot ja ulkoasun parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.13 2002/07/14 21:40:43 msell
|
|
||||||
* Conflictit pois, liikkumiset (hyppy, kävely, lyönti), uusi areena
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/07/10 17:13:44 msell
|
|
||||||
* Törmäystarkastelun parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/07/08 22:53:38 msell
|
|
||||||
* Säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/07/08 18:28:47 msell
|
|
||||||
* Törmäystä ja ukkoja
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/07/07 23:05:22 msell
|
|
||||||
* Osien liimaaminen toisiinsa (kesken)
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/07 15:29:07 msell
|
|
||||||
* Törmäyksien parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/30 16:05:04 msell
|
|
||||||
* Törmäyksien parantelua, transformaatioita mukana
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/27 14:39:48 msell
|
|
||||||
* Toimiva maila :)
|
|
||||||
* Pyörivät kappaleet siis antaa liike-energiaa liikkuville kappaleille (ei toisin päin vielä)
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/27 00:08:04 msell
|
|
||||||
* Kimmotukset palloille myös pyöritettyihin mesheihin
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/23 20:12:19 msell
|
|
||||||
* Parempi törmäystarkistus palloista mesheihin
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/14 00:05:05 msell
|
|
||||||
* Törmäyssimulaatio kunnossa toivon mukaan
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/11 23:11:45 msell
|
|
||||||
* Törmäystarkistusta
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __COLLISION_H_INCLUDED__
|
#ifndef __COLLISION_H_INCLUDED__
|
||||||
#define __COLLISION_H_INCLUDED__
|
#define __COLLISION_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -79,9 +21,9 @@ bool isCollisionLink(int source, int target);
|
||||||
|
|
||||||
class Contact{
|
class Contact{
|
||||||
public:
|
public:
|
||||||
Object *object1, *object2;
|
Object *object1, *object2;
|
||||||
float normal[3];
|
float normal[3];
|
||||||
float position[3];
|
float position[3];
|
||||||
};
|
};
|
||||||
|
|
||||||
extern Contact *contacts;
|
extern Contact *contacts;
|
||||||
|
@ -91,7 +33,7 @@ extern int contactcount;
|
||||||
//Contact point is world-relative and must be transformed
|
//Contact point is world-relative and must be transformed
|
||||||
//into coordinate system of both objects
|
//into coordinate system of both objects
|
||||||
void addCollision(Object *source, Object *target,
|
void addCollision(Object *source, Object *target,
|
||||||
float *normal, float *contactpoint);
|
float *normal, float *contactpoint);
|
||||||
bool handleCollision(Contact *contact);
|
bool handleCollision(Contact *contact);
|
||||||
bool handleLink(ObjectLink *link);
|
bool handleLink(ObjectLink *link);
|
||||||
|
|
||||||
|
|
163
src/end.cpp
163
src/end.cpp
|
@ -1,20 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: end.cpp,v 1.2 2002/07/22 11:40:26 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: end.cpp,v $
|
|
||||||
* Revision 1.2 2002/07/22 11:40:26 msell
|
|
||||||
* Loppukuvaan lattia
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/07/22 01:14:14 msell
|
|
||||||
* Lopetussysteemi
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/22 11:40:26 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@ -26,7 +9,7 @@
|
||||||
#include "object.h"
|
#include "object.h"
|
||||||
#include "appearance.h"
|
#include "appearance.h"
|
||||||
#include "sphere.h"
|
#include "sphere.h"
|
||||||
#include "vector.h"
|
#include "vector.h"
|
||||||
#include "collision.h"
|
#include "collision.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "graphics.h"
|
#include "graphics.h"
|
||||||
|
@ -48,114 +31,114 @@ Light endlight, endlight2;
|
||||||
BasicBlock *endfloor;// = new BasicBlock(20, 1, 15);
|
BasicBlock *endfloor;// = new BasicBlock(20, 1, 15);
|
||||||
|
|
||||||
void initEnd(void){
|
void initEnd(void){
|
||||||
endlight.setColor(1, 1, 1);
|
endlight.setColor(1, 1, 1);
|
||||||
endlight.setSpecular(1, 1, 1);
|
endlight.setSpecular(1, 1, 1);
|
||||||
endlight.setPosition(-0.5, BLOCKHEIGHT*16, 0.5);
|
endlight.setPosition(-0.5, BLOCKHEIGHT*16, 0.5);
|
||||||
endlight.setAttenuation(0, 0.0, 0.005);
|
endlight.setAttenuation(0, 0.0, 0.005);
|
||||||
|
|
||||||
endlight2.setColor(1, 1, 1);
|
endlight2.setColor(1, 1, 1);
|
||||||
endlight2.setSpecular(1, 1, 1);
|
endlight2.setSpecular(1, 1, 1);
|
||||||
endlight2.setAttenuation(1.0, 0.0, 0.0);
|
endlight2.setAttenuation(1.0, 0.0, 0.0);
|
||||||
|
|
||||||
endfloor = new BasicBlock(30, 1, 20);
|
endfloor = new BasicBlock(30, 1, 20);
|
||||||
//endfloor->material.setColor(0, 1, 0, 1);
|
//endfloor->material.setColor(0, 1, 0, 1);
|
||||||
endfloor->setColor(0, 1, 0);
|
endfloor->setColor(0, 1, 0);
|
||||||
endfloor->setPosition(-10, -BLOCKHEIGHT*0.5, 0);
|
endfloor->setPosition(-10, -BLOCKHEIGHT*0.5, 0);
|
||||||
endfloor->prepare();
|
endfloor->prepare();
|
||||||
}
|
}
|
||||||
|
|
||||||
int endingcounter;
|
int endingcounter;
|
||||||
|
|
||||||
void endRestart(void){
|
void endRestart(void){
|
||||||
endingcounter = 0;
|
endingcounter = 0;
|
||||||
//initEnd();
|
//initEnd();
|
||||||
//endfloor->prepare();
|
//endfloor->prepare();
|
||||||
}
|
}
|
||||||
|
|
||||||
void stopEnding(void){
|
void stopEnding(void){
|
||||||
endlight.setEnabled(false);
|
endlight.setEnabled(false);
|
||||||
changeGameMode(MENUMODE);
|
changeGameMode(MENUMODE);
|
||||||
fightmusic->fadeOut(300);
|
fightmusic->fadeOut(300);
|
||||||
menuRestart();
|
menuRestart();
|
||||||
}
|
}
|
||||||
|
|
||||||
float endfade;
|
float endfade;
|
||||||
|
|
||||||
void calculateEnd(int framecount){
|
void calculateEnd(int framecount){
|
||||||
endfade = -1;
|
endfade = -1;
|
||||||
|
|
||||||
if (endingcounter < 200){
|
if (endingcounter < 200){
|
||||||
endfade = 1-(float)endingcounter/200;
|
endfade = 1-(float)endingcounter/200;
|
||||||
}
|
}
|
||||||
endingcounter++;
|
endingcounter++;
|
||||||
|
|
||||||
endlight.setEnabled(true);
|
endlight.setEnabled(true);
|
||||||
//endlight2.setEnabled(true);
|
//endlight2.setEnabled(true);
|
||||||
|
|
||||||
float target[3] = {0, 13, 0};
|
float target[3] = {0, 13, 0};
|
||||||
endcamera.setTarget(target);
|
endcamera.setTarget(target);
|
||||||
endcamera.setPosition(10+sin(framecount*0.002)*2, 20+sin(framecount*0.0017)*2, 25+cos(framecount*0.002)*2);
|
endcamera.setPosition(10+sin(framecount*0.002)*2, 20+sin(framecount*0.0017)*2, 25+cos(framecount*0.002)*2);
|
||||||
//endcamera.setPosition(sin(framecount*0.01)*25, sin(framecount*0.007)*6+20, cos(framecount*0.01)*25);
|
//endcamera.setPosition(sin(framecount*0.01)*25, sin(framecount*0.007)*6+20, cos(framecount*0.01)*25);
|
||||||
|
|
||||||
//endlight.setPosition(40, 20, 0);
|
//endlight.setPosition(40, 20, 0);
|
||||||
endlight.setPosition(-sin(framecount*0.007)*10, 15, cos(framecount*0.007)*2+22);
|
endlight.setPosition(-sin(framecount*0.007)*10, 15, cos(framecount*0.007)*2+22);
|
||||||
|
|
||||||
if (keys[SDLK_ESCAPE]){
|
if (keys[SDLK_ESCAPE]){
|
||||||
stopEnding();
|
stopEnding();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawEnd(int framecount){
|
void drawEnd(int framecount){
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
glTranslatef(10, 0, 0);
|
glTranslatef(10, 0, 0);
|
||||||
|
|
||||||
endcamera.glUpdate();
|
endcamera.glUpdate();
|
||||||
|
|
||||||
updateLights();
|
updateLights();
|
||||||
|
|
||||||
glEnable(GL_LIGHTING);
|
glEnable(GL_LIGHTING);
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
glEnable(GL_CULL_FACE);
|
glEnable(GL_CULL_FACE);
|
||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
|
||||||
endfloor->draw();
|
endfloor->draw();
|
||||||
|
|
||||||
glColor3f(1, 1, 0);
|
glColor3f(1, 1, 0);
|
||||||
|
|
||||||
drawTrophy();
|
drawTrophy();
|
||||||
|
|
||||||
glRotatef(270, 0, 1, 0);
|
glRotatef(270, 0, 1, 0);
|
||||||
glTranslatef(2-BLOCKHEIGHT*0.5, 0, 15-BLOCKHEIGHT*0.5);
|
glTranslatef(2-BLOCKHEIGHT*0.5, 0, 15-BLOCKHEIGHT*0.5);
|
||||||
glScalef(3, 3, 3);
|
glScalef(3, 3, 3);
|
||||||
|
|
||||||
winner->head->draw();
|
winner->head->draw();
|
||||||
winner->torso->draw();
|
winner->torso->draw();
|
||||||
winner->lefthand->draw();
|
winner->lefthand->draw();
|
||||||
winner->righthand->draw();
|
winner->righthand->draw();
|
||||||
winner->waist->draw();
|
winner->waist->draw();
|
||||||
winner->leftleg->draw();
|
winner->leftleg->draw();
|
||||||
winner->rightleg->draw();
|
winner->rightleg->draw();
|
||||||
|
|
||||||
|
|
||||||
enable2D();
|
enable2D();
|
||||||
|
|
||||||
glColor3f(1, 1, 1);
|
glColor3f(1, 1, 1);
|
||||||
|
|
||||||
if (winner->side == PLAYER1) print(0.05, 0.05, "Player 1 is\nthe winner", 0.09);
|
if (winner->side == PLAYER1) print(0.05, 0.05, "Player 1 is\nthe winner", 0.09);
|
||||||
if (winner->side == PLAYER2) print(0.05, 0.05, "Player 2 is\nthe winner", 0.09);
|
if (winner->side == PLAYER2) print(0.05, 0.05, "Player 2 is\nthe winner", 0.09);
|
||||||
|
|
||||||
|
|
||||||
if (endfade != -1){
|
if (endfade != -1){
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
glColor4f(0, 0, 0, endfade);
|
glColor4f(0, 0, 0, endfade);
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
glVertex2f(0, 0);
|
glVertex2f(0, 0);
|
||||||
glVertex2f(1, 0);
|
glVertex2f(1, 0);
|
||||||
glVertex2f(1, 1);
|
glVertex2f(1, 1);
|
||||||
glVertex2f(0, 1);
|
glVertex2f(0, 1);
|
||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
disable2D();
|
disable2D();
|
||||||
}
|
}
|
||||||
|
|
14
src/end.h
14
src/end.h
|
@ -1,17 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: end.h,v 1.1 2002/07/22 01:14:14 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: end.h,v $
|
|
||||||
* Revision 1.1 2002/07/22 01:14:14 msell
|
|
||||||
* Lopetussysteemi
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/22 01:14:14 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __END_H_INCLUDED__
|
#ifndef __END_H_INCLUDED__
|
||||||
#define __END_H_INCLUDED__
|
#define __END_H_INCLUDED__
|
||||||
|
|
||||||
|
|
1027
src/fight.cpp
1027
src/fight.cpp
File diff suppressed because it is too large
Load diff
63
src/fight.h
63
src/fight.h
|
@ -1,66 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: fight.h,v 1.17 2002/07/22 01:14:14 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: fight.h,v $
|
|
||||||
* Revision 1.17 2002/07/22 01:14:14 msell
|
|
||||||
* Lopetussysteemi
|
|
||||||
*
|
|
||||||
* Revision 1.16 2002/07/21 15:03:12 msell
|
|
||||||
* Äänet disabloitu
|
|
||||||
*
|
|
||||||
* Revision 1.15 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.14 2002/07/19 20:06:32 msell
|
|
||||||
* Linux-porttausta
|
|
||||||
*
|
|
||||||
* Revision 1.13 2002/07/19 18:59:46 msell
|
|
||||||
* Alkuhommaa ja säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/07/19 14:05:52 msell
|
|
||||||
* Damagetextuurit näkyy
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/07/18 23:05:31 msell
|
|
||||||
* Partikkelit ja kakkospelaajan liike
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/07/17 22:45:54 msell
|
|
||||||
* Ääniä vähän
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/07/16 17:16:34 msell
|
|
||||||
* Fontit ja valikot
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/15 15:22:08 msell
|
|
||||||
* Parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/07/14 21:22:40 jkaarlas
|
|
||||||
* skybox ja ukkojen säätö
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/07/08 22:53:38 msell
|
|
||||||
* Säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/07/07 15:29:07 msell
|
|
||||||
* Törmäyksien parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/02 16:57:37 msell
|
|
||||||
* Objektirakenteen pohja
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/16 18:42:07 msell
|
|
||||||
* Vektorifunctioita ja kamera
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/22 01:14:14 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __FIGHT_H_INCLUDED__
|
#ifndef __FIGHT_H_INCLUDED__
|
||||||
#define __FIGHT_H_INCLUDED__
|
#define __FIGHT_H_INCLUDED__
|
||||||
|
|
||||||
|
|
127
src/font.cpp
127
src/font.cpp
|
@ -1,32 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: font.cpp,v 1.6 2002/07/21 20:14:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: font.cpp,v $
|
|
||||||
* Revision 1.6 2002/07/21 20:14:28 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/07/19 18:59:46 msell
|
|
||||||
* Alkuhommaa ja säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/07/19 14:05:52 msell
|
|
||||||
* Damagetextuurit näkyy
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/07/19 12:10:53 msell
|
|
||||||
* Hups
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/07/17 16:40:33 msell
|
|
||||||
* Resoluution vaihto
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/07/16 17:16:34 msell
|
|
||||||
* Fontit ja valikot
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/21 20:14:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
|
@ -35,68 +6,68 @@
|
||||||
Texture *fonttexture;
|
Texture *fonttexture;
|
||||||
|
|
||||||
void drawChar(float x, float y, char ch, float size){
|
void drawChar(float x, float y, char ch, float size){
|
||||||
fonttexture->enable();
|
fonttexture->enable();
|
||||||
|
|
||||||
int tx = (ch&15)*64;
|
int tx = (ch&15)*64;
|
||||||
int ty = (ch>>4)*64;
|
int ty = (ch>>4)*64;
|
||||||
|
|
||||||
float w = size, h = size*4/3;
|
float w = size, h = size*4/3;
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR);
|
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR);
|
||||||
|
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
glTexCoord2f((tx)/1024.0, (ty)/1024.0);
|
glTexCoord2f((tx)/1024.0, (ty)/1024.0);
|
||||||
glVertex2f(x, y);
|
glVertex2f(x, y);
|
||||||
|
|
||||||
glTexCoord2f((tx)/1024.0, (ty+64)/1024.0);
|
glTexCoord2f((tx)/1024.0, (ty+64)/1024.0);
|
||||||
glVertex2f(x, y+h);
|
glVertex2f(x, y+h);
|
||||||
|
|
||||||
glTexCoord2f((tx+64)/1024.0, (ty+64)/1024.0);
|
|
||||||
glVertex2f(x+w, y+h);
|
|
||||||
|
|
||||||
glTexCoord2f((tx+64)/1024.0, (ty)/1024.0);
|
|
||||||
glVertex2f(x+w, y);
|
|
||||||
|
|
||||||
glEnd();
|
glTexCoord2f((tx+64)/1024.0, (ty+64)/1024.0);
|
||||||
|
glVertex2f(x+w, y+h);
|
||||||
|
|
||||||
fonttexture->disable();
|
glTexCoord2f((tx+64)/1024.0, (ty)/1024.0);
|
||||||
|
glVertex2f(x+w, y);
|
||||||
|
|
||||||
|
glEnd();
|
||||||
|
|
||||||
|
fonttexture->disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
float letterwidth[256] = {
|
float letterwidth[256] = {
|
||||||
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||||
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||||
0.5, 0.2, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.45, 0.2, 0.5,
|
0.5, 0.2, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.45, 0.2, 0.5,
|
||||||
0.6, 0.5, 0.6, 0.6, 0.65, 0.65, 0.6, 0.65, 0.6, 0.6, 0.2, 1.0, 1.0, 1.0, 1.0, 0.5,
|
0.6, 0.5, 0.6, 0.6, 0.65, 0.65, 0.6, 0.65, 0.6, 0.6, 0.2, 1.0, 1.0, 1.0, 1.0, 0.5,
|
||||||
1.0, 0.7, 0.6, 0.7, 0.7, 0.65, 0.6, 0.7, 0.8, 0.6, 0.7, 0.7, 0.6, 0.9, 0.85, 0.8,
|
1.0, 0.7, 0.6, 0.7, 0.7, 0.65, 0.6, 0.7, 0.8, 0.6, 0.7, 0.7, 0.6, 0.9, 0.85, 0.8,
|
||||||
0.6, 0.9, 0.7, 0.7, 0.7, 0.7, 0.7, 1.0, 0.8, 0.7, 0.8, 1.0, 1.0, 1.0, 1.0, 1.0,
|
0.6, 0.9, 0.7, 0.7, 0.7, 0.7, 0.7, 1.0, 0.8, 0.7, 0.8, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||||
1.0, 0.6, 0.6, 0.6, 0.6, 0.6, 0.5, 0.6, 0.6, 0.2, 0.4, 0.6, 0.2, 0.8, 0.5, 0.55,
|
1.0, 0.6, 0.6, 0.6, 0.6, 0.6, 0.5, 0.6, 0.6, 0.2, 0.4, 0.6, 0.2, 0.8, 0.5, 0.55,
|
||||||
0.55, 0.55, 0.5, 0.55, 0.55, 0.55, 0.6, 0.8, 0.6, 0.6, 0.6, 1.0, 1.0, 1.0, 1.0, 1.0,
|
0.55, 0.55, 0.5, 0.55, 0.55, 0.55, 0.6, 0.8, 0.6, 0.6, 0.6, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||||
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||||
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||||
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||||
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||||
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||||
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||||
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||||
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
|
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
|
||||||
};
|
};
|
||||||
|
|
||||||
void print(float x, float y, char *text, float size){
|
void print(float x, float y, char *text, float size){
|
||||||
int i;
|
int i;
|
||||||
int textlength = strlen(text);
|
int textlength = strlen(text);
|
||||||
float px = x;
|
float px = x;
|
||||||
float py = y;
|
float py = y;
|
||||||
for (i = 0; i < textlength; i++){
|
for (i = 0; i < textlength; i++){
|
||||||
char ch = text[i];
|
char ch = text[i];
|
||||||
if (ch == '\n'){
|
if (ch == '\n'){
|
||||||
px = x;
|
px = x;
|
||||||
py += size*1.2;
|
py += size*1.2;
|
||||||
} else{
|
} else{
|
||||||
drawChar(px, py, ch, size);
|
drawChar(px, py, ch, size);
|
||||||
px += size*letterwidth[ch];
|
px += size*letterwidth[ch];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
20
src/font.h
20
src/font.h
|
@ -1,23 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: font.h,v 1.3 2002/07/19 20:33:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: font.h,v $
|
|
||||||
* Revision 1.3 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/07/19 14:05:52 msell
|
|
||||||
* Damagetextuurit näkyy
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/07/16 17:16:34 msell
|
|
||||||
* Fontit ja valikot
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __FONT_H_INCLUDED__
|
#ifndef __FONT_H_INCLUDED__
|
||||||
#define __FONT_H_INCLUDED__
|
#define __FONT_H_INCLUDED__
|
||||||
|
|
||||||
|
|
|
@ -1,67 +1,28 @@
|
||||||
/*
|
|
||||||
* $Id: glapi.cpp,v 1.9 2002/07/21 15:03:12 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: glapi.cpp,v $
|
|
||||||
* Revision 1.9 2002/07/21 15:03:12 msell
|
|
||||||
* Äänet disabloitu
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/15 20:32:35 msell
|
|
||||||
* Uudet valot ja ulkoasun parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/17 19:58:08 msell
|
|
||||||
* #includeiden parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/05 18:39:04 msell
|
|
||||||
* Jotain pientä
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/05 15:00:41 msell
|
|
||||||
* Palikoihin lisää detailia, facet jaetaan halutun kokosiin osiin
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/03 23:06:38 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/05/17 23:13:30 msell
|
|
||||||
* Valot
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/05/16 18:41:16 msell
|
|
||||||
* Vektorifunctioita ja kamera
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/15 14:36:39 msell
|
|
||||||
* Yksinkertainen SDL-runko (Kääntyy toistaiseksi vain windowsissa).
|
|
||||||
* Mukana myös musiikinsoitto fmodilla.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/21 15:03:12 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include "glapi.h"
|
#include "glapi.h"
|
||||||
|
|
||||||
void setupOpengl(int width, int height){
|
void setupOpengl(int width, int height){
|
||||||
//float ratio = (float)width/height;
|
//float ratio = (float)width/height;
|
||||||
float ratio = 4.0/3.0;
|
float ratio = 4.0/3.0;
|
||||||
|
|
||||||
glShadeModel(GL_SMOOTH);
|
glShadeModel(GL_SMOOTH);
|
||||||
|
|
||||||
glCullFace(GL_BACK);
|
glCullFace(GL_BACK);
|
||||||
glFrontFace(GL_CCW);
|
glFrontFace(GL_CCW);
|
||||||
glEnable(GL_CULL_FACE);
|
glEnable(GL_CULL_FACE);
|
||||||
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glDepthFunc(GL_LEQUAL);
|
glDepthFunc(GL_LEQUAL);
|
||||||
glClearDepth(1.0);
|
glClearDepth(1.0);
|
||||||
|
|
||||||
glClearColor(0, 0, 0, 0);
|
glClearColor(0, 0, 0, 0);
|
||||||
|
|
||||||
glEnable(GL_COLOR_MATERIAL);
|
glEnable(GL_COLOR_MATERIAL);
|
||||||
|
|
||||||
//Enables lighting with zero initial lights. Lights are created with Light-class
|
//Enables lighting with zero initial lights. Lights are created with Light-class
|
||||||
glEnable(GL_LIGHTING);
|
glEnable(GL_LIGHTING);
|
||||||
glDisable(GL_LIGHT0);
|
glDisable(GL_LIGHT0);
|
||||||
|
|
||||||
float ambient[4]= {0.1, 0.1, 0.1, 1};
|
float ambient[4]= {0.1, 0.1, 0.1, 1};
|
||||||
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
|
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
|
||||||
|
@ -70,34 +31,34 @@ void setupOpengl(int width, int height){
|
||||||
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
|
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
|
||||||
|
|
||||||
GLfloat zero[4] = {0, 0, 0, 1};
|
GLfloat zero[4] = {0, 0, 0, 1};
|
||||||
GLfloat one[4] = {1, 1, 1, 1};
|
GLfloat one[4] = {1, 1, 1, 1};
|
||||||
|
|
||||||
//Default frontface lighting
|
//Default frontface lighting
|
||||||
glMaterialfv(GL_FRONT, GL_AMBIENT, one);
|
glMaterialfv(GL_FRONT, GL_AMBIENT, one);
|
||||||
glMaterialfv(GL_FRONT, GL_DIFFUSE, one);
|
glMaterialfv(GL_FRONT, GL_DIFFUSE, one);
|
||||||
GLfloat specular[4] = {2, 2, 2, 1};
|
GLfloat specular[4] = {2, 2, 2, 1};
|
||||||
glMaterialfv(GL_FRONT, GL_SPECULAR, specular);
|
glMaterialfv(GL_FRONT, GL_SPECULAR, specular);
|
||||||
glMaterialf(GL_FRONT, GL_SHININESS, 120);
|
glMaterialf(GL_FRONT, GL_SHININESS, 120);
|
||||||
|
|
||||||
//Never any backface lighting, except ambient
|
//Never any backface lighting, except ambient
|
||||||
glMaterialfv(GL_BACK, GL_AMBIENT, one);
|
glMaterialfv(GL_BACK, GL_AMBIENT, one);
|
||||||
glMaterialfv(GL_BACK, GL_DIFFUSE, zero);
|
glMaterialfv(GL_BACK, GL_DIFFUSE, zero);
|
||||||
glMaterialfv(GL_BACK, GL_SPECULAR, zero);
|
glMaterialfv(GL_BACK, GL_SPECULAR, zero);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
|
|
||||||
glDepthFunc(GL_LEQUAL);
|
glDepthFunc(GL_LEQUAL);
|
||||||
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
|
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
|
||||||
|
|
||||||
glEnable(GL_NORMALIZE);
|
glEnable(GL_NORMALIZE);
|
||||||
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
|
|
||||||
gluPerspective(60.0, ratio, 1.0, 1024.0);
|
gluPerspective(60.0, ratio, 1.0, 1024.0);
|
||||||
|
|
||||||
|
|
||||||
//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||||
}
|
}
|
||||||
|
|
30
src/glapi.h
30
src/glapi.h
|
@ -1,33 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: glapi.h,v 1.6 2002/07/19 20:33:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: glapi.h,v $
|
|
||||||
* Revision 1.6 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/17 19:58:08 msell
|
|
||||||
* #includeiden parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/16 01:04:58 jkaarlas
|
|
||||||
* tulipa säädettyä includejen kanssa. oon tod.näk. eri mieltä aamulla
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/05/16 18:41:16 msell
|
|
||||||
* Vektorifunctioita ja kamera
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/15 14:36:39 msell
|
|
||||||
* Yksinkertainen SDL-runko (Kääntyy toistaiseksi vain windowsissa).
|
|
||||||
* Mukana myös musiikinsoitto fmodilla.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __GLAPI_H_INCLUDED__
|
#ifndef __GLAPI_H_INCLUDED__
|
||||||
#define __GLAPI_H_INCLUDED__
|
#define __GLAPI_H_INCLUDED__
|
||||||
|
|
||||||
|
|
273
src/graphics.cpp
273
src/graphics.cpp
|
@ -1,62 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: graphics.cpp,v 1.17 2002/07/21 15:03:12 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: graphics.cpp,v $
|
|
||||||
* Revision 1.17 2002/07/21 15:03:12 msell
|
|
||||||
* Äänet disabloitu
|
|
||||||
*
|
|
||||||
* Revision 1.16 2002/07/19 22:01:35 msell
|
|
||||||
* Säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.15 2002/07/19 21:32:54 msell
|
|
||||||
* Mipmap pois
|
|
||||||
*
|
|
||||||
* Revision 1.14 2002/07/19 21:17:06 msell
|
|
||||||
* bugifixi
|
|
||||||
*
|
|
||||||
* Revision 1.13 2002/07/17 16:40:33 msell
|
|
||||||
* Resoluution vaihto
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/07/14 21:22:39 jkaarlas
|
|
||||||
* skybox ja ukkojen säätö
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/06/28 14:51:40 jkaarlas
|
|
||||||
* transparenttilatausta korjailtu
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/06/27 21:42:32 jkaarlas
|
|
||||||
* lisätty transparentin tekstuurin lataus
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/06/26 18:54:43 jkaarlas
|
|
||||||
* Nyt se lataus vihdoin toimii
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/06/20 15:30:22 jkaarlas
|
|
||||||
* tekstuurisäätöä
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/19 22:44:56 jkaarlas
|
|
||||||
* lisätty glTexEnvf lataukseen
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/17 20:49:04 msell
|
|
||||||
* free -> SDL_FreeSurface
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/17 20:24:20 jkaarlas
|
|
||||||
* pahimmat bugit korjattu
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/17 19:58:08 msell
|
|
||||||
* #includeiden parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/17 16:51:38 jkaarlas
|
|
||||||
* realloc korjattu
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/16 01:05:18 jkaarlas
|
|
||||||
* vähän lihaa luiden ympärille näihinkin
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/21 15:03:12 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "graphics.h"
|
#include "graphics.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
@ -90,7 +31,7 @@ void GraphicsDruid::destroy(void){
|
||||||
}
|
}
|
||||||
|
|
||||||
GraphicsDruid &GraphicsDruid::getInstance(void){
|
GraphicsDruid &GraphicsDruid::getInstance(void){
|
||||||
|
|
||||||
if (!instance){
|
if (!instance){
|
||||||
instance = new GraphicsDruid;
|
instance = new GraphicsDruid;
|
||||||
init();
|
init();
|
||||||
|
@ -101,9 +42,9 @@ GraphicsDruid &GraphicsDruid::getInstance(void){
|
||||||
int GraphicsDruid::loadTexture(SDL_Surface *texture, int id, int format){
|
int GraphicsDruid::loadTexture(SDL_Surface *texture, int id, int format){
|
||||||
|
|
||||||
int textureID = id == -1 ? getNewTextureID(id) : id;
|
int textureID = id == -1 ? getNewTextureID(id) : id;
|
||||||
|
|
||||||
// register texture in OpenGL
|
// register texture in OpenGL
|
||||||
glBindTexture (GL_TEXTURE_2D, textureID);
|
glBindTexture (GL_TEXTURE_2D, textureID);
|
||||||
|
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
@ -112,48 +53,48 @@ int GraphicsDruid::loadTexture(SDL_Surface *texture, int id, int format){
|
||||||
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);//_MIPMAP_NEAREST);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);//_MIPMAP_NEAREST);
|
||||||
//glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
//glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||||
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||||
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||||
|
|
||||||
//printf("w: %i, h: %i, format: %i, RGBA: %i, pixels: %p\n",
|
//printf("w: %i, h: %i, format: %i, RGBA: %i, pixels: %p\n",
|
||||||
// texture->w, texture->h, format, GL_RGBA, texture->pixels);
|
// texture->w, texture->h, format, GL_RGBA, texture->pixels);
|
||||||
//printf("Pitch: %i, Bpp: %i\n", texture->pitch, texture->format->BytesPerPixel);
|
//printf("Pitch: %i, Bpp: %i\n", texture->pitch, texture->format->BytesPerPixel);
|
||||||
|
|
||||||
/*gluBuild2DMipmaps(GL_TEXTURE_2D,
|
/*gluBuild2DMipmaps(GL_TEXTURE_2D,
|
||||||
4,
|
4,
|
||||||
texture->w,
|
texture->w,
|
||||||
texture->h,
|
texture->h,
|
||||||
format,
|
format,
|
||||||
GL_UNSIGNED_BYTE,
|
GL_UNSIGNED_BYTE,
|
||||||
texture->pixels);*/
|
texture->pixels);*/
|
||||||
int w = texture->w;
|
int w = texture->w;
|
||||||
int h = texture->h;
|
int h = texture->h;
|
||||||
/*int i;
|
/*int i;
|
||||||
while (w > 0){
|
while (w > 0){
|
||||||
w >>= 1;
|
w >>= 1;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
w = 1;
|
w = 1;
|
||||||
for (;i > 1; i--) w <<= 1;
|
for (;i > 1; i--) w <<= 1;
|
||||||
while (h > 0){
|
while (h > 0){
|
||||||
h >>= 1;
|
h >>= 1;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
h = 1;
|
h = 1;
|
||||||
for (;i > 1; i--) h <<= 1;*/
|
for (;i > 1; i--) h <<= 1;*/
|
||||||
//glTexImage2D(GL_TEXTURE_2D, 0, texture->format->BytesPerPixel, w, h, 0, format, GL_UNSIGNED_BYTE, texture->pixels);
|
//glTexImage2D(GL_TEXTURE_2D, 0, texture->format->BytesPerPixel, w, h, 0, format, GL_UNSIGNED_BYTE, texture->pixels);
|
||||||
if (texture->format->BytesPerPixel == 3){
|
if (texture->format->BytesPerPixel == 3){
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, 3, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, texture->pixels);
|
glTexImage2D(GL_TEXTURE_2D, 0, 3, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, texture->pixels);
|
||||||
} else if (texture->format->BytesPerPixel == 4){
|
} else if (texture->format->BytesPerPixel == 4){
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture->pixels);
|
glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture->pixels);
|
||||||
}
|
}
|
||||||
//SDL_FreeSurface(texture);
|
//SDL_FreeSurface(texture);
|
||||||
//SDL_FreeSurface(alphaSurface);
|
//SDL_FreeSurface(alphaSurface);
|
||||||
return textureID;
|
return textureID;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GraphicsDruid::loadTexture(char* path, int id){
|
int GraphicsDruid::loadTexture(char* path, int id){
|
||||||
|
|
||||||
SDL_Surface* texture;
|
SDL_Surface* texture;
|
||||||
texture = IMG_Load(path);
|
texture = IMG_Load(path);
|
||||||
|
|
||||||
|
@ -164,61 +105,61 @@ int GraphicsDruid::loadTexture(char* path, int id){
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
int textureID = getNewTextureID(id);
|
int textureID = getNewTextureID(id);
|
||||||
|
|
||||||
|
|
||||||
// register texture in OpenGL
|
|
||||||
glBindTexture (GL_TEXTURE_2D, textureID);
|
// register texture in OpenGL
|
||||||
|
glBindTexture (GL_TEXTURE_2D, textureID);
|
||||||
|
|
||||||
//glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
|
//glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
|
||||||
|
|
||||||
// NOTE : Making some assumptions about texture parameters
|
// NOTE : Making some assumptions about texture parameters
|
||||||
//glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
//glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
//glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
|
//glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
|
||||||
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
|
||||||
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||||
|
|
||||||
//printf("w: %i, h: %i, RGBA: %i, pixels: %p\n",
|
//printf("w: %i, h: %i, RGBA: %i, pixels: %p\n",
|
||||||
// texture->w, texture->h, GL_RGBA, texture->pixels);
|
// texture->w, texture->h, GL_RGBA, texture->pixels);
|
||||||
//printf("Pitch: %i, Bpp: %i\n", texture->pitch, texture->format->BytesPerPixel);
|
//printf("Pitch: %i, Bpp: %i\n", texture->pitch, texture->format->BytesPerPixel);
|
||||||
|
|
||||||
if (texture->format->BytesPerPixel == 3){
|
if (texture->format->BytesPerPixel == 3){
|
||||||
/*gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB,
|
/*gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB,
|
||||||
texture->w,
|
texture->w,
|
||||||
texture->h,
|
texture->h,
|
||||||
GL_RGB, GL_UNSIGNED_BYTE,
|
GL_RGB, GL_UNSIGNED_BYTE,
|
||||||
texture->pixels);*/
|
texture->pixels);*/
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, 3, texture->w, texture->h, 0, GL_RGB, GL_UNSIGNED_BYTE, texture->pixels);
|
glTexImage2D(GL_TEXTURE_2D, 0, 3, texture->w, texture->h, 0, GL_RGB, GL_UNSIGNED_BYTE, texture->pixels);
|
||||||
}
|
}
|
||||||
else if (texture->format->BytesPerPixel == 4){
|
else if (texture->format->BytesPerPixel == 4){
|
||||||
/*gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA,
|
/*gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA,
|
||||||
texture->w,
|
texture->w,
|
||||||
texture->h,
|
texture->h,
|
||||||
GL_RGBA, GL_UNSIGNED_BYTE,
|
GL_RGBA, GL_UNSIGNED_BYTE,
|
||||||
texture->pixels);*/
|
texture->pixels);*/
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, 4, texture->w, texture->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture->pixels);
|
glTexImage2D(GL_TEXTURE_2D, 0, 4, texture->w, texture->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture->pixels);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
|
|
||||||
gluBuild2DMipmaps(GL_TEXTURE_2D,
|
gluBuild2DMipmaps(GL_TEXTURE_2D,
|
||||||
0,
|
0,
|
||||||
texture->w,
|
texture->w,
|
||||||
texture->h,
|
texture->h,
|
||||||
GL_RGBA,
|
GL_RGBA,
|
||||||
GL_UNSIGNED_BYTE,
|
GL_UNSIGNED_BYTE,
|
||||||
texture->pixels);
|
texture->pixels);
|
||||||
*/
|
*/
|
||||||
SDL_FreeSurface(texture);
|
SDL_FreeSurface(texture);
|
||||||
return textureID;
|
return textureID;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GraphicsDruid::loadTranspTexture(char* path, float* transpColor, int id){
|
int GraphicsDruid::loadTranspTexture(char* path, float* transpColor, int id){
|
||||||
|
|
||||||
SDL_Surface* texture;
|
SDL_Surface* texture;
|
||||||
texture = IMG_Load(path);
|
texture = IMG_Load(path);
|
||||||
if (!texture){
|
if (!texture){
|
||||||
|
@ -227,62 +168,62 @@ int GraphicsDruid::loadTranspTexture(char* path, float* transpColor, int id){
|
||||||
#endif
|
#endif
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Uint32 colorKey = SDL_MapRGB(texture->format,
|
Uint32 colorKey = SDL_MapRGB(texture->format,
|
||||||
(Uint8)(transpColor[0] * 255),
|
(Uint8)(transpColor[0] * 255),
|
||||||
(Uint8)(transpColor[1] * 255),
|
(Uint8)(transpColor[1] * 255),
|
||||||
(Uint8)(transpColor[2] * 255));
|
(Uint8)(transpColor[2] * 255));
|
||||||
//SDL_SetAlpha(texture, 0, SDL_ALPHA_OPAQUE);
|
//SDL_SetAlpha(texture, 0, SDL_ALPHA_OPAQUE);
|
||||||
|
|
||||||
SDL_SetColorKey(texture, SDL_SRCCOLORKEY, colorKey);
|
SDL_SetColorKey(texture, SDL_SRCCOLORKEY, colorKey);
|
||||||
|
|
||||||
//SDL_Surface* alphaSurface = SDL_DisplayFormatAlpha(texture);
|
//SDL_Surface* alphaSurface = SDL_DisplayFormatAlpha(texture);
|
||||||
texture = SDL_DisplayFormatAlpha(texture);
|
texture = SDL_DisplayFormatAlpha(texture);
|
||||||
|
|
||||||
return loadTexture(texture);
|
return loadTexture(texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
int GraphicsDruid::getNewTextureID(int id){
|
int GraphicsDruid::getNewTextureID(int id){
|
||||||
|
|
||||||
if (id != -1){
|
if (id != -1){
|
||||||
for (int i = 0; i < instance->reserved; i++){
|
for (int i = 0; i < instance->reserved; i++){
|
||||||
if (instance->idArray[i] == id){
|
if (instance->idArray[i] == id){
|
||||||
freeTexture(id);
|
freeTexture(id);
|
||||||
instance->textureCount--;
|
instance->textureCount--;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GLuint newId;
|
GLuint newId;
|
||||||
|
|
||||||
if (id == -1){
|
if (id == -1){
|
||||||
glGenTextures (1, &newId);
|
glGenTextures (1, &newId);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
newId = id;
|
newId = id;
|
||||||
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
while (instance->idArray[index] != -1 && index < instance->reserved){
|
while (instance->idArray[index] != -1 && index < instance->reserved){
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// out of space, make more
|
// out of space, make more
|
||||||
if (index >= instance->reserved){
|
if (index >= instance->reserved){
|
||||||
instance->idArray = (int*) realloc(instance->idArray, (instance->reserved + ID_ARRAY_GROW)*sizeof(int));
|
instance->idArray = (int*) realloc(instance->idArray, (instance->reserved + ID_ARRAY_GROW)*sizeof(int));
|
||||||
|
|
||||||
for (int i = instance->reserved + 1; i < instance->reserved + ID_ARRAY_GROW; i++)
|
|
||||||
instance->idArray[i] = -1;
|
|
||||||
|
|
||||||
instance->reserved += ID_ARRAY_GROW;
|
for (int i = instance->reserved + 1; i < instance->reserved + ID_ARRAY_GROW; i++)
|
||||||
}
|
instance->idArray[i] = -1;
|
||||||
else
|
|
||||||
instance->idArray[index] = newId;
|
|
||||||
|
|
||||||
|
instance->reserved += ID_ARRAY_GROW;
|
||||||
instance->textureCount++;
|
}
|
||||||
return newId;
|
else
|
||||||
|
instance->idArray[index] = newId;
|
||||||
|
|
||||||
|
|
||||||
|
instance->textureCount++;
|
||||||
|
return newId;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsDruid::freeTexture(int id){
|
void GraphicsDruid::freeTexture(int id){
|
||||||
|
|
|
@ -1,38 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: graphics.h,v 1.9 2002/07/19 20:33:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: graphics.h,v $
|
|
||||||
* Revision 1.9 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/17 16:40:33 msell
|
|
||||||
* Resoluution vaihto
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/28 14:51:40 jkaarlas
|
|
||||||
* transparenttilatausta korjailtu
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/27 21:42:32 jkaarlas
|
|
||||||
* lisätty transparentin tekstuurin lataus
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/17 20:49:04 msell
|
|
||||||
* free -> SDL_FreeSurface
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/17 20:24:20 jkaarlas
|
|
||||||
* pahimmat bugit korjattu
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/17 16:51:38 jkaarlas
|
|
||||||
* realloc korjattu
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/16 01:05:18 jkaarlas
|
|
||||||
* vähän lihaa luiden ympärille näihinkin
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __GRAPHICS_H_INCLUDED__
|
#ifndef __GRAPHICS_H_INCLUDED__
|
||||||
#define __GRAPHICS_H_INCLUDED__
|
#define __GRAPHICS_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -66,17 +31,17 @@ private:
|
||||||
int* idArray;
|
int* idArray;
|
||||||
int textureCount;
|
int textureCount;
|
||||||
int reserved;
|
int reserved;
|
||||||
|
|
||||||
GraphicsDruid(void);
|
GraphicsDruid(void);
|
||||||
~GraphicsDruid(void);
|
~GraphicsDruid(void);
|
||||||
|
|
||||||
static void init(void);
|
static void init(void);
|
||||||
static void destroy(void);
|
static void destroy(void);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static GraphicsDruid &getInstance(void);
|
static GraphicsDruid &getInstance(void);
|
||||||
int loadTexture(SDL_Surface *texture, int id = -1, int format = GL_RGB);
|
int loadTexture(SDL_Surface *texture, int id = -1, int format = GL_RGB);
|
||||||
int loadTexture(char* path, int id = -1);
|
int loadTexture(char* path, int id = -1);
|
||||||
int loadTranspTexture(char* path, float* transpColor, int id = -1);
|
int loadTranspTexture(char* path, float* transpColor, int id = -1);
|
||||||
void freeTexture(int id);
|
void freeTexture(int id);
|
||||||
|
|
|
@ -1,75 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: legoblocks.cpp,v 1.20 2002/07/22 11:44:37 jkaarlas Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: legoblocks.cpp,v $
|
|
||||||
* Revision 1.20 2002/07/22 11:44:37 jkaarlas
|
|
||||||
* naama
|
|
||||||
*
|
|
||||||
* Revision 1.19 2002/07/18 23:05:31 msell
|
|
||||||
* Partikkelit ja kakkospelaajan liike
|
|
||||||
*
|
|
||||||
* Revision 1.18 2002/07/17 20:32:47 msell
|
|
||||||
* Detail-optio toimii
|
|
||||||
*
|
|
||||||
* Revision 1.17 2002/07/16 17:16:34 msell
|
|
||||||
* Fontit ja valikot
|
|
||||||
*
|
|
||||||
* Revision 1.16 2002/07/16 00:42:43 msell
|
|
||||||
* Uusia skyboxeja ja areenan säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.15 2002/07/15 20:32:35 msell
|
|
||||||
* Uudet valot ja ulkoasun parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.14 2002/07/15 15:22:08 msell
|
|
||||||
* Parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.13 2002/07/14 21:40:43 msell
|
|
||||||
* Conflictit pois, liikkumiset (hyppy, kävely, lyönti), uusi areena
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/06/30 16:05:04 msell
|
|
||||||
* Törmäyksien parantelua, transformaatioita mukana
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/06/27 00:08:04 msell
|
|
||||||
* Kimmotukset palloille myös pyöritettyihin mesheihin
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/06/24 14:12:15 msell
|
|
||||||
* Nyt toimii sphere -> mesh -törmäykset, ihan tosi
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/06/24 04:41:43 jkaarlas
|
|
||||||
* tekstuurikoordinaatteja korjattu
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/06/20 22:50:12 msell
|
|
||||||
* Meshit
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/20 00:21:01 jkaarlas
|
|
||||||
* materiaali- ja tekstuurihommia edistetty
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/17 19:58:08 msell
|
|
||||||
* #includeiden parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/15 17:18:37 msell
|
|
||||||
* Toimiva törmäystarkastus kiinteille laatikoille
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/05 18:39:04 msell
|
|
||||||
* Jotain pientä
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/05 15:00:41 msell
|
|
||||||
* Palikoihin lisää detailia, facet jaetaan halutun kokosiin osiin
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/03 23:06:38 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/22 11:44:37 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@ -82,131 +10,131 @@
|
||||||
#include "glapi.h"
|
#include "glapi.h"
|
||||||
|
|
||||||
BasicBlock::BasicBlock(int width, int height, int depth) : MeshObject(createBox(-width/2.0, width/2.0, -height/2.0*BLOCKHEIGHT, BLOCKHEIGHT*height/2.0, -depth/2.0, depth/2.0)){
|
BasicBlock::BasicBlock(int width, int height, int depth) : MeshObject(createBox(-width/2.0, width/2.0, -height/2.0*BLOCKHEIGHT, BLOCKHEIGHT*height/2.0, -depth/2.0, depth/2.0)){
|
||||||
appearance = new BasicBlockAppearance(width, height, depth);
|
appearance = new BasicBlockAppearance(width, height, depth);
|
||||||
//geometry = new MeshShape(this);
|
//geometry = new MeshShape(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BasicBlock::setColor(float red, float green, float blue){
|
void BasicBlock::setColor(float red, float green, float blue){
|
||||||
appearance->getMaterial()->setColor(red, green, blue, 1);
|
appearance->getMaterial()->setColor(red, green, blue, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BasicBlockAppearance::BasicBlockAppearance(int width, int height, int depth){
|
BasicBlockAppearance::BasicBlockAppearance(int width, int height, int depth){
|
||||||
this->width = width;
|
this->width = width;
|
||||||
this->height = height;
|
this->height = height;
|
||||||
this->depth = depth;
|
this->depth = depth;
|
||||||
vectorSet(displacement, 0, 0, 0);
|
vectorSet(displacement, 0, 0, 0);
|
||||||
gllist = glGenLists(1);
|
gllist = glGenLists(1);
|
||||||
usematerial = true;
|
usematerial = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BasicBlockAppearance::prepare(){
|
void BasicBlockAppearance::prepare(){
|
||||||
glNewList(gllist, GL_COMPILE);
|
glNewList(gllist, GL_COMPILE);
|
||||||
|
|
||||||
|
|
||||||
float width = this->width;
|
float width = this->width;
|
||||||
float height = this->height * BLOCKHEIGHT;
|
float height = this->height * BLOCKHEIGHT;
|
||||||
|
|
||||||
if (usematerial) material.enable();
|
if (usematerial) material.enable();
|
||||||
{//Block
|
{//Block
|
||||||
//Front Face
|
//Front Face
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(-width/2.0, -height/2.0, depth/2.0);
|
glTranslatef(-width/2.0, -height/2.0, depth/2.0);
|
||||||
drawDetailRectangle(width, height);
|
drawDetailRectangle(width, height);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
// Back Face
|
// Back Face
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(width/2.0, -height/2.0, -depth/2.0);
|
glTranslatef(width/2.0, -height/2.0, -depth/2.0);
|
||||||
glRotatef(180, 0, 1, 0);
|
glRotatef(180, 0, 1, 0);
|
||||||
drawDetailRectangle(width, height);
|
drawDetailRectangle(width, height);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
// Top Face
|
// Top Face
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(-width/2.0, height/2.0, depth/2.0);
|
glTranslatef(-width/2.0, height/2.0, depth/2.0);
|
||||||
glRotatef(-90, 1, 0, 0);
|
glRotatef(-90, 1, 0, 0);
|
||||||
drawDetailRectangle(width, depth);
|
drawDetailRectangle(width, depth);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
// Bottom Face
|
// Bottom Face
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(-width/2.0, -height/2.0, -depth/2.0);
|
glTranslatef(-width/2.0, -height/2.0, -depth/2.0);
|
||||||
glRotatef(90, 1, 0, 0);
|
glRotatef(90, 1, 0, 0);
|
||||||
drawDetailRectangle(width, depth);
|
drawDetailRectangle(width, depth);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
// Right face
|
// Right face
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(width/2.0, -height/2.0, depth/2.0);
|
glTranslatef(width/2.0, -height/2.0, depth/2.0);
|
||||||
glRotatef(90, 0, 1, 0);
|
glRotatef(90, 0, 1, 0);
|
||||||
drawDetailRectangle(depth, height);
|
drawDetailRectangle(depth, height);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
// Left Face
|
// Left Face
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(-width/2.0, -height/2.0, -depth/2.0);
|
glTranslatef(-width/2.0, -height/2.0, -depth/2.0);
|
||||||
glRotatef(-90, 0, 1, 0);
|
glRotatef(-90, 0, 1, 0);
|
||||||
drawDetailRectangle(depth, height);
|
drawDetailRectangle(depth, height);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(0.5 - width/2.0, height - height/2.0, 0.5 - depth/2.0);
|
glTranslatef(0.5 - width/2.0, height - height/2.0, 0.5 - depth/2.0);
|
||||||
int x, z;
|
int x, z;
|
||||||
for (x = 0; x < width; x++){
|
for (x = 0; x < width; x++){
|
||||||
//glPushMatrix();
|
//glPushMatrix();
|
||||||
for (z = 0; z < depth; z++){
|
for (z = 0; z < depth; z++){
|
||||||
createKnob();
|
createKnob();
|
||||||
glTranslatef(0, 0, 1);
|
glTranslatef(0, 0, 1);
|
||||||
}
|
}
|
||||||
glTranslatef(1, 0, -depth);
|
glTranslatef(1, 0, -depth);
|
||||||
//glPopMatrix();
|
//glPopMatrix();
|
||||||
}
|
}
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
if (usematerial) material.disable();
|
if (usematerial) material.disable();
|
||||||
glEndList();
|
glEndList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BasicBlockAppearance::draw(){
|
void BasicBlockAppearance::draw(){
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(displacement[0], displacement[1], displacement[2]);
|
glTranslatef(displacement[0], displacement[1], displacement[2]);
|
||||||
glCallList(gllist);
|
glCallList(gllist);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
//prepare();
|
//prepare();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define BLOCKDETAILGRID 1
|
#define BLOCKDETAILGRID 1
|
||||||
|
|
||||||
void drawDetailRectangle(float width, float height){
|
void drawDetailRectangle(float width, float height){
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
float x, y, x2, y2;
|
float x, y, x2, y2;
|
||||||
glNormal3f(0, 0, 1);
|
glNormal3f(0, 0, 1);
|
||||||
|
|
||||||
for (y = 0; y < height; y += BLOCKDETAILGRID){
|
|
||||||
y2 = y + BLOCKDETAILGRID;
|
|
||||||
if (y2 > height) y2 = height;
|
|
||||||
for (x = 0; x < width; x += BLOCKDETAILGRID){
|
|
||||||
x2 = x + BLOCKDETAILGRID;
|
|
||||||
if (x2 > width) x2 = width;
|
|
||||||
|
|
||||||
glTexCoord2f(x / width, y / height);
|
|
||||||
glVertex3f(x, y, 0);
|
|
||||||
|
|
||||||
glTexCoord2f(x2 / width, y / height);
|
for (y = 0; y < height; y += BLOCKDETAILGRID){
|
||||||
glVertex3f(x2, y, 0);
|
y2 = y + BLOCKDETAILGRID;
|
||||||
|
if (y2 > height) y2 = height;
|
||||||
|
for (x = 0; x < width; x += BLOCKDETAILGRID){
|
||||||
|
x2 = x + BLOCKDETAILGRID;
|
||||||
|
if (x2 > width) x2 = width;
|
||||||
|
|
||||||
glTexCoord2f(x2 / width, y2 / height);
|
glTexCoord2f(x / width, y / height);
|
||||||
glVertex3f(x2, y2, 0);
|
glVertex3f(x, y, 0);
|
||||||
|
|
||||||
glTexCoord2f(x / width, y2 / height);
|
glTexCoord2f(x2 / width, y / height);
|
||||||
glVertex3f(x, y2, 0);
|
glVertex3f(x2, y, 0);
|
||||||
}
|
|
||||||
}
|
glTexCoord2f(x2 / width, y2 / height);
|
||||||
glEnd();
|
glVertex3f(x2, y2, 0);
|
||||||
|
|
||||||
|
glTexCoord2f(x / width, y2 / height);
|
||||||
|
glVertex3f(x, y2, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define KNOBROUNDNESS 0.03
|
#define KNOBROUNDNESS 0.03
|
||||||
|
@ -215,43 +143,43 @@ int knobgllist;
|
||||||
int knobdetail;
|
int knobdetail;
|
||||||
|
|
||||||
void renderKnob(int knobsegments){
|
void renderKnob(int knobsegments){
|
||||||
point2d knobpoints[4];
|
point2d knobpoints[4];
|
||||||
knobpoints[0].x = 0.3;
|
knobpoints[0].x = 0.3;
|
||||||
knobpoints[0].y = 0;
|
knobpoints[0].y = 0;
|
||||||
knobpoints[1].x = 0.3;
|
knobpoints[1].x = 0.3;
|
||||||
knobpoints[1].y = BLOCKHEIGHT*0.5 - KNOBROUNDNESS;
|
knobpoints[1].y = BLOCKHEIGHT*0.5 - KNOBROUNDNESS;
|
||||||
knobpoints[2].x = 0.3 - KNOBROUNDNESS;
|
knobpoints[2].x = 0.3 - KNOBROUNDNESS;
|
||||||
knobpoints[2].y = BLOCKHEIGHT*0.5;
|
knobpoints[2].y = BLOCKHEIGHT*0.5;
|
||||||
knobpoints[3].x = 0;
|
knobpoints[3].x = 0;
|
||||||
knobpoints[3].y = BLOCKHEIGHT*0.5;
|
knobpoints[3].y = BLOCKHEIGHT*0.5;
|
||||||
|
|
||||||
point2d knobderivates[4];
|
point2d knobderivates[4];
|
||||||
knobderivates[0].x = 0;
|
knobderivates[0].x = 0;
|
||||||
knobderivates[0].y = knobpoints[1].y - knobpoints[0].y;
|
knobderivates[0].y = knobpoints[1].y - knobpoints[0].y;
|
||||||
knobderivates[1].x = 0;
|
knobderivates[1].x = 0;
|
||||||
knobderivates[1].y = knobpoints[2].y - knobpoints[1].y;
|
knobderivates[1].y = knobpoints[2].y - knobpoints[1].y;
|
||||||
knobderivates[2].x = knobpoints[2].x - knobpoints[1].x;
|
knobderivates[2].x = knobpoints[2].x - knobpoints[1].x;
|
||||||
knobderivates[2].y = 0;
|
knobderivates[2].y = 0;
|
||||||
knobderivates[3].x = knobpoints[3].x - knobpoints[2].x;
|
knobderivates[3].x = knobpoints[3].x - knobpoints[2].x;
|
||||||
knobderivates[3].y = 0;
|
knobderivates[3].y = 0;
|
||||||
|
|
||||||
createLathedSurface(knobpoints, knobderivates, 4, knobsegments, 4);
|
createLathedSurface(knobpoints, knobderivates, 4, knobsegments, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
void initKnob(void){
|
void initKnob(void){
|
||||||
glNewList(knobgllist, GL_COMPILE);
|
glNewList(knobgllist, GL_COMPILE);
|
||||||
|
|
||||||
renderKnob(knobdetail);
|
renderKnob(knobdetail);
|
||||||
|
|
||||||
glEndList();
|
glEndList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void createKnob(int knobsegments){
|
void createKnob(int knobsegments){
|
||||||
if (knobsegments != -1){
|
if (knobsegments != -1){
|
||||||
renderKnob(knobsegments);
|
renderKnob(knobsegments);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
glCallList(knobgllist);
|
glCallList(knobgllist);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -262,53 +190,53 @@ float knobroundness=0.05;
|
||||||
float pillarroundness=0.03;
|
float pillarroundness=0.03;
|
||||||
|
|
||||||
HeadAppearance::HeadAppearance(void){
|
HeadAppearance::HeadAppearance(void){
|
||||||
gllist = glGenLists(1);
|
gllist = glGenLists(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HeadAppearance::prepare(void){
|
void HeadAppearance::prepare(void){
|
||||||
glNewList(gllist, GL_COMPILE);
|
glNewList(gllist, GL_COMPILE);
|
||||||
|
|
||||||
glPushMatrix();
|
|
||||||
|
|
||||||
glTranslatef(0, -0.5, 0);
|
glPushMatrix();
|
||||||
|
|
||||||
point2d headpoints[14];
|
glTranslatef(0, -0.5, 0);
|
||||||
|
|
||||||
headpoints[0].x=0.0; headpoints[0].y=BLOCKHEIGHT*(0);
|
point2d headpoints[14];
|
||||||
headpoints[1].x=0.4; headpoints[1].y=BLOCKHEIGHT*(0);
|
|
||||||
headpoints[2].x=0.45; headpoints[2].y=BLOCKHEIGHT*(0.35);
|
|
||||||
headpoints[3].x=0.55; headpoints[3].y=BLOCKHEIGHT*(0.5);
|
|
||||||
headpoints[4].x=0.62*1.0; headpoints[4].y=BLOCKHEIGHT*(0.65);
|
|
||||||
headpoints[5].x=0.65*1.0; headpoints[5].y=BLOCKHEIGHT*(1);
|
|
||||||
headpoints[6].x=0.65*1.0; headpoints[6].y=BLOCKHEIGHT*(1.75);
|
|
||||||
headpoints[7].x=0.65*1.0; headpoints[7].y=BLOCKHEIGHT*(2.35);
|
|
||||||
headpoints[8].x=0.62*1.0; headpoints[8].y=BLOCKHEIGHT*(2.60);
|
|
||||||
headpoints[9].x=0.55*1.0; headpoints[9].y=BLOCKHEIGHT*(2.80);
|
|
||||||
headpoints[10].x=0.4; headpoints[10].y=BLOCKHEIGHT*(2.95);
|
|
||||||
headpoints[11].x=0.3; headpoints[11].y=BLOCKHEIGHT*3.5-pillarroundness;
|
|
||||||
headpoints[12].x=0.3-pillarroundness; headpoints[12].y=BLOCKHEIGHT*3.5;
|
|
||||||
headpoints[13].x=0; headpoints[13].y=BLOCKHEIGHT*3.5;
|
|
||||||
headpoints[11].x=0; headpoints[11].y=BLOCKHEIGHT*3.0;
|
|
||||||
|
|
||||||
glColor4f(0.8,0.8,0.0,1.0);
|
headpoints[0].x=0.0; headpoints[0].y=BLOCKHEIGHT*(0);
|
||||||
|
headpoints[1].x=0.4; headpoints[1].y=BLOCKHEIGHT*(0);
|
||||||
|
headpoints[2].x=0.45; headpoints[2].y=BLOCKHEIGHT*(0.35);
|
||||||
|
headpoints[3].x=0.55; headpoints[3].y=BLOCKHEIGHT*(0.5);
|
||||||
|
headpoints[4].x=0.62*1.0; headpoints[4].y=BLOCKHEIGHT*(0.65);
|
||||||
|
headpoints[5].x=0.65*1.0; headpoints[5].y=BLOCKHEIGHT*(1);
|
||||||
|
headpoints[6].x=0.65*1.0; headpoints[6].y=BLOCKHEIGHT*(1.75);
|
||||||
|
headpoints[7].x=0.65*1.0; headpoints[7].y=BLOCKHEIGHT*(2.35);
|
||||||
|
headpoints[8].x=0.62*1.0; headpoints[8].y=BLOCKHEIGHT*(2.60);
|
||||||
|
headpoints[9].x=0.55*1.0; headpoints[9].y=BLOCKHEIGHT*(2.80);
|
||||||
|
headpoints[10].x=0.4; headpoints[10].y=BLOCKHEIGHT*(2.95);
|
||||||
|
headpoints[11].x=0.3; headpoints[11].y=BLOCKHEIGHT*3.5-pillarroundness;
|
||||||
|
headpoints[12].x=0.3-pillarroundness; headpoints[12].y=BLOCKHEIGHT*3.5;
|
||||||
|
headpoints[13].x=0; headpoints[13].y=BLOCKHEIGHT*3.5;
|
||||||
|
headpoints[11].x=0; headpoints[11].y=BLOCKHEIGHT*3.0;
|
||||||
|
|
||||||
|
glColor4f(0.8,0.8,0.0,1.0);
|
||||||
faceTexture->enable();
|
|
||||||
glBlendFunc(GL_ONE, GL_SRC_ALPHA);
|
|
||||||
createLathedSurface(headpoints,NULL,12,16,24);
|
|
||||||
faceTexture->disable();
|
|
||||||
|
|
||||||
glTranslatef(0, BLOCKHEIGHT*3-0.05, 0);
|
|
||||||
|
|
||||||
createKnob(16);
|
faceTexture->enable();
|
||||||
|
glBlendFunc(GL_ONE, GL_SRC_ALPHA);
|
||||||
|
createLathedSurface(headpoints,NULL,12,16,24);
|
||||||
|
faceTexture->disable();
|
||||||
|
|
||||||
glPopMatrix();
|
glTranslatef(0, BLOCKHEIGHT*3-0.05, 0);
|
||||||
|
|
||||||
glEndList();
|
createKnob(16);
|
||||||
|
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glEndList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HeadAppearance::draw(void){
|
void HeadAppearance::draw(void){
|
||||||
glCallList(gllist);
|
glCallList(gllist);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -316,106 +244,106 @@ void HeadAppearance::draw(void){
|
||||||
|
|
||||||
|
|
||||||
FlowerAppearance::FlowerAppearance(int color1, int color2, int color3){
|
FlowerAppearance::FlowerAppearance(int color1, int color2, int color3){
|
||||||
gllist = glGenLists(1);
|
gllist = glGenLists(1);
|
||||||
this->color1 = color1;
|
this->color1 = color1;
|
||||||
this->color2 = color2;
|
this->color2 = color2;
|
||||||
this->color3 = color3;
|
this->color3 = color3;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlowerAppearance::prepare(void){
|
void FlowerAppearance::prepare(void){
|
||||||
glNewList(gllist, GL_COMPILE);
|
glNewList(gllist, GL_COMPILE);
|
||||||
|
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
|
||||||
|
|
||||||
int colors[]={color1,color2,color3};
|
int colors[]={color1,color2,color3};
|
||||||
|
|
||||||
glColor3f(0.0,0.6,0.0);
|
glColor3f(0.0,0.6,0.0);
|
||||||
|
|
||||||
point2d basepoints[8];
|
point2d basepoints[8];
|
||||||
basepoints[0].x=0.4; basepoints[0].y=0;
|
basepoints[0].x=0.4; basepoints[0].y=0;
|
||||||
basepoints[1].x=0.4; basepoints[1].y=BLOCKHEIGHT*1.5-pillarroundness;
|
basepoints[1].x=0.4; basepoints[1].y=BLOCKHEIGHT*1.5-pillarroundness;
|
||||||
basepoints[2].x=0.4-pillarroundness; basepoints[2].y=BLOCKHEIGHT*1.5;
|
basepoints[2].x=0.4-pillarroundness; basepoints[2].y=BLOCKHEIGHT*1.5;
|
||||||
basepoints[3].x=0.3+pillarroundness; basepoints[3].y=BLOCKHEIGHT*1.5;
|
basepoints[3].x=0.3+pillarroundness; basepoints[3].y=BLOCKHEIGHT*1.5;
|
||||||
basepoints[4].x=0.3; basepoints[4].y=BLOCKHEIGHT*1.5+pillarroundness;
|
basepoints[4].x=0.3; basepoints[4].y=BLOCKHEIGHT*1.5+pillarroundness;
|
||||||
basepoints[5].x=0.3; basepoints[5].y=BLOCKHEIGHT*2.0-pillarroundness;
|
basepoints[5].x=0.3; basepoints[5].y=BLOCKHEIGHT*2.0-pillarroundness;
|
||||||
basepoints[6].x=0.3-pillarroundness; basepoints[6].y=BLOCKHEIGHT*2.0;
|
basepoints[6].x=0.3-pillarroundness; basepoints[6].y=BLOCKHEIGHT*2.0;
|
||||||
basepoints[7].x=0; basepoints[7].y=BLOCKHEIGHT*2.0;
|
basepoints[7].x=0; basepoints[7].y=BLOCKHEIGHT*2.0;
|
||||||
|
|
||||||
point2d basederivates[8];
|
point2d basederivates[8];
|
||||||
basederivates[0].x=0; basederivates[0].y=basepoints[1].y-basepoints[0].y;
|
basederivates[0].x=0; basederivates[0].y=basepoints[1].y-basepoints[0].y;
|
||||||
basederivates[1].x=0; basederivates[1].y=basepoints[2].y-basepoints[1].y;
|
basederivates[1].x=0; basederivates[1].y=basepoints[2].y-basepoints[1].y;
|
||||||
basederivates[2].x=basepoints[2].x-basepoints[1].x; basederivates[2].y=0;
|
basederivates[2].x=basepoints[2].x-basepoints[1].x; basederivates[2].y=0;
|
||||||
basederivates[3].x=basepoints[4].x-basepoints[3].x; basederivates[3].y=0;
|
basederivates[3].x=basepoints[4].x-basepoints[3].x; basederivates[3].y=0;
|
||||||
basederivates[4].x=0; basederivates[4].y=basepoints[4].y-basepoints[3].y;
|
basederivates[4].x=0; basederivates[4].y=basepoints[4].y-basepoints[3].y;
|
||||||
basederivates[5].x=0; basederivates[5].y=basepoints[6].y-basepoints[5].y;
|
basederivates[5].x=0; basederivates[5].y=basepoints[6].y-basepoints[5].y;
|
||||||
basederivates[6].x=basepoints[6].x-basepoints[5].x; basederivates[6].y=0;
|
basederivates[6].x=basepoints[6].x-basepoints[5].x; basederivates[6].y=0;
|
||||||
basederivates[7].x=basepoints[7].x-basepoints[6].x; basederivates[7].y=0;
|
basederivates[7].x=basepoints[7].x-basepoints[6].x; basederivates[7].y=0;
|
||||||
|
|
||||||
createLathedSurface(basepoints,basederivates,8,8,8);
|
createLathedSurface(basepoints,basederivates,8,8,8);
|
||||||
|
|
||||||
int i,j;
|
int i,j;
|
||||||
for (i=0;i<3;i++){
|
for (i=0;i<3;i++){
|
||||||
glColor3f(0.0,0.6,0.0);
|
glColor3f(0.0,0.6,0.0);
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(0,BLOCKHEIGHT,0.4);
|
glTranslatef(0,BLOCKHEIGHT,0.4);
|
||||||
glRotatef(20-90,1,0,0);
|
glRotatef(20-90,1,0,0);
|
||||||
gluCylinder(gluNewQuadric(),0.1,0.1,BLOCKHEIGHT*(3+i*0.7),4,1);
|
gluCylinder(gluNewQuadric(),0.1,0.1,BLOCKHEIGHT*(3+i*0.7),4,1);
|
||||||
glRotatef(90,1,0,0);
|
glRotatef(90,1,0,0);
|
||||||
glTranslatef(0,BLOCKHEIGHT*(3+i*0.7),0);
|
glTranslatef(0,BLOCKHEIGHT*(3+i*0.7),0);
|
||||||
|
|
||||||
float r,g,b;
|
float r,g,b;
|
||||||
switch(colors[i]){
|
switch(colors[i]){
|
||||||
case FLOWER_RED:
|
case FLOWER_RED:
|
||||||
r=1.0; g=0.0; b=0.0;
|
r=1.0; g=0.0; b=0.0;
|
||||||
break;
|
break;
|
||||||
case FLOWER_YELLOW:
|
case FLOWER_YELLOW:
|
||||||
r=1.0; g=1.0; b=0.0;
|
r=1.0; g=1.0; b=0.0;
|
||||||
break;
|
break;
|
||||||
case FLOWER_WHITE:
|
case FLOWER_WHITE:
|
||||||
r=1.0; g=1.0; b=1.0;
|
r=1.0; g=1.0; b=1.0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
glDisable(GL_CULL_FACE);
|
glDisable(GL_CULL_FACE);
|
||||||
glColor3f(r,g,b);
|
glColor3f(r,g,b);
|
||||||
createKnob();
|
createKnob();
|
||||||
|
|
||||||
/* Terälehdet tehdään triangle-fanilla */
|
/* Terälehdet tehdään triangle-fanilla */
|
||||||
glBegin(GL_TRIANGLE_FAN);
|
glBegin(GL_TRIANGLE_FAN);
|
||||||
glNormal3f(0.0,1.0,0.0);
|
glNormal3f(0.0,1.0,0.0);
|
||||||
glVertex3f(0.0,0.0,0.0);
|
glVertex3f(0.0,0.0,0.0);
|
||||||
float x,z;
|
float x,z;
|
||||||
for (j=0;j<24;j+=4){
|
for (j=0;j<24;j+=4){
|
||||||
x=sin((j+0)*2*PI/24)*0.4;
|
x=sin((j+0)*2*PI/24)*0.4;
|
||||||
z=cos((j+0)*2*PI/24)*0.4;
|
z=cos((j+0)*2*PI/24)*0.4;
|
||||||
glVertex3f(x,0.0,z);
|
glVertex3f(x,0.0,z);
|
||||||
x=sin((j+1)*2*PI/24)*0.55;
|
x=sin((j+1)*2*PI/24)*0.55;
|
||||||
z=cos((j+1)*2*PI/24)*0.55;
|
z=cos((j+1)*2*PI/24)*0.55;
|
||||||
glVertex3f(x,0.0,z);
|
glVertex3f(x,0.0,z);
|
||||||
x=sin((j+2)*2*PI/24)*0.6;
|
x=sin((j+2)*2*PI/24)*0.6;
|
||||||
z=cos((j+2)*2*PI/24)*0.6;
|
z=cos((j+2)*2*PI/24)*0.6;
|
||||||
glVertex3f(x,0.0,z);
|
glVertex3f(x,0.0,z);
|
||||||
x=sin((j+3)*2*PI/24)*0.55;
|
x=sin((j+3)*2*PI/24)*0.55;
|
||||||
z=cos((j+3)*2*PI/24)*0.55;
|
z=cos((j+3)*2*PI/24)*0.55;
|
||||||
glVertex3f(x,0.0,z);
|
glVertex3f(x,0.0,z);
|
||||||
}
|
}
|
||||||
glVertex3f(0,0.0,0.4);
|
glVertex3f(0,0.0,0.4);
|
||||||
glEnd();
|
glEnd();
|
||||||
glEnable(GL_CULL_FACE);
|
glEnable(GL_CULL_FACE);
|
||||||
|
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
glRotatef(120,0,1,0);
|
glRotatef(120,0,1,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
glEndList();
|
glEndList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlowerAppearance::draw(void){
|
void FlowerAppearance::draw(void){
|
||||||
glCallList(gllist);
|
glCallList(gllist);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -423,100 +351,100 @@ void FlowerAppearance::draw(void){
|
||||||
|
|
||||||
|
|
||||||
LampAppearance::LampAppearance(void){
|
LampAppearance::LampAppearance(void){
|
||||||
gllist = glGenLists(1);
|
gllist = glGenLists(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LampAppearance::prepare(void){
|
void LampAppearance::prepare(void){
|
||||||
glNewList(gllist, GL_COMPILE);
|
glNewList(gllist, GL_COMPILE);
|
||||||
|
|
||||||
glPushMatrix();
|
|
||||||
|
|
||||||
//glTranslatef(0, -1, 0);
|
glPushMatrix();
|
||||||
|
|
||||||
//glRotatef(180, 1, 0, 0);
|
//glTranslatef(0, -1, 0);
|
||||||
|
|
||||||
|
//glRotatef(180, 1, 0, 0);
|
||||||
|
|
||||||
glDisable(GL_LIGHTING);
|
glDisable(GL_LIGHTING);
|
||||||
|
|
||||||
point2d lightpoints[11];
|
point2d lightpoints[11];
|
||||||
lightpoints[0].x=0.4; lightpoints[0].y=BLOCKHEIGHT*(0);
|
lightpoints[0].x=0.4; lightpoints[0].y=BLOCKHEIGHT*(0);
|
||||||
lightpoints[1].x=0.55; lightpoints[1].y=BLOCKHEIGHT*(0);
|
lightpoints[1].x=0.55; lightpoints[1].y=BLOCKHEIGHT*(0);
|
||||||
lightpoints[2].x=0.62; lightpoints[2].y=BLOCKHEIGHT*(0+0.15);
|
lightpoints[2].x=0.62; lightpoints[2].y=BLOCKHEIGHT*(0+0.15);
|
||||||
lightpoints[3].x=0.65; lightpoints[3].y=BLOCKHEIGHT*(0+0.5);
|
lightpoints[3].x=0.65; lightpoints[3].y=BLOCKHEIGHT*(0+0.5);
|
||||||
lightpoints[4].x=0.68; lightpoints[4].y=BLOCKHEIGHT*(0+1.25);
|
lightpoints[4].x=0.68; lightpoints[4].y=BLOCKHEIGHT*(0+1.25);
|
||||||
lightpoints[5].x=0.65; lightpoints[5].y=BLOCKHEIGHT*(0+2);
|
lightpoints[5].x=0.65; lightpoints[5].y=BLOCKHEIGHT*(0+2);
|
||||||
lightpoints[6].x=0.62; lightpoints[6].y=BLOCKHEIGHT*(0+2.35);
|
lightpoints[6].x=0.62; lightpoints[6].y=BLOCKHEIGHT*(0+2.35);
|
||||||
lightpoints[7].x=0.55; lightpoints[7].y=BLOCKHEIGHT*(0+2.5);
|
lightpoints[7].x=0.55; lightpoints[7].y=BLOCKHEIGHT*(0+2.5);
|
||||||
lightpoints[8].x=0.4; lightpoints[8].y=BLOCKHEIGHT*(0+2.5);
|
lightpoints[8].x=0.4; lightpoints[8].y=BLOCKHEIGHT*(0+2.5);
|
||||||
lightpoints[9].x=0.4; lightpoints[9].y=BLOCKHEIGHT*(0+3);
|
lightpoints[9].x=0.4; lightpoints[9].y=BLOCKHEIGHT*(0+3);
|
||||||
lightpoints[10].x=0.0; lightpoints[10].y=BLOCKHEIGHT*(0+3);
|
lightpoints[10].x=0.0; lightpoints[10].y=BLOCKHEIGHT*(0+3);
|
||||||
glColor4f(0.8,0.8,0.8,0.5);
|
glColor4f(0.8,0.8,0.8,0.5);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
createLathedSurface(lightpoints,NULL,11,8,11);
|
createLathedSurface(lightpoints,NULL,11,8,11);
|
||||||
|
|
||||||
glEnable(GL_LIGHTING);
|
glEnable(GL_LIGHTING);
|
||||||
|
|
||||||
/*glColor3f(0.5, 0.5, 0.5);
|
/*glColor3f(0.5, 0.5, 0.5);
|
||||||
|
|
||||||
glBegin(GL_LINES);
|
glBegin(GL_LINES);
|
||||||
glVertex3f(0, 1, 0);
|
glVertex3f(0, 1, 0);
|
||||||
glVertex3f(0, -100, 0);
|
glVertex3f(0, -100, 0);
|
||||||
glEnd();*/
|
glEnd();*/
|
||||||
|
|
||||||
|
|
||||||
/*float screencoords[3]
|
/*float screencoords[3]
|
||||||
getPointCoordinates(0,lighty,0);
|
getPointCoordinates(0,lighty,0);
|
||||||
|
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
glTranslatef(screencoords.x,screencoords.y,0);
|
glTranslatef(screencoords.x,screencoords.y,0);
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
glEnable(GL_CULL_FACE);
|
glEnable(GL_CULL_FACE);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
|
|
||||||
glBlendFunc(GL_ONE,GL_ONE);
|
glBlendFunc(GL_ONE,GL_ONE);
|
||||||
glEnable(GL_TEXTURE_2D);
|
glEnable(GL_TEXTURE_2D);
|
||||||
glBindTexture(GL_TEXTURE_2D,*flaretexture);
|
glBindTexture(GL_TEXTURE_2D,*flaretexture);
|
||||||
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
float sizey=8.0/distance*staticlightflarebrightnesses[lightnumber];
|
float sizey=8.0/distance*staticlightflarebrightnesses[lightnumber];
|
||||||
float sizex=sizey*height/width;
|
float sizex=sizey*height/width;
|
||||||
|
|
||||||
if (distance>0.5){
|
if (distance>0.5){
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
glColor3f(staticlightflarebrightnesses[lightnumber],staticlightflarebrightnesses[lightnumber],staticlightflarebrightnesses[lightnumber]);
|
glColor3f(staticlightflarebrightnesses[lightnumber],staticlightflarebrightnesses[lightnumber],staticlightflarebrightnesses[lightnumber]);
|
||||||
|
|
||||||
glTexCoord2f(0.0, 0.0);
|
glTexCoord2f(0.0, 0.0);
|
||||||
glVertex2f(-sizex,sizey);
|
glVertex2f(-sizex,sizey);
|
||||||
|
|
||||||
glTexCoord2f(0.0, 1.0);
|
glTexCoord2f(0.0, 1.0);
|
||||||
glVertex2f(-sizex,-sizey);
|
glVertex2f(-sizex,-sizey);
|
||||||
|
|
||||||
glTexCoord2f(1.0, 1.0);
|
|
||||||
glVertex2f( sizex,-sizey);
|
|
||||||
|
|
||||||
glTexCoord2f(1.0, 0.0);
|
|
||||||
glVertex2f( sizex,sizey);
|
|
||||||
glEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
glDisable(GL_TEXTURE_2D);
|
glTexCoord2f(1.0, 1.0);
|
||||||
|
glVertex2f( sizex,-sizey);
|
||||||
|
|
||||||
glDisable(GL_BLEND);
|
glTexCoord2f(1.0, 0.0);
|
||||||
|
glVertex2f( sizex,sizey);
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
|
||||||
glPopMatrix();
|
glDisable(GL_TEXTURE_2D);
|
||||||
glMatrixMode(GL_MODELVIEW);
|
|
||||||
glLoadIdentity();*/
|
glDisable(GL_BLEND);
|
||||||
|
|
||||||
|
glPopMatrix();
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity();*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
glEndList();
|
glEndList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LampAppearance::draw(void){
|
void LampAppearance::draw(void){
|
||||||
glCallList(gllist);
|
glCallList(gllist);
|
||||||
}
|
}
|
||||||
|
|
102
src/legoblocks.h
102
src/legoblocks.h
|
@ -1,57 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: legoblocks.h,v 1.14 2002/07/19 20:33:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: legoblocks.h,v $
|
|
||||||
* Revision 1.14 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.13 2002/07/18 23:05:31 msell
|
|
||||||
* Partikkelit ja kakkospelaajan liike
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/07/17 20:32:47 msell
|
|
||||||
* Detail-optio toimii
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/07/16 17:16:34 msell
|
|
||||||
* Fontit ja valikot
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/07/16 00:42:43 msell
|
|
||||||
* Uusia skyboxeja ja areenan säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/07/15 20:32:35 msell
|
|
||||||
* Uudet valot ja ulkoasun parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/15 15:22:08 msell
|
|
||||||
* Parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/24 14:12:15 msell
|
|
||||||
* Nyt toimii sphere -> mesh -törmäykset, ihan tosi
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/20 00:21:01 jkaarlas
|
|
||||||
* materiaali- ja tekstuurihommia edistetty
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/17 20:49:04 msell
|
|
||||||
* free -> SDL_FreeSurface
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/05 18:39:05 msell
|
|
||||||
* Jotain pientä
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/05 15:00:41 msell
|
|
||||||
* Palikoihin lisää detailia, facet jaetaan halutun kokosiin osiin
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/03 23:06:38 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __LEGOBLOCKS_H_INCLUDED__
|
#ifndef __LEGOBLOCKS_H_INCLUDED__
|
||||||
#define __LEGOBLOCKS_H_INCLUDED__
|
#define __LEGOBLOCKS_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -64,30 +10,30 @@
|
||||||
|
|
||||||
class BasicBlock : public MeshObject{
|
class BasicBlock : public MeshObject{
|
||||||
private:
|
private:
|
||||||
int width, height, depth;
|
int width, height, depth;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BasicBlock(int width, int height, int depth);
|
BasicBlock(int width, int height, int depth);
|
||||||
|
|
||||||
void setColor(float red, float green, float blue);
|
void setColor(float red, float green, float blue);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class BasicBlockAppearance : public Appearance{
|
class BasicBlockAppearance : public Appearance{
|
||||||
private:
|
private:
|
||||||
int width, height, depth;
|
int width, height, depth;
|
||||||
int gllist;
|
int gllist;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool usematerial;
|
bool usematerial;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
float displacement[3];
|
float displacement[3];
|
||||||
|
|
||||||
BasicBlockAppearance(int width, int height, int depth);
|
BasicBlockAppearance(int width, int height, int depth);
|
||||||
|
|
||||||
virtual void prepare(void);
|
virtual void prepare(void);
|
||||||
virtual void draw(void);
|
virtual void draw(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
void drawDetailRectangle(float width, float height);
|
void drawDetailRectangle(float width, float height);
|
||||||
|
@ -101,13 +47,13 @@ void createKnob(int knobsegments = -1);
|
||||||
|
|
||||||
class HeadAppearance : public Appearance{
|
class HeadAppearance : public Appearance{
|
||||||
private:
|
private:
|
||||||
int gllist;
|
int gllist;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HeadAppearance(void);
|
HeadAppearance(void);
|
||||||
|
|
||||||
void prepare(void);
|
void prepare(void);
|
||||||
void draw(void);
|
void draw(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -118,27 +64,27 @@ public:
|
||||||
|
|
||||||
class FlowerAppearance : public Appearance{
|
class FlowerAppearance : public Appearance{
|
||||||
private:
|
private:
|
||||||
int gllist;
|
int gllist;
|
||||||
int color1, color2, color3;
|
int color1, color2, color3;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FlowerAppearance(int color1, int color2, int color3);
|
FlowerAppearance(int color1, int color2, int color3);
|
||||||
|
|
||||||
void prepare(void);
|
void prepare(void);
|
||||||
void draw(void);
|
void draw(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class LampAppearance : public Appearance{
|
class LampAppearance : public Appearance{
|
||||||
private:
|
private:
|
||||||
int gllist;
|
int gllist;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
LampAppearance(void);
|
LampAppearance(void);
|
||||||
|
|
||||||
void prepare(void);
|
void prepare(void);
|
||||||
void draw(void);
|
void draw(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
1579
src/legoman.cpp
1579
src/legoman.cpp
File diff suppressed because it is too large
Load diff
250
src/legoman.h
250
src/legoman.h
|
@ -1,77 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: legoman.h,v 1.21 2002/07/22 12:07:36 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: legoman.h,v $
|
|
||||||
* Revision 1.21 2002/07/22 12:07:36 msell
|
|
||||||
* Pää kiinni
|
|
||||||
*
|
|
||||||
* Revision 1.20 2002/07/22 06:08:18 msell
|
|
||||||
* Filenimet pienellä
|
|
||||||
*
|
|
||||||
* Revision 1.19 2002/07/22 01:14:14 msell
|
|
||||||
* Lopetussysteemi
|
|
||||||
*
|
|
||||||
* Revision 1.18 2002/07/21 22:50:39 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.17 2002/07/21 20:14:28 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.16 2002/07/21 15:16:41 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.15 2002/07/21 15:03:12 msell
|
|
||||||
* Äänet disabloitu
|
|
||||||
*
|
|
||||||
* Revision 1.14 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.13 2002/07/19 18:59:46 msell
|
|
||||||
* Alkuhommaa ja säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/07/18 23:05:31 msell
|
|
||||||
* Partikkelit ja kakkospelaajan liike
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/07/17 22:45:54 msell
|
|
||||||
* Ääniä vähän
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/07/17 16:40:33 msell
|
|
||||||
* Resoluution vaihto
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/07/16 07:27:32 jkaarlas
|
|
||||||
* nyt latautuu kämmen. paikka ja väri pitää vielä säätää
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/14 21:40:43 msell
|
|
||||||
* Conflictit pois, liikkumiset (hyppy, kävely, lyönti), uusi areena
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/07/14 21:22:39 jkaarlas
|
|
||||||
* skybox ja ukkojen säätö
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/07/11 18:33:58 jkaarlas
|
|
||||||
* mallit paikoillaan, vaatii säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/07/10 17:13:44 msell
|
|
||||||
* Törmäystarkastelun parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/07/08 22:53:38 msell
|
|
||||||
* Säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/07/08 18:28:47 msell
|
|
||||||
* Törmäystä ja ukkoja
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/07/07 23:05:22 msell
|
|
||||||
* Osien liimaaminen toisiinsa (kesken)
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/07/07 17:53:21 msell
|
|
||||||
* Legoukon alku
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/22 12:07:36 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __LEGOMAN_H_INCLUDED__
|
#ifndef __LEGOMAN_H_INCLUDED__
|
||||||
#define __LEGOMAN_H_INCLUDED__
|
#define __LEGOMAN_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -114,135 +40,135 @@ const char RIGHTPALMASC[] = DATAPATH"rightpalm.asc";
|
||||||
|
|
||||||
class BodyPart : public Object{
|
class BodyPart : public Object{
|
||||||
private:
|
private:
|
||||||
float energy;
|
float energy;
|
||||||
float strength;
|
float strength;
|
||||||
Legoman *parent;
|
Legoman *parent;
|
||||||
|
|
||||||
bool attached;
|
bool attached;
|
||||||
|
|
||||||
int immortal;
|
int immortal;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BodyPart(Legoman *parent, float strength);
|
BodyPart(Legoman *parent, float strength);
|
||||||
|
|
||||||
void move(void);
|
void move(void);
|
||||||
|
|
||||||
void hitForce(float speed, float *speed2, Object *source);
|
void hitForce(float speed, float *speed2, Object *source);
|
||||||
|
|
||||||
void makeDamage(float amount);
|
void makeDamage(float amount);
|
||||||
|
|
||||||
void reset(void);
|
void reset(void);
|
||||||
|
|
||||||
friend class DamageVisual;
|
friend class DamageVisual;
|
||||||
friend class Legoman;
|
friend class Legoman;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Sensor{
|
class Sensor{
|
||||||
private:
|
private:
|
||||||
float relativeposition[3];
|
float relativeposition[3];
|
||||||
Object *object;
|
Object *object;
|
||||||
|
|
||||||
float position[3], oldposition[3];
|
float position[3], oldposition[3];
|
||||||
float velocity[3], oldvelocity[3];
|
float velocity[3], oldvelocity[3];
|
||||||
float acceleration[3];
|
float acceleration[3];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Sensor();
|
Sensor();
|
||||||
|
|
||||||
void attach(Object *object, float *relativeposition);
|
void attach(Object *object, float *relativeposition);
|
||||||
void attach(Object *object);
|
void attach(Object *object);
|
||||||
void update(void);
|
void update(void);
|
||||||
|
|
||||||
void getPosition(float *target);
|
void getPosition(float *target);
|
||||||
void getVelocity(float *target);
|
void getVelocity(float *target);
|
||||||
void getAcceleration(float *target);
|
void getAcceleration(float *target);
|
||||||
};
|
};
|
||||||
|
|
||||||
class Legoman{
|
class Legoman{
|
||||||
private:
|
private:
|
||||||
int side;
|
int side;
|
||||||
|
|
||||||
bool alive;
|
bool alive;
|
||||||
|
|
||||||
BodyPart *head;
|
BodyPart *head;
|
||||||
BodyPart *torso;
|
BodyPart *torso;
|
||||||
BodyPart *waist;
|
BodyPart *waist;
|
||||||
BodyPart *lefthand, *righthand;
|
BodyPart *lefthand, *righthand;
|
||||||
BodyPart *leftleg, *rightleg;
|
BodyPart *leftleg, *rightleg;
|
||||||
|
|
||||||
DamageVisual *headvisual;
|
DamageVisual *headvisual;
|
||||||
DamageVisual *torsovisual;
|
DamageVisual *torsovisual;
|
||||||
DamageVisual *lefthandvisual, *righthandvisual;
|
DamageVisual *lefthandvisual, *righthandvisual;
|
||||||
DamageVisual *leftlegvisual, *rightlegvisual;
|
DamageVisual *leftlegvisual, *rightlegvisual;
|
||||||
|
|
||||||
ObjectLink *leftleglink, *rightleglink;
|
ObjectLink *leftleglink, *rightleglink;
|
||||||
ObjectLink *lefthandlink, *righthandlink;
|
ObjectLink *lefthandlink, *righthandlink;
|
||||||
ObjectLink *lll, *rll;
|
ObjectLink *lll, *rll;
|
||||||
|
|
||||||
ObjectLink *leftleglinks[3], *rightleglinks[3];
|
ObjectLink *leftleglinks[3], *rightleglinks[3];
|
||||||
ObjectLink *lefthandlinks[3], *righthandlinks[3];
|
ObjectLink *lefthandlinks[3], *righthandlinks[3];
|
||||||
ObjectLink *headlinks[3];
|
ObjectLink *headlinks[3];
|
||||||
|
|
||||||
objectlist *harmfulobjects;
|
objectlist *harmfulobjects;
|
||||||
|
|
||||||
Legoman *opponent;
|
Legoman *opponent;
|
||||||
|
|
||||||
Sensor *headsensor, *torsosensor;
|
Sensor *headsensor, *torsosensor;
|
||||||
|
|
||||||
int walkphase, walkdelay;
|
int walkphase, walkdelay;
|
||||||
int jumpphase;
|
int jumpphase;
|
||||||
int hitside;
|
int hitside;
|
||||||
|
|
||||||
bool jumpenabled;
|
bool jumpenabled;
|
||||||
int hitcounter;
|
int hitcounter;
|
||||||
|
|
||||||
World *world;
|
World *world;
|
||||||
|
|
||||||
void balance(void);
|
void balance(void);
|
||||||
void updateLegs(void);
|
void updateLegs(void);
|
||||||
bool isStanding(void);
|
bool isStanding(void);
|
||||||
bool isOnGround(void);
|
bool isOnGround(void);
|
||||||
float getInvMass(void);
|
float getInvMass(void);
|
||||||
|
|
||||||
void fallOff(void);
|
void fallOff(void);
|
||||||
void releasePart(BodyPart *part);
|
void releasePart(BodyPart *part);
|
||||||
void die(void);
|
void die(void);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Legoman(int side);
|
Legoman(int side);
|
||||||
|
|
||||||
void insertToWorld(World *world);
|
void insertToWorld(World *world);
|
||||||
void heal(void);
|
void heal(void);
|
||||||
|
|
||||||
void addHarmfulObject(Object *object);
|
void addHarmfulObject(Object *object);
|
||||||
bool isHarmfulObject(Object *object);
|
bool isHarmfulObject(Object *object);
|
||||||
|
|
||||||
void addOpponent(Legoman *opponent);
|
void addOpponent(Legoman *opponent);
|
||||||
|
|
||||||
//Call once per frame
|
//Call once per frame
|
||||||
void update(void);
|
void update(void);
|
||||||
|
|
||||||
//Lock both legs at the same time by calling
|
//Lock both legs at the same time by calling
|
||||||
//lockLeg(LEFTLEG | RIGHTLEG);
|
//lockLeg(LEFTLEG | RIGHTLEG);
|
||||||
void lockPart(int part);
|
void lockPart(int part);
|
||||||
void unlockPart(int part);
|
void unlockPart(int part);
|
||||||
|
|
||||||
//Relative movement
|
//Relative movement
|
||||||
void move(float *movement);
|
void move(float *movement);
|
||||||
|
|
||||||
void turn(float amount);
|
void turn(float amount);
|
||||||
void walk(float amount);
|
void walk(float amount);
|
||||||
|
|
||||||
void jump(void);
|
void jump(void);
|
||||||
void hit(void);
|
void hit(void);
|
||||||
|
|
||||||
bool isAlive(void);
|
bool isAlive(void);
|
||||||
Legoman *getOpponent(void);
|
Legoman *getOpponent(void);
|
||||||
|
|
||||||
void drawVisuals();
|
void drawVisuals();
|
||||||
|
|
||||||
friend class BodyPart;
|
friend class BodyPart;
|
||||||
friend void drawEnd(int framecount);
|
friend void drawEnd(int framecount);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -255,16 +181,16 @@ extern Texture *damageLeg;
|
||||||
|
|
||||||
class DamageVisual{
|
class DamageVisual{
|
||||||
private:
|
private:
|
||||||
BodyPart *object;
|
BodyPart *object;
|
||||||
float x1, y1, x2, y2;
|
float x1, y1, x2, y2;
|
||||||
float tx1, ty1, tx2, ty2;
|
float tx1, ty1, tx2, ty2;
|
||||||
Texture *texture;
|
Texture *texture;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DamageVisual(BodyPart *object, Texture *texture, bool mirror,
|
DamageVisual(BodyPart *object, Texture *texture, bool mirror,
|
||||||
float x1, float y1, float x2, float y2);
|
float x1, float y1, float x2, float y2);
|
||||||
|
|
||||||
void draw(void);
|
void draw(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
276
src/light.cpp
276
src/light.cpp
|
@ -1,29 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: light.cpp,v 1.5 2002/07/15 20:32:35 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: light.cpp,v $
|
|
||||||
* Revision 1.5 2002/07/15 20:32:35 msell
|
|
||||||
* Uudet valot ja ulkoasun parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/17 20:49:05 msell
|
|
||||||
* free -> SDL_FreeSurface
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/16 01:04:58 jkaarlas
|
|
||||||
* tulipa säädettyä includejen kanssa. oon tod.näk. eri mieltä aamulla
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/03 23:20:43 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/18 12:29:35 msell
|
|
||||||
* Valot ja äänijärjestelmän parantelua
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/15 20:32:35 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include "light.h"
|
#include "light.h"
|
||||||
|
@ -36,183 +10,183 @@ static int glnextlightnum = 0;
|
||||||
static Light *lights[GL_MAX_LIGHTS];
|
static Light *lights[GL_MAX_LIGHTS];
|
||||||
|
|
||||||
Light::Light(void){
|
Light::Light(void){
|
||||||
setPosition(0, 0, 0);
|
setPosition(0, 0, 0);
|
||||||
setColor(1, 1, 1);
|
setColor(1, 1, 1);
|
||||||
setSpecular(0, 0, 0);
|
setSpecular(0, 0, 0);
|
||||||
setAttenuation(1, 0, 0);
|
setAttenuation(1, 0, 0);
|
||||||
setEnabled(false);
|
setEnabled(false);
|
||||||
glnum = GL_LIGHT0 + glnextlightnum;
|
glnum = GL_LIGHT0 + glnextlightnum;
|
||||||
lights[glnextlightnum] = this;
|
lights[glnextlightnum] = this;
|
||||||
glnextlightnum++;
|
glnextlightnum++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Light::setPosition(float x, float y, float z){
|
void Light::setPosition(float x, float y, float z){
|
||||||
position[0] = x;
|
position[0] = x;
|
||||||
position[1] = y;
|
position[1] = y;
|
||||||
position[2] = z;
|
position[2] = z;
|
||||||
position[3] = 1;
|
position[3] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Light::setDirection(float x, float y, float z){
|
void Light::setDirection(float x, float y, float z){
|
||||||
position[0] = -x;
|
position[0] = -x;
|
||||||
position[1] = -y;
|
position[1] = -y;
|
||||||
position[2] = -z;
|
position[2] = -z;
|
||||||
position[3] = 0;
|
position[3] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Light::setColor(float red, float green, float blue){
|
void Light::setColor(float red, float green, float blue){
|
||||||
diffuse[0] = red;
|
diffuse[0] = red;
|
||||||
diffuse[1] = green;
|
diffuse[1] = green;
|
||||||
diffuse[2] = blue;
|
diffuse[2] = blue;
|
||||||
diffuse[3] = 1;
|
diffuse[3] = 1;
|
||||||
glLightfv(glnum, GL_DIFFUSE, diffuse);
|
glLightfv(glnum, GL_DIFFUSE, diffuse);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Light::setSpecular(float red, float green, float blue){
|
void Light::setSpecular(float red, float green, float blue){
|
||||||
specular[0] = red;
|
specular[0] = red;
|
||||||
specular[1] = green;
|
specular[1] = green;
|
||||||
specular[2] = blue;
|
specular[2] = blue;
|
||||||
specular[3] = 1;
|
specular[3] = 1;
|
||||||
glLightfv(glnum, GL_SPECULAR, specular);
|
glLightfv(glnum, GL_SPECULAR, specular);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Light::setAttenuation(float constant, float linear, float quadratic){
|
void Light::setAttenuation(float constant, float linear, float quadratic){
|
||||||
attenuation[0] = constant;
|
attenuation[0] = constant;
|
||||||
attenuation[1] = linear;
|
attenuation[1] = linear;
|
||||||
attenuation[2] = quadratic;
|
attenuation[2] = quadratic;
|
||||||
glLightf(glnum, GL_CONSTANT_ATTENUATION, attenuation[0]);
|
glLightf(glnum, GL_CONSTANT_ATTENUATION, attenuation[0]);
|
||||||
glLightf(glnum, GL_LINEAR_ATTENUATION, attenuation[1]);
|
glLightf(glnum, GL_LINEAR_ATTENUATION, attenuation[1]);
|
||||||
glLightf(glnum, GL_QUADRATIC_ATTENUATION, attenuation[2]);
|
glLightf(glnum, GL_QUADRATIC_ATTENUATION, attenuation[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Light::setEnabled(bool enabled){
|
void Light::setEnabled(bool enabled){
|
||||||
this->enabled = enabled;
|
this->enabled = enabled;
|
||||||
if (enabled) glEnable(glnum);
|
if (enabled) glEnable(glnum);
|
||||||
else glDisable(glnum);
|
else glDisable(glnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Light::glUpdate(void){
|
void Light::glUpdate(void){
|
||||||
glLightfv(glnum, GL_POSITION, position);
|
glLightfv(glnum, GL_POSITION, position);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern Camera camera;
|
extern Camera camera;
|
||||||
|
|
||||||
|
|
||||||
void Light::createFlare(void){
|
void Light::createFlare(void){
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
|
||||||
GLint viewport[4];
|
GLint viewport[4];
|
||||||
glGetIntegerv(GL_VIEWPORT, viewport);
|
glGetIntegerv(GL_VIEWPORT, viewport);
|
||||||
|
|
||||||
int width = viewport[2];
|
int width = viewport[2];
|
||||||
int height = viewport[3];
|
int height = viewport[3];
|
||||||
|
|
||||||
glTranslatef(position[0], position[1], position[2]);
|
|
||||||
|
|
||||||
GLboolean lightingenabled = glIsEnabled(GL_LIGHTING);
|
glTranslatef(position[0], position[1], position[2]);
|
||||||
|
|
||||||
|
GLboolean lightingenabled = glIsEnabled(GL_LIGHTING);
|
||||||
glDisable(GL_LIGHTING);
|
glDisable(GL_LIGHTING);
|
||||||
|
|
||||||
/*float cx=cameratarget.x-cameraposition.x;
|
/*float cx=cameratarget.x-cameraposition.x;
|
||||||
float cy=cameratarget.y-cameraposition.y;
|
float cy=cameratarget.y-cameraposition.y;
|
||||||
float cz=cameratarget.z-cameraposition.z;
|
float cz=cameratarget.z-cameraposition.z;
|
||||||
float len=sqrt(cx*cx+cy*cy+cz*cz);
|
float len=sqrt(cx*cx+cy*cy+cz*cz);
|
||||||
cx/=len;
|
cx/=len;
|
||||||
cy/=len;
|
cy/=len;
|
||||||
cz/=len;*/
|
cz/=len;*/
|
||||||
float dir[3];
|
float dir[3];
|
||||||
float cameratarget[3], cameraposition[3];
|
float cameratarget[3], cameraposition[3];
|
||||||
camera.getTarget(cameratarget);
|
camera.getTarget(cameratarget);
|
||||||
camera.getPosition(cameraposition);
|
camera.getPosition(cameraposition);
|
||||||
vectorSub(dir, cameratarget, cameraposition);
|
vectorSub(dir, cameratarget, cameraposition);
|
||||||
vectorNormalize(dir);
|
vectorNormalize(dir);
|
||||||
|
|
||||||
float dir2[3];
|
float dir2[3];
|
||||||
vectorSub(dir2, position, cameraposition);
|
vectorSub(dir2, position, cameraposition);
|
||||||
float distance = vectorDot(dir2, dir);
|
float distance = vectorDot(dir2, dir);
|
||||||
|
|
||||||
/*float xd=(staticlightpositions[lightnumber].x-cameraposition.x)*cx;
|
/*float xd=(staticlightpositions[lightnumber].x-cameraposition.x)*cx;
|
||||||
float yd=(staticlightpositions[lightnumber].y-cameraposition.y)*cy;
|
float yd=(staticlightpositions[lightnumber].y-cameraposition.y)*cy;
|
||||||
float zd=(staticlightpositions[lightnumber].z-cameraposition.z)*cz;
|
float zd=(staticlightpositions[lightnumber].z-cameraposition.z)*cz;
|
||||||
float distance=xd+yd+zd;*/
|
float distance=xd+yd+zd;*/
|
||||||
|
|
||||||
|
|
||||||
float screencoords[3];
|
float screencoords[3];
|
||||||
/*GLint viewport[4];
|
/*GLint viewport[4];
|
||||||
glGetIntegerv(GL_VIEWPORT, viewport);
|
glGetIntegerv(GL_VIEWPORT, viewport);
|
||||||
|
|
||||||
int width=viewport[2];
|
int width=viewport[2];
|
||||||
int height=viewport[3];*/
|
int height=viewport[3];*/
|
||||||
|
|
||||||
GLdouble modelviewm[16], projectionm[16];
|
GLdouble modelviewm[16], projectionm[16];
|
||||||
glGetDoublev(GL_MODELVIEW_MATRIX, modelviewm);
|
glGetDoublev(GL_MODELVIEW_MATRIX, modelviewm);
|
||||||
glGetDoublev(GL_PROJECTION_MATRIX, projectionm);
|
glGetDoublev(GL_PROJECTION_MATRIX, projectionm);
|
||||||
|
|
||||||
GLdouble wx,wy,wz;
|
GLdouble wx,wy,wz;
|
||||||
if (gluProject(0, 0, 0, modelviewm, projectionm, viewport, &wx, &wy, &wz) == GL_FALSE){
|
if (gluProject(0, 0, 0, modelviewm, projectionm, viewport, &wx, &wy, &wz) == GL_FALSE){
|
||||||
printf("Failure\n");
|
printf("Failure\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
screencoords[0] = (float)(2*wx-width)/width;
|
screencoords[0] = (float)(2*wx-width)/width;
|
||||||
screencoords[1] = (float)(2*wy-height)/height;
|
screencoords[1] = (float)(2*wy-height)/height;
|
||||||
screencoords[2] = wz;
|
screencoords[2] = wz;
|
||||||
|
|
||||||
|
|
||||||
//getPointCoordinates(screencoords);
|
//getPointCoordinates(screencoords);
|
||||||
//point3d screencoords = getPointCoordinates(0, 0, 0);
|
//point3d screencoords = getPointCoordinates(0, 0, 0);
|
||||||
|
|
||||||
glLoadIdentity();
|
|
||||||
glTranslatef(screencoords[0], screencoords[1], 0);
|
|
||||||
glDisable(GL_DEPTH_TEST);
|
|
||||||
glEnable(GL_CULL_FACE);
|
|
||||||
glEnable(GL_BLEND);
|
|
||||||
|
|
||||||
glBlendFunc(GL_ONE,GL_ONE);
|
glLoadIdentity();
|
||||||
//glEnable(GL_TEXTURE_2D);
|
glTranslatef(screencoords[0], screencoords[1], 0);
|
||||||
//glBindTexture(GL_TEXTURE_2D, flaretexture->getId());
|
glDisable(GL_DEPTH_TEST);
|
||||||
|
glEnable(GL_CULL_FACE);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
glBlendFunc(GL_ONE,GL_ONE);
|
||||||
glPushMatrix();
|
//glEnable(GL_TEXTURE_2D);
|
||||||
glLoadIdentity();
|
//glBindTexture(GL_TEXTURE_2D, flaretexture->getId());
|
||||||
float sizey = 6.0/distance * 1.0;//staticlightflarebrightnesses[lightnumber];
|
|
||||||
float sizex = sizey * height/width;
|
|
||||||
|
|
||||||
if (distance>0.5){
|
glMatrixMode(GL_PROJECTION);
|
||||||
glBegin(GL_QUADS);
|
glPushMatrix();
|
||||||
//glColor3f(staticlightflarebrightnesses[lightnumber],staticlightflarebrightnesses[lightnumber],staticlightflarebrightnesses[lightnumber]);
|
glLoadIdentity();
|
||||||
glColor3fv(diffuse);
|
float sizey = 6.0/distance * 1.0;//staticlightflarebrightnesses[lightnumber];
|
||||||
|
float sizex = sizey * height/width;
|
||||||
glTexCoord2f(0.0, 0.0);
|
|
||||||
glVertex2f(-sizex,sizey);
|
|
||||||
|
|
||||||
glTexCoord2f(0.0, 1.0);
|
if (distance>0.5){
|
||||||
glVertex2f(-sizex,-sizey);
|
glBegin(GL_QUADS);
|
||||||
|
//glColor3f(staticlightflarebrightnesses[lightnumber],staticlightflarebrightnesses[lightnumber],staticlightflarebrightnesses[lightnumber]);
|
||||||
glTexCoord2f(1.0, 1.0);
|
glColor3fv(diffuse);
|
||||||
glVertex2f( sizex,-sizey);
|
|
||||||
|
|
||||||
glTexCoord2f(1.0, 0.0);
|
|
||||||
glVertex2f( sizex,sizey);
|
|
||||||
glEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
//glDisable(GL_TEXTURE_2D);
|
glTexCoord2f(0.0, 0.0);
|
||||||
|
glVertex2f(-sizex,sizey);
|
||||||
|
|
||||||
glDisable(GL_BLEND);
|
glTexCoord2f(0.0, 1.0);
|
||||||
|
glVertex2f(-sizex,-sizey);
|
||||||
|
|
||||||
glPopMatrix();
|
glTexCoord2f(1.0, 1.0);
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glVertex2f( sizex,-sizey);
|
||||||
glLoadIdentity();
|
|
||||||
|
|
||||||
if (lightingenabled) glEnable(GL_LIGHTING);
|
glTexCoord2f(1.0, 0.0);
|
||||||
glEnable(GL_DEPTH_TEST);
|
glVertex2f( sizex,sizey);
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
|
||||||
glPopMatrix();
|
//glDisable(GL_TEXTURE_2D);
|
||||||
|
|
||||||
|
glDisable(GL_BLEND);
|
||||||
|
|
||||||
|
glPopMatrix();
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity();
|
||||||
|
|
||||||
|
if (lightingenabled) glEnable(GL_LIGHTING);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateLights(void){
|
void updateLights(void){
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < glnextlightnum; i++){
|
for (i = 0; i < glnextlightnum; i++){
|
||||||
Light *light = lights[i];
|
Light *light = lights[i];
|
||||||
light->glUpdate();
|
light->glUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
58
src/light.h
58
src/light.h
|
@ -1,53 +1,27 @@
|
||||||
/*
|
|
||||||
* $Id: light.h,v 1.5 2002/07/19 20:33:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: light.h,v $
|
|
||||||
* Revision 1.5 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/07/15 20:32:35 msell
|
|
||||||
* Uudet valot ja ulkoasun parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/03 23:20:43 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/18 12:29:35 msell
|
|
||||||
* Valot ja äänijärjestelmän parantelua
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __LIGHT_H_INCLUDED__
|
#ifndef __LIGHT_H_INCLUDED__
|
||||||
#define __LIGHT_H_INCLUDED__
|
#define __LIGHT_H_INCLUDED__
|
||||||
|
|
||||||
class Light{
|
class Light{
|
||||||
private:
|
private:
|
||||||
float position[4];
|
float position[4];
|
||||||
float diffuse[4];
|
float diffuse[4];
|
||||||
float specular[4];
|
float specular[4];
|
||||||
float attenuation[3];
|
float attenuation[3];
|
||||||
bool enabled;
|
bool enabled;
|
||||||
int glnum;
|
int glnum;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//Creates DISABLED light
|
//Creates DISABLED light
|
||||||
Light(void);
|
Light(void);
|
||||||
|
|
||||||
void setPosition(float x, float y, float z);
|
void setPosition(float x, float y, float z);
|
||||||
void setDirection(float x, float y, float z);
|
void setDirection(float x, float y, float z);
|
||||||
void setColor(float red, float green, float blue);
|
void setColor(float red, float green, float blue);
|
||||||
void setSpecular(float red, float green, float blue);
|
void setSpecular(float red, float green, float blue);
|
||||||
void setAttenuation(float constant, float linear, float quadratic);
|
void setAttenuation(float constant, float linear, float quadratic);
|
||||||
void setEnabled(bool enabled);
|
void setEnabled(bool enabled);
|
||||||
void glUpdate(void);
|
void glUpdate(void);
|
||||||
void createFlare(void);
|
void createFlare(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
void updateLights(void);
|
void updateLights(void);
|
||||||
|
|
267
src/main.cpp
267
src/main.cpp
|
@ -1,106 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: main.cpp,v 1.30 2002/07/21 15:03:12 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: main.cpp,v $
|
|
||||||
* Revision 1.30 2002/07/21 15:03:12 msell
|
|
||||||
* Äänet disabloitu
|
|
||||||
*
|
|
||||||
* Revision 1.29 2002/07/19 20:39:31 msell
|
|
||||||
* Linux-porttausta
|
|
||||||
*
|
|
||||||
* Revision 1.28 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.27 2002/07/19 20:06:32 msell
|
|
||||||
* Linux-porttausta
|
|
||||||
*
|
|
||||||
* Revision 1.26 2002/07/19 18:59:46 msell
|
|
||||||
* Alkuhommaa ja säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.25 2002/07/19 12:42:44 msell
|
|
||||||
* Loading...
|
|
||||||
*
|
|
||||||
* Revision 1.24 2002/07/19 12:28:29 msell
|
|
||||||
* 2D-mode
|
|
||||||
*
|
|
||||||
* Revision 1.23 2002/07/18 23:05:31 msell
|
|
||||||
* Partikkelit ja kakkospelaajan liike
|
|
||||||
*
|
|
||||||
* Revision 1.22 2002/07/17 16:40:33 msell
|
|
||||||
* Resoluution vaihto
|
|
||||||
*
|
|
||||||
* Revision 1.21 2002/07/16 17:16:34 msell
|
|
||||||
* Fontit ja valikot
|
|
||||||
*
|
|
||||||
* Revision 1.20 2002/07/14 21:40:43 msell
|
|
||||||
* Conflictit pois, liikkumiset (hyppy, kävely, lyönti), uusi areena
|
|
||||||
*
|
|
||||||
* Revision 1.19 2002/07/14 21:22:39 jkaarlas
|
|
||||||
* skybox ja ukkojen säätö
|
|
||||||
*
|
|
||||||
* Revision 1.18 2002/07/11 18:33:30 jkaarlas
|
|
||||||
* turhat äänet pois
|
|
||||||
*
|
|
||||||
* Revision 1.17 2002/07/08 22:53:38 msell
|
|
||||||
* Säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.16 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
* Revision 1.15 2002/06/20 22:50:12 msell
|
|
||||||
* Meshit
|
|
||||||
*
|
|
||||||
* Revision 1.14 2002/06/17 20:49:05 msell
|
|
||||||
* free -> SDL_FreeSurface
|
|
||||||
*
|
|
||||||
* Revision 1.13 2002/06/17 19:58:08 msell
|
|
||||||
* #includeiden parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/06/16 01:04:58 jkaarlas
|
|
||||||
* tulipa säädettyä includejen kanssa. oon tod.näk. eri mieltä aamulla
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/06/15 22:56:37 msell
|
|
||||||
* Säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/06/11 23:11:45 msell
|
|
||||||
* Törmäystarkistusta
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/06/07 21:16:51 msell
|
|
||||||
* Fysiikkaenginen alkua
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/06/02 16:57:37 msell
|
|
||||||
* Objektirakenteen pohja
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/05/19 13:40:19 msell
|
|
||||||
* Säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/05/18 12:29:35 msell
|
|
||||||
* Valot ja äänijärjestelmän parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/05/17 23:13:30 msell
|
|
||||||
* Valot
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/05/16 18:41:16 msell
|
|
||||||
* Vektorifunctioita ja kamera
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/05/15 21:07:23 msell
|
|
||||||
* Äänisäätöä
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/05/15 15:21:00 msell
|
|
||||||
* Äänisäätöä
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/15 14:36:39 msell
|
|
||||||
* Yksinkertainen SDL-runko (Kääntyy toistaiseksi vain windowsissa).
|
|
||||||
* Mukana myös musiikinsoitto fmodilla.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/21 15:03:12 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
@ -124,125 +21,125 @@ int screenheight=768;
|
||||||
int screenbpp;
|
int screenbpp;
|
||||||
|
|
||||||
void exitProgram(int code){
|
void exitProgram(int code){
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
//uninitAudio();
|
//uninitAudio();
|
||||||
exit(code);
|
exit(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
void changeResolution(int width, int height, bool fullscreen){
|
void changeResolution(int width, int height, bool fullscreen){
|
||||||
int mode = SDL_OPENGL;
|
int mode = SDL_OPENGL;
|
||||||
if (fullscreen) mode |= SDL_FULLSCREEN;
|
if (fullscreen) mode |= SDL_FULLSCREEN;
|
||||||
if (!SDL_SetVideoMode(width, height, screenbpp, mode)){
|
if (!SDL_SetVideoMode(width, height, screenbpp, mode)){
|
||||||
fprintf(stderr,"Couldn't set %i*%i*%i opengl video mode: %s\n",screenwidth,screenheight,screenbpp,SDL_GetError());
|
fprintf(stderr,"Couldn't set %i*%i*%i opengl video mode: %s\n",screenwidth,screenheight,screenbpp,SDL_GetError());
|
||||||
exitProgram(-1);
|
exitProgram(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
setupOpengl(width, height);
|
setupOpengl(width, height);
|
||||||
|
|
||||||
screenwidth = width;
|
screenwidth = width;
|
||||||
screenheight = height;
|
screenheight = height;
|
||||||
|
|
||||||
if (fullscreen) SDL_ShowCursor(SDL_DISABLE);
|
if (fullscreen) SDL_ShowCursor(SDL_DISABLE);
|
||||||
else SDL_ShowCursor(SDL_ENABLE);
|
else SDL_ShowCursor(SDL_ENABLE);
|
||||||
|
|
||||||
initScenes();
|
initScenes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool keys[SDLK_LAST] = {false};
|
bool keys[SDLK_LAST] = {false};
|
||||||
|
|
||||||
void handleKeydown(SDL_keysym *keysym){
|
void handleKeydown(SDL_keysym *keysym){
|
||||||
keys[keysym->sym] = true;
|
keys[keysym->sym] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void handleKeyup(SDL_keysym *keysym){
|
void handleKeyup(SDL_keysym *keysym){
|
||||||
keys[keysym->sym] = false;
|
keys[keysym->sym] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void processEvents(void){
|
void processEvents(void){
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while (SDL_PollEvent(&event)){
|
while (SDL_PollEvent(&event)){
|
||||||
switch (event.type){
|
switch (event.type){
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
handleKeydown(&event.key.keysym);
|
handleKeydown(&event.key.keysym);
|
||||||
break;
|
break;
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
handleKeyup(&event.key.keysym);
|
handleKeyup(&event.key.keysym);
|
||||||
break;
|
break;
|
||||||
case SDL_VIDEORESIZE:
|
case SDL_VIDEORESIZE:
|
||||||
screenwidth=event.resize.w;
|
screenwidth=event.resize.w;
|
||||||
screenheight=event.resize.h;
|
screenheight=event.resize.h;
|
||||||
setupOpengl(screenwidth,screenheight);
|
setupOpengl(screenwidth,screenheight);
|
||||||
break;
|
break;
|
||||||
case SDL_QUIT:
|
case SDL_QUIT:
|
||||||
exitProgram(0);
|
exitProgram(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int getTime(void){
|
int getTime(void){
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
return timeGetTime();
|
return timeGetTime();
|
||||||
#else
|
#else
|
||||||
return SDL_GetTicks();
|
return SDL_GetTicks();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]){
|
int main(int argc, char *argv[]){
|
||||||
//printf("Initializing SDL.\n");
|
//printf("Initializing SDL.\n");
|
||||||
|
|
||||||
if ((SDL_Init(SDL_INIT_VIDEO)==-1)){
|
if ((SDL_Init(SDL_INIT_VIDEO)==-1)){
|
||||||
printf("Could not initialize SDL: %s.\n",SDL_GetError());
|
printf("Could not initialize SDL: %s.\n",SDL_GetError());
|
||||||
exitProgram(-1);
|
exitProgram(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
const SDL_VideoInfo *info=SDL_GetVideoInfo();
|
const SDL_VideoInfo *info=SDL_GetVideoInfo();
|
||||||
if (!info){
|
if (!info){
|
||||||
printf("Could not get video info with SDL: %s.\n",SDL_GetError());
|
printf("Could not get video info with SDL: %s.\n",SDL_GetError());
|
||||||
exitProgram(-1);
|
exitProgram(-1);
|
||||||
}
|
}
|
||||||
screenbpp=info->vfmt->BitsPerPixel;
|
screenbpp=info->vfmt->BitsPerPixel;
|
||||||
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
|
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
|
||||||
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
|
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
|
||||||
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
|
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
|
||||||
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
|
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
|
||||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||||
|
|
||||||
|
|
||||||
atexit(SDL_Quit);
|
atexit(SDL_Quit);
|
||||||
|
|
||||||
SDL_WM_SetCaption("BlockoFighter 2",NULL);
|
SDL_WM_SetCaption("BlockoFighter 2",NULL);
|
||||||
|
|
||||||
initAudio();
|
initAudio();
|
||||||
|
|
||||||
changeResolution(screenwidth, screenheight, false);
|
changeResolution(screenwidth, screenheight, false);
|
||||||
|
|
||||||
//printf("SDL initialized.\n");
|
//printf("SDL initialized.\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
double calculatefps = 200.0;
|
double calculatefps = 200.0;
|
||||||
int framecounter, oldframecounter = 0;
|
int framecounter, oldframecounter = 0;
|
||||||
int currenttime;
|
int currenttime;
|
||||||
int framesdrawn=0;
|
int framesdrawn=0;
|
||||||
int skipframes;
|
int skipframes;
|
||||||
int starttime = getTime();
|
int starttime = getTime();
|
||||||
|
|
||||||
while (1){
|
while (1){
|
||||||
do{
|
do{
|
||||||
currenttime = getTime()-starttime;
|
currenttime = getTime()-starttime;
|
||||||
framecounter = calculatefps*currenttime/1000.0;
|
framecounter = calculatefps*currenttime/1000.0;
|
||||||
} while (oldframecounter == framecounter);
|
} while (oldframecounter == framecounter);
|
||||||
skipframes = framecounter - oldframecounter;
|
skipframes = framecounter - oldframecounter;
|
||||||
for (; skipframes > 0; skipframes--){
|
for (; skipframes > 0; skipframes--){
|
||||||
calculateFrame(++oldframecounter);
|
calculateFrame(++oldframecounter);
|
||||||
}
|
}
|
||||||
//calculateFrame(oldframecounter++);
|
//calculateFrame(oldframecounter++);
|
||||||
processEvents();
|
processEvents();
|
||||||
drawFrame(framecounter);
|
drawFrame(framecounter);
|
||||||
framesdrawn++;
|
framesdrawn++;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
51
src/main.h
51
src/main.h
|
@ -1,54 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: main.h,v 1.13 2002/07/19 20:33:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: main.h,v $
|
|
||||||
* Revision 1.13 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/07/19 20:06:32 msell
|
|
||||||
* Linux-porttausta
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/07/17 16:40:33 msell
|
|
||||||
* Resoluution vaihto
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/07/16 17:16:34 msell
|
|
||||||
* Fontit ja valikot
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/07/14 21:40:43 msell
|
|
||||||
* Conflictit pois, liikkumiset (hyppy, kävely, lyönti), uusi areena
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/14 21:22:39 jkaarlas
|
|
||||||
* skybox ja ukkojen säätö
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/07/08 22:53:38 msell
|
|
||||||
* Säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/17 19:58:08 msell
|
|
||||||
* #includeiden parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/16 01:04:58 jkaarlas
|
|
||||||
* tulipa säädettyä includejen kanssa. oon tod.näk. eri mieltä aamulla
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/05/17 12:30:26 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/05/16 18:41:16 msell
|
|
||||||
* Vektorifunctioita ja kamera
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/15 14:36:39 msell
|
|
||||||
* Yksinkertainen SDL-runko (Kääntyy toistaiseksi vain windowsissa).
|
|
||||||
* Mukana myös musiikinsoitto fmodilla.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __MAIN_H_INCLUDED__
|
#ifndef __MAIN_H_INCLUDED__
|
||||||
#define __MAIN_H_INCLUDED__
|
#define __MAIN_H_INCLUDED__
|
||||||
|
|
||||||
|
|
|
@ -1,41 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: material.cpp,v 1.10 2002/07/19 20:40:44 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: material.cpp,v $
|
|
||||||
* Revision 1.10 2002/07/19 20:40:44 msell
|
|
||||||
* Linux-porttausta
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/07/10 22:22:04 jkaarlas
|
|
||||||
* getColor
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/06/27 21:43:29 jkaarlas
|
|
||||||
* lisätty setTexture-funktio
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/27 00:08:04 msell
|
|
||||||
* Kimmotukset palloille myös pyöritettyihin mesheihin
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/20 00:21:01 jkaarlas
|
|
||||||
* materiaali- ja tekstuurihommia edistetty
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/19 22:45:29 jkaarlas
|
|
||||||
* nyt nämä menee järkevästi
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/17 20:49:05 msell
|
|
||||||
* free -> SDL_FreeSurface
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/16 01:04:58 jkaarlas
|
|
||||||
* tulipa säädettyä includejen kanssa. oon tod.näk. eri mieltä aamulla
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/03 23:06:38 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:40:44 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include "material.h"
|
#include "material.h"
|
||||||
|
@ -43,7 +5,7 @@
|
||||||
#include "graphics.h"
|
#include "graphics.h"
|
||||||
|
|
||||||
Material::Material(void){
|
Material::Material(void){
|
||||||
setColor(1, 1, 1, 1);
|
setColor(1, 1, 1, 1);
|
||||||
this->texture = new Texture;
|
this->texture = new Texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,19 +25,19 @@ void Material::freeTexture(void){
|
||||||
}
|
}
|
||||||
|
|
||||||
void Material::setColor(float red, float green, float blue, float alpha){
|
void Material::setColor(float red, float green, float blue, float alpha){
|
||||||
color[0] = red;
|
color[0] = red;
|
||||||
color[1] = green;
|
color[1] = green;
|
||||||
color[2] = blue;
|
color[2] = blue;
|
||||||
color[3] = alpha;
|
color[3] = alpha;
|
||||||
}
|
}
|
||||||
|
|
||||||
const float* Material::getColor(void){
|
const float* Material::getColor(void){
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Material::enable(void){
|
void Material::enable(void){
|
||||||
enabled = true;
|
enabled = true;
|
||||||
glColor4fv(color);
|
glColor4fv(color);
|
||||||
this->texture->enable();
|
this->texture->enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,35 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: material.h,v 1.8 2002/07/19 20:33:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: material.h,v $
|
|
||||||
* Revision 1.8 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/07/10 22:22:04 jkaarlas
|
|
||||||
* getColor
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/27 21:43:29 jkaarlas
|
|
||||||
* lisätty setTexture-funktio
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/20 00:21:01 jkaarlas
|
|
||||||
* materiaali- ja tekstuurihommia edistetty
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/19 22:45:29 jkaarlas
|
|
||||||
* nyt nämä menee järkevästi
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/03 23:06:38 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __MATERIAL_H_INCLUDED__
|
#ifndef __MATERIAL_H_INCLUDED__
|
||||||
#define __MATERIAL_H_INCLUDED__
|
#define __MATERIAL_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -39,22 +7,22 @@
|
||||||
class Material{
|
class Material{
|
||||||
private:
|
private:
|
||||||
Texture* texture;
|
Texture* texture;
|
||||||
float color[4];
|
float color[4];
|
||||||
bool enabled;
|
bool enabled;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Material(void);
|
Material(void);
|
||||||
bool loadTexture(char *path);
|
bool loadTexture(char *path);
|
||||||
void freeTexture(void);
|
void freeTexture(void);
|
||||||
|
|
||||||
void setColor(float red, float green, float blue, float alpha);
|
void setColor(float red, float green, float blue, float alpha);
|
||||||
const float* getColor(void);
|
const float* getColor(void);
|
||||||
void enable(void);
|
void enable(void);
|
||||||
void disable(void);
|
void disable(void);
|
||||||
bool isEnabled(void);
|
bool isEnabled(void);
|
||||||
Texture* getTexture(void);
|
Texture* getTexture(void);
|
||||||
void setTexture(Texture* tex);
|
void setTexture(Texture* tex);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
1427
src/menu.cpp
1427
src/menu.cpp
File diff suppressed because it is too large
Load diff
29
src/menu.h
29
src/menu.h
|
@ -1,32 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: menu.h,v 1.6 2002/07/21 22:50:39 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: menu.h,v $
|
|
||||||
* Revision 1.6 2002/07/21 22:50:39 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/07/19 21:17:07 msell
|
|
||||||
* bugifixi
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/07/19 20:06:32 msell
|
|
||||||
* Linux-porttausta
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/07/17 20:32:47 msell
|
|
||||||
* Detail-optio toimii
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/07/16 17:16:35 msell
|
|
||||||
* Fontit ja valikot
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/21 22:50:39 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __MENU_H_INCLUDED__
|
#ifndef __MENU_H_INCLUDED__
|
||||||
#define __MENU_H_INCLUDED__
|
#define __MENU_H_INCLUDED__
|
||||||
|
|
||||||
|
|
530
src/mesh.cpp
530
src/mesh.cpp
|
@ -1,57 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: mesh.cpp,v 1.14 2002/07/19 20:08:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: mesh.cpp,v $
|
|
||||||
* Revision 1.14 2002/07/19 20:08:28 msell
|
|
||||||
* Linux-porttausta
|
|
||||||
*
|
|
||||||
* Revision 1.13 2002/07/15 15:22:08 msell
|
|
||||||
* Parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/07/14 21:40:43 msell
|
|
||||||
* Conflictit pois, liikkumiset (hyppy, kävely, lyönti), uusi areena
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/07/14 21:22:39 jkaarlas
|
|
||||||
* skybox ja ukkojen säätö
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/07/10 22:22:53 msell
|
|
||||||
* Cartoon-rendaus
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/07/10 22:10:32 jkaarlas
|
|
||||||
* skaalatut ja käännellyt ruumiinosat
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/10 17:13:44 msell
|
|
||||||
* Törmäystarkastelun parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/07/07 17:53:21 msell
|
|
||||||
* Legoukon alku
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/07/07 15:29:07 msell
|
|
||||||
* Törmäyksien parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/30 16:05:04 msell
|
|
||||||
* Törmäyksien parantelua, transformaatioita mukana
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/26 22:30:29 jkaarlas
|
|
||||||
* lisätty Vertexiin tekstuurikoordinaatit
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/24 14:12:15 msell
|
|
||||||
* Nyt toimii sphere -> mesh -törmäykset, ihan tosi
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/20 22:50:12 msell
|
|
||||||
* Meshit
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:08:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include "mesh.h"
|
#include "mesh.h"
|
||||||
|
@ -65,19 +11,19 @@
|
||||||
#include "glapi.h"
|
#include "glapi.h"
|
||||||
|
|
||||||
Vertex::Vertex(void){
|
Vertex::Vertex(void){
|
||||||
vectorSet(position, 0, 0, 0);
|
vectorSet(position, 0, 0, 0);
|
||||||
vectorSet(normal, 0, 0, 0);
|
vectorSet(normal, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vertex::Vertex(float x, float y, float z){
|
Vertex::Vertex(float x, float y, float z){
|
||||||
vectorSet(position, x, y, z);
|
vectorSet(position, x, y, z);
|
||||||
vectorSet(normal, x, y, z);
|
vectorSet(normal, x, y, z);
|
||||||
vectorNormalize(normal);
|
vectorNormalize(normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vertex::Vertex(float x, float y, float z, float nx, float ny, float nz){
|
Vertex::Vertex(float x, float y, float z, float nx, float ny, float nz){
|
||||||
vectorSet(position, x, y, z);
|
vectorSet(position, x, y, z);
|
||||||
vectorSet(normal, nx, ny, nz);
|
vectorSet(normal, nx, ny, nz);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Vertex::setTexCoords(float u, float v){
|
void Vertex::setTexCoords(float u, float v){
|
||||||
|
@ -86,173 +32,173 @@ void Vertex::setTexCoords(float u, float v){
|
||||||
}
|
}
|
||||||
|
|
||||||
Polygon::Polygon(void){
|
Polygon::Polygon(void){
|
||||||
vertexcount = 0;
|
vertexcount = 0;
|
||||||
edgecount = 0;
|
edgecount = 0;
|
||||||
smooth = false;
|
smooth = false;
|
||||||
realsmooth = false;
|
realsmooth = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Mesh::Mesh(void){
|
Mesh::Mesh(void){
|
||||||
vertexcount = 0;
|
vertexcount = 0;
|
||||||
polygoncount = 0;
|
polygoncount = 0;
|
||||||
edgecount = 0;
|
edgecount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Mesh::~Mesh(void){
|
Mesh::~Mesh(void){
|
||||||
delete [] polygons;
|
delete [] polygons;
|
||||||
delete [] vertices;
|
delete [] vertices;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mesh::createPlanes(void){
|
void Mesh::createPlanes(void){
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < polygoncount; i++){
|
for (i = 0; i < polygoncount; i++){
|
||||||
class Polygon *polygon = &this->polygons[i];
|
class Polygon *polygon = &this->polygons[i];
|
||||||
if (polygon->vertexcount >= 3){
|
if (polygon->vertexcount >= 3){
|
||||||
float v1[3], v2[3];
|
float v1[3], v2[3];
|
||||||
vectorSub(v1, polygon->vertices[1]->position,
|
vectorSub(v1, polygon->vertices[1]->position,
|
||||||
polygon->vertices[0]->position);
|
polygon->vertices[0]->position);
|
||||||
vectorSub(v2, polygon->vertices[2]->position,
|
vectorSub(v2, polygon->vertices[2]->position,
|
||||||
polygon->vertices[0]->position);
|
polygon->vertices[0]->position);
|
||||||
vectorCross(polygon->planenormal, v1, v2);
|
vectorCross(polygon->planenormal, v1, v2);
|
||||||
vectorNormalize(polygon->planenormal);
|
vectorNormalize(polygon->planenormal);
|
||||||
|
|
||||||
polygon->planedistance = -vectorDot(polygon->vertices[0]->position, polygon->planenormal);
|
polygon->planedistance = -vectorDot(polygon->vertices[0]->position, polygon->planenormal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mesh::createVertexnormals(void){
|
void Mesh::createVertexnormals(void){
|
||||||
int i, j, ii;
|
int i, j, ii;
|
||||||
bool connect;
|
bool connect;
|
||||||
float normal[3];
|
float normal[3];
|
||||||
for (i = 0; i < vertexcount; i++){
|
for (i = 0; i < vertexcount; i++){
|
||||||
bool found = false;
|
bool found = false;
|
||||||
vectorSet(normal, 0, 0, 0);
|
vectorSet(normal, 0, 0, 0);
|
||||||
for (j = 0; j < polygoncount; j++){
|
for (j = 0; j < polygoncount; j++){
|
||||||
connect = false;
|
connect = false;
|
||||||
class Polygon *polygon = &polygons[j];
|
class Polygon *polygon = &polygons[j];
|
||||||
for (ii = 0;ii < polygon->vertexcount; ii++){
|
for (ii = 0;ii < polygon->vertexcount; ii++){
|
||||||
if (polygons[j].vertices[ii] == &(vertices[i])){
|
if (polygons[j].vertices[ii] == &(vertices[i])){
|
||||||
connect = true;
|
connect = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (connect){
|
if (connect){
|
||||||
vectorAdd(normal, polygon->planenormal);
|
vectorAdd(normal, polygon->planenormal);
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (found){
|
if (found){
|
||||||
vectorNormalize(vertices[i].normal, normal);
|
vectorNormalize(vertices[i].normal, normal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (j = 0; j < polygoncount; j++){
|
for (j = 0; j < polygoncount; j++){
|
||||||
class Polygon *polygon = &polygons[j];
|
class Polygon *polygon = &polygons[j];
|
||||||
if (!polygon->realsmooth) polygon->smooth = true;
|
if (!polygon->realsmooth) polygon->smooth = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mesh::createEdges(void){
|
void Mesh::createEdges(void){
|
||||||
int maxedgecount = 0;
|
int maxedgecount = 0;
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < polygoncount; i++){
|
for (i = 0; i < polygoncount; i++){
|
||||||
class Polygon *polygon = &polygons[i];
|
class Polygon *polygon = &polygons[i];
|
||||||
maxedgecount += polygon->vertexcount;
|
maxedgecount += polygon->vertexcount;
|
||||||
}
|
}
|
||||||
|
|
||||||
edgecount = 0;
|
edgecount = 0;
|
||||||
int j, k;
|
int j, k;
|
||||||
Edge *edges = new Edge[maxedgecount];
|
Edge *edges = new Edge[maxedgecount];
|
||||||
for (i = 0; i < polygoncount; i++){
|
for (i = 0; i < polygoncount; i++){
|
||||||
class Polygon *polygon = &polygons[i];
|
class Polygon *polygon = &polygons[i];
|
||||||
polygon->edges = new Edge *[polygon->vertexcount];
|
polygon->edges = new Edge *[polygon->vertexcount];
|
||||||
for (j = 1; j <= polygon->vertexcount; j++){
|
for (j = 1; j <= polygon->vertexcount; j++){
|
||||||
Vertex *v1 = polygon->vertices[j-1];
|
Vertex *v1 = polygon->vertices[j-1];
|
||||||
Vertex *v2 = polygon->vertices[j%polygon->vertexcount];
|
Vertex *v2 = polygon->vertices[j%polygon->vertexcount];
|
||||||
|
|
||||||
bool found = false;
|
bool found = false;
|
||||||
for (k = 0; k < edgecount; k++){
|
for (k = 0; k < edgecount; k++){
|
||||||
if (edges[k].v2 == v1 && edges[k].v1 == v2){
|
if (edges[k].v2 == v1 && edges[k].v1 == v2){
|
||||||
found = true;
|
found = true;
|
||||||
edges[k].p2 = polygon;
|
edges[k].p2 = polygon;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found){
|
if (!found){
|
||||||
edges[edgecount].v1 = v1;
|
edges[edgecount].v1 = v1;
|
||||||
edges[edgecount].v2 = v2;
|
edges[edgecount].v2 = v2;
|
||||||
edges[edgecount].p1 = polygon;
|
edges[edgecount].p1 = polygon;
|
||||||
edges[edgecount].p2 = NULL;
|
edges[edgecount].p2 = NULL;
|
||||||
edgecount++;
|
edgecount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this->edges = new Edge[edgecount];
|
this->edges = new Edge[edgecount];
|
||||||
//printf("%i\n", edgecount);
|
//printf("%i\n", edgecount);
|
||||||
for (i = 0; i < edgecount; i++){
|
for (i = 0; i < edgecount; i++){
|
||||||
this->edges[i].v1 = edges[i].v1;
|
this->edges[i].v1 = edges[i].v1;
|
||||||
this->edges[i].v2 = edges[i].v2;
|
this->edges[i].v2 = edges[i].v2;
|
||||||
this->edges[i].p1 = edges[i].p1;
|
this->edges[i].p1 = edges[i].p1;
|
||||||
this->edges[i].p2 = edges[i].p2;
|
this->edges[i].p2 = edges[i].p2;
|
||||||
|
|
||||||
class Polygon *p;
|
class Polygon *p;
|
||||||
p = edges[i].p1;
|
p = edges[i].p1;
|
||||||
p->edges[p->edgecount++] = &this->edges[i];
|
p->edges[p->edgecount++] = &this->edges[i];
|
||||||
p = edges[i].p2;
|
p = edges[i].p2;
|
||||||
p->edges[p->edgecount++] = &this->edges[i];
|
p->edges[p->edgecount++] = &this->edges[i];
|
||||||
//printf("%p, %p\n", edges[i].p1, edges[i].p2);
|
//printf("%p, %p\n", edges[i].p1, edges[i].p2);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete[] edges;
|
delete[] edges;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
float Mesh::calculateScale(float targetLength, int axis){
|
float Mesh::calculateScale(float targetLength, int axis){
|
||||||
|
|
||||||
float min = 0.0;
|
float min = 0.0;
|
||||||
float max = 0.0;
|
float max = 0.0;
|
||||||
|
|
||||||
for (int i=0; i < this->vertexcount; i++){
|
for (int i=0; i < this->vertexcount; i++){
|
||||||
if (this->vertices->position[axis] > max){
|
if (this->vertices->position[axis] > max){
|
||||||
max = this->vertices->position[axis];
|
max = this->vertices->position[axis];
|
||||||
}
|
}
|
||||||
if (this->vertices->position[axis] < min){
|
if (this->vertices->position[axis] < min){
|
||||||
min = this->vertices->position[axis];
|
min = this->vertices->position[axis];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return fabs(targetLength / (max - min));
|
return fabs(targetLength / (max - min));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ei toimi kunnolla kaikille objekteille (kädet ok, jalat ja torso ei) */
|
/* ei toimi kunnolla kaikille objekteille (kädet ok, jalat ja torso ei) */
|
||||||
void Mesh::scale(float targetLength, int axis){
|
void Mesh::scale(float targetLength, int axis){
|
||||||
float newscale = this->calculateScale(targetLength, axis);
|
float newscale = this->calculateScale(targetLength, axis);
|
||||||
this->scale(newscale);
|
this->scale(newscale);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ei toimi kunnolla kaikille objekteille (kädet ok, jalat ja torso ei)*/
|
/* ei toimi kunnolla kaikille objekteille (kädet ok, jalat ja torso ei)*/
|
||||||
void Mesh::scale(float scale){
|
void Mesh::scale(float scale){
|
||||||
for (int i=0; i < this->vertexcount; i++){
|
for (int i=0; i < this->vertexcount; i++){
|
||||||
this->vertices->position[0] *= scale;
|
this->vertices->position[0] *= scale;
|
||||||
this->vertices->position[1] *= scale;
|
this->vertices->position[1] *= scale;
|
||||||
this->vertices->position[2] *= scale;
|
this->vertices->position[2] *= scale;
|
||||||
}
|
}
|
||||||
this->createVertexnormals();
|
this->createVertexnormals();
|
||||||
this->createPlanes();
|
this->createPlanes();
|
||||||
}
|
}
|
||||||
|
|
||||||
MeshObject::MeshObject(Mesh *mesh){
|
MeshObject::MeshObject(Mesh *mesh){
|
||||||
this->mesh = mesh;
|
this->mesh = mesh;
|
||||||
this->appearance = new MeshAppearance(mesh);
|
this->appearance = new MeshAppearance(mesh);
|
||||||
this->geometry = new MeshShape(this);
|
this->geometry = new MeshShape(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MeshAppearance::MeshAppearance(Mesh *mesh){
|
MeshAppearance::MeshAppearance(Mesh *mesh){
|
||||||
this->mesh = mesh;
|
this->mesh = mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -262,41 +208,41 @@ void MeshAppearance::draw(void){
|
||||||
glColor4fv(this->material.getColor());
|
glColor4fv(this->material.getColor());
|
||||||
this->material.enable();
|
this->material.enable();
|
||||||
|
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
for (i = 0; i < mesh->polygoncount; i++){
|
|
||||||
class Polygon *polygon = &mesh->polygons[i];
|
|
||||||
|
|
||||||
glBegin(GL_TRIANGLE_FAN);
|
|
||||||
|
|
||||||
if (!polygon->smooth) glNormal3fv(polygon->planenormal);
|
for (i = 0; i < mesh->polygoncount; i++){
|
||||||
|
class Polygon *polygon = &mesh->polygons[i];
|
||||||
|
|
||||||
for (j = 0; j < polygon->vertexcount; j++){
|
glBegin(GL_TRIANGLE_FAN);
|
||||||
Vertex *vertex = polygon->vertices[j];
|
|
||||||
|
|
||||||
if (polygon->smooth) glNormal3fv(vertex->normal);
|
if (!polygon->smooth) glNormal3fv(polygon->planenormal);
|
||||||
glVertex3fv(vertex->position);
|
|
||||||
|
|
||||||
}
|
for (j = 0; j < polygon->vertexcount; j++){
|
||||||
|
Vertex *vertex = polygon->vertices[j];
|
||||||
|
|
||||||
|
if (polygon->smooth) glNormal3fv(vertex->normal);
|
||||||
|
glVertex3fv(vertex->position);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
glDisable(GL_DEPTH);
|
glDisable(GL_DEPTH);
|
||||||
glDisable(GL_LIGHTING);
|
glDisable(GL_LIGHTING);
|
||||||
glLineWidth(5.0);
|
glLineWidth(5.0);
|
||||||
glBegin(GL_LINES);
|
glBegin(GL_LINES);
|
||||||
for (i = 0; i < mesh->edgecount; i++){
|
for (i = 0; i < mesh->edgecount; i++){
|
||||||
glColor3f(0, 0, 0);
|
glColor3f(0, 0, 0);
|
||||||
glVertex3fv(mesh->edges[i].v1->position);
|
glVertex3fv(mesh->edges[i].v1->position);
|
||||||
glVertex3fv(mesh->edges[i].v2->position);
|
glVertex3fv(mesh->edges[i].v2->position);
|
||||||
}
|
}
|
||||||
|
|
||||||
glEnd();
|
glEnd();
|
||||||
glEnable(GL_LIGHTING);
|
glEnable(GL_LIGHTING);
|
||||||
glEnable(GL_DEPTH);
|
glEnable(GL_DEPTH);
|
||||||
|
|
||||||
|
|
||||||
this->material.disable();
|
this->material.disable();
|
||||||
|
@ -309,125 +255,125 @@ void MeshAppearance::draw(void){
|
||||||
|
|
||||||
|
|
||||||
MeshShape::MeshShape(MeshObject *object) : Shape(object){
|
MeshShape::MeshShape(MeshObject *object) : Shape(object){
|
||||||
mesh = object->mesh;
|
mesh = object->mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
MeshShape::MeshShape(Object *object, Mesh *mesh) : Shape(object){
|
MeshShape::MeshShape(Object *object, Mesh *mesh) : Shape(object){
|
||||||
this->mesh = mesh;
|
this->mesh = mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MeshShape::checkCollision(Object *target){
|
bool MeshShape::checkCollision(Object *target){
|
||||||
return target->geometry->checkCollisionPeer(this);
|
return target->geometry->checkCollisionPeer(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
float MeshShape::calculateMomentOfInertia(float *rotationvector){
|
float MeshShape::calculateMomentOfInertia(float *rotationvector){
|
||||||
if (vectorDot(rotationvector, rotationvector) < EPSILON) return 0;
|
if (vectorDot(rotationvector, rotationvector) < EPSILON) return 0;
|
||||||
int i;
|
int i;
|
||||||
float j = 0;
|
float j = 0;
|
||||||
for (i = 0; i < mesh->vertexcount; i++){
|
for (i = 0; i < mesh->vertexcount; i++){
|
||||||
float proj[3];
|
float proj[3];
|
||||||
vectorProject(proj, mesh->vertices[i].position, rotationvector);
|
vectorProject(proj, mesh->vertices[i].position, rotationvector);
|
||||||
vectorSub(proj, mesh->vertices[i].position, proj);
|
vectorSub(proj, mesh->vertices[i].position, proj);
|
||||||
//float r = vectorLength(proj);
|
//float r = vectorLength(proj);
|
||||||
float r2 = vectorDot(proj, proj);
|
float r2 = vectorDot(proj, proj);
|
||||||
j += r2;
|
j += r2;
|
||||||
}
|
}
|
||||||
return j / i;
|
return j / i;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MeshShape::checkCollisionPeer(SphereShape *target){
|
bool MeshShape::checkCollisionPeer(SphereShape *target){
|
||||||
float position[3] = {0, 0, 0};
|
float position[3] = {0, 0, 0};
|
||||||
target->object->transformPoint(position, position);
|
target->object->transformPoint(position, position);
|
||||||
object->unTransformPoint(position, position);
|
object->unTransformPoint(position, position);
|
||||||
|
|
||||||
float normal[3];
|
float normal[3];
|
||||||
float contactpoint[3];
|
float contactpoint[3];
|
||||||
float r = target->getRadius();
|
float r = target->getRadius();
|
||||||
|
|
||||||
if (checkSphereMeshCollision(position, r, mesh, normal, contactpoint)){
|
if (checkSphereMeshCollision(position, r, mesh, normal, contactpoint)){
|
||||||
vectorScale(normal, -1);
|
vectorScale(normal, -1);
|
||||||
object->transformVector(normal, normal);
|
object->transformVector(normal, normal);
|
||||||
object->transformPoint(contactpoint, contactpoint);
|
object->transformPoint(contactpoint, contactpoint);
|
||||||
|
|
||||||
addCollision(object, target->object, normal, contactpoint);
|
addCollision(object, target->object, normal, contactpoint);
|
||||||
|
|
||||||
//vectorAdd(contactnormal, normal);
|
//vectorAdd(contactnormal, normal);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//extern Sound *shotsound;
|
//extern Sound *shotsound;
|
||||||
|
|
||||||
bool MeshShape::checkCollisionPeer(MeshShape *target){
|
bool MeshShape::checkCollisionPeer(MeshShape *target){
|
||||||
float normal[3];
|
float normal[3];
|
||||||
float contactpoint[3];
|
float contactpoint[3];
|
||||||
|
|
||||||
bool collided = false;
|
bool collided = false;
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
Mesh *sourcemesh, *targetmesh;
|
Mesh *sourcemesh, *targetmesh;
|
||||||
|
|
||||||
sourcemesh = this->mesh;
|
|
||||||
targetmesh = target->mesh;
|
|
||||||
for (i = 0; i < sourcemesh->vertexcount; i++){
|
|
||||||
Vertex *vertex = &sourcemesh->vertices[i];
|
|
||||||
float vertexposition[3];
|
|
||||||
object->transformPoint(vertexposition, vertex->position);
|
|
||||||
target->object->unTransformPoint(vertexposition, vertexposition);
|
|
||||||
|
|
||||||
if (checkPointMeshCollision(vertexposition, targetmesh, normal, contactpoint)){
|
sourcemesh = this->mesh;
|
||||||
target->object->transformVector(normal, normal);
|
targetmesh = target->mesh;
|
||||||
target->object->transformPoint(contactpoint, contactpoint);
|
for (i = 0; i < sourcemesh->vertexcount; i++){
|
||||||
|
Vertex *vertex = &sourcemesh->vertices[i];
|
||||||
|
float vertexposition[3];
|
||||||
|
object->transformPoint(vertexposition, vertex->position);
|
||||||
|
target->object->unTransformPoint(vertexposition, vertexposition);
|
||||||
|
|
||||||
if (vectorIsZero(contactpoint)){
|
if (checkPointMeshCollision(vertexposition, targetmesh, normal, contactpoint)){
|
||||||
vectorSet(contactpoint, 0, 0, 0);
|
target->object->transformVector(normal, normal);
|
||||||
}
|
target->object->transformPoint(contactpoint, contactpoint);
|
||||||
addCollision(object, target->object, normal, contactpoint);
|
|
||||||
collided = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sourcemesh = target->mesh;
|
if (vectorIsZero(contactpoint)){
|
||||||
targetmesh = this->mesh;
|
vectorSet(contactpoint, 0, 0, 0);
|
||||||
for (i = 0; i < sourcemesh->vertexcount; i++){
|
}
|
||||||
Vertex *vertex = &sourcemesh->vertices[i];
|
addCollision(object, target->object, normal, contactpoint);
|
||||||
float vertexposition[3];
|
collided = true;
|
||||||
target->object->transformPoint(vertexposition, vertex->position);
|
}
|
||||||
object->unTransformPoint(vertexposition, vertexposition);
|
}
|
||||||
|
|
||||||
if (checkPointMeshCollision(vertexposition, targetmesh, normal, contactpoint)){
|
sourcemesh = target->mesh;
|
||||||
object->transformVector(normal, normal);
|
targetmesh = this->mesh;
|
||||||
object->transformPoint(contactpoint, contactpoint);
|
for (i = 0; i < sourcemesh->vertexcount; i++){
|
||||||
|
Vertex *vertex = &sourcemesh->vertices[i];
|
||||||
|
float vertexposition[3];
|
||||||
|
target->object->transformPoint(vertexposition, vertex->position);
|
||||||
|
object->unTransformPoint(vertexposition, vertexposition);
|
||||||
|
|
||||||
addCollision(target->object, object, normal, contactpoint);
|
if (checkPointMeshCollision(vertexposition, targetmesh, normal, contactpoint)){
|
||||||
collided = true;
|
object->transformVector(normal, normal);
|
||||||
}
|
object->transformPoint(contactpoint, contactpoint);
|
||||||
}
|
|
||||||
|
|
||||||
sourcemesh = this->mesh;
|
addCollision(target->object, object, normal, contactpoint);
|
||||||
targetmesh = target->mesh;
|
collided = true;
|
||||||
for (i = 0; i < sourcemesh->edgecount; i++){
|
}
|
||||||
Edge *edge = &sourcemesh->edges[i];
|
}
|
||||||
float v1[3], v2[3];
|
|
||||||
object->transformPoint(v1, edge->v1->position);
|
|
||||||
target->object->unTransformPoint(v1, v1);
|
|
||||||
|
|
||||||
object->transformPoint(v2, edge->v2->position);
|
sourcemesh = this->mesh;
|
||||||
target->object->unTransformPoint(v2, v2);
|
targetmesh = target->mesh;
|
||||||
|
for (i = 0; i < sourcemesh->edgecount; i++){
|
||||||
|
Edge *edge = &sourcemesh->edges[i];
|
||||||
|
float v1[3], v2[3];
|
||||||
|
object->transformPoint(v1, edge->v1->position);
|
||||||
|
target->object->unTransformPoint(v1, v1);
|
||||||
|
|
||||||
if (checkEdgeMeshCollision(v1, v2, targetmesh, normal, contactpoint)){
|
object->transformPoint(v2, edge->v2->position);
|
||||||
target->object->transformVector(normal, normal);
|
target->object->unTransformPoint(v2, v2);
|
||||||
target->object->transformPoint(contactpoint, contactpoint);
|
|
||||||
|
|
||||||
addCollision(object, target->object, normal, contactpoint);
|
if (checkEdgeMeshCollision(v1, v2, targetmesh, normal, contactpoint)){
|
||||||
collided = true;
|
target->object->transformVector(normal, normal);
|
||||||
}
|
target->object->transformPoint(contactpoint, contactpoint);
|
||||||
}
|
|
||||||
|
|
||||||
return collided;
|
addCollision(object, target->object, normal, contactpoint);
|
||||||
|
collided = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return collided;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
138
src/mesh.h
138
src/mesh.h
|
@ -1,51 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: mesh.h,v 1.12 2002/07/19 20:33:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: mesh.h,v $
|
|
||||||
* Revision 1.12 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/07/19 20:08:28 msell
|
|
||||||
* Linux-porttausta
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/07/17 20:32:47 msell
|
|
||||||
* Detail-optio toimii
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/07/15 15:22:08 msell
|
|
||||||
* Parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/14 21:22:39 jkaarlas
|
|
||||||
* skybox ja ukkojen säätö
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/07/10 17:13:44 msell
|
|
||||||
* Törmäystarkastelun parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/07/07 17:53:21 msell
|
|
||||||
* Legoukon alku
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/30 16:05:04 msell
|
|
||||||
* Törmäyksien parantelua, transformaatioita mukana
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/26 22:30:29 jkaarlas
|
|
||||||
* lisätty Vertexiin tekstuurikoordinaatit
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/24 14:12:15 msell
|
|
||||||
* Nyt toimii sphere -> mesh -törmäykset, ihan tosi
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/20 22:50:12 msell
|
|
||||||
* Meshit
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __MESH_H_INCLUDED__
|
#ifndef __MESH_H_INCLUDED__
|
||||||
#define __MESH_H_INCLUDED__
|
#define __MESH_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -59,16 +11,16 @@
|
||||||
|
|
||||||
class Vertex{
|
class Vertex{
|
||||||
public:
|
public:
|
||||||
float position[3];
|
float position[3];
|
||||||
float oldposition[3];
|
float oldposition[3];
|
||||||
float normal[3];
|
float normal[3];
|
||||||
float texcoords[2];
|
float texcoords[2];
|
||||||
|
|
||||||
Vertex(void);
|
Vertex(void);
|
||||||
Vertex(float x, float y, float z);
|
Vertex(float x, float y, float z);
|
||||||
Vertex(float x, float y, float z, float nx, float ny, float nz);
|
Vertex(float x, float y, float z, float nx, float ny, float nz);
|
||||||
|
|
||||||
void setTexCoords(float u, float v);
|
void setTexCoords(float u, float v);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,49 +28,49 @@ class Edge;
|
||||||
|
|
||||||
class Polygon{
|
class Polygon{
|
||||||
public:
|
public:
|
||||||
float planenormal[3];
|
float planenormal[3];
|
||||||
float planedistance;
|
float planedistance;
|
||||||
bool smooth;
|
bool smooth;
|
||||||
bool realsmooth;
|
bool realsmooth;
|
||||||
|
|
||||||
int vertexcount;
|
int vertexcount;
|
||||||
Vertex **vertices;
|
Vertex **vertices;
|
||||||
int edgecount;
|
int edgecount;
|
||||||
Edge **edges;
|
Edge **edges;
|
||||||
|
|
||||||
Polygon(void);
|
Polygon(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Edge{
|
class Edge{
|
||||||
public:
|
public:
|
||||||
Vertex *v1, *v2;
|
Vertex *v1, *v2;
|
||||||
class Polygon *p1, *p2;
|
class Polygon *p1, *p2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Mesh{
|
class Mesh{
|
||||||
public:
|
public:
|
||||||
int vertexcount;
|
int vertexcount;
|
||||||
Vertex *vertices;
|
Vertex *vertices;
|
||||||
|
|
||||||
int polygoncount;
|
int polygoncount;
|
||||||
class Polygon *polygons;
|
class Polygon *polygons;
|
||||||
|
|
||||||
Edge *edges;
|
Edge *edges;
|
||||||
int edgecount;
|
int edgecount;
|
||||||
|
|
||||||
|
|
||||||
Mesh(void);
|
Mesh(void);
|
||||||
~Mesh(void);
|
~Mesh(void);
|
||||||
|
|
||||||
void createPlanes(void);
|
void createPlanes(void);
|
||||||
void createVertexnormals(void);
|
void createVertexnormals(void);
|
||||||
void createEdges(void);
|
void createEdges(void);
|
||||||
float calculateScale(float targetLength, int axis);
|
float calculateScale(float targetLength, int axis);
|
||||||
void scale(float targetLength, int axis);
|
void scale(float targetLength, int axis);
|
||||||
void scale(float scale);
|
void scale(float scale);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -126,21 +78,21 @@ public:
|
||||||
|
|
||||||
class MeshObject : public Object{
|
class MeshObject : public Object{
|
||||||
public:
|
public:
|
||||||
Mesh *mesh;
|
Mesh *mesh;
|
||||||
|
|
||||||
MeshObject(Mesh *mesh);
|
MeshObject(Mesh *mesh);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MeshAppearance : public Appearance{
|
class MeshAppearance : public Appearance{
|
||||||
private:
|
private:
|
||||||
Mesh *mesh;
|
Mesh *mesh;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MeshAppearance(Mesh *mesh);
|
MeshAppearance(Mesh *mesh);
|
||||||
|
|
||||||
void draw(void);
|
void draw(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -149,20 +101,20 @@ public:
|
||||||
|
|
||||||
class MeshShape : public Shape{
|
class MeshShape : public Shape{
|
||||||
private:
|
private:
|
||||||
Mesh *mesh;
|
Mesh *mesh;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MeshShape(MeshObject *meshobject);
|
MeshShape(MeshObject *meshobject);
|
||||||
MeshShape(Object *object, Mesh *mesh);
|
MeshShape(Object *object, Mesh *mesh);
|
||||||
|
|
||||||
float calculateMomentOfInertia(float *rotationvector);
|
float calculateMomentOfInertia(float *rotationvector);
|
||||||
|
|
||||||
bool checkCollision(Object *target);
|
bool checkCollision(Object *target);
|
||||||
|
|
||||||
bool checkCollisionPeer(SphereShape *target);
|
bool checkCollisionPeer(SphereShape *target);
|
||||||
bool checkCollisionPeer(MeshShape *target);
|
bool checkCollisionPeer(MeshShape *target);
|
||||||
|
|
||||||
friend class SphereShape;
|
friend class SphereShape;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
295
src/object.cpp
295
src/object.cpp
|
@ -1,82 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: object.cpp,v 1.22 2002/07/18 23:05:31 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: object.cpp,v $
|
|
||||||
* Revision 1.22 2002/07/18 23:05:31 msell
|
|
||||||
* Partikkelit ja kakkospelaajan liike
|
|
||||||
*
|
|
||||||
* Revision 1.21 2002/07/17 22:45:54 msell
|
|
||||||
* Ääniä vähän
|
|
||||||
*
|
|
||||||
* Revision 1.20 2002/07/15 15:22:08 msell
|
|
||||||
* Parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.19 2002/07/14 21:40:43 msell
|
|
||||||
* Conflictit pois, liikkumiset (hyppy, kävely, lyönti), uusi areena
|
|
||||||
*
|
|
||||||
* Revision 1.18 2002/07/14 21:22:39 jkaarlas
|
|
||||||
* skybox ja ukkojen säätö
|
|
||||||
*
|
|
||||||
* Revision 1.17 2002/07/07 15:29:07 msell
|
|
||||||
* Törmäyksien parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.16 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
* Revision 1.15 2002/06/30 16:05:04 msell
|
|
||||||
* Törmäyksien parantelua, transformaatioita mukana
|
|
||||||
*
|
|
||||||
* Revision 1.14 2002/06/27 14:39:48 msell
|
|
||||||
* Toimiva maila :)
|
|
||||||
* Pyörivät kappaleet siis antaa liike-energiaa liikkuville kappaleille (ei toisin päin vielä)
|
|
||||||
*
|
|
||||||
* Revision 1.13 2002/06/27 00:08:04 msell
|
|
||||||
* Kimmotukset palloille myös pyöritettyihin mesheihin
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/06/24 14:12:15 msell
|
|
||||||
* Nyt toimii sphere -> mesh -törmäykset, ihan tosi
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/06/17 20:49:05 msell
|
|
||||||
* free -> SDL_FreeSurface
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/06/16 01:04:58 jkaarlas
|
|
||||||
* tulipa säädettyä includejen kanssa. oon tod.näk. eri mieltä aamulla
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/06/15 17:18:37 msell
|
|
||||||
* Toimiva törmäystarkastus kiinteille laatikoille
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/06/14 00:05:05 msell
|
|
||||||
* Törmäyssimulaatio kunnossa toivon mukaan
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/11 23:11:45 msell
|
|
||||||
* Törmäystarkistusta
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/07 21:16:51 msell
|
|
||||||
* Fysiikkaenginen alkua
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/05 18:39:05 msell
|
|
||||||
* Jotain pientä
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/05 15:00:41 msell
|
|
||||||
* Palikoihin lisää detailia, facet jaetaan halutun kokosiin osiin
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/03 23:20:43 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/03 23:06:38 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/02 16:57:37 msell
|
|
||||||
* Objektirakenteen pohja
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/18 23:05:31 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -89,204 +10,204 @@
|
||||||
#include "glapi.h"
|
#include "glapi.h"
|
||||||
|
|
||||||
Object::Object(void){
|
Object::Object(void){
|
||||||
appearance = NULL;
|
appearance = NULL;
|
||||||
geometry = NULL;
|
geometry = NULL;
|
||||||
invmass = 0.0;
|
invmass = 0.0;
|
||||||
setPosition(0, 0, 0);
|
setPosition(0, 0, 0);
|
||||||
vectorSet(momentum, 0, 0, 0);
|
vectorSet(momentum, 0, 0, 0);
|
||||||
|
|
||||||
invmomentofinertia = 0.0;
|
invmomentofinertia = 0.0;
|
||||||
matrixIdentity(rotation);
|
matrixIdentity(rotation);
|
||||||
vectorSet(angularmomentum, 0, 0, 0);
|
vectorSet(angularmomentum, 0, 0, 0);
|
||||||
|
|
||||||
setCollisionGroup(COLLISIONGROUP_NONE);
|
setCollisionGroup(COLLISIONGROUP_NONE);
|
||||||
gravity = false;
|
gravity = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::prepare(void){
|
void Object::prepare(void){
|
||||||
if (appearance != NULL) appearance->prepare();
|
if (appearance != NULL) appearance->prepare();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DT 0.01
|
#define DT 0.01
|
||||||
|
|
||||||
void Object::move(void){
|
void Object::move(void){
|
||||||
moveStep(DT);
|
moveStep(DT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::moveStep(float dt){
|
void Object::moveStep(float dt){
|
||||||
if (invmass == 0) return;
|
if (invmass == 0) return;
|
||||||
|
|
||||||
|
|
||||||
if (vectorDot(momentum, momentum) > 1.0e+5) vectorSet(momentum, 0, 0, 0);
|
if (vectorDot(momentum, momentum) > 1.0e+5) vectorSet(momentum, 0, 0, 0);
|
||||||
if (vectorDot(angularmomentum, angularmomentum) > 1.0e+5) vectorSet(angularmomentum, 0, 0, 0);
|
if (vectorDot(angularmomentum, angularmomentum) > 1.0e+5) vectorSet(angularmomentum, 0, 0, 0);
|
||||||
calculateStateVariables();
|
calculateStateVariables();
|
||||||
|
|
||||||
|
|
||||||
float velocitydt[3];
|
|
||||||
vectorScale(velocitydt, velocity, dt);
|
|
||||||
vectorAdd(position, velocitydt);
|
|
||||||
|
|
||||||
float rotationdt[9];
|
float velocitydt[3];
|
||||||
if (vectorIsZero(angularmomentum)){
|
vectorScale(velocitydt, velocity, dt);
|
||||||
matrixIdentity(rotationdt);
|
vectorAdd(position, velocitydt);
|
||||||
} else{
|
|
||||||
float angularvelocitydt[3];
|
|
||||||
vectorScale(angularvelocitydt, angularvelocity, dt);
|
|
||||||
matrixCreateRotation(rotationdt, angularvelocitydt);
|
|
||||||
}
|
|
||||||
matrixMultiply(rotation, rotation, rotationdt);
|
|
||||||
|
|
||||||
vectorScale(angularmomentum, 0.99);
|
float rotationdt[9];
|
||||||
|
if (vectorIsZero(angularmomentum)){
|
||||||
|
matrixIdentity(rotationdt);
|
||||||
|
} else{
|
||||||
|
float angularvelocitydt[3];
|
||||||
|
vectorScale(angularvelocitydt, angularvelocity, dt);
|
||||||
|
matrixCreateRotation(rotationdt, angularvelocitydt);
|
||||||
|
}
|
||||||
|
matrixMultiply(rotation, rotation, rotationdt);
|
||||||
|
|
||||||
|
vectorScale(angularmomentum, 0.99);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::calculateStateVariables(void){
|
void Object::calculateStateVariables(void){
|
||||||
getVelocity(velocity);
|
getVelocity(velocity);
|
||||||
|
|
||||||
if (vectorIsZero(angularmomentum)){
|
if (vectorIsZero(angularmomentum)){
|
||||||
invmomentofinertia = 0;
|
invmomentofinertia = 0;
|
||||||
} else{
|
} else{
|
||||||
invmomentofinertia = invmass * 1.0 / geometry->calculateMomentOfInertia(angularmomentum);
|
invmomentofinertia = invmass * 1.0 / geometry->calculateMomentOfInertia(angularmomentum);
|
||||||
}
|
}
|
||||||
|
|
||||||
vectorScale(angularvelocity, angularmomentum, invmomentofinertia);
|
vectorScale(angularvelocity, angularmomentum, invmomentofinertia);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::setPosition(float x, float y, float z){
|
void Object::setPosition(float x, float y, float z){
|
||||||
position[0] = x;
|
position[0] = x;
|
||||||
position[1] = y;
|
position[1] = y;
|
||||||
position[2] = z;
|
position[2] = z;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::getPosition(float *position){
|
void Object::getPosition(float *position){
|
||||||
vectorCopy(position, this->position);
|
vectorCopy(position, this->position);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::getVelocity(float *velocity){
|
void Object::getVelocity(float *velocity){
|
||||||
vectorCopy(velocity, momentum);
|
vectorCopy(velocity, momentum);
|
||||||
vectorScale(velocity, invmass);
|
vectorScale(velocity, invmass);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::getVelocity(float *velocity, float *point){
|
void Object::getVelocity(float *velocity, float *point){
|
||||||
getVelocity(velocity);
|
getVelocity(velocity);
|
||||||
|
|
||||||
float tangentialvelocity[3];
|
float tangentialvelocity[3];
|
||||||
getTangentialVelocity(tangentialvelocity, point);
|
getTangentialVelocity(tangentialvelocity, point);
|
||||||
//float tv[3];
|
//float tv[3];
|
||||||
//transformVector(tv, tangentialvelocity);
|
//transformVector(tv, tangentialvelocity);
|
||||||
vectorAdd(velocity, tangentialvelocity);
|
vectorAdd(velocity, tangentialvelocity);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::getTangentialVelocity(float *target, float *point){
|
void Object::getTangentialVelocity(float *target, float *point){
|
||||||
if (vectorIsZero(angularmomentum)){
|
if (vectorIsZero(angularmomentum)){
|
||||||
vectorSet(target, 0, 0, 0);
|
vectorSet(target, 0, 0, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
vectorCross(target, angularmomentum, point);
|
vectorCross(target, angularmomentum, point);
|
||||||
vectorScale(target, invmomentofinertia);
|
vectorScale(target, invmomentofinertia);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::getMomentum(float *momentum){
|
void Object::getMomentum(float *momentum){
|
||||||
vectorCopy(momentum, this->momentum);
|
vectorCopy(momentum, this->momentum);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::setMass(float mass){
|
void Object::setMass(float mass){
|
||||||
if (mass == 0) this->invmass = 0;
|
if (mass == 0) this->invmass = 0;
|
||||||
else this->invmass = 1.0 / mass;
|
else this->invmass = 1.0 / mass;
|
||||||
}
|
}
|
||||||
|
|
||||||
float Object::getMass(void){
|
float Object::getMass(void){
|
||||||
if (invmass == 0) return 0;
|
if (invmass == 0) return 0;
|
||||||
return 1.0 / invmass;
|
return 1.0 / invmass;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::setCollisionGroup(int group){
|
void Object::setCollisionGroup(int group){
|
||||||
this->collisiongroup = group;
|
this->collisiongroup = group;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Object::getCollisionGroup(void){
|
int Object::getCollisionGroup(void){
|
||||||
return collisiongroup;
|
return collisiongroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::addImpulse(float *impulse, float *contactpoint){
|
void Object::addImpulse(float *impulse, float *contactpoint){
|
||||||
if (invmass == 0) return;
|
if (invmass == 0) return;
|
||||||
float angularimpulse[3];
|
float angularimpulse[3];
|
||||||
vectorCross(angularimpulse, contactpoint, impulse);
|
vectorCross(angularimpulse, contactpoint, impulse);
|
||||||
vectorAdd(angularmomentum, angularimpulse);
|
vectorAdd(angularmomentum, angularimpulse);
|
||||||
|
|
||||||
vectorAdd(momentum, impulse);
|
vectorAdd(momentum, impulse);
|
||||||
|
|
||||||
float t1[3], t2[3];
|
float t1[3], t2[3];
|
||||||
vectorAdd(t1, contactpoint, position);
|
vectorAdd(t1, contactpoint, position);
|
||||||
vectorNormalize(t2, impulse);
|
vectorNormalize(t2, impulse);
|
||||||
vectorAdd(t2, t1);
|
vectorAdd(t2, t1);
|
||||||
|
|
||||||
//addGraphicsVector(t1, t2, vectorLength(impulse));
|
//addGraphicsVector(t1, t2, vectorLength(impulse));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::addExternalForce(float *force){
|
void Object::addExternalForce(float *force){
|
||||||
float impulse[3];
|
float impulse[3];
|
||||||
vectorScale(impulse, force, DT);
|
vectorScale(impulse, force, DT);
|
||||||
|
|
||||||
float contact[3] = {0, 0, 0};
|
float contact[3] = {0, 0, 0};
|
||||||
this->addImpulse(impulse, contact);
|
this->addImpulse(impulse, contact);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::transformPoint(float *newpoint, float *oldpoint){
|
void Object::transformPoint(float *newpoint, float *oldpoint){
|
||||||
vectorMatrixMultiply(newpoint, oldpoint, rotation);
|
vectorMatrixMultiply(newpoint, oldpoint, rotation);
|
||||||
vectorAdd(newpoint, position);
|
vectorAdd(newpoint, position);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::unTransformPoint(float *newpoint, float *oldpoint){
|
void Object::unTransformPoint(float *newpoint, float *oldpoint){
|
||||||
vectorSub(newpoint, oldpoint, position);
|
vectorSub(newpoint, oldpoint, position);
|
||||||
float rotmat[9];
|
float rotmat[9];
|
||||||
matrixTranspose(rotmat, rotation);
|
matrixTranspose(rotmat, rotation);
|
||||||
vectorMatrixMultiply(newpoint, newpoint, rotmat);
|
vectorMatrixMultiply(newpoint, newpoint, rotmat);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::transformVector(float *newvector, float *oldvector){
|
void Object::transformVector(float *newvector, float *oldvector){
|
||||||
vectorMatrixMultiply(newvector, oldvector, rotation);
|
vectorMatrixMultiply(newvector, oldvector, rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::unTransformVector(float *newvector, float *oldvector){
|
void Object::unTransformVector(float *newvector, float *oldvector){
|
||||||
float rotmat[9];
|
float rotmat[9];
|
||||||
matrixTranspose(rotmat, rotation);
|
matrixTranspose(rotmat, rotation);
|
||||||
vectorMatrixMultiply(newvector, oldvector, rotmat);
|
vectorMatrixMultiply(newvector, oldvector, rotmat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Object::hitForce(float speed, float *speed2, Object *source){
|
void Object::hitForce(float speed, float *speed2, Object *source){
|
||||||
float tolerance = 1.0;
|
float tolerance = 1.0;
|
||||||
if (speed > tolerance){
|
if (speed > tolerance){
|
||||||
Sound *sound;
|
Sound *sound;
|
||||||
if (rand()&1) sound = softhitsound1;
|
if (rand()&1) sound = softhitsound1;
|
||||||
else sound = softhitsound2;
|
else sound = softhitsound2;
|
||||||
float volume = (speed-tolerance)*2;
|
float volume = (speed-tolerance)*2;
|
||||||
if (volume > 1) volume = 1;
|
if (volume > 1) volume = 1;
|
||||||
sound->setVolume(volume);
|
sound->setVolume(volume);
|
||||||
sound->play(30 + random(70));
|
sound->play(30 + random(70));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Object::setGravity(bool enabled){
|
void Object::setGravity(bool enabled){
|
||||||
gravity = enabled;
|
gravity = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::draw(void){
|
void Object::draw(void){
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(position[0], position[1], position[2]);
|
glTranslatef(position[0], position[1], position[2]);
|
||||||
|
|
||||||
GLfloat glmatrix[16] = {
|
|
||||||
rotation[0], rotation[1], rotation[2], 0,
|
|
||||||
rotation[3], rotation[4], rotation[5], 0,
|
|
||||||
rotation[6], rotation[7], rotation[8], 0,
|
|
||||||
0 , 0 , 0 , 1};
|
|
||||||
glMultMatrixf(glmatrix);
|
|
||||||
|
|
||||||
if (appearance != NULL) appearance->draw();
|
GLfloat glmatrix[16] = {
|
||||||
|
rotation[0], rotation[1], rotation[2], 0,
|
||||||
|
rotation[3], rotation[4], rotation[5], 0,
|
||||||
|
rotation[6], rotation[7], rotation[8], 0,
|
||||||
|
0 , 0 , 0 , 1};
|
||||||
|
glMultMatrixf(glmatrix);
|
||||||
|
|
||||||
glPopMatrix();
|
if (appearance != NULL) appearance->draw();
|
||||||
|
|
||||||
|
glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
235
src/object.h
235
src/object.h
|
@ -1,76 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: object.h,v 1.20 2002/07/19 20:33:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: object.h,v $
|
|
||||||
* Revision 1.20 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.19 2002/07/18 23:05:31 msell
|
|
||||||
* Partikkelit ja kakkospelaajan liike
|
|
||||||
*
|
|
||||||
* Revision 1.18 2002/07/17 22:45:54 msell
|
|
||||||
* Ääniä vähän
|
|
||||||
*
|
|
||||||
* Revision 1.17 2002/07/14 21:40:43 msell
|
|
||||||
* Conflictit pois, liikkumiset (hyppy, kävely, lyönti), uusi areena
|
|
||||||
*
|
|
||||||
* Revision 1.16 2002/07/07 23:05:22 msell
|
|
||||||
* Osien liimaaminen toisiinsa (kesken)
|
|
||||||
*
|
|
||||||
* Revision 1.15 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
* Revision 1.14 2002/06/30 16:05:04 msell
|
|
||||||
* Törmäyksien parantelua, transformaatioita mukana
|
|
||||||
*
|
|
||||||
* Revision 1.13 2002/06/27 14:39:48 msell
|
|
||||||
* Toimiva maila :)
|
|
||||||
* Pyörivät kappaleet siis antaa liike-energiaa liikkuville kappaleille (ei toisin päin vielä)
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/06/27 00:08:04 msell
|
|
||||||
* Kimmotukset palloille myös pyöritettyihin mesheihin
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/06/24 14:12:15 msell
|
|
||||||
* Nyt toimii sphere -> mesh -törmäykset, ihan tosi
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/06/15 22:56:37 msell
|
|
||||||
* Säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/06/14 00:05:05 msell
|
|
||||||
* Törmäyssimulaatio kunnossa toivon mukaan
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/06/11 23:11:45 msell
|
|
||||||
* Törmäystarkistusta
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/07 21:16:51 msell
|
|
||||||
* Fysiikkaenginen alkua
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/05 18:39:05 msell
|
|
||||||
* Jotain pientä
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/05 15:00:41 msell
|
|
||||||
* Palikoihin lisää detailia, facet jaetaan halutun kokosiin osiin
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/03 23:20:43 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/03 23:06:38 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/02 16:57:37 msell
|
|
||||||
* Objektirakenteen pohja
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __OBJECT_H_INCLUDED__
|
#ifndef __OBJECT_H_INCLUDED__
|
||||||
#define __OBJECT_H_INCLUDED__
|
#define __OBJECT_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -84,135 +11,135 @@ class Object;
|
||||||
#include "appearance.h"
|
#include "appearance.h"
|
||||||
|
|
||||||
struct objectlist{
|
struct objectlist{
|
||||||
Object *object;
|
Object *object;
|
||||||
objectlist *next;
|
objectlist *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Object{
|
class Object{
|
||||||
public:
|
public:
|
||||||
float invmass;
|
float invmass;
|
||||||
|
|
||||||
/* Linear movement:
|
/* Linear movement:
|
||||||
* position <-> paikka (x)
|
* position <-> paikka (x)
|
||||||
* velocity <-> nopeus (v)
|
* velocity <-> nopeus (v)
|
||||||
* momentum <-> liikemäärä (p)
|
* momentum <-> liikemäärä (p)
|
||||||
* force <-> voima (F)
|
* force <-> voima (F)
|
||||||
* x' = v
|
* x' = v
|
||||||
* p' = F
|
* p' = F
|
||||||
* p = mv
|
* p = mv
|
||||||
* F = ma
|
* F = ma
|
||||||
* v' = a
|
* v' = a
|
||||||
*/
|
*/
|
||||||
|
|
||||||
float position[3];
|
float position[3];
|
||||||
//derivative: velocity = momentum / mass
|
//derivative: velocity = momentum / mass
|
||||||
|
|
||||||
float momentum[3];//, oldmomentum[3];
|
float momentum[3];//, oldmomentum[3];
|
||||||
//derivative: force
|
//derivative: force
|
||||||
|
|
||||||
//float force[3]; //Temporary properties
|
//float force[3]; //Temporary properties
|
||||||
//float externalforce[3];
|
//float externalforce[3];
|
||||||
|
|
||||||
|
|
||||||
/* Angular movement:
|
/* Angular movement:
|
||||||
* rotation <-> orientaatio (R)
|
* rotation <-> orientaatio (R)
|
||||||
* angular velocity <-> kulmanopeus (w)
|
* angular velocity <-> kulmanopeus (w)
|
||||||
* angular momentum <-> pyörimisliikemäärä, vääntömomentti (L)
|
* angular momentum <-> pyörimisliikemäärä, vääntömomentti (L)
|
||||||
* torque <-> voiman momentti (M,T)
|
* torque <-> voiman momentti (M,T)
|
||||||
* moment of inertia <-> hitausmomentti (J,I)
|
* moment of inertia <-> hitausmomentti (J,I)
|
||||||
* angular acceleration <-> kulmakiihtyvyys (a)
|
* angular acceleration <-> kulmakiihtyvyys (a)
|
||||||
* L = J*w
|
* L = J*w
|
||||||
* R' = Star(L) * R
|
* R' = Star(L) * R
|
||||||
* T = J*a
|
* T = J*a
|
||||||
* w' = a
|
* w' = a
|
||||||
* L' = T
|
* L' = T
|
||||||
*/
|
*/
|
||||||
|
|
||||||
float invmomentofinertia;
|
float invmomentofinertia;
|
||||||
|
|
||||||
float rotation[9];
|
float rotation[9];
|
||||||
//derivative: StarOperation(angularvelocity) * rotation
|
//derivative: StarOperation(angularvelocity) * rotation
|
||||||
|
|
||||||
float angularmomentum[3];
|
float angularmomentum[3];
|
||||||
//angular momentum = angular velocity * moment of inertia
|
//angular momentum = angular velocity * moment of inertia
|
||||||
//derivative: torque = angular acceleration * moment of inertia
|
//derivative: torque = angular acceleration * moment of inertia
|
||||||
|
|
||||||
//float torque[3]; //Temporary property
|
//float torque[3]; //Temporary property
|
||||||
|
|
||||||
|
|
||||||
void moveStep(float dt);
|
void moveStep(float dt);
|
||||||
//void applyForces(float dt);
|
//void applyForces(float dt);
|
||||||
|
|
||||||
void calculateStateVariables(void);
|
void calculateStateVariables(void);
|
||||||
|
|
||||||
int collisiongroup;
|
int collisiongroup;
|
||||||
|
|
||||||
void addImpulse(float *impulse, float *contactpoint);
|
void addImpulse(float *impulse, float *contactpoint);
|
||||||
|
|
||||||
Appearance *appearance;
|
Appearance *appearance;
|
||||||
Shape *geometry;
|
Shape *geometry;
|
||||||
|
|
||||||
bool gravity;
|
bool gravity;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Object(void);
|
Object(void);
|
||||||
|
|
||||||
virtual void prepare(void);
|
virtual void prepare(void);
|
||||||
virtual void move(void);
|
virtual void move(void);
|
||||||
virtual void draw(void);
|
virtual void draw(void);
|
||||||
|
|
||||||
void setPosition(float x, float y, float z);
|
void setPosition(float x, float y, float z);
|
||||||
void getPosition(float *position);
|
void getPosition(float *position);
|
||||||
|
|
||||||
//Gets velocity from object and return it in "velocity"
|
//Gets velocity from object and return it in "velocity"
|
||||||
void getVelocity(float *velocity);
|
void getVelocity(float *velocity);
|
||||||
|
|
||||||
//Gets velocity from object for point "point" with
|
//Gets velocity from object for point "point" with
|
||||||
//tangential speed and return it in "velocity"
|
//tangential speed and return it in "velocity"
|
||||||
void getVelocity(float *velocity, float *point);
|
void getVelocity(float *velocity, float *point);
|
||||||
|
|
||||||
void getTangentialVelocity(float *target, float *point);
|
void getTangentialVelocity(float *target, float *point);
|
||||||
|
|
||||||
void getMomentum(float *momentum);
|
void getMomentum(float *momentum);
|
||||||
//void getForce(float *force);
|
//void getForce(float *force);
|
||||||
void setMass(float mass);
|
void setMass(float mass);
|
||||||
float getMass(void);
|
float getMass(void);
|
||||||
void setCollisionGroup(int group);
|
void setCollisionGroup(int group);
|
||||||
int getCollisionGroup(void);
|
int getCollisionGroup(void);
|
||||||
|
|
||||||
void transformPoint(float *newpoint, float *oldpoint);
|
void transformPoint(float *newpoint, float *oldpoint);
|
||||||
void unTransformPoint(float *newpoint, float *oldpoint);
|
void unTransformPoint(float *newpoint, float *oldpoint);
|
||||||
void transformVector(float *newvector, float *oldvector);
|
void transformVector(float *newvector, float *oldvector);
|
||||||
void unTransformVector(float *newvector, float *oldvector);
|
void unTransformVector(float *newvector, float *oldvector);
|
||||||
|
|
||||||
void addExternalForce(float *force);
|
void addExternalForce(float *force);
|
||||||
|
|
||||||
void setGravity(bool enabled);
|
void setGravity(bool enabled);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
virtual void hitForce(float speed, float *speed2, Object *source);
|
virtual void hitForce(float speed, float *speed2, Object *source);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
friend class ObjectLink;
|
|
||||||
//friend void collide(Object *source, Object *target, float *normal, float *contactpoint);
|
|
||||||
friend bool checkCollisions(Object *object, float *contactnormal);
|
friend class ObjectLink;
|
||||||
|
//friend void collide(Object *source, Object *target, float *normal, float *contactpoint);
|
||||||
|
friend bool checkCollisions(Object *object, float *contactnormal);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Temporary state variables
|
//Temporary state variables
|
||||||
float velocity[3];
|
float velocity[3];
|
||||||
float angularvelocity[3];
|
float angularvelocity[3];
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,50 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: objectfactory.cpp,v 1.12 2002/07/22 01:14:14 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: objectfactory.cpp,v $
|
|
||||||
* Revision 1.12 2002/07/22 01:14:14 msell
|
|
||||||
* Lopetussysteemi
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/07/15 20:32:35 msell
|
|
||||||
* Uudet valot ja ulkoasun parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/07/15 15:22:08 msell
|
|
||||||
* Parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/07/14 21:22:39 jkaarlas
|
|
||||||
* skybox ja ukkojen säätö
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/11 18:33:07 jkaarlas
|
|
||||||
* ascloaderi palauttaa nyt meshin
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/07/10 22:22:53 msell
|
|
||||||
* Cartoon-rendaus
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/07/10 22:07:23 jkaarlas
|
|
||||||
* skaalatut ja käännellyt ruumiinosat
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/07/09 19:54:35 msell
|
|
||||||
* intit floateiks asc-loaderista
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/26 22:30:02 jkaarlas
|
|
||||||
* lisätty asc-loaderi
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/24 14:12:15 msell
|
|
||||||
* Nyt toimii sphere -> mesh -törmäykset, ihan tosi
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/23 20:12:19 msell
|
|
||||||
* Parempi törmäystarkistus palloista mesheihin
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/20 22:50:12 msell
|
|
||||||
* Meshit
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/22 01:14:14 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -61,183 +14,183 @@
|
||||||
|
|
||||||
|
|
||||||
MeshObject *createPyramid(float width, float height){
|
MeshObject *createPyramid(float width, float height){
|
||||||
Mesh *mesh = new Mesh();
|
Mesh *mesh = new Mesh();
|
||||||
mesh->vertexcount = 5;
|
mesh->vertexcount = 5;
|
||||||
mesh->vertices = new Vertex[5];
|
mesh->vertices = new Vertex[5];
|
||||||
vectorSet(mesh->vertices[0].position, width, 0, 0);
|
vectorSet(mesh->vertices[0].position, width, 0, 0);
|
||||||
vectorSet(mesh->vertices[0].normal, 1, 0, 0);
|
vectorSet(mesh->vertices[0].normal, 1, 0, 0);
|
||||||
vectorSet(mesh->vertices[1].position, -width, 0, 0);
|
vectorSet(mesh->vertices[1].position, -width, 0, 0);
|
||||||
vectorSet(mesh->vertices[1].normal, -1, 0, 0);
|
vectorSet(mesh->vertices[1].normal, -1, 0, 0);
|
||||||
vectorSet(mesh->vertices[2].position, 0, 0, width);
|
vectorSet(mesh->vertices[2].position, 0, 0, width);
|
||||||
vectorSet(mesh->vertices[2].normal, 0, 0, 1);
|
vectorSet(mesh->vertices[2].normal, 0, 0, 1);
|
||||||
vectorSet(mesh->vertices[3].position, 0, 0, -width);
|
vectorSet(mesh->vertices[3].position, 0, 0, -width);
|
||||||
vectorSet(mesh->vertices[3].normal, 0, 0, -1);
|
vectorSet(mesh->vertices[3].normal, 0, 0, -1);
|
||||||
vectorSet(mesh->vertices[4].position, 0, height, 0);
|
vectorSet(mesh->vertices[4].position, 0, height, 0);
|
||||||
vectorSet(mesh->vertices[4].normal, 0, 1, 0);
|
vectorSet(mesh->vertices[4].normal, 0, 1, 0);
|
||||||
|
|
||||||
mesh->polygoncount = 5;
|
mesh->polygoncount = 5;
|
||||||
mesh->polygons = new class Polygon[5];
|
mesh->polygons = new class Polygon[5];
|
||||||
|
|
||||||
mesh->polygons[0].vertexcount = 3;
|
mesh->polygons[0].vertexcount = 3;
|
||||||
mesh->polygons[0].vertices = new Vertex *[3];
|
mesh->polygons[0].vertices = new Vertex *[3];
|
||||||
mesh->polygons[0].vertices[0] = &mesh->vertices[4];
|
mesh->polygons[0].vertices[0] = &mesh->vertices[4];
|
||||||
mesh->polygons[0].vertices[1] = &mesh->vertices[0];
|
mesh->polygons[0].vertices[1] = &mesh->vertices[0];
|
||||||
mesh->polygons[0].vertices[2] = &mesh->vertices[3];
|
mesh->polygons[0].vertices[2] = &mesh->vertices[3];
|
||||||
|
|
||||||
mesh->polygons[1].vertexcount = 3;
|
mesh->polygons[1].vertexcount = 3;
|
||||||
mesh->polygons[1].vertices = new Vertex *[3];
|
mesh->polygons[1].vertices = new Vertex *[3];
|
||||||
mesh->polygons[1].vertices[0] = &mesh->vertices[4];
|
mesh->polygons[1].vertices[0] = &mesh->vertices[4];
|
||||||
mesh->polygons[1].vertices[1] = &mesh->vertices[3];
|
mesh->polygons[1].vertices[1] = &mesh->vertices[3];
|
||||||
mesh->polygons[1].vertices[2] = &mesh->vertices[1];
|
mesh->polygons[1].vertices[2] = &mesh->vertices[1];
|
||||||
|
|
||||||
mesh->polygons[2].vertexcount = 3;
|
mesh->polygons[2].vertexcount = 3;
|
||||||
mesh->polygons[2].vertices = new Vertex *[3];
|
mesh->polygons[2].vertices = new Vertex *[3];
|
||||||
mesh->polygons[2].vertices[0] = &mesh->vertices[4];
|
mesh->polygons[2].vertices[0] = &mesh->vertices[4];
|
||||||
mesh->polygons[2].vertices[1] = &mesh->vertices[1];
|
mesh->polygons[2].vertices[1] = &mesh->vertices[1];
|
||||||
mesh->polygons[2].vertices[2] = &mesh->vertices[2];
|
mesh->polygons[2].vertices[2] = &mesh->vertices[2];
|
||||||
|
|
||||||
mesh->polygons[3].vertexcount = 3;
|
mesh->polygons[3].vertexcount = 3;
|
||||||
mesh->polygons[3].vertices = new Vertex *[3];
|
mesh->polygons[3].vertices = new Vertex *[3];
|
||||||
mesh->polygons[3].vertices[0] = &mesh->vertices[4];
|
mesh->polygons[3].vertices[0] = &mesh->vertices[4];
|
||||||
mesh->polygons[3].vertices[1] = &mesh->vertices[2];
|
mesh->polygons[3].vertices[1] = &mesh->vertices[2];
|
||||||
mesh->polygons[3].vertices[2] = &mesh->vertices[0];
|
mesh->polygons[3].vertices[2] = &mesh->vertices[0];
|
||||||
|
|
||||||
mesh->polygons[4].vertexcount = 4;
|
mesh->polygons[4].vertexcount = 4;
|
||||||
mesh->polygons[4].vertices = new Vertex *[4];
|
mesh->polygons[4].vertices = new Vertex *[4];
|
||||||
mesh->polygons[4].vertices[0] = &mesh->vertices[0];
|
mesh->polygons[4].vertices[0] = &mesh->vertices[0];
|
||||||
mesh->polygons[4].vertices[1] = &mesh->vertices[2];
|
mesh->polygons[4].vertices[1] = &mesh->vertices[2];
|
||||||
mesh->polygons[4].vertices[2] = &mesh->vertices[1];
|
mesh->polygons[4].vertices[2] = &mesh->vertices[1];
|
||||||
mesh->polygons[4].vertices[3] = &mesh->vertices[3];
|
mesh->polygons[4].vertices[3] = &mesh->vertices[3];
|
||||||
|
|
||||||
mesh->polygons[0].smooth = false;
|
mesh->polygons[0].smooth = false;
|
||||||
mesh->polygons[1].smooth = false;
|
mesh->polygons[1].smooth = false;
|
||||||
mesh->polygons[2].smooth = false;
|
mesh->polygons[2].smooth = false;
|
||||||
mesh->polygons[3].smooth = false;
|
mesh->polygons[3].smooth = false;
|
||||||
mesh->polygons[4].smooth = false;
|
mesh->polygons[4].smooth = false;
|
||||||
|
|
||||||
mesh->createPlanes();
|
mesh->createPlanes();
|
||||||
|
|
||||||
MeshObject *object = new MeshObject(mesh);
|
MeshObject *object = new MeshObject(mesh);
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
MeshObject *createSpherePool(float width, float height){
|
MeshObject *createSpherePool(float width, float height){
|
||||||
int grid = 16;
|
int grid = 16;
|
||||||
|
|
||||||
Mesh *mesh = new Mesh();
|
Mesh *mesh = new Mesh();
|
||||||
mesh->vertexcount = (grid+1)*(grid+1);
|
mesh->vertexcount = (grid+1)*(grid+1);
|
||||||
mesh->vertices = new Vertex[mesh->vertexcount];
|
mesh->vertices = new Vertex[mesh->vertexcount];
|
||||||
|
|
||||||
int x, z;
|
int x, z;
|
||||||
for (z = 0; z < grid; z++){
|
for (z = 0; z < grid; z++){
|
||||||
float pz = (2.0*z/(grid-1) - 1)*width;
|
float pz = (2.0*z/(grid-1) - 1)*width;
|
||||||
for (x = 0; x < grid; x++){
|
for (x = 0; x < grid; x++){
|
||||||
float px = (2.0*x/(grid-1) - 1)*width;
|
float px = (2.0*x/(grid-1) - 1)*width;
|
||||||
|
|
||||||
//float py = randomf(1);
|
//float py = randomf(1);
|
||||||
float l = sqrt(pz*pz + px*px)*1;
|
float l = sqrt(pz*pz + px*px)*1;
|
||||||
if (l > width) l = width;
|
if (l > width) l = width;
|
||||||
l = l/width;
|
l = l/width;
|
||||||
//l = l*l;
|
//l = l*l;
|
||||||
float py = height*(sin(PI*(1.5+l*2))+1)/2;
|
float py = height*(sin(PI*(1.5+l*2))+1)/2;
|
||||||
vectorSet(mesh->vertices[z * grid + x].position, px, py, pz);
|
vectorSet(mesh->vertices[z * grid + x].position, px, py, pz);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mesh->polygoncount = (grid-1)*(grid-1);
|
mesh->polygoncount = (grid-1)*(grid-1);
|
||||||
mesh->polygons = new class Polygon[mesh->polygoncount];
|
mesh->polygons = new class Polygon[mesh->polygoncount];
|
||||||
for (z = 0; z < grid-1; z++){
|
for (z = 0; z < grid-1; z++){
|
||||||
for (x = 0; x < grid-1; x++){
|
for (x = 0; x < grid-1; x++){
|
||||||
class Polygon *poly = &mesh->polygons[z * (grid-1) + x];
|
class Polygon *poly = &mesh->polygons[z * (grid-1) + x];
|
||||||
poly->vertexcount = 4;
|
poly->vertexcount = 4;
|
||||||
poly->vertices = new Vertex *[4];
|
poly->vertices = new Vertex *[4];
|
||||||
|
|
||||||
poly->vertices[0] = &mesh->vertices[z * grid + x + 1];
|
poly->vertices[0] = &mesh->vertices[z * grid + x + 1];
|
||||||
poly->vertices[1] = &mesh->vertices[z * grid + x ];
|
poly->vertices[1] = &mesh->vertices[z * grid + x ];
|
||||||
poly->vertices[2] = &mesh->vertices[(z + 1) * grid + x];
|
poly->vertices[2] = &mesh->vertices[(z + 1) * grid + x];
|
||||||
poly->vertices[3] = &mesh->vertices[(z + 1) * grid + x + 1];
|
poly->vertices[3] = &mesh->vertices[(z + 1) * grid + x + 1];
|
||||||
|
|
||||||
poly->smooth = true;
|
poly->smooth = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
mesh->createPlanes();
|
mesh->createPlanes();
|
||||||
mesh->createVertexnormals();
|
mesh->createVertexnormals();
|
||||||
|
|
||||||
MeshObject *object = new MeshObject(mesh);
|
MeshObject *object = new MeshObject(mesh);
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
Mesh *createBox(float x1, float x2, float y1, float y2, float z1, float z2){
|
Mesh *createBox(float x1, float x2, float y1, float y2, float z1, float z2){
|
||||||
Mesh *mesh = new Mesh();
|
Mesh *mesh = new Mesh();
|
||||||
mesh->vertexcount = 8;
|
mesh->vertexcount = 8;
|
||||||
mesh->vertices = new Vertex[8];
|
mesh->vertices = new Vertex[8];
|
||||||
vectorSet(mesh->vertices[0].position, x1, y1, z1);
|
vectorSet(mesh->vertices[0].position, x1, y1, z1);
|
||||||
vectorSet(mesh->vertices[1].position, x2, y1, z1);
|
vectorSet(mesh->vertices[1].position, x2, y1, z1);
|
||||||
vectorSet(mesh->vertices[2].position, x1, y2, z1);
|
vectorSet(mesh->vertices[2].position, x1, y2, z1);
|
||||||
vectorSet(mesh->vertices[3].position, x2, y2, z1);
|
vectorSet(mesh->vertices[3].position, x2, y2, z1);
|
||||||
vectorSet(mesh->vertices[4].position, x1, y1, z2);
|
vectorSet(mesh->vertices[4].position, x1, y1, z2);
|
||||||
vectorSet(mesh->vertices[5].position, x2, y1, z2);
|
vectorSet(mesh->vertices[5].position, x2, y1, z2);
|
||||||
vectorSet(mesh->vertices[6].position, x1, y2, z2);
|
vectorSet(mesh->vertices[6].position, x1, y2, z2);
|
||||||
vectorSet(mesh->vertices[7].position, x2, y2, z2);
|
vectorSet(mesh->vertices[7].position, x2, y2, z2);
|
||||||
|
|
||||||
mesh->polygoncount = 6;
|
mesh->polygoncount = 6;
|
||||||
mesh->polygons = new class Polygon[6];
|
mesh->polygons = new class Polygon[6];
|
||||||
|
|
||||||
//Back
|
//Back
|
||||||
mesh->polygons[0].vertexcount = 4;
|
mesh->polygons[0].vertexcount = 4;
|
||||||
mesh->polygons[0].vertices = new Vertex *[4];
|
mesh->polygons[0].vertices = new Vertex *[4];
|
||||||
mesh->polygons[0].vertices[0] = &mesh->vertices[0];
|
mesh->polygons[0].vertices[0] = &mesh->vertices[0];
|
||||||
mesh->polygons[0].vertices[1] = &mesh->vertices[2];
|
mesh->polygons[0].vertices[1] = &mesh->vertices[2];
|
||||||
mesh->polygons[0].vertices[2] = &mesh->vertices[3];
|
mesh->polygons[0].vertices[2] = &mesh->vertices[3];
|
||||||
mesh->polygons[0].vertices[3] = &mesh->vertices[1];
|
mesh->polygons[0].vertices[3] = &mesh->vertices[1];
|
||||||
|
|
||||||
//Front
|
//Front
|
||||||
mesh->polygons[1].vertexcount = 4;
|
mesh->polygons[1].vertexcount = 4;
|
||||||
mesh->polygons[1].vertices = new Vertex *[4];
|
mesh->polygons[1].vertices = new Vertex *[4];
|
||||||
mesh->polygons[1].vertices[0] = &mesh->vertices[4];
|
mesh->polygons[1].vertices[0] = &mesh->vertices[4];
|
||||||
mesh->polygons[1].vertices[1] = &mesh->vertices[5];
|
mesh->polygons[1].vertices[1] = &mesh->vertices[5];
|
||||||
mesh->polygons[1].vertices[2] = &mesh->vertices[7];
|
mesh->polygons[1].vertices[2] = &mesh->vertices[7];
|
||||||
mesh->polygons[1].vertices[3] = &mesh->vertices[6];
|
mesh->polygons[1].vertices[3] = &mesh->vertices[6];
|
||||||
|
|
||||||
//Left
|
//Left
|
||||||
mesh->polygons[2].vertexcount = 4;
|
mesh->polygons[2].vertexcount = 4;
|
||||||
mesh->polygons[2].vertices = new Vertex *[4];
|
mesh->polygons[2].vertices = new Vertex *[4];
|
||||||
mesh->polygons[2].vertices[0] = &mesh->vertices[0];
|
mesh->polygons[2].vertices[0] = &mesh->vertices[0];
|
||||||
mesh->polygons[2].vertices[1] = &mesh->vertices[4];
|
mesh->polygons[2].vertices[1] = &mesh->vertices[4];
|
||||||
mesh->polygons[2].vertices[2] = &mesh->vertices[6];
|
mesh->polygons[2].vertices[2] = &mesh->vertices[6];
|
||||||
mesh->polygons[2].vertices[3] = &mesh->vertices[2];
|
mesh->polygons[2].vertices[3] = &mesh->vertices[2];
|
||||||
|
|
||||||
//Right
|
//Right
|
||||||
mesh->polygons[3].vertexcount = 4;
|
mesh->polygons[3].vertexcount = 4;
|
||||||
mesh->polygons[3].vertices = new Vertex *[4];
|
mesh->polygons[3].vertices = new Vertex *[4];
|
||||||
mesh->polygons[3].vertices[0] = &mesh->vertices[1];
|
mesh->polygons[3].vertices[0] = &mesh->vertices[1];
|
||||||
mesh->polygons[3].vertices[1] = &mesh->vertices[3];
|
mesh->polygons[3].vertices[1] = &mesh->vertices[3];
|
||||||
mesh->polygons[3].vertices[2] = &mesh->vertices[7];
|
mesh->polygons[3].vertices[2] = &mesh->vertices[7];
|
||||||
mesh->polygons[3].vertices[3] = &mesh->vertices[5];
|
mesh->polygons[3].vertices[3] = &mesh->vertices[5];
|
||||||
|
|
||||||
//Top
|
//Top
|
||||||
mesh->polygons[4].vertexcount = 4;
|
mesh->polygons[4].vertexcount = 4;
|
||||||
mesh->polygons[4].vertices = new Vertex *[4];
|
mesh->polygons[4].vertices = new Vertex *[4];
|
||||||
mesh->polygons[4].vertices[0] = &mesh->vertices[2];
|
mesh->polygons[4].vertices[0] = &mesh->vertices[2];
|
||||||
mesh->polygons[4].vertices[1] = &mesh->vertices[6];
|
mesh->polygons[4].vertices[1] = &mesh->vertices[6];
|
||||||
mesh->polygons[4].vertices[2] = &mesh->vertices[7];
|
mesh->polygons[4].vertices[2] = &mesh->vertices[7];
|
||||||
mesh->polygons[4].vertices[3] = &mesh->vertices[3];
|
mesh->polygons[4].vertices[3] = &mesh->vertices[3];
|
||||||
|
|
||||||
//Bottom
|
//Bottom
|
||||||
mesh->polygons[5].vertexcount = 4;
|
mesh->polygons[5].vertexcount = 4;
|
||||||
mesh->polygons[5].vertices = new Vertex *[4];
|
mesh->polygons[5].vertices = new Vertex *[4];
|
||||||
mesh->polygons[5].vertices[0] = &mesh->vertices[0];
|
mesh->polygons[5].vertices[0] = &mesh->vertices[0];
|
||||||
mesh->polygons[5].vertices[1] = &mesh->vertices[1];
|
mesh->polygons[5].vertices[1] = &mesh->vertices[1];
|
||||||
mesh->polygons[5].vertices[2] = &mesh->vertices[5];
|
mesh->polygons[5].vertices[2] = &mesh->vertices[5];
|
||||||
mesh->polygons[5].vertices[3] = &mesh->vertices[4];
|
mesh->polygons[5].vertices[3] = &mesh->vertices[4];
|
||||||
|
|
||||||
mesh->createPlanes();
|
mesh->createPlanes();
|
||||||
mesh->createEdges();
|
mesh->createEdges();
|
||||||
//mesh->createVertexnormals();
|
//mesh->createVertexnormals();
|
||||||
|
|
||||||
return mesh;
|
return mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -259,14 +212,14 @@ char* findStringEnd(char* data, char* findstring){
|
||||||
}
|
}
|
||||||
|
|
||||||
Mesh* loadAscModel(char *filename, float scale){
|
Mesh* loadAscModel(char *filename, float scale){
|
||||||
float zeroOffset[3] = {0.0, 0.0, 0.0};
|
float zeroOffset[3] = {0.0, 0.0, 0.0};
|
||||||
return loadAscModel(filename, scale, (float*)zeroOffset);
|
return loadAscModel(filename, scale, (float*)zeroOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
Mesh* loadAscModel(char *filename, float scale, float* offset){
|
Mesh* loadAscModel(char *filename, float scale, float* offset){
|
||||||
|
|
||||||
Mesh* target = new Mesh();
|
Mesh* target = new Mesh();
|
||||||
|
|
||||||
|
|
||||||
FILE* file;
|
FILE* file;
|
||||||
float x, y, z;
|
float x, y, z;
|
||||||
|
@ -287,7 +240,7 @@ Mesh* loadAscModel(char *filename, float scale, float* offset){
|
||||||
target->polygoncount=getValueFromString(face);
|
target->polygoncount=getValueFromString(face);
|
||||||
target->vertices = new Vertex[target->vertexcount];
|
target->vertices = new Vertex[target->vertexcount];
|
||||||
target->polygons = new class Polygon[target->polygoncount];
|
target->polygons = new class Polygon[target->polygoncount];
|
||||||
|
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -311,7 +264,7 @@ Mesh* loadAscModel(char *filename, float scale, float* offset){
|
||||||
}
|
}
|
||||||
int vnum;
|
int vnum;
|
||||||
face=findStringEnd(data,"Face list:");
|
face=findStringEnd(data,"Face list:");
|
||||||
|
|
||||||
|
|
||||||
for (i=0;i<target->polygoncount;i++){
|
for (i=0;i<target->polygoncount;i++){
|
||||||
face=findStringEnd(face,"Face");
|
face=findStringEnd(face,"Face");
|
||||||
|
@ -320,25 +273,25 @@ Mesh* loadAscModel(char *filename, float scale, float* offset){
|
||||||
target->polygons[i].vertexcount = 3;
|
target->polygons[i].vertexcount = 3;
|
||||||
target->polygons[i].vertices = new Vertex *[3];
|
target->polygons[i].vertices = new Vertex *[3];
|
||||||
target->polygons[i].vertices[0]=&(target->vertices[vnum]);
|
target->polygons[i].vertices[0]=&(target->vertices[vnum]);
|
||||||
target->polygons[i].vertices[0]->setTexCoords(target->vertices[vnum].texcoords[0],
|
target->polygons[i].vertices[0]->setTexCoords(target->vertices[vnum].texcoords[0],
|
||||||
target->vertices[vnum].texcoords[1]);
|
target->vertices[vnum].texcoords[1]);
|
||||||
face=findStringEnd(face,"B:");
|
face=findStringEnd(face,"B:");
|
||||||
vnum=getValueFromString(face);
|
vnum=getValueFromString(face);
|
||||||
target->polygons[i].vertices[1]=&(target->vertices[vnum]);
|
target->polygons[i].vertices[1]=&(target->vertices[vnum]);
|
||||||
target->polygons[i].vertices[1]->setTexCoords(target->vertices[vnum].texcoords[0],
|
target->polygons[i].vertices[1]->setTexCoords(target->vertices[vnum].texcoords[0],
|
||||||
target->vertices[vnum].texcoords[1]);
|
target->vertices[vnum].texcoords[1]);
|
||||||
face=findStringEnd(face,"C:");
|
face=findStringEnd(face,"C:");
|
||||||
vnum=getValueFromString(face);
|
vnum=getValueFromString(face);
|
||||||
target->polygons[i].vertices[2]=&(target->vertices[vnum]);
|
target->polygons[i].vertices[2]=&(target->vertices[vnum]);
|
||||||
target->polygons[i].vertices[2]->setTexCoords(target->vertices[vnum].texcoords[0],
|
target->polygons[i].vertices[2]->setTexCoords(target->vertices[vnum].texcoords[0],
|
||||||
target->vertices[vnum].texcoords[1]);
|
target->vertices[vnum].texcoords[1]);
|
||||||
char *face2=findStringEnd(face,"Nosmooth");
|
char *face2=findStringEnd(face,"Nosmooth");
|
||||||
char *face3=findStringEnd(face,"Smoothing");
|
char *face3=findStringEnd(face,"Smoothing");
|
||||||
if (face2 > face && face2 < face3) target->polygons[i].realsmooth = true;
|
if (face2 > face && face2 < face3) target->polygons[i].realsmooth = true;
|
||||||
}
|
}
|
||||||
free(data);
|
free(data);
|
||||||
data = NULL;
|
data = NULL;
|
||||||
//target->createEdges();
|
//target->createEdges();
|
||||||
target->createPlanes();
|
target->createPlanes();
|
||||||
target->createVertexnormals();
|
target->createVertexnormals();
|
||||||
//return new MeshObject(target);
|
//return new MeshObject(target);
|
||||||
|
@ -346,26 +299,26 @@ Mesh* loadAscModel(char *filename, float scale, float* offset){
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawTrophy(void){
|
void drawTrophy(void){
|
||||||
point2d points[14];
|
point2d points[14];
|
||||||
|
|
||||||
int width = 3;
|
int width = 3;
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
points[i].x = 0.0; points[i].y = 0.0; i++;
|
points[i].x = 0.0; points[i].y = 0.0; i++;
|
||||||
points[i].x = width; points[i].y = 0.0; i++;
|
points[i].x = width; points[i].y = 0.0; i++;
|
||||||
points[i].x = width-2; points[i].y = 2.0; i++;
|
points[i].x = width-2; points[i].y = 2.0; i++;
|
||||||
points[i].x = width-2; points[i].y = 3.0; i++;
|
points[i].x = width-2; points[i].y = 3.0; i++;
|
||||||
points[i].x = width-1; points[i].y = 4.0; i++;
|
points[i].x = width-1; points[i].y = 4.0; i++;
|
||||||
points[i].x = width-2; points[i].y = 5.0; i++;
|
points[i].x = width-2; points[i].y = 5.0; i++;
|
||||||
points[i].x = width-2; points[i].y = 6.0; i++;
|
points[i].x = width-2; points[i].y = 6.0; i++;
|
||||||
points[i].x = width-1; points[i].y = 8.0; i++;
|
points[i].x = width-1; points[i].y = 8.0; i++;
|
||||||
points[i].x = width; points[i].y = 9.0; i++;
|
points[i].x = width; points[i].y = 9.0; i++;
|
||||||
points[i].x = width+1; points[i].y = 11.0; i++;
|
points[i].x = width+1; points[i].y = 11.0; i++;
|
||||||
points[i].x = width+2; points[i].y = 15.0; i++;
|
points[i].x = width+2; points[i].y = 15.0; i++;
|
||||||
points[i].x = width+3; points[i].y = 21.0; i++;
|
points[i].x = width+3; points[i].y = 21.0; i++;
|
||||||
points[i].x = width+2; points[i].y = 21.0; i++;
|
points[i].x = width+2; points[i].y = 21.0; i++;
|
||||||
points[i].x = 0.0; points[i].y = 8.0; i++;
|
points[i].x = 0.0; points[i].y = 8.0; i++;
|
||||||
|
|
||||||
createLathedSurface(points, NULL, i, i*5, i*10);
|
createLathedSurface(points, NULL, i, i*5, i*10);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,35 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: objectfactory.h,v 1.7 2002/07/22 01:14:14 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: objectfactory.h,v $
|
|
||||||
* Revision 1.7 2002/07/22 01:14:14 msell
|
|
||||||
* Lopetussysteemi
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/07/14 21:22:39 jkaarlas
|
|
||||||
* skybox ja ukkojen säätö
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/07/11 18:33:06 jkaarlas
|
|
||||||
* ascloaderi palauttaa nyt meshin
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/26 22:30:02 jkaarlas
|
|
||||||
* lisätty asc-loaderi
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/24 14:12:15 msell
|
|
||||||
* Nyt toimii sphere -> mesh -törmäykset, ihan tosi
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/20 22:50:12 msell
|
|
||||||
* Meshit
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/22 01:14:14 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __OBJECTFACTORY_H_INCLUDED__
|
#ifndef __OBJECTFACTORY_H_INCLUDED__
|
||||||
#define __OBJECTFACTORY_H_INCLUDED__
|
#define __OBJECTFACTORY_H_INCLUDED__
|
||||||
|
|
||||||
|
|
202
src/particle.cpp
202
src/particle.cpp
|
@ -1,17 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: particle.cpp,v 1.1 2002/07/19 12:10:53 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: particle.cpp,v $
|
|
||||||
* Revision 1.1 2002/07/19 12:10:53 msell
|
|
||||||
* Hups
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 12:10:53 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@ -26,7 +12,7 @@
|
||||||
|
|
||||||
|
|
||||||
Particle::Particle(World *world, Mesh *mesh) : MeshObject(mesh){
|
Particle::Particle(World *world, Mesh *mesh) : MeshObject(mesh){
|
||||||
this->world = world;
|
this->world = world;
|
||||||
}
|
}
|
||||||
|
|
||||||
Contact *contact = new Contact();
|
Contact *contact = new Contact();
|
||||||
|
@ -34,132 +20,132 @@ Contact *contact = new Contact();
|
||||||
int bloodcount;
|
int bloodcount;
|
||||||
|
|
||||||
void Particle::move(void){
|
void Particle::move(void){
|
||||||
/*if (position[1] + momentum[1] < 0.5){
|
/*if (position[1] + momentum[1] < 0.5){
|
||||||
currentparticle->velocity.x*=0.8;
|
currentparticle->velocity.x*=0.8;
|
||||||
currentparticle->velocity.y=fabs(currentparticle->velocity.y)*0.8;
|
currentparticle->velocity.y=fabs(currentparticle->velocity.y)*0.8;
|
||||||
currentparticle->velocity.z*=0.8;
|
currentparticle->velocity.z*=0.8;
|
||||||
currentparticle->bounces++;
|
currentparticle->bounces++;
|
||||||
}
|
}
|
||||||
currentparticle->position.x+=currentparticle->velocity.x;
|
currentparticle->position.x+=currentparticle->velocity.x;
|
||||||
currentparticle->position.y+=currentparticle->velocity.y;
|
currentparticle->position.y+=currentparticle->velocity.y;
|
||||||
currentparticle->position.z+=currentparticle->velocity.z;
|
currentparticle->position.z+=currentparticle->velocity.z;
|
||||||
currentparticle->angle.x+=currentparticle->velocity.x*50;
|
currentparticle->angle.x+=currentparticle->velocity.x*50;
|
||||||
currentparticle->angle.y+=currentparticle->velocity.y*50;
|
currentparticle->angle.y+=currentparticle->velocity.y*50;
|
||||||
currentparticle->angle.z+=currentparticle->velocity.z*50;
|
currentparticle->angle.z+=currentparticle->velocity.z*50;
|
||||||
currentparticle->velocity.y-=0.003;
|
currentparticle->velocity.y-=0.003;
|
||||||
if (currentparticle->bounces==3) dieParticle(currentparticle);*/
|
if (currentparticle->bounces==3) dieParticle(currentparticle);*/
|
||||||
momentum[1] -= 0.02;
|
momentum[1] -= 0.02;
|
||||||
int i;
|
int i;
|
||||||
vectorSet(contact->normal, 0, 1, 0);
|
vectorSet(contact->normal, 0, 1, 0);
|
||||||
contact->object2 = NULL;
|
contact->object2 = NULL;
|
||||||
bool die = false;
|
bool die = false;
|
||||||
for (i = 0; i < mesh->vertexcount; i++){
|
for (i = 0; i < mesh->vertexcount; i++){
|
||||||
float point[3];
|
float point[3];
|
||||||
transformPoint(point, mesh->vertices[i].position);
|
transformPoint(point, mesh->vertices[i].position);
|
||||||
if (point[1] < 0){
|
if (point[1] < 0){
|
||||||
contact->object1 = this;
|
contact->object1 = this;
|
||||||
vectorCopy(contact->position, point);
|
vectorCopy(contact->position, point);
|
||||||
handleCollision(contact);
|
handleCollision(contact);
|
||||||
/*float impulse[3];
|
/*float impulse[3];
|
||||||
getMomentum(impulse);
|
getMomentum(impulse);
|
||||||
impulse[0] = 0;
|
impulse[0] = 0;
|
||||||
impulse[1] = fabs(impulse[1]);
|
impulse[1] = fabs(impulse[1]);
|
||||||
impulse[2] = 0;
|
impulse[2] = 0;
|
||||||
vectorScale(impulse, 1.1);
|
vectorScale(impulse, 1.1);
|
||||||
addImpulse(impulse, point);
|
addImpulse(impulse, point);
|
||||||
position[1] -= point[1];
|
position[1] -= point[1];
|
||||||
momentum[1] = impulse[1]*0.5;*/
|
momentum[1] = impulse[1]*0.5;*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*if (vectorLength(momentum) < 0.5) die = true;
|
/*if (vectorLength(momentum) < 0.5) die = true;
|
||||||
if (die) removeBlood(id);*/
|
if (die) removeBlood(id);*/
|
||||||
lifetime++;
|
lifetime++;
|
||||||
Object::move();
|
Object::move();
|
||||||
|
|
||||||
if (lifetime > 300) removeBlood(id);
|
if (lifetime > 300) removeBlood(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Particle::hitForce(float speed, Object *source){
|
void Particle::hitForce(float speed, Object *source){
|
||||||
/*bounces++;
|
/*bounces++;
|
||||||
if (bounces == 2){
|
if (bounces == 2){
|
||||||
removeBlood(id);
|
removeBlood(id);
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void Particle::create(float *position, float *velocity){
|
void Particle::create(float *position, float *velocity){
|
||||||
vectorCopy(this->position, position);
|
vectorCopy(this->position, position);
|
||||||
vectorCopy(this->momentum, velocity);
|
vectorCopy(this->momentum, velocity);
|
||||||
float rotate[3] = {randomf(2)-1, randomf(2)-1, randomf(2)-1};
|
float rotate[3] = {randomf(2)-1, randomf(2)-1, randomf(2)-1};
|
||||||
vectorCopy(this->angularmomentum, rotate);
|
vectorCopy(this->angularmomentum, rotate);
|
||||||
bounces = 0;
|
bounces = 0;
|
||||||
lifetime = 0;
|
lifetime = 0;
|
||||||
world->addParticle(this);
|
world->addParticle(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Particle::destroy(void){
|
void Particle::destroy(void){
|
||||||
world->removeParticle(this);
|
world->removeParticle(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Particle **bloodparticles;
|
Particle **bloodparticles;
|
||||||
|
|
||||||
BloodAppearance::BloodAppearance(int *lifetime) : BasicBlockAppearance(1, 1, 1){
|
BloodAppearance::BloodAppearance(int *lifetime) : BasicBlockAppearance(1, 1, 1){
|
||||||
this->lifetime = lifetime;
|
this->lifetime = lifetime;
|
||||||
usematerial = false;
|
usematerial = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BloodAppearance::draw(void){
|
void BloodAppearance::draw(void){
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
float alpha = 1-*lifetime*0.003;
|
float alpha = 1-*lifetime*0.003;
|
||||||
if (alpha < 0) alpha = 0;
|
if (alpha < 0) alpha = 0;
|
||||||
|
|
||||||
glColor4f(1, 0, 0, alpha);//1.0/(1+*lifetime*0.004));
|
glColor4f(1, 0, 0, alpha);//1.0/(1+*lifetime*0.004));
|
||||||
|
|
||||||
glScalef(0.5, 0.5, 0.5);
|
glScalef(0.5, 0.5, 0.5);
|
||||||
BasicBlockAppearance::draw();
|
BasicBlockAppearance::draw();
|
||||||
|
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
|
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
World *bloodworld;
|
World *bloodworld;
|
||||||
|
|
||||||
void initBloods(World *world){
|
void initBloods(World *world){
|
||||||
bloodcount = 0;
|
bloodcount = 0;
|
||||||
bloodparticles = new Particle *[MAXBLOOD];
|
bloodparticles = new Particle *[MAXBLOOD];
|
||||||
int i;
|
int i;
|
||||||
Mesh *bloodmesh = createBox(-0.5, 0.5, -0.5*BLOCKHEIGHT, 0.5*BLOCKHEIGHT, -0.5, 0.5);
|
Mesh *bloodmesh = createBox(-0.5, 0.5, -0.5*BLOCKHEIGHT, 0.5*BLOCKHEIGHT, -0.5, 0.5);
|
||||||
for (i = 0; i < MAXBLOOD; i++){
|
for (i = 0; i < MAXBLOOD; i++){
|
||||||
bloodparticles[i] = new Particle(world, bloodmesh);
|
bloodparticles[i] = new Particle(world, bloodmesh);
|
||||||
bloodparticles[i]->appearance = new BloodAppearance(&(bloodparticles[i]->lifetime));
|
bloodparticles[i]->appearance = new BloodAppearance(&(bloodparticles[i]->lifetime));
|
||||||
bloodparticles[i]->setMass(1);
|
bloodparticles[i]->setMass(1);
|
||||||
bloodparticles[i]->prepare();
|
bloodparticles[i]->prepare();
|
||||||
//bloodparticles[i]->setGravity(true);
|
//bloodparticles[i]->setGravity(true);
|
||||||
//bloodparticles[i]->setCollisionGroup(COLLISIONGROUP_PARTICLE);
|
//bloodparticles[i]->setCollisionGroup(COLLISIONGROUP_PARTICLE);
|
||||||
//bloodparticles[i]->id = i;
|
//bloodparticles[i]->id = i;
|
||||||
}
|
}
|
||||||
bloodworld = world;
|
bloodworld = world;
|
||||||
}
|
}
|
||||||
|
|
||||||
void createBlood(float *position, float *velocity){
|
void createBlood(float *position, float *velocity){
|
||||||
if (bloodcount < MAXBLOOD){
|
if (bloodcount < MAXBLOOD){
|
||||||
Particle *currentparticle = bloodparticles[bloodcount];
|
Particle *currentparticle = bloodparticles[bloodcount];
|
||||||
currentparticle->create(position, velocity);
|
currentparticle->create(position, velocity);
|
||||||
currentparticle->id = bloodcount;
|
currentparticle->id = bloodcount;
|
||||||
bloodcount++;
|
bloodcount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void removeBlood(int id){
|
void removeBlood(int id){
|
||||||
Particle *particle = bloodparticles[id];
|
Particle *particle = bloodparticles[id];
|
||||||
particle->destroy();
|
particle->destroy();
|
||||||
bloodparticles[id] = bloodparticles[bloodcount-1];
|
bloodparticles[id] = bloodparticles[bloodcount-1];
|
||||||
bloodparticles[id]->id = id;
|
bloodparticles[id]->id = id;
|
||||||
bloodparticles[bloodcount-1] = particle;
|
bloodparticles[bloodcount-1] = particle;
|
||||||
bloodcount--;
|
bloodcount--;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: particle.h,v 1.2 2002/07/19 20:33:28 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: particle.h,v $
|
|
||||||
* Revision 1.2 2002/07/19 20:33:28 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/07/19 12:10:53 msell
|
|
||||||
* Hups
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:28 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __PARTICLE_H_INCLUDED__
|
#ifndef __PARTICLE_H_INCLUDED__
|
||||||
#define __PARTICLE_H_INCLUDED__
|
#define __PARTICLE_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -27,26 +10,26 @@ class BloodAppearance;
|
||||||
|
|
||||||
class Particle : public MeshObject{
|
class Particle : public MeshObject{
|
||||||
private:
|
private:
|
||||||
int bounces;
|
int bounces;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
|
|
||||||
World *world;
|
World *world;
|
||||||
|
|
||||||
bool alive;
|
bool alive;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
int lifetime;
|
int lifetime;
|
||||||
int id;
|
int id;
|
||||||
|
|
||||||
Particle(World *world, Mesh *mesh);
|
Particle(World *world, Mesh *mesh);
|
||||||
|
|
||||||
void move(void);
|
void move(void);
|
||||||
|
|
||||||
void hitForce(float speed, Object *source);
|
void hitForce(float speed, Object *source);
|
||||||
|
|
||||||
|
|
||||||
void create(float *position, float *velocity);
|
void create(float *position, float *velocity);
|
||||||
void destroy(void);
|
void destroy(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -57,12 +40,12 @@ public:
|
||||||
|
|
||||||
class BloodAppearance : public BasicBlockAppearance{
|
class BloodAppearance : public BasicBlockAppearance{
|
||||||
private:
|
private:
|
||||||
int *lifetime;
|
int *lifetime;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BloodAppearance(int *lifetime);
|
BloodAppearance(int *lifetime);
|
||||||
|
|
||||||
void draw(void);
|
void draw(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
void initBloods(World *world);
|
void initBloods(World *world);
|
||||||
|
|
337
src/run.cpp
337
src/run.cpp
|
@ -1,88 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: run.cpp,v 1.24 2002/07/22 11:44:16 jkaarlas Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: run.cpp,v $
|
|
||||||
* Revision 1.24 2002/07/22 11:44:16 jkaarlas
|
|
||||||
* naama
|
|
||||||
*
|
|
||||||
* Revision 1.23 2002/07/22 01:14:14 msell
|
|
||||||
* Lopetussysteemi
|
|
||||||
*
|
|
||||||
* Revision 1.22 2002/07/19 22:38:38 msell
|
|
||||||
* Pingviini
|
|
||||||
*
|
|
||||||
* Revision 1.21 2002/07/19 21:17:07 msell
|
|
||||||
* bugifixi
|
|
||||||
*
|
|
||||||
* Revision 1.20 2002/07/19 20:06:32 msell
|
|
||||||
* Linux-porttausta
|
|
||||||
*
|
|
||||||
* Revision 1.19 2002/07/19 19:46:07 msell
|
|
||||||
* Makefile
|
|
||||||
*
|
|
||||||
* Revision 1.18 2002/07/19 18:59:46 msell
|
|
||||||
* Alkuhommaa ja säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.17 2002/07/19 14:05:52 msell
|
|
||||||
* Damagetextuurit näkyy
|
|
||||||
*
|
|
||||||
* Revision 1.16 2002/07/19 12:48:57 jkaarlas
|
|
||||||
* damagepää
|
|
||||||
*
|
|
||||||
* Revision 1.15 2002/07/19 12:42:44 msell
|
|
||||||
* Loading...
|
|
||||||
*
|
|
||||||
* Revision 1.14 2002/07/17 20:32:48 msell
|
|
||||||
* Detail-optio toimii
|
|
||||||
*
|
|
||||||
* Revision 1.13 2002/07/17 16:40:33 msell
|
|
||||||
* Resoluution vaihto
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/07/16 19:57:14 jkaarlas
|
|
||||||
* lisätty DATAPATH tiedostonimien eteen
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/07/16 17:16:35 msell
|
|
||||||
* Fontit ja valikot
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/06/17 20:49:05 msell
|
|
||||||
* free -> SDL_FreeSurface
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/06/17 19:58:08 msell
|
|
||||||
* #includeiden parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/16 01:04:58 jkaarlas
|
|
||||||
* tulipa säädettyä includejen kanssa. oon tod.näk. eri mieltä aamulla
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/02 16:57:37 msell
|
|
||||||
* Objektirakenteen pohja
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/05/18 12:29:35 msell
|
|
||||||
* Valot ja äänijärjestelmän parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/05/17 12:30:26 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/05/16 18:41:16 msell
|
|
||||||
* Vektorifunctioita ja kamera
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/05/15 21:07:23 msell
|
|
||||||
* Äänisäätöä
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/15 14:36:39 msell
|
|
||||||
* Yksinkertainen SDL-runko (Kääntyy toistaiseksi vain windowsissa).
|
|
||||||
* Mukana myös musiikinsoitto fmodilla.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/22 11:44:16 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
@ -107,77 +22,77 @@ bool gameinitialized = false;
|
||||||
void initFontTexture(void);
|
void initFontTexture(void);
|
||||||
|
|
||||||
void initScenes(void){
|
void initScenes(void){
|
||||||
knobgllist = glGenLists(1);
|
knobgllist = glGenLists(1);
|
||||||
setDetail(detail);
|
setDetail(detail);
|
||||||
|
|
||||||
|
|
||||||
//Simple loading-screen
|
|
||||||
enable2D();
|
|
||||||
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
//Simple loading-screen
|
||||||
SDL_GL_SwapBuffers();
|
enable2D();
|
||||||
|
|
||||||
initFontTexture();
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
SDL_GL_SwapBuffers();
|
||||||
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
initFontTexture();
|
||||||
print(0.08, 0.4, "Loading...", 0.2);
|
|
||||||
SDL_GL_SwapBuffers();
|
|
||||||
|
|
||||||
disable2D();
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
print(0.08, 0.4, "Loading...", 0.2);
|
||||||
|
SDL_GL_SwapBuffers();
|
||||||
|
|
||||||
|
disable2D();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SKYBOX = -1;
|
SKYBOX = -1;
|
||||||
initTextures();
|
initTextures();
|
||||||
initFight();
|
initFight();
|
||||||
initMenu();
|
initMenu();
|
||||||
initEnd();
|
initEnd();
|
||||||
changeGameMode(MENUMODE);
|
changeGameMode(MENUMODE);
|
||||||
//changeGameMode(ENDMODE);
|
//changeGameMode(ENDMODE);
|
||||||
gameinitialized = true;
|
gameinitialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void changeGameMode(int newmode){
|
void changeGameMode(int newmode){
|
||||||
gamemode = newmode;
|
gamemode = newmode;
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void calculateFrame(int framecount){
|
void calculateFrame(int framecount){
|
||||||
switch(gamemode){
|
switch(gamemode){
|
||||||
case MENUMODE:
|
case MENUMODE:
|
||||||
calculateMenu(framecount);
|
calculateMenu(framecount);
|
||||||
break;
|
break;
|
||||||
case FIGHTMODE:
|
case FIGHTMODE:
|
||||||
calculateFight(framecount);
|
calculateFight(framecount);
|
||||||
break;
|
break;
|
||||||
case ENDMODE:
|
case ENDMODE:
|
||||||
calculateEnd(framecount);
|
calculateEnd(framecount);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
updateAudio();
|
updateAudio();
|
||||||
changed = false;
|
changed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawFrame(int framecount){
|
void drawFrame(int framecount){
|
||||||
if (changed) calculateFrame(framecount);
|
if (changed) calculateFrame(framecount);
|
||||||
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
|
||||||
switch(gamemode){
|
|
||||||
case MENUMODE:
|
|
||||||
drawMenu(framecount);
|
|
||||||
break;
|
|
||||||
case FIGHTMODE:
|
|
||||||
drawFight(framecount);
|
|
||||||
break;
|
|
||||||
case ENDMODE:
|
|
||||||
drawEnd(framecount);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_GL_SwapBuffers();
|
switch(gamemode){
|
||||||
|
case MENUMODE:
|
||||||
|
drawMenu(framecount);
|
||||||
|
break;
|
||||||
|
case FIGHTMODE:
|
||||||
|
drawFight(framecount);
|
||||||
|
break;
|
||||||
|
case ENDMODE:
|
||||||
|
drawEnd(framecount);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_GL_SwapBuffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*int SKY_FRONT_ID;
|
/*int SKY_FRONT_ID;
|
||||||
|
@ -204,95 +119,95 @@ Texture *tuxtexture;
|
||||||
Texture *faceTexture;
|
Texture *faceTexture;
|
||||||
|
|
||||||
void initFontTexture(void){
|
void initFontTexture(void){
|
||||||
if (!texturesloaded){
|
if (!texturesloaded){
|
||||||
float trans[3] = {1, 0, 0};
|
float trans[3] = {1, 0, 0};
|
||||||
fonttexture = new Texture();
|
fonttexture = new Texture();
|
||||||
fonttexture->loadImage(DATAPATH"font.png", trans);
|
fonttexture->loadImage(DATAPATH"font.png", trans);
|
||||||
} else{
|
} else{
|
||||||
fonttexture->reload();
|
fonttexture->reload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void initTextures(void){
|
void initTextures(void){
|
||||||
/*SKY_FRONT_ID = DRUID.loadTexture(SKYFRONT);
|
/*SKY_FRONT_ID = DRUID.loadTexture(SKYFRONT);
|
||||||
SKY_BACK_ID = DRUID.loadTexture(SKYBACK);
|
SKY_BACK_ID = DRUID.loadTexture(SKYBACK);
|
||||||
SKY_LEFT_ID = DRUID.loadTexture(SKYLEFT);
|
SKY_LEFT_ID = DRUID.loadTexture(SKYLEFT);
|
||||||
SKY_RIGHT_ID = DRUID.loadTexture(SKYRIGHT);
|
SKY_RIGHT_ID = DRUID.loadTexture(SKYRIGHT);
|
||||||
SKY_TOP_ID = DRUID.loadTexture(SKYTOP);
|
SKY_TOP_ID = DRUID.loadTexture(SKYTOP);
|
||||||
SKY_BOTTOM_ID = DRUID.loadTexture(SKYBOTTOM);*/
|
SKY_BOTTOM_ID = DRUID.loadTexture(SKYBOTTOM);*/
|
||||||
|
|
||||||
if (!texturesloaded){
|
if (!texturesloaded){
|
||||||
skyfronttexture = new Texture();
|
skyfronttexture = new Texture();
|
||||||
skyfronttexture->loadImage(SKYFRONT);
|
skyfronttexture->loadImage(SKYFRONT);
|
||||||
skybacktexture = new Texture();
|
skybacktexture = new Texture();
|
||||||
skybacktexture->loadImage(SKYBACK);
|
skybacktexture->loadImage(SKYBACK);
|
||||||
skylefttexture = new Texture();
|
skylefttexture = new Texture();
|
||||||
skylefttexture->loadImage(SKYLEFT);
|
skylefttexture->loadImage(SKYLEFT);
|
||||||
skyrighttexture = new Texture();
|
skyrighttexture = new Texture();
|
||||||
skyrighttexture->loadImage(SKYRIGHT);
|
skyrighttexture->loadImage(SKYRIGHT);
|
||||||
skytoptexture = new Texture();
|
skytoptexture = new Texture();
|
||||||
skytoptexture->loadImage(SKYTOP);
|
skytoptexture->loadImage(SKYTOP);
|
||||||
skybottomtexture = new Texture();
|
skybottomtexture = new Texture();
|
||||||
skybottomtexture->loadImage(SKYBOTTOM);
|
skybottomtexture->loadImage(SKYBOTTOM);
|
||||||
|
|
||||||
|
|
||||||
float something[3] = {1, 0, 0.5};
|
float something[3] = {1, 0, 0.5};
|
||||||
damageHead = new Texture();
|
damageHead = new Texture();
|
||||||
damageHead->loadImage(DAMAGEHEAD, something);
|
damageHead->loadImage(DAMAGEHEAD, something);
|
||||||
damageTorso = new Texture();
|
damageTorso = new Texture();
|
||||||
damageTorso->loadImage(DAMAGETORSO, something);
|
damageTorso->loadImage(DAMAGETORSO, something);
|
||||||
damageHand = new Texture();
|
damageHand = new Texture();
|
||||||
damageHand->loadImage(DAMAGEHAND, something);
|
damageHand->loadImage(DAMAGEHAND, something);
|
||||||
damageLeg = new Texture();
|
damageLeg = new Texture();
|
||||||
damageLeg->loadImage(DAMAGELEG, something);
|
damageLeg->loadImage(DAMAGELEG, something);
|
||||||
faceTexture = new Texture();
|
faceTexture = new Texture();
|
||||||
something[2] = 1;
|
something[2] = 1;
|
||||||
faceTexture->loadImage(FACE, something);
|
faceTexture->loadImage(FACE, something);
|
||||||
|
|
||||||
float zeros[3] = {0, 0, 0};
|
float zeros[3] = {0, 0, 0};
|
||||||
flaretexture = new Texture();
|
flaretexture = new Texture();
|
||||||
flaretexture->loadImage(DATAPATH"flare.png", zeros);
|
flaretexture->loadImage(DATAPATH"flare.png", zeros);
|
||||||
|
|
||||||
|
|
||||||
float pink[3] = {1, 0, 1};
|
|
||||||
tuxtexture = new Texture();
|
|
||||||
tuxtexture->loadImage(DATAPATH"tux.png", pink);
|
|
||||||
} else{
|
|
||||||
skyfronttexture->reload();
|
|
||||||
skybacktexture->reload();
|
|
||||||
skylefttexture->reload();
|
|
||||||
skyrighttexture->reload();
|
|
||||||
skytoptexture->reload();
|
|
||||||
skybottomtexture->reload();
|
|
||||||
|
|
||||||
damageHead->reload();
|
float pink[3] = {1, 0, 1};
|
||||||
damageTorso->reload();
|
tuxtexture = new Texture();
|
||||||
damageHand->reload();
|
tuxtexture->loadImage(DATAPATH"tux.png", pink);
|
||||||
damageLeg->reload();
|
} else{
|
||||||
|
skyfronttexture->reload();
|
||||||
|
skybacktexture->reload();
|
||||||
|
skylefttexture->reload();
|
||||||
|
skyrighttexture->reload();
|
||||||
|
skytoptexture->reload();
|
||||||
|
skybottomtexture->reload();
|
||||||
|
|
||||||
flaretexture->reload();
|
damageHead->reload();
|
||||||
|
damageTorso->reload();
|
||||||
|
damageHand->reload();
|
||||||
|
damageLeg->reload();
|
||||||
|
|
||||||
tuxtexture->reload();
|
flaretexture->reload();
|
||||||
}
|
|
||||||
texturesloaded = true;
|
tuxtexture->reload();
|
||||||
|
}
|
||||||
|
texturesloaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setDetail(int detail){
|
void setDetail(int detail){
|
||||||
switch(detail){
|
switch(detail){
|
||||||
case 0:
|
case 0:
|
||||||
knobdetail = 0;
|
knobdetail = 0;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
knobdetail = 5;
|
knobdetail = 5;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
knobdetail = 8;
|
knobdetail = 8;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
knobdetail = 16;
|
knobdetail = 16;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
initKnob();
|
initKnob();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
39
src/run.h
39
src/run.h
|
@ -1,42 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: run.h,v 1.9 2002/07/22 01:14:14 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: run.h,v $
|
|
||||||
* Revision 1.9 2002/07/22 01:14:14 msell
|
|
||||||
* Lopetussysteemi
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/19 20:33:29 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/07/17 20:32:48 msell
|
|
||||||
* Detail-optio toimii
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/07/16 17:16:35 msell
|
|
||||||
* Fontit ja valikot
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/02 16:57:37 msell
|
|
||||||
* Objektirakenteen pohja
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/05/17 12:30:26 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/05/16 18:41:16 msell
|
|
||||||
* Vektorifunctioita ja kamera
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/15 14:36:39 msell
|
|
||||||
* Yksinkertainen SDL-runko (Kääntyy toistaiseksi vain windowsissa).
|
|
||||||
* Mukana myös musiikinsoitto fmodilla.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/22 01:14:14 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __RUN_H_INCLUDED__
|
#ifndef __RUN_H_INCLUDED__
|
||||||
#define __RUN_H_INCLUDED__
|
#define __RUN_H_INCLUDED__
|
||||||
|
|
||||||
|
|
|
@ -1,52 +1,18 @@
|
||||||
/*
|
|
||||||
* $Id: shape.cpp,v 1.7 2002/07/04 21:05:41 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: shape.cpp,v $
|
|
||||||
* Revision 1.7 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/30 16:05:04 msell
|
|
||||||
* Törmäyksien parantelua, transformaatioita mukana
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/24 14:12:15 msell
|
|
||||||
* Nyt toimii sphere -> mesh -törmäykset, ihan tosi
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/20 22:50:12 msell
|
|
||||||
* Meshit
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/15 17:18:37 msell
|
|
||||||
* Toimiva törmäystarkastus kiinteille laatikoille
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/14 00:05:05 msell
|
|
||||||
* Törmäyssimulaatio kunnossa toivon mukaan
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/11 23:11:45 msell
|
|
||||||
* Törmäystarkistusta
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/04 21:05:41 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "shape.h"
|
#include "shape.h"
|
||||||
|
|
||||||
Shape::Shape(Object *object){
|
Shape::Shape(Object *object){
|
||||||
this->object = object;
|
this->object = object;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Shape::checkCollision(Object *target){
|
bool Shape::checkCollision(Object *target){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool Shape::checkCollisionPeer(Shape *target){
|
bool Shape::checkCollisionPeer(Shape *target){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool Shape::checkCollisionPeer(SphereShape *target){
|
bool Shape::checkCollisionPeer(SphereShape *target){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool Shape::checkCollisionPeer(MeshShape *target){
|
bool Shape::checkCollisionPeer(MeshShape *target){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
62
src/shape.h
62
src/shape.h
|
@ -1,51 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: shape.h,v 1.12 2002/07/19 20:33:29 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: shape.h,v $
|
|
||||||
* Revision 1.12 2002/07/19 20:33:29 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/06/30 16:05:04 msell
|
|
||||||
* Törmäyksien parantelua, transformaatioita mukana
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/06/24 14:12:15 msell
|
|
||||||
* Nyt toimii sphere -> mesh -törmäykset, ihan tosi
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/06/20 22:50:12 msell
|
|
||||||
* Meshit
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/15 17:18:37 msell
|
|
||||||
* Toimiva törmäystarkastus kiinteille laatikoille
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/14 00:05:05 msell
|
|
||||||
* Törmäyssimulaatio kunnossa toivon mukaan
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/11 23:11:45 msell
|
|
||||||
* Törmäystarkistusta
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/07 21:16:51 msell
|
|
||||||
* Fysiikkaenginen alkua
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/05 23:55:46 msell
|
|
||||||
* Pallo
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/02 16:57:37 msell
|
|
||||||
* Objektirakenteen pohja
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:29 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __SHAPE_H_INCLUDED__
|
#ifndef __SHAPE_H_INCLUDED__
|
||||||
#define __SHAPE_H_INCLUDED__
|
#define __SHAPE_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -60,19 +12,19 @@ class MeshShape;
|
||||||
*/
|
*/
|
||||||
class Shape{
|
class Shape{
|
||||||
protected:
|
protected:
|
||||||
Object *object;
|
Object *object;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Shape(Object *object);
|
Shape(Object *object);
|
||||||
|
|
||||||
|
|
||||||
virtual float calculateMomentOfInertia(float *rotationvector) = 0;
|
virtual float calculateMomentOfInertia(float *rotationvector) = 0;
|
||||||
|
|
||||||
virtual bool checkCollision(Object *target);
|
virtual bool checkCollision(Object *target);
|
||||||
|
|
||||||
virtual bool checkCollisionPeer(Shape *target);
|
virtual bool checkCollisionPeer(Shape *target);
|
||||||
virtual bool checkCollisionPeer(SphereShape *target);
|
virtual bool checkCollisionPeer(SphereShape *target);
|
||||||
virtual bool checkCollisionPeer(MeshShape *target);
|
virtual bool checkCollisionPeer(MeshShape *target);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
432
src/sphere.cpp
432
src/sphere.cpp
|
@ -1,73 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: sphere.cpp,v 1.19 2002/07/19 18:59:46 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: sphere.cpp,v $
|
|
||||||
* Revision 1.19 2002/07/19 18:59:46 msell
|
|
||||||
* Alkuhommaa ja säätöä
|
|
||||||
*
|
|
||||||
* Revision 1.18 2002/07/07 17:53:21 msell
|
|
||||||
* Legoukon alku
|
|
||||||
*
|
|
||||||
* Revision 1.17 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
* Revision 1.16 2002/06/30 16:05:04 msell
|
|
||||||
* Törmäyksien parantelua, transformaatioita mukana
|
|
||||||
*
|
|
||||||
* Revision 1.15 2002/06/27 14:39:48 msell
|
|
||||||
* Toimiva maila :)
|
|
||||||
* Pyörivät kappaleet siis antaa liike-energiaa liikkuville kappaleille (ei toisin päin vielä)
|
|
||||||
*
|
|
||||||
* Revision 1.14 2002/06/27 00:08:04 msell
|
|
||||||
* Kimmotukset palloille myös pyöritettyihin mesheihin
|
|
||||||
*
|
|
||||||
* Revision 1.13 2002/06/24 14:12:15 msell
|
|
||||||
* Nyt toimii sphere -> mesh -törmäykset, ihan tosi
|
|
||||||
*
|
|
||||||
* Revision 1.12 2002/06/23 20:12:19 msell
|
|
||||||
* Parempi törmäystarkistus palloista mesheihin
|
|
||||||
*
|
|
||||||
* Revision 1.11 2002/06/20 22:50:12 msell
|
|
||||||
* Meshit
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/06/20 00:21:19 jkaarlas
|
|
||||||
* materiaali- ja tekstuurihommia edistetty
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/06/17 20:49:05 msell
|
|
||||||
* free -> SDL_FreeSurface
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/06/16 01:04:58 jkaarlas
|
|
||||||
* tulipa säädettyä includejen kanssa. oon tod.näk. eri mieltä aamulla
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/15 17:18:37 msell
|
|
||||||
* Toimiva törmäystarkastus kiinteille laatikoille
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/14 00:26:17 msell
|
|
||||||
* 100 kimpoilevaa palloa ja vähän vaimennusta
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/14 00:05:05 msell
|
|
||||||
* Törmäyssimulaatio kunnossa toivon mukaan
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/11 23:23:03 msell
|
|
||||||
* Törmäystarkistusta
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/11 23:11:45 msell
|
|
||||||
* Törmäystarkistusta
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/07 21:16:51 msell
|
|
||||||
* Fysiikkaenginen alkua
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/05 23:55:46 msell
|
|
||||||
* Pallo
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 18:59:46 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@ -82,252 +12,252 @@
|
||||||
|
|
||||||
|
|
||||||
Sphere::Sphere(void){
|
Sphere::Sphere(void){
|
||||||
appearance = new SphereAppearance();
|
appearance = new SphereAppearance();
|
||||||
Object::appearance = appearance;
|
Object::appearance = appearance;
|
||||||
geometry = new SphereShape(this);
|
geometry = new SphereShape(this);
|
||||||
Object::geometry = geometry;
|
Object::geometry = geometry;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sphere::setRadius(float r){
|
void Sphere::setRadius(float r){
|
||||||
if (r < 0) r = -r;
|
if (r < 0) r = -r;
|
||||||
this->r = r;
|
this->r = r;
|
||||||
appearance->setRadius(r);
|
appearance->setRadius(r);
|
||||||
geometry->setRadius(r);
|
geometry->setRadius(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
SphereAppearance::SphereAppearance(void){
|
SphereAppearance::SphereAppearance(void){
|
||||||
setRadius(1);
|
setRadius(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SphereAppearance::setRadius(float r){
|
void SphereAppearance::setRadius(float r){
|
||||||
if (r < 0) r = -r;
|
if (r < 0) r = -r;
|
||||||
this->r = r;
|
this->r = r;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sphere::setColor(float red, float green, float blue){
|
void Sphere::setColor(float red, float green, float blue){
|
||||||
appearance->getMaterial()->setColor(red, green, blue, 1);
|
appearance->getMaterial()->setColor(red, green, blue, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SphereAppearance::draw(void){
|
void SphereAppearance::draw(void){
|
||||||
material.enable();
|
material.enable();
|
||||||
createSphere(r);
|
createSphere(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SphereShape::SphereShape(Object *sphere) : Shape(sphere){
|
SphereShape::SphereShape(Object *sphere) : Shape(sphere){
|
||||||
setRadius(1);
|
setRadius(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SphereShape::setRadius(float r){
|
void SphereShape::setRadius(float r){
|
||||||
this->r = r;
|
this->r = r;
|
||||||
}
|
}
|
||||||
|
|
||||||
float SphereShape::getRadius(void){
|
float SphereShape::getRadius(void){
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SphereShape::checkCollision(Object *target){
|
bool SphereShape::checkCollision(Object *target){
|
||||||
return target->geometry->checkCollisionPeer(this);
|
return target->geometry->checkCollisionPeer(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
float SphereShape::calculateMomentOfInertia(float *rotationvector){
|
float SphereShape::calculateMomentOfInertia(float *rotationvector){
|
||||||
return 2.0/3.0*r*r;
|
return 2.0/3.0*r*r;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*bool SphereShape::checkCollisionPeer(PlaneShape *target){
|
/*bool SphereShape::checkCollisionPeer(PlaneShape *target){
|
||||||
float sourceposition[3], targetposition[3];
|
float sourceposition[3], targetposition[3];
|
||||||
object->getPosition(sourceposition);
|
object->getPosition(sourceposition);
|
||||||
target->object->getPosition(targetposition);
|
target->object->getPosition(targetposition);
|
||||||
float height = target->height + targetposition[1];
|
float height = target->height + targetposition[1];
|
||||||
|
|
||||||
if (sourceposition[1] - r < height){
|
if (sourceposition[1] - r < height){
|
||||||
//shotsound->play();
|
//shotsound->play();
|
||||||
float normal[3] = {0, 1, 0};
|
float normal[3] = {0, 1, 0};
|
||||||
|
|
||||||
float contactpoint[3] = {0, target->height, 0};
|
float contactpoint[3] = {0, target->height, 0};
|
||||||
collide(object, target->object, normal, contactpoint);
|
collide(object, target->object, normal, contactpoint);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
bool SphereShape::checkCollisionPeer(SphereShape *target){
|
bool SphereShape::checkCollisionPeer(SphereShape *target){
|
||||||
/*float sourceposition[3], targetposition[3];
|
/*float sourceposition[3], targetposition[3];
|
||||||
object->getPosition(sourceposition);
|
object->getPosition(sourceposition);
|
||||||
target->object->getPosition(targetposition);
|
target->object->getPosition(targetposition);
|
||||||
float impact[3];
|
float impact[3];
|
||||||
vectorSub(impact, sourceposition, targetposition);*/
|
vectorSub(impact, sourceposition, targetposition);*/
|
||||||
float impact[3] = {0, 0, 0};
|
float impact[3] = {0, 0, 0};
|
||||||
object->transformPoint(impact, impact);
|
object->transformPoint(impact, impact);
|
||||||
target->object->unTransformPoint(impact, impact);
|
target->object->unTransformPoint(impact, impact);
|
||||||
float distance2 = vectorDot(impact, impact);
|
float distance2 = vectorDot(impact, impact);
|
||||||
|
|
||||||
if (distance2 < (r + target->r)*(r + target->r)){
|
if (distance2 < (r + target->r)*(r + target->r)){
|
||||||
/*float temp[3], temp2[3], temp3[3];
|
/*float temp[3], temp2[3], temp3[3];
|
||||||
object->getMomentum(temp2);
|
object->getMomentum(temp2);
|
||||||
target->object->getMomentum(temp3);
|
target->object->getMomentum(temp3);
|
||||||
vectorSub(temp, temp2, temp3);
|
vectorSub(temp, temp2, temp3);
|
||||||
shotsound->setVolume(1.0-1/(1+vectorLength(temp)*0.5));
|
shotsound->setVolume(1.0-1/(1+vectorLength(temp)*0.5));
|
||||||
shotsound->play();*/
|
shotsound->play();*/
|
||||||
float normal[3];
|
float normal[3];
|
||||||
vectorNormalize(normal, impact);
|
vectorNormalize(normal, impact);
|
||||||
|
|
||||||
float contactpoint[3];
|
float contactpoint[3];
|
||||||
vectorScale(contactpoint, normal, target->r);
|
vectorScale(contactpoint, normal, target->r);
|
||||||
|
|
||||||
target->object->transformVector(normal, normal);
|
target->object->transformVector(normal, normal);
|
||||||
target->object->transformPoint(contactpoint, contactpoint);
|
target->object->transformPoint(contactpoint, contactpoint);
|
||||||
|
|
||||||
addCollision(object, target->object, normal, contactpoint);
|
addCollision(object, target->object, normal, contactpoint);
|
||||||
|
|
||||||
//vectorAdd(contactnormal, normal);
|
//vectorAdd(contactnormal, normal);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool between(float x, float x1, float x2){
|
bool between(float x, float x1, float x2){
|
||||||
if ((x >= x1 && x <=x2) || (x >= x2 && x <=x1)) return true;
|
if ((x >= x1 && x <=x2) || (x >= x2 && x <=x1)) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*bool SphereShape::checkCollisionPeer(BoxShape *target){
|
/*bool SphereShape::checkCollisionPeer(BoxShape *target){
|
||||||
float sourceposition[3], targetposition[3];
|
float sourceposition[3], targetposition[3];
|
||||||
object->getPosition(sourceposition);
|
object->getPosition(sourceposition);
|
||||||
target->object->getPosition(targetposition);
|
target->object->getPosition(targetposition);
|
||||||
float x1 = target->x1 + targetposition[0];
|
float x1 = target->x1 + targetposition[0];
|
||||||
float x2 = target->x2 + targetposition[0];
|
float x2 = target->x2 + targetposition[0];
|
||||||
float y1 = target->y1 + targetposition[1];
|
float y1 = target->y1 + targetposition[1];
|
||||||
float y2 = target->y2 + targetposition[1];
|
float y2 = target->y2 + targetposition[1];
|
||||||
float z1 = target->z1 + targetposition[2];
|
float z1 = target->z1 + targetposition[2];
|
||||||
float z2 = target->z2 + targetposition[2];
|
float z2 = target->z2 + targetposition[2];
|
||||||
float points[3][2] = {{x1, x2}, {y1, y2}, {z1, z2}};
|
float points[3][2] = {{x1, x2}, {y1, y2}, {z1, z2}};
|
||||||
float p[2], op1[2], op2[2];
|
float p[2], op1[2], op2[2];
|
||||||
float c, oc1, oc2;
|
float c, oc1, oc2;
|
||||||
int i;
|
int i;
|
||||||
float normal[3];
|
float normal[3];
|
||||||
float *normal2[3];
|
float *normal2[3];
|
||||||
//Faces
|
//Faces
|
||||||
for (i = 0; i < 3; i++){
|
for (i = 0; i < 3; i++){
|
||||||
p[0] = points[i][0];
|
p[0] = points[i][0];
|
||||||
p[1] = points[i][1];
|
p[1] = points[i][1];
|
||||||
op1[0] = points[(i+1)%3][0];
|
op1[0] = points[(i+1)%3][0];
|
||||||
op1[1] = points[(i+1)%3][1];
|
op1[1] = points[(i+1)%3][1];
|
||||||
op2[0] = points[(i+2)%3][0];
|
op2[0] = points[(i+2)%3][0];
|
||||||
op2[1] = points[(i+2)%3][1];
|
op2[1] = points[(i+2)%3][1];
|
||||||
c = sourceposition[i];
|
c = sourceposition[i];
|
||||||
oc1 = sourceposition[(i+1)%3];
|
oc1 = sourceposition[(i+1)%3];
|
||||||
oc2 = sourceposition[(i+2)%3];
|
oc2 = sourceposition[(i+2)%3];
|
||||||
normal2[0] = &normal[i];
|
normal2[0] = &normal[i];
|
||||||
normal2[1] = &normal[(i+1)%3];
|
normal2[1] = &normal[(i+1)%3];
|
||||||
normal2[2] = &normal[(i+2)%3];
|
normal2[2] = &normal[(i+2)%3];
|
||||||
|
|
||||||
if (between(oc1, op1[0], op1[1]) &&
|
if (between(oc1, op1[0], op1[1]) &&
|
||||||
between(oc2, op2[0], op2[1])){
|
between(oc2, op2[0], op2[1])){
|
||||||
if (c < p[0] && c+r > p[0]){
|
if (c < p[0] && c+r > p[0]){
|
||||||
*normal2[0] = -1;
|
*normal2[0] = -1;
|
||||||
*normal2[1] = 0;
|
*normal2[1] = 0;
|
||||||
*normal2[2] = 0;
|
*normal2[2] = 0;
|
||||||
collide(object, target->object, normal);
|
collide(object, target->object, normal);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (c > p[1] && c-r < p[1]){
|
if (c > p[1] && c-r < p[1]){
|
||||||
*normal2[0] = 1;
|
*normal2[0] = 1;
|
||||||
*normal2[1] = 0;
|
*normal2[1] = 0;
|
||||||
*normal2[2] = 0;
|
*normal2[2] = 0;
|
||||||
collide(object, target->object, normal);
|
collide(object, target->object, normal);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Edges
|
//Edges
|
||||||
for (i = 0; i < 3; i++){
|
for (i = 0; i < 3; i++){
|
||||||
p[0] = points[i][0];
|
p[0] = points[i][0];
|
||||||
p[1] = points[i][1];
|
p[1] = points[i][1];
|
||||||
op1[0] = points[(i+1)%3][0];
|
op1[0] = points[(i+1)%3][0];
|
||||||
op1[1] = points[(i+1)%3][1];
|
op1[1] = points[(i+1)%3][1];
|
||||||
op2[0] = points[(i+2)%3][0];
|
op2[0] = points[(i+2)%3][0];
|
||||||
op2[1] = points[(i+2)%3][1];
|
op2[1] = points[(i+2)%3][1];
|
||||||
c = sourceposition[i];
|
c = sourceposition[i];
|
||||||
oc1 = sourceposition[(i+1)%3];
|
oc1 = sourceposition[(i+1)%3];
|
||||||
oc2 = sourceposition[(i+2)%3];
|
oc2 = sourceposition[(i+2)%3];
|
||||||
normal2[0] = &normal[i];
|
normal2[0] = &normal[i];
|
||||||
normal2[1] = &normal[(i+1)%3];
|
normal2[1] = &normal[(i+1)%3];
|
||||||
normal2[2] = &normal[(i+2)%3];
|
normal2[2] = &normal[(i+2)%3];
|
||||||
float edges[4][2] = {
|
float edges[4][2] = {
|
||||||
{p[0], op1[0]},
|
{p[0], op1[0]},
|
||||||
{p[1], op1[0]},
|
{p[1], op1[0]},
|
||||||
{p[0], op1[1]},
|
{p[0], op1[1]},
|
||||||
{p[1], op1[1]}};
|
{p[1], op1[1]}};
|
||||||
|
|
||||||
if (between(oc2, op2[0], op2[1])){
|
if (between(oc2, op2[0], op2[1])){
|
||||||
int j;
|
int j;
|
||||||
for (j = 0; j < 4; j++){
|
for (j = 0; j < 4; j++){
|
||||||
float diff[2] = {c - edges[j][0], oc1 - edges[j][1]};
|
float diff[2] = {c - edges[j][0], oc1 - edges[j][1]};
|
||||||
if (diff[0]*diff[0] + diff[1]*diff[1] < r*r){
|
if (diff[0]*diff[0] + diff[1]*diff[1] < r*r){
|
||||||
*normal2[0] = diff[0];
|
*normal2[0] = diff[0];
|
||||||
*normal2[1] = diff[1];
|
*normal2[1] = diff[1];
|
||||||
*normal2[2] = 0;
|
*normal2[2] = 0;
|
||||||
vectorNormalize(normal);
|
vectorNormalize(normal);
|
||||||
collide(object, target->object, normal);
|
collide(object, target->object, normal);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Corners
|
//Corners
|
||||||
float corners[8][3] = {
|
float corners[8][3] = {
|
||||||
{x1, y1, z1},
|
{x1, y1, z1},
|
||||||
{x1, y1, z2},
|
{x1, y1, z2},
|
||||||
{x1, y2, z1},
|
{x1, y2, z1},
|
||||||
{x1, y2, z2},
|
{x1, y2, z2},
|
||||||
{x2, y1, z1},
|
{x2, y1, z1},
|
||||||
{x2, y1, z2},
|
{x2, y1, z2},
|
||||||
{x2, y2, z1},
|
{x2, y2, z1},
|
||||||
{x2, y2, z2}};
|
{x2, y2, z2}};
|
||||||
for (i = 0; i < 8; i++){
|
for (i = 0; i < 8; i++){
|
||||||
float *corner = corners[i];
|
float *corner = corners[i];
|
||||||
float difference[3];
|
float difference[3];
|
||||||
vectorSub(difference, sourceposition, corner);
|
vectorSub(difference, sourceposition, corner);
|
||||||
float length2 = vectorDot(difference, difference);
|
float length2 = vectorDot(difference, difference);
|
||||||
if (length2 < r*r){
|
if (length2 < r*r){
|
||||||
float normal[3];
|
float normal[3];
|
||||||
vectorNormalize(normal, difference);
|
vectorNormalize(normal, difference);
|
||||||
collide(object, target->object, normal);
|
collide(object, target->object, normal);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool SphereShape::checkCollisionPeer(MeshShape *target){
|
bool SphereShape::checkCollisionPeer(MeshShape *target){
|
||||||
float position[3] = {0, 0, 0};
|
float position[3] = {0, 0, 0};
|
||||||
object->transformPoint(position, position);
|
object->transformPoint(position, position);
|
||||||
target->object->unTransformPoint(position, position);
|
target->object->unTransformPoint(position, position);
|
||||||
Mesh *mesh = target->mesh;
|
Mesh *mesh = target->mesh;
|
||||||
|
|
||||||
float normal[3];
|
float normal[3];
|
||||||
float contactpoint[3];
|
float contactpoint[3];
|
||||||
|
|
||||||
if (checkSphereMeshCollision(position, r, mesh, normal, contactpoint)){
|
if (checkSphereMeshCollision(position, r, mesh, normal, contactpoint)){
|
||||||
target->object->transformVector(normal, normal);
|
target->object->transformVector(normal, normal);
|
||||||
target->object->transformPoint(contactpoint, contactpoint);
|
target->object->transformPoint(contactpoint, contactpoint);
|
||||||
|
|
||||||
addCollision(object, target->object, normal, contactpoint);
|
|
||||||
|
|
||||||
//vectorAdd(contactnormal, normal);
|
addCollision(object, target->object, normal, contactpoint);
|
||||||
|
|
||||||
return true;
|
//vectorAdd(contactnormal, normal);
|
||||||
}
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
87
src/sphere.h
87
src/sphere.h
|
@ -1,48 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: sphere.h,v 1.11 2002/07/19 20:33:29 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: sphere.h,v $
|
|
||||||
* Revision 1.11 2002/07/19 20:33:29 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.10 2002/07/07 17:53:21 msell
|
|
||||||
* Legoukon alku
|
|
||||||
*
|
|
||||||
* Revision 1.9 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/06/30 16:05:04 msell
|
|
||||||
* Törmäyksien parantelua, transformaatioita mukana
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/06/24 14:12:15 msell
|
|
||||||
* Nyt toimii sphere -> mesh -törmäykset, ihan tosi
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/20 22:50:12 msell
|
|
||||||
* Meshit
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/15 17:18:37 msell
|
|
||||||
* Toimiva törmäystarkastus kiinteille laatikoille
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/14 00:05:05 msell
|
|
||||||
* Törmäyssimulaatio kunnossa toivon mukaan
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/11 23:11:45 msell
|
|
||||||
* Törmäystarkistusta
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/07 21:16:51 msell
|
|
||||||
* Fysiikkaenginen alkua
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/05 23:55:46 msell
|
|
||||||
* Pallo
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:29 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __SPHERE_H_INCLUDED__
|
#ifndef __SPHERE_H_INCLUDED__
|
||||||
#define __SPHERE_H_INCLUDED__
|
#define __SPHERE_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -57,15 +12,15 @@ class SphereAppearance;
|
||||||
|
|
||||||
class Sphere : public Object{
|
class Sphere : public Object{
|
||||||
private:
|
private:
|
||||||
float r;
|
float r;
|
||||||
SphereAppearance *appearance;
|
SphereAppearance *appearance;
|
||||||
SphereShape *geometry;
|
SphereShape *geometry;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Sphere(void);
|
Sphere(void);
|
||||||
|
|
||||||
void setRadius(float r);
|
void setRadius(float r);
|
||||||
void setColor(float red, float green, float blue);
|
void setColor(float red, float green, float blue);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,13 +29,13 @@ public:
|
||||||
|
|
||||||
class SphereAppearance : public Appearance{
|
class SphereAppearance : public Appearance{
|
||||||
private:
|
private:
|
||||||
float r;
|
float r;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SphereAppearance(void);
|
SphereAppearance(void);
|
||||||
|
|
||||||
void setRadius(float r);
|
void setRadius(float r);
|
||||||
void draw(void);
|
void draw(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -89,23 +44,23 @@ public:
|
||||||
|
|
||||||
class SphereShape : public Shape{
|
class SphereShape : public Shape{
|
||||||
private:
|
private:
|
||||||
float r;
|
float r;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SphereShape(Object *sphere);
|
SphereShape(Object *sphere);
|
||||||
|
|
||||||
void setRadius(float r);
|
void setRadius(float r);
|
||||||
float getRadius(void);
|
float getRadius(void);
|
||||||
|
|
||||||
float calculateMomentOfInertia(float *rotationvector);
|
float calculateMomentOfInertia(float *rotationvector);
|
||||||
|
|
||||||
bool checkCollision(Object *target);
|
bool checkCollision(Object *target);
|
||||||
|
|
||||||
bool checkCollisionPeer(SphereShape *target);
|
bool checkCollisionPeer(SphereShape *target);
|
||||||
bool checkCollisionPeer(MeshShape *target);
|
bool checkCollisionPeer(MeshShape *target);
|
||||||
|
|
||||||
friend class Sphere;
|
friend class Sphere;
|
||||||
friend class MeshShape;
|
friend class MeshShape;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,33 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: texture.cpp,v 1.7 2002/07/17 16:40:33 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: texture.cpp,v $
|
|
||||||
* Revision 1.7 2002/07/17 16:40:33 msell
|
|
||||||
* Resoluution vaihto
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/27 21:43:50 jkaarlas
|
|
||||||
* lisätty setId-funktio
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/20 15:27:48 jkaarlas
|
|
||||||
* bindtexture siirretty oikeaan paikkaan
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/20 00:21:01 jkaarlas
|
|
||||||
* materiaali- ja tekstuurihommia edistetty
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/19 22:45:29 jkaarlas
|
|
||||||
* nyt nämä menee järkevästi
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/15 22:04:01 jkaarlas
|
|
||||||
* tähänkin jotain sisältöä
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/17 16:40:33 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "texture.h"
|
#include "texture.h"
|
||||||
#include "graphics.h"
|
#include "graphics.h"
|
||||||
|
|
||||||
|
@ -56,9 +26,9 @@ Texture::Texture(int id){
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Texture::loadImage(char* path){
|
bool Texture::loadImage(char* path){
|
||||||
format = GL_RGB;
|
format = GL_RGB;
|
||||||
|
|
||||||
texture = IMG_Load(path);
|
texture = IMG_Load(path);
|
||||||
|
|
||||||
//texture = SDL_DisplayFormatAlpha(texture);
|
//texture = SDL_DisplayFormatAlpha(texture);
|
||||||
|
|
||||||
|
@ -69,18 +39,18 @@ bool Texture::loadImage(char* path){
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Texture::loadImage(char* path, float *trans){
|
bool Texture::loadImage(char* path, float *trans){
|
||||||
format = GL_RGBA;
|
format = GL_RGBA;
|
||||||
|
|
||||||
texture = IMG_Load(path);
|
texture = IMG_Load(path);
|
||||||
|
|
||||||
Uint32 colorKey = SDL_MapRGB(texture->format,
|
Uint32 colorKey = SDL_MapRGB(texture->format,
|
||||||
(Uint8)(trans[0] * 255),
|
(Uint8)(trans[0] * 255),
|
||||||
(Uint8)(trans[1] * 255),
|
(Uint8)(trans[1] * 255),
|
||||||
(Uint8)(trans[2] * 255));
|
(Uint8)(trans[2] * 255));
|
||||||
//SDL_SetAlpha(texture, 0, SDL_ALPHA_OPAQUE);
|
//SDL_SetAlpha(texture, 0, SDL_ALPHA_OPAQUE);
|
||||||
|
|
||||||
SDL_SetColorKey(texture, SDL_SRCCOLORKEY, colorKey);
|
SDL_SetColorKey(texture, SDL_SRCCOLORKEY, colorKey);
|
||||||
|
|
||||||
//SDL_Surface* alphaSurface = SDL_DisplayFormatAlpha(texture);
|
//SDL_Surface* alphaSurface = SDL_DisplayFormatAlpha(texture);
|
||||||
texture = SDL_DisplayFormatAlpha(texture);
|
texture = SDL_DisplayFormatAlpha(texture);
|
||||||
|
|
||||||
|
@ -90,8 +60,8 @@ bool Texture::loadImage(char* path, float *trans){
|
||||||
}
|
}
|
||||||
|
|
||||||
void Texture::reload(void){
|
void Texture::reload(void){
|
||||||
this->textureId = DRUID.loadTexture(texture, -1, format);
|
this->textureId = DRUID.loadTexture(texture, -1, format);
|
||||||
this->enable();
|
this->enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Texture::disable(void){
|
void Texture::disable(void){
|
||||||
|
|
|
@ -1,32 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: texture.h,v 1.8 2002/07/19 20:33:29 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: texture.h,v $
|
|
||||||
* Revision 1.8 2002/07/19 20:33:29 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/07/17 16:40:33 msell
|
|
||||||
* Resoluution vaihto
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/27 21:43:50 jkaarlas
|
|
||||||
* lisätty setId-funktio
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/20 00:21:01 jkaarlas
|
|
||||||
* materiaali- ja tekstuurihommia edistetty
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/19 22:45:29 jkaarlas
|
|
||||||
* nyt nämä menee järkevästi
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/15 22:52:32 jkaarlas
|
|
||||||
* tekstuurimanageri ja työkalupakki
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:29 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __TEXTURE_H_INCLUDED__
|
#ifndef __TEXTURE_H_INCLUDED__
|
||||||
#define __TEXTURE_H_INCLUDED__
|
#define __TEXTURE_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -48,8 +19,8 @@ public:
|
||||||
int getId(void);
|
int getId(void);
|
||||||
void setId(int id);
|
void setId(int id);
|
||||||
bool isValidId(void);
|
bool isValidId(void);
|
||||||
void reload(void);
|
void reload(void);
|
||||||
|
|
||||||
//int* getOGLTexture(void);
|
//int* getOGLTexture(void);
|
||||||
//int* getModifiableOGLTexture(void);
|
//int* getModifiableOGLTexture(void);
|
||||||
|
|
||||||
|
@ -59,8 +30,8 @@ private:
|
||||||
//int* modTexture;
|
//int* modTexture;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
|
|
||||||
SDL_Surface *texture;
|
SDL_Surface *texture;
|
||||||
int format;
|
int format;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,59 +1,39 @@
|
||||||
/*
|
|
||||||
* $Id: utils.cpp,v 1.3 2002/07/14 21:40:43 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: utils.cpp,v $
|
|
||||||
* Revision 1.3 2002/07/14 21:40:43 msell
|
|
||||||
* Conflictit pois, liikkumiset (hyppy, kävely, lyönti), uusi areena
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/14 00:05:05 msell
|
|
||||||
* Törmäyssimulaatio kunnossa toivon mukaan
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/02 16:57:37 msell
|
|
||||||
* Objektirakenteen pohja
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/14 21:40:43 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
void swapInt(int *a, int *b){
|
void swapInt(int *a, int *b){
|
||||||
int temp = *a;
|
int temp = *a;
|
||||||
*a = *b;
|
*a = *b;
|
||||||
*b = temp;
|
*b = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void swapFloat(float *a, float *b){
|
void swapFloat(float *a, float *b){
|
||||||
float temp = *a;
|
float temp = *a;
|
||||||
*a = *b;
|
*a = *b;
|
||||||
*b = temp;
|
*b = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
int random(int x){
|
int random(int x){
|
||||||
return rand() * x / RAND_MAX;
|
return rand() * x / RAND_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
float randomf(float x){
|
float randomf(float x){
|
||||||
return rand() * x / RAND_MAX;
|
return rand() * x / RAND_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
int smod(int val, int mod){
|
int smod(int val, int mod){
|
||||||
if (val>=0) return val%mod;
|
if (val>=0) return val%mod;
|
||||||
int temp=-val/mod+1;
|
int temp=-val/mod+1;
|
||||||
return (val+temp*mod)%mod;
|
return (val+temp*mod)%mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
double sdes(double val){
|
double sdes(double val){
|
||||||
if (val>=0) return val-(int)(val);
|
if (val>=0) return val-(int)(val);
|
||||||
return val-(int)(val)+1;
|
return val-(int)(val)+1;
|
||||||
}
|
}
|
||||||
|
|
||||||
double sfmod(double val, double mod){
|
double sfmod(double val, double mod){
|
||||||
val-=(int)(val/mod)*mod;
|
val-=(int)(val/mod)*mod;
|
||||||
if (val<0) val+=mod;
|
if (val<0) val+=mod;
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
29
src/utils.h
29
src/utils.h
|
@ -1,32 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: utils.h,v 1.6 2002/07/19 20:33:29 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: utils.h,v $
|
|
||||||
* Revision 1.6 2002/07/19 20:33:29 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/07/14 21:40:43 msell
|
|
||||||
* Conflictit pois, liikkumiset (hyppy, kävely, lyönti), uusi areena
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/14 00:05:05 msell
|
|
||||||
* Törmäyssimulaatio kunnossa toivon mukaan
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/03 23:06:38 msell
|
|
||||||
* no message
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/06/02 16:57:37 msell
|
|
||||||
* Objektirakenteen pohja
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:29 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __UTILS_H_INCLUDED__
|
#ifndef __UTILS_H_INCLUDED__
|
||||||
#define __UTILS_H_INCLUDED__
|
#define __UTILS_H_INCLUDED__
|
||||||
|
|
||||||
|
|
348
src/vector.cpp
348
src/vector.cpp
|
@ -1,37 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: vector.cpp,v 1.7 2002/07/14 21:40:43 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: vector.cpp,v $
|
|
||||||
* Revision 1.7 2002/07/14 21:40:43 msell
|
|
||||||
* Conflictit pois, liikkumiset (hyppy, kävely, lyönti), uusi areena
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/27 00:08:04 msell
|
|
||||||
* Kimmotukset palloille myös pyöritettyihin mesheihin
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/23 20:12:19 msell
|
|
||||||
* Parempi törmäystarkistus palloista mesheihin
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/17 12:42:46 msell
|
|
||||||
* Hieman parempi törmäysmallinnus taas
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/11 23:23:03 msell
|
|
||||||
* Törmäystarkistusta
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/16 18:42:07 msell
|
|
||||||
* Vektorifunctioita ja kamera
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/14 21:40:43 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
@ -39,270 +5,270 @@
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
void vectorSet(float *target, float x, float y, float z){
|
void vectorSet(float *target, float x, float y, float z){
|
||||||
target[0] = x;
|
target[0] = x;
|
||||||
target[1] = y;
|
target[1] = y;
|
||||||
target[2] = z;
|
target[2] = z;
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorCopy(float *target, float *source){
|
void vectorCopy(float *target, float *source){
|
||||||
target[0] = source[0];
|
target[0] = source[0];
|
||||||
target[1] = source[1];
|
target[1] = source[1];
|
||||||
target[2] = source[2];
|
target[2] = source[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorAdd(float *target, float *source1, float *source2){
|
void vectorAdd(float *target, float *source1, float *source2){
|
||||||
target[0] = source1[0] + source2[0];
|
target[0] = source1[0] + source2[0];
|
||||||
target[1] = source1[1] + source2[1];
|
target[1] = source1[1] + source2[1];
|
||||||
target[2] = source1[2] + source2[2];
|
target[2] = source1[2] + source2[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorAdd(float *target, float *source){
|
void vectorAdd(float *target, float *source){
|
||||||
target[0] += source[0];
|
target[0] += source[0];
|
||||||
target[1] += source[1];
|
target[1] += source[1];
|
||||||
target[2] += source[2];
|
target[2] += source[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorSub(float *target, float *source1, float *source2){
|
void vectorSub(float *target, float *source1, float *source2){
|
||||||
target[0] = source1[0] - source2[0];
|
target[0] = source1[0] - source2[0];
|
||||||
target[1] = source1[1] - source2[1];
|
target[1] = source1[1] - source2[1];
|
||||||
target[2] = source1[2] - source2[2];
|
target[2] = source1[2] - source2[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorSub(float *target, float *source){
|
void vectorSub(float *target, float *source){
|
||||||
target[0] -= source[0];
|
target[0] -= source[0];
|
||||||
target[1] -= source[1];
|
target[1] -= source[1];
|
||||||
target[2] -= source[2];
|
target[2] -= source[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorNegative(float *target, float *source){
|
void vectorNegative(float *target, float *source){
|
||||||
target[0] = -source[0];
|
target[0] = -source[0];
|
||||||
target[1] = -source[1];
|
target[1] = -source[1];
|
||||||
target[2] = -source[2];
|
target[2] = -source[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorNegative(float *target){
|
void vectorNegative(float *target){
|
||||||
target[0] = -target[0];
|
target[0] = -target[0];
|
||||||
target[1] = -target[1];
|
target[1] = -target[1];
|
||||||
target[2] = -target[2];
|
target[2] = -target[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorScale(float *target, float *source, float scale){
|
void vectorScale(float *target, float *source, float scale){
|
||||||
target[0] = source[0] * scale;
|
target[0] = source[0] * scale;
|
||||||
target[1] = source[1] * scale;
|
target[1] = source[1] * scale;
|
||||||
target[2] = source[2] * scale;
|
target[2] = source[2] * scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorScale(float *target, float scale){
|
void vectorScale(float *target, float scale){
|
||||||
target[0] *= scale;
|
target[0] *= scale;
|
||||||
target[1] *= scale;
|
target[1] *= scale;
|
||||||
target[2] *= scale;
|
target[2] *= scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
float vectorDot(float *source1, float *source2){
|
float vectorDot(float *source1, float *source2){
|
||||||
return source1[0]*source2[0] + source1[1]*source2[1] + source1[2]*source2[2];
|
return source1[0]*source2[0] + source1[1]*source2[1] + source1[2]*source2[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
float vectorNormalizedDot(float *source1, float *source2){
|
float vectorNormalizedDot(float *source1, float *source2){
|
||||||
return vectorDot(source1, source2) / (vectorLength(source1) * vectorLength(source2));
|
return vectorDot(source1, source2) / (vectorLength(source1) * vectorLength(source2));
|
||||||
}
|
}
|
||||||
|
|
||||||
float vectorLength(float *source){
|
float vectorLength(float *source){
|
||||||
return sqrtf(vectorDot(source, source));
|
return sqrtf(vectorDot(source, source));
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorCross(float *target, float *source1, float *source2){
|
void vectorCross(float *target, float *source1, float *source2){
|
||||||
target[0] = source1[1]*source2[2] - source1[2]*source2[1];
|
target[0] = source1[1]*source2[2] - source1[2]*source2[1];
|
||||||
target[1] = source1[2]*source2[0] - source1[0]*source2[2];
|
target[1] = source1[2]*source2[0] - source1[0]*source2[2];
|
||||||
target[2] = source1[0]*source2[1] - source1[1]*source2[0];
|
target[2] = source1[0]*source2[1] - source1[1]*source2[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorNormalize(float *target, float *source){
|
void vectorNormalize(float *target, float *source){
|
||||||
vectorScale(target, source, 1.0/vectorLength(source));
|
vectorScale(target, source, 1.0/vectorLength(source));
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorNormalize(float *target){
|
void vectorNormalize(float *target){
|
||||||
vectorScale(target, 1.0/vectorLength(target));
|
vectorScale(target, 1.0/vectorLength(target));
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorReflect(float *target, float *source, float *normal){
|
void vectorReflect(float *target, float *source, float *normal){
|
||||||
vectorCopy(target, normal);
|
vectorCopy(target, normal);
|
||||||
vectorScale(target, -vectorDot(source, normal)*2);
|
vectorScale(target, -vectorDot(source, normal)*2);
|
||||||
vectorAdd(target, source);
|
vectorAdd(target, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorProject(float *target, float *source1, float *source2){
|
void vectorProject(float *target, float *source1, float *source2){
|
||||||
vectorScale(target, source2, vectorDot(source1, source2) / vectorDot(source2, source2));
|
vectorScale(target, source2, vectorDot(source1, source2) / vectorDot(source2, source2));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool vectorIsZero(float *vector){
|
bool vectorIsZero(float *vector){
|
||||||
if (vector[0] == 0 && vector[1] == 0 && vector[2] == 0) return true;
|
if (vector[0] == 0 && vector[1] == 0 && vector[2] == 0) return true;
|
||||||
//if (vectorDot(vector, vector) < 0.00001) return true;
|
//if (vectorDot(vector, vector) < 0.00001) return true;
|
||||||
else return false;
|
else return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorSaturate(float *target, float *source, float min, float max){
|
void vectorSaturate(float *target, float *source, float min, float max){
|
||||||
float len = vectorLength(source);
|
float len = vectorLength(source);
|
||||||
if (len < min){
|
if (len < min){
|
||||||
len = min;
|
len = min;
|
||||||
} else if (len > max){
|
} else if (len > max){
|
||||||
len = max;
|
len = max;
|
||||||
} else{
|
} else{
|
||||||
if (target != source) vectorCopy(target, source);
|
if (target != source) vectorCopy(target, source);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
vectorNormalize(target, source);
|
vectorNormalize(target, source);
|
||||||
vectorScale(target, len);
|
vectorScale(target, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorSaturate(float *vector, float min, float max){
|
void vectorSaturate(float *vector, float min, float max){
|
||||||
vectorSaturate(vector, vector, min, max);
|
vectorSaturate(vector, vector, min, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vectorMatrixMultiply(float *target, float *source, float *matrix){
|
void vectorMatrixMultiply(float *target, float *source, float *matrix){
|
||||||
float source2[3];
|
float source2[3];
|
||||||
if (source == target){
|
if (source == target){
|
||||||
vectorCopy(source2, source);
|
vectorCopy(source2, source);
|
||||||
source = source2;
|
source = source2;
|
||||||
}
|
}
|
||||||
int x;
|
int x;
|
||||||
for (x = 0; x < 3; x++){
|
for (x = 0; x < 3; x++){
|
||||||
target[x] = source[0]*matrix[0+x] +
|
target[x] = source[0]*matrix[0+x] +
|
||||||
source[1]*matrix[3+x] +
|
source[1]*matrix[3+x] +
|
||||||
source[2]*matrix[6+x];
|
source[2]*matrix[6+x];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void matrixSet(float *matrix,
|
void matrixSet(float *matrix,
|
||||||
float x1, float y1, float z1,
|
float x1, float y1, float z1,
|
||||||
float x2, float y2, float z2,
|
float x2, float y2, float z2,
|
||||||
float x3, float y3, float z3){
|
float x3, float y3, float z3){
|
||||||
matrix[0] = x1;
|
matrix[0] = x1;
|
||||||
matrix[1] = y1;
|
matrix[1] = y1;
|
||||||
matrix[2] = z1;
|
matrix[2] = z1;
|
||||||
matrix[3] = x2;
|
matrix[3] = x2;
|
||||||
matrix[4] = y2;
|
matrix[4] = y2;
|
||||||
matrix[5] = z2;
|
matrix[5] = z2;
|
||||||
matrix[6] = x3;
|
matrix[6] = x3;
|
||||||
matrix[7] = y3;
|
matrix[7] = y3;
|
||||||
matrix[8] = z3;
|
matrix[8] = z3;
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrixSet(float *matrix, float *r1, float *r2, float *r3){
|
void matrixSet(float *matrix, float *r1, float *r2, float *r3){
|
||||||
vectorCopy(&matrix[0], r1);
|
vectorCopy(&matrix[0], r1);
|
||||||
vectorCopy(&matrix[3], r2);
|
vectorCopy(&matrix[3], r2);
|
||||||
vectorCopy(&matrix[6], r3);
|
vectorCopy(&matrix[6], r3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrixCopy(float *target, float *source){
|
void matrixCopy(float *target, float *source){
|
||||||
target[0] = source[0];
|
target[0] = source[0];
|
||||||
target[1] = source[1];
|
target[1] = source[1];
|
||||||
target[2] = source[2];
|
target[2] = source[2];
|
||||||
target[3] = source[3];
|
target[3] = source[3];
|
||||||
target[4] = source[4];
|
target[4] = source[4];
|
||||||
target[5] = source[5];
|
target[5] = source[5];
|
||||||
target[6] = source[6];
|
target[6] = source[6];
|
||||||
target[7] = source[7];
|
target[7] = source[7];
|
||||||
target[8] = source[8];
|
target[8] = source[8];
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrixIdentity(float *matrix){
|
void matrixIdentity(float *matrix){
|
||||||
matrixSet(matrix, 1, 0, 0, 0, 1, 0, 0, 0, 1);
|
matrixSet(matrix, 1, 0, 0, 0, 1, 0, 0, 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrixAdd(float *target, float *source1, float *source2){
|
void matrixAdd(float *target, float *source1, float *source2){
|
||||||
target[0] = source1[0] + source2[0];
|
target[0] = source1[0] + source2[0];
|
||||||
target[1] = source1[1] + source2[1];
|
target[1] = source1[1] + source2[1];
|
||||||
target[2] = source1[2] + source2[2];
|
target[2] = source1[2] + source2[2];
|
||||||
target[3] = source1[3] + source2[3];
|
target[3] = source1[3] + source2[3];
|
||||||
target[4] = source1[4] + source2[4];
|
target[4] = source1[4] + source2[4];
|
||||||
target[5] = source1[5] + source2[5];
|
target[5] = source1[5] + source2[5];
|
||||||
target[6] = source1[6] + source2[6];
|
target[6] = source1[6] + source2[6];
|
||||||
target[7] = source1[7] + source2[7];
|
target[7] = source1[7] + source2[7];
|
||||||
target[8] = source1[8] + source2[8];
|
target[8] = source1[8] + source2[8];
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrixAdd(float *target, float *source){
|
void matrixAdd(float *target, float *source){
|
||||||
target[0] += source[0];
|
target[0] += source[0];
|
||||||
target[1] += source[1];
|
target[1] += source[1];
|
||||||
target[2] += source[2];
|
target[2] += source[2];
|
||||||
target[3] += source[3];
|
target[3] += source[3];
|
||||||
target[4] += source[4];
|
target[4] += source[4];
|
||||||
target[5] += source[5];
|
target[5] += source[5];
|
||||||
target[6] += source[6];
|
target[6] += source[6];
|
||||||
target[7] += source[7];
|
target[7] += source[7];
|
||||||
target[8] += source[8];
|
target[8] += source[8];
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrixMultiply(float *target, float *source1, float *source2){
|
void matrixMultiply(float *target, float *source1, float *source2){
|
||||||
float target2[9];
|
float target2[9];
|
||||||
float *oldtarget = target;
|
float *oldtarget = target;
|
||||||
bool copy = false;
|
bool copy = false;
|
||||||
if (source1 == target || source2 == target){
|
if (source1 == target || source2 == target){
|
||||||
copy = true;
|
copy = true;
|
||||||
target = target2;
|
target = target2;
|
||||||
}
|
}
|
||||||
int x, y;
|
int x, y;
|
||||||
for (y = 0; y < 3; y++){
|
for (y = 0; y < 3; y++){
|
||||||
for (x = 0; x < 3; x++){
|
for (x = 0; x < 3; x++){
|
||||||
*target = source1[y*3+0]*source2[x] +
|
*target = source1[y*3+0]*source2[x] +
|
||||||
source1[y*3+1]*source2[3+x] +
|
source1[y*3+1]*source2[3+x] +
|
||||||
source1[y*3+2]*source2[6+x];
|
source1[y*3+2]*source2[6+x];
|
||||||
target++;
|
target++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (copy){
|
if (copy){
|
||||||
matrixCopy(oldtarget, target2);
|
matrixCopy(oldtarget, target2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*void matrixMultiply(float *target, float *source){
|
/*void matrixMultiply(float *target, float *source){
|
||||||
matrixMultiply(target, source, source);
|
matrixMultiply(target, source, source);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
/*void matrixRotate(float *matrix, float *vector){
|
/*void matrixRotate(float *matrix, float *vector){
|
||||||
float rotmat[9];
|
float rotmat[9];
|
||||||
createRotationMatrix(rotmat, vector);
|
createRotationMatrix(rotmat, vector);
|
||||||
matrixMultiply(matrix, matrix, rotmat);
|
matrixMultiply(matrix, matrix, rotmat);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
void matrixCreateRotation(float *matrix, float *vector){
|
void matrixCreateRotation(float *matrix, float *vector){
|
||||||
float angle = vectorLength(vector);
|
float angle = vectorLength(vector);
|
||||||
float n[3];
|
float n[3];
|
||||||
vectorNormalize(n, vector);
|
vectorNormalize(n, vector);
|
||||||
|
|
||||||
float c = cos(angle);
|
float c = cos(angle);
|
||||||
float s = sin(angle);
|
float s = sin(angle);
|
||||||
float t = 1 - c;
|
float t = 1 - c;
|
||||||
|
|
||||||
float x = n[0];
|
float x = n[0];
|
||||||
float y = n[1];
|
float y = n[1];
|
||||||
float z = n[2];
|
float z = n[2];
|
||||||
|
|
||||||
matrixSet(matrix,
|
matrixSet(matrix,
|
||||||
t*x*x + c, t*y*x + s*z, t*z*x - s*y,
|
t*x*x + c, t*y*x + s*z, t*z*x - s*y,
|
||||||
t*x*y - s*z, t*y*y + c, t*z*y + s*x,
|
t*x*y - s*z, t*y*y + c, t*z*y + s*x,
|
||||||
t*x*z + s*y, t*y*z - s*x, t*z*z + c);
|
t*x*z + s*y, t*y*z - s*x, t*z*z + c);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrixTranspose(float *target, float *source){
|
void matrixTranspose(float *target, float *source){
|
||||||
target[0] = source[0]; target[1] = source[3]; target[2] = source[6];
|
target[0] = source[0]; target[1] = source[3]; target[2] = source[6];
|
||||||
target[3] = source[1]; target[4] = source[4]; target[5] = source[7];
|
target[3] = source[1]; target[4] = source[4]; target[5] = source[7];
|
||||||
target[6] = source[2]; target[7] = source[5]; target[8] = source[8];
|
target[6] = source[2]; target[7] = source[5]; target[8] = source[8];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*void rotatePointAroundVector(float *target, float *point, float *vector){
|
/*void rotatePointAroundVector(float *target, float *point, float *vector){
|
||||||
float angle = vectorLength(vector);
|
float angle = vectorLength(vector);
|
||||||
float n[3];
|
float n[3];
|
||||||
vectorNormalize(n, vector);
|
vectorNormalize(n, vector);
|
||||||
|
|
||||||
float c = cos(angle);
|
float c = cos(angle);
|
||||||
float s = sin(angle);
|
float s = sin(angle);
|
||||||
float t = 1 - c;
|
float t = 1 - c;
|
||||||
|
|
||||||
//r' = r*c + n*(n . r)*t + (r x n)*s
|
//r' = r*c + n*(n . r)*t + (r x n)*s
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
|
41
src/vector.h
41
src/vector.h
|
@ -1,38 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: vector.h,v 1.8 2002/07/19 20:33:29 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: vector.h,v $
|
|
||||||
* Revision 1.8 2002/07/19 20:33:29 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/07/14 21:40:43 msell
|
|
||||||
* Conflictit pois, liikkumiset (hyppy, kävely, lyönti), uusi areena
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/06/27 00:08:04 msell
|
|
||||||
* Kimmotukset palloille myös pyöritettyihin mesheihin
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/06/23 20:12:19 msell
|
|
||||||
* Parempi törmäystarkistus palloista mesheihin
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/06/17 12:42:46 msell
|
|
||||||
* Hieman parempi törmäysmallinnus taas
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/06/11 23:23:03 msell
|
|
||||||
* Törmäystarkistusta
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/06/04 16:28:32 msell
|
|
||||||
* #pragma once
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/05/16 18:42:07 msell
|
|
||||||
* Vektorifunctioita ja kamera
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:29 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __VECTOR_H_INCLUDED__
|
#ifndef __VECTOR_H_INCLUDED__
|
||||||
#define __VECTOR_H_INCLUDED__
|
#define __VECTOR_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -67,9 +32,9 @@ void vectorMatrixMultiply(float *target, float *source, float *matrix);
|
||||||
|
|
||||||
|
|
||||||
void matrixSet(float *matrix,
|
void matrixSet(float *matrix,
|
||||||
float x1, float y1, float z1,
|
float x1, float y1, float z1,
|
||||||
float x2, float y2, float z2,
|
float x2, float y2, float z2,
|
||||||
float x3, float y3, float z3);
|
float x3, float y3, float z3);
|
||||||
void matrixSet(float *matrix, float *r1, float *r2, float *r3);
|
void matrixSet(float *matrix, float *r1, float *r2, float *r3);
|
||||||
void matrixCopy(float *target, float *source);
|
void matrixCopy(float *target, float *source);
|
||||||
void matrixIdentity(float *matrix);
|
void matrixIdentity(float *matrix);
|
||||||
|
|
359
src/world.cpp
359
src/world.cpp
|
@ -1,42 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: world.cpp,v 1.9 2002/07/18 23:05:31 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: world.cpp,v $
|
|
||||||
* Revision 1.9 2002/07/18 23:05:31 msell
|
|
||||||
* Partikkelit ja kakkospelaajan liike
|
|
||||||
*
|
|
||||||
* Revision 1.8 2002/07/15 20:32:36 msell
|
|
||||||
* Uudet valot ja ulkoasun parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.7 2002/07/15 15:22:08 msell
|
|
||||||
* Parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.6 2002/07/14 21:40:43 msell
|
|
||||||
* Conflictit pois, liikkumiset (hyppy, kävely, lyönti), uusi areena
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/07/10 17:13:44 msell
|
|
||||||
* Törmäystarkastelun parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/07/08 18:28:47 msell
|
|
||||||
* Törmäystä ja ukkoja
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/07/07 23:05:22 msell
|
|
||||||
* Osien liimaaminen toisiinsa (kesken)
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/07/07 15:29:07 msell
|
|
||||||
* Törmäyksien parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/18 23:05:31 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "world.h"
|
#include "world.h"
|
||||||
|
|
||||||
#include "object.h"
|
#include "object.h"
|
||||||
|
@ -44,207 +5,207 @@
|
||||||
#include "vector.h"
|
#include "vector.h"
|
||||||
|
|
||||||
World::World(void){
|
World::World(void){
|
||||||
childlist = NULL;
|
childlist = NULL;
|
||||||
linklist = NULL;
|
linklist = NULL;
|
||||||
maxparticles = 500;
|
maxparticles = 500;
|
||||||
particles = new Particle *[maxparticles];
|
particles = new Particle *[maxparticles];
|
||||||
particlecount = 0;
|
particlecount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::prepare(void){
|
void World::prepare(void){
|
||||||
objectlist *node = childlist;
|
objectlist *node = childlist;
|
||||||
childcount = 0;
|
childcount = 0;
|
||||||
while (node != NULL){
|
while (node != NULL){
|
||||||
Object *child = node->object;
|
Object *child = node->object;
|
||||||
child->prepare();
|
child->prepare();
|
||||||
node = node->next;
|
node = node->next;
|
||||||
childcount++;
|
childcount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
childs = new Object *[childcount];
|
childs = new Object *[childcount];
|
||||||
node = childlist;
|
node = childlist;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (node != NULL){
|
while (node != NULL){
|
||||||
Object *child = node->object;
|
Object *child = node->object;
|
||||||
childs[i] = child;
|
childs[i] = child;
|
||||||
node = node->next;
|
node = node->next;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
contacts = new Contact[MAXCONTACTS];//childcount*childcount];
|
contacts = new Contact[MAXCONTACTS];//childcount*childcount];
|
||||||
}
|
}
|
||||||
|
|
||||||
#define GRAVITY 9.81
|
#define GRAVITY 9.81
|
||||||
//#define GRAVITY 15
|
//#define GRAVITY 15
|
||||||
|
|
||||||
void World::move(void){
|
void World::move(void){
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
|
|
||||||
//Gravity
|
//Gravity
|
||||||
float gravity[3];
|
float gravity[3];
|
||||||
vectorSet(gravity, 0, 0, 0);
|
vectorSet(gravity, 0, 0, 0);
|
||||||
for (i = 0; i < childcount; i++){
|
for (i = 0; i < childcount; i++){
|
||||||
Object *object = childs[i];
|
Object *object = childs[i];
|
||||||
if (object->gravity){
|
if (object->gravity){
|
||||||
gravity[1] = -object->getMass()*GRAVITY;
|
gravity[1] = -object->getMass()*GRAVITY;
|
||||||
object->addExternalForce(gravity);
|
object->addExternalForce(gravity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*for (i = 0; i < particlecount; i++){
|
/*for (i = 0; i < particlecount; i++){
|
||||||
Particle *object = particles[i];
|
Particle *object = particles[i];
|
||||||
if (object->gravity){
|
if (object->gravity){
|
||||||
gravity[1] = -object->getMass()*GRAVITY;
|
gravity[1] = -object->getMass()*GRAVITY;
|
||||||
object->addExternalForce(gravity);
|
object->addExternalForce(gravity);
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
|
||||||
//Collisions
|
//Collisions
|
||||||
contactcount = 0;
|
contactcount = 0;
|
||||||
|
|
||||||
for (i = 0; i < childcount; i++){
|
for (i = 0; i < childcount; i++){
|
||||||
Object *object1 = childs[i];
|
Object *object1 = childs[i];
|
||||||
int group1 = object1->getCollisionGroup();
|
int group1 = object1->getCollisionGroup();
|
||||||
for (j = i+1; j < childcount; j++){
|
for (j = i+1; j < childcount; j++){
|
||||||
Object *object2 = childs[j];
|
Object *object2 = childs[j];
|
||||||
int group2 = object2->getCollisionGroup();
|
int group2 = object2->getCollisionGroup();
|
||||||
|
|
||||||
if (isCollisionLink(group1, group2)){
|
if (isCollisionLink(group1, group2)){
|
||||||
object2->geometry->checkCollision(object1);
|
object2->geometry->checkCollision(object1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*for (i = 0; i < particlecount; i++){
|
/*for (i = 0; i < particlecount; i++){
|
||||||
Particle *object1 = particles[i];
|
Particle *object1 = particles[i];
|
||||||
int group1 = object1->getCollisionGroup();
|
int group1 = object1->getCollisionGroup();
|
||||||
for (j = 0; j < childcount; j++){
|
for (j = 0; j < childcount; j++){
|
||||||
Object *object2 = childs[j];
|
Object *object2 = childs[j];
|
||||||
int group2 = object2->getCollisionGroup();
|
int group2 = object2->getCollisionGroup();
|
||||||
|
|
||||||
if (isCollisionLink(group1, group2)){
|
if (isCollisionLink(group1, group2)){
|
||||||
object2->geometry->checkCollision(object1);
|
object2->geometry->checkCollision(object1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
//printf("Contacts: %i\n", contactcount);
|
//printf("Contacts: %i\n", contactcount);
|
||||||
|
|
||||||
|
|
||||||
bool contactresponse;
|
|
||||||
|
|
||||||
j = 0;
|
|
||||||
do{
|
|
||||||
contactresponse = false;
|
|
||||||
|
|
||||||
//Links between objects
|
|
||||||
objectlinklist *node = linklist;
|
|
||||||
while (node != NULL){
|
|
||||||
ObjectLink *link = node->link;
|
|
||||||
if (handleLink(link)) contactresponse = true;
|
|
||||||
node = node->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Collision contact
|
|
||||||
for (i = 0; i < contactcount; i++){
|
|
||||||
Contact *contact = &contacts[i];
|
|
||||||
if (handleCollision(contact)) contactresponse = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
j++;
|
|
||||||
} while (contactresponse && j < 10);
|
|
||||||
|
|
||||||
/*j = 0;
|
|
||||||
do{
|
|
||||||
contactresponse = false;
|
|
||||||
|
|
||||||
//Collision contact
|
|
||||||
for (i = 0; i < contactcount; i++){
|
|
||||||
Contact *contact = &contacts[i];
|
|
||||||
if (handleCollision(contact)) contactresponse = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
j++;
|
|
||||||
} while (contactresponse && j < 10);*/
|
|
||||||
|
|
||||||
/*j = 0;
|
|
||||||
do{
|
|
||||||
contactresponse = false;
|
|
||||||
|
|
||||||
//Links between objects
|
|
||||||
objectlinklist *node = linklist;
|
|
||||||
while (node != NULL){
|
|
||||||
ObjectLink *link = node->link;
|
|
||||||
if (handleLink(link)) contactresponse = true;
|
|
||||||
node = node->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
j++;
|
|
||||||
} while (contactresponse && j < 3);*/
|
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < childcount; i++){
|
bool contactresponse;
|
||||||
childs[i]->move();
|
|
||||||
}
|
j = 0;
|
||||||
for (i = 0; i < particlecount; i++){
|
do{
|
||||||
particles[i]->move();
|
contactresponse = false;
|
||||||
}
|
|
||||||
|
//Links between objects
|
||||||
|
objectlinklist *node = linklist;
|
||||||
|
while (node != NULL){
|
||||||
|
ObjectLink *link = node->link;
|
||||||
|
if (handleLink(link)) contactresponse = true;
|
||||||
|
node = node->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Collision contact
|
||||||
|
for (i = 0; i < contactcount; i++){
|
||||||
|
Contact *contact = &contacts[i];
|
||||||
|
if (handleCollision(contact)) contactresponse = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
j++;
|
||||||
|
} while (contactresponse && j < 10);
|
||||||
|
|
||||||
|
/*j = 0;
|
||||||
|
do{
|
||||||
|
contactresponse = false;
|
||||||
|
|
||||||
|
//Collision contact
|
||||||
|
for (i = 0; i < contactcount; i++){
|
||||||
|
Contact *contact = &contacts[i];
|
||||||
|
if (handleCollision(contact)) contactresponse = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
j++;
|
||||||
|
} while (contactresponse && j < 10);*/
|
||||||
|
|
||||||
|
/*j = 0;
|
||||||
|
do{
|
||||||
|
contactresponse = false;
|
||||||
|
|
||||||
|
//Links between objects
|
||||||
|
objectlinklist *node = linklist;
|
||||||
|
while (node != NULL){
|
||||||
|
ObjectLink *link = node->link;
|
||||||
|
if (handleLink(link)) contactresponse = true;
|
||||||
|
node = node->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
j++;
|
||||||
|
} while (contactresponse && j < 3);*/
|
||||||
|
|
||||||
|
|
||||||
|
for (i = 0; i < childcount; i++){
|
||||||
|
childs[i]->move();
|
||||||
|
}
|
||||||
|
for (i = 0; i < particlecount; i++){
|
||||||
|
particles[i]->move();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::draw(void){
|
void World::draw(void){
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < childcount; i++) childs[i]->draw();
|
for (i = 0; i < childcount; i++) childs[i]->draw();
|
||||||
for (i = 0; i < particlecount; i++) particles[i]->draw();
|
for (i = 0; i < particlecount; i++) particles[i]->draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::addChild(Object *child){
|
void World::addChild(Object *child){
|
||||||
objectlist *node = new objectlist;
|
objectlist *node = new objectlist;
|
||||||
node->object = child;
|
node->object = child;
|
||||||
node->next = childlist;
|
node->next = childlist;
|
||||||
childlist = node;
|
childlist = node;
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::addParticle(Particle *particle){
|
void World::addParticle(Particle *particle){
|
||||||
if (particlecount < maxparticles){
|
if (particlecount < maxparticles){
|
||||||
particles[particlecount++] = particle;
|
particles[particlecount++] = particle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::removeParticle(Particle *particle){
|
void World::removeParticle(Particle *particle){
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < particlecount; i++){
|
for (i = 0; i < particlecount; i++){
|
||||||
if (particles[i] == particle){
|
if (particles[i] == particle){
|
||||||
particles[i] = particles[particlecount-1];
|
particles[i] = particles[particlecount-1];
|
||||||
particlecount--;
|
particlecount--;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectLink *World::addLink(Object *object1, Object *object2, float *point){
|
ObjectLink *World::addLink(Object *object1, Object *object2, float *point){
|
||||||
ObjectLink *link = new ObjectLink();
|
ObjectLink *link = new ObjectLink();
|
||||||
link->object1 = object1;
|
link->object1 = object1;
|
||||||
link->object2 = object2;
|
link->object2 = object2;
|
||||||
if (point != NULL){
|
if (point != NULL){
|
||||||
object1->unTransformPoint(link->point1, point);
|
object1->unTransformPoint(link->point1, point);
|
||||||
object2->unTransformPoint(link->point2, point);
|
object2->unTransformPoint(link->point2, point);
|
||||||
link->enabled = true;
|
link->enabled = true;
|
||||||
} else{
|
} else{
|
||||||
link->enabled = false;
|
link->enabled = false;
|
||||||
}
|
}
|
||||||
objectlinklist *node = new objectlinklist;
|
objectlinklist *node = new objectlinklist;
|
||||||
node->link = link;
|
node->link = link;
|
||||||
node->next = linklist;
|
node->next = linklist;
|
||||||
linklist = node;
|
linklist = node;
|
||||||
return link;
|
return link;
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::renewLink(ObjectLink *link, float *point){
|
void World::renewLink(ObjectLink *link, float *point){
|
||||||
link->object1->unTransformPoint(link->point1, point);
|
link->object1->unTransformPoint(link->point1, point);
|
||||||
link->object2->unTransformPoint(link->point2, point);
|
link->object2->unTransformPoint(link->point2, point);
|
||||||
link->enabled = true;
|
link->enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
76
src/world.h
76
src/world.h
|
@ -1,33 +1,3 @@
|
||||||
/*
|
|
||||||
* $Id: world.h,v 1.6 2002/07/19 20:33:29 msell Exp $
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Log: world.h,v $
|
|
||||||
* Revision 1.6 2002/07/19 20:33:29 msell
|
|
||||||
* #pragma once -> #ifndef
|
|
||||||
*
|
|
||||||
* Revision 1.5 2002/07/18 23:05:31 msell
|
|
||||||
* Partikkelit ja kakkospelaajan liike
|
|
||||||
*
|
|
||||||
* Revision 1.4 2002/07/15 15:22:08 msell
|
|
||||||
* Parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.3 2002/07/10 17:13:44 msell
|
|
||||||
* Törmäystarkastelun parantelua
|
|
||||||
*
|
|
||||||
* Revision 1.2 2002/07/07 23:05:22 msell
|
|
||||||
* Osien liimaaminen toisiinsa (kesken)
|
|
||||||
*
|
|
||||||
* Revision 1.1 2002/07/04 21:05:41 msell
|
|
||||||
* Se toimii!! =)
|
|
||||||
* Törmäystarkistukset siis
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Date: 2002/07/19 20:33:29 $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __WORLD_H_INCLUDED__
|
#ifndef __WORLD_H_INCLUDED__
|
||||||
#define __WORLD_H_INCLUDED__
|
#define __WORLD_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -39,47 +9,47 @@ class ObjectLink;
|
||||||
|
|
||||||
class ObjectLink{
|
class ObjectLink{
|
||||||
public:
|
public:
|
||||||
Object *object1, *object2;
|
Object *object1, *object2;
|
||||||
float point1[3], point2[3];
|
float point1[3], point2[3];
|
||||||
bool enabled;
|
bool enabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct objectlinklist{
|
struct objectlinklist{
|
||||||
ObjectLink *link;
|
ObjectLink *link;
|
||||||
objectlinklist *next;
|
objectlinklist *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAXCONTACTS 100
|
#define MAXCONTACTS 100
|
||||||
|
|
||||||
class World{
|
class World{
|
||||||
private:
|
private:
|
||||||
objectlist *childlist;
|
objectlist *childlist;
|
||||||
|
|
||||||
int childcount;
|
int childcount;
|
||||||
Object **childs;
|
Object **childs;
|
||||||
|
|
||||||
|
|
||||||
int particlecount;
|
int particlecount;
|
||||||
int maxparticles;
|
int maxparticles;
|
||||||
Particle **particles;
|
Particle **particles;
|
||||||
|
|
||||||
|
|
||||||
objectlinklist *linklist;
|
objectlinklist *linklist;
|
||||||
public:
|
public:
|
||||||
World(void);
|
World(void);
|
||||||
|
|
||||||
void prepare(void);
|
void prepare(void);
|
||||||
void move(void);
|
void move(void);
|
||||||
void draw(void);
|
void draw(void);
|
||||||
|
|
||||||
void addChild(Object *child);
|
void addChild(Object *child);
|
||||||
|
|
||||||
void addParticle(Particle *particle);
|
void addParticle(Particle *particle);
|
||||||
void removeParticle(Particle *particle);
|
void removeParticle(Particle *particle);
|
||||||
|
|
||||||
//Point is world-relative
|
//Point is world-relative
|
||||||
ObjectLink *addLink(Object *object1, Object *object2, float *point);
|
ObjectLink *addLink(Object *object1, Object *object2, float *point);
|
||||||
void renewLink(ObjectLink *link, float *point);
|
void renewLink(ObjectLink *link, float *point);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue