Files
mathwars/Lasers.cpp
2017-10-13 08:11:07 +02:00

83 lines
2.7 KiB
C++

#include "Lasers.h"
#include "api.h"
#define MAX_LASERS 5
struct Laser {
Point ini, fin;
float pos;
unsigned char r, g, b;
};
Laser lasers[MAX_LASERS];
int randomLaserCounter = 60;
Lasers::Lasers() {
randomLaserCounter = 60;
for (int i = 0; i < MAX_LASERS; i++) lasers[i].pos = -1.0f;
RegisterMessage("CreateNewLaser", this);
}
void GenerateNewLaser() {
randomLaserCounter = rand() % 60;
for (int i = 0; i < MAX_LASERS; i++) {
if (lasers[i].pos < 0.0f) {
if (rand() % 2 == 0) {
lasers[i].ini.x = 0;
lasers[i].ini.y = rand() % 270;
lasers[i].fin.x = 480;
lasers[i].fin.y = (rand() % 200) - 100;
lasers[i].pos = 0.0f;
lasers[i].r = 255; lasers[i].g = 0; lasers[i].b = 0;
}
else {
lasers[i].ini.x = 480;
lasers[i].ini.y = rand() % 270;
lasers[i].fin.x = -480;
lasers[i].fin.y = (rand() % 200) - 100;
lasers[i].pos = 0.0f;
lasers[i].r = 0; lasers[i].g = 255; lasers[i].b = 0;
}
return;
}
}
}
void Lasers::Update() {
randomLaserCounter--;
if (randomLaserCounter <= 0) GenerateNewLaser();
for (int i = 0; i < MAX_LASERS; i++) {
if (lasers[i].pos >= 0.0f) {
lasers[i].pos += 0.1f;
SetColor(lasers[i].r, lasers[i].g, lasers[i].b);
DrawLine(lasers[i].ini.x + lasers[i].fin.x*lasers[i].pos, lasers[i].ini.y + lasers[i].fin.y*lasers[i].pos, lasers[i].ini.x + lasers[i].fin.x*(lasers[i].pos + 0.2f), lasers[i].ini.y + lasers[i].fin.y*(lasers[i].pos + 0.2f));
DrawLine(lasers[i].ini.x + lasers[i].fin.x*lasers[i].pos, 0.5 + lasers[i].ini.y + lasers[i].fin.y*lasers[i].pos, lasers[i].ini.x + lasers[i].fin.x*(lasers[i].pos + 0.2f), 0.5 + lasers[i].ini.y + lasers[i].fin.y*(lasers[i].pos + 0.2f));
DrawLine(lasers[i].ini.x + lasers[i].fin.x*lasers[i].pos, 1 + lasers[i].ini.y + lasers[i].fin.y*lasers[i].pos, lasers[i].ini.x + lasers[i].fin.x*(lasers[i].pos + 0.2f), 1 + lasers[i].ini.y + lasers[i].fin.y*(lasers[i].pos + 0.2f));
if (lasers[i].pos >= 0.8f)
lasers[i].pos = -1.0f;
}
}
}
void CreateNewLaser(float x1, float y1, float x2, float y2, unsigned char r, unsigned char g, unsigned char b) {
for (int i = 0; i < MAX_LASERS; i++) {
if (lasers[i].pos < 0.0f) {
lasers[i].ini.x = x1;
lasers[i].ini.y = y1;
lasers[i].fin.x = x2 - x1;
lasers[i].fin.y = y2 - y1;
lasers[i].pos = 0.0f;
lasers[i].r = r; lasers[i].g = g; lasers[i].b = b;
return;
}
}
}
void Lasers::ProcessMessage(const char* msg) {
if (msg == "CreateNewLaser") {
int* params = GetMessageParams();
if (params[4] == 0) {
CreateNewLaser(params[0], params[1], params[2], params[3], 255, 0, 0);
} else {
CreateNewLaser(params[0], params[1], params[2], params[3], 0, 255, 0);
}
}
}