|
|
|
@ -23,28 +23,50 @@ namespace pengine {
@@ -23,28 +23,50 @@ namespace pengine {
|
|
|
|
|
"Rock" |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
Particle *get_new_particle(ParticleID p) { |
|
|
|
|
|
|
|
|
|
switch (p) { |
|
|
|
|
case ParticleID::SAND: |
|
|
|
|
return new Sand(); |
|
|
|
|
struct particle_data BasicParticle::default_data(ParticleID id)
|
|
|
|
|
{ |
|
|
|
|
struct particle_data datap; |
|
|
|
|
switch (id) { |
|
|
|
|
case ParticleID::WATER: |
|
|
|
|
return new Water(); |
|
|
|
|
case ParticleID::BASIC: |
|
|
|
|
return new BasicParticle(); |
|
|
|
|
case ParticleID::STEAM: |
|
|
|
|
return new Steam(); |
|
|
|
|
datap = {.density=10,
|
|
|
|
|
.liquid = true,
|
|
|
|
|
.temperature=20, |
|
|
|
|
.boiling_point = 100,
|
|
|
|
|
.gas_state = ParticleID::STEAM |
|
|
|
|
}; |
|
|
|
|
break; |
|
|
|
|
case ParticleID::LAVA: |
|
|
|
|
return new Lava(); |
|
|
|
|
datap = {.density=20, .liquid = true, .temperature=5000, |
|
|
|
|
.boiling_point = 10000,.freezing_point=200, .solid_state=ParticleID::ROCK}; |
|
|
|
|
break; |
|
|
|
|
case ParticleID::STEAM: |
|
|
|
|
datap = {.density=0, .liquid = false, .temperature=150,
|
|
|
|
|
.liquid_state = ParticleID::WATER}; |
|
|
|
|
break; |
|
|
|
|
case ParticleID::SAND: |
|
|
|
|
datap = {.density=100, .liquid = false, .temperature=20}; |
|
|
|
|
break; |
|
|
|
|
case ParticleID::ROCK: |
|
|
|
|
return new Rock(); |
|
|
|
|
datap = {.density=150, .liquid = false, .temperature=20, |
|
|
|
|
.melting_point = 700, .liquid_state=ParticleID::LAVA}; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
std::cout << "Unknown particle create\n"; |
|
|
|
|
throw "unknown particle"; |
|
|
|
|
datap = {.temperature = 0}; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
return datap; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
State BasicParticle::get_state() { |
|
|
|
|
BasicParticle::BasicParticle(ParticleID id) : Particle(id)
|
|
|
|
|
{ |
|
|
|
|
this->id = id; |
|
|
|
|
data = default_data(id); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
State
|
|
|
|
|
BasicParticle::get_state()
|
|
|
|
|
{ |
|
|
|
|
switch(id) { |
|
|
|
|
case (ParticleID::STEAM): |
|
|
|
|
return State::GAS; |
|
|
|
@ -61,6 +83,30 @@ namespace pengine {
@@ -61,6 +83,30 @@ namespace pengine {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Particle * |
|
|
|
|
get_new_particle(ParticleID p)
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
switch (p) { |
|
|
|
|
case ParticleID::SAND: |
|
|
|
|
return new Sand(); |
|
|
|
|
case ParticleID::WATER: |
|
|
|
|
return new Water(); |
|
|
|
|
case ParticleID::BASIC: |
|
|
|
|
return new BasicParticle(); |
|
|
|
|
case ParticleID::STEAM: |
|
|
|
|
return new Steam(); |
|
|
|
|
case ParticleID::LAVA: |
|
|
|
|
return new Lava(); |
|
|
|
|
case ParticleID::ROCK: |
|
|
|
|
return new Rock(); |
|
|
|
|
default: |
|
|
|
|
std::cout << "Unknown particle create\n"; |
|
|
|
|
throw "unknown particle"; |
|
|
|
|
} |
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PixelColour::PixelColour(short r, short g, short b, short a) { |
|
|
|
|
this->r = r; |
|
|
|
|
this->g = g; |
|
|
|
@ -68,6 +114,10 @@ namespace pengine {
@@ -68,6 +114,10 @@ namespace pengine {
|
|
|
|
|
this->a = a; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
PixelColour::PixelColour(Uint32 c) { |
|
|
|
|
pixel = c; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
PixelColour::PixelColour(short r, short g, short b) { |
|
|
|
|
this->r = r; |
|
|
|
|
this->g = g; |
|
|
|
@ -170,7 +220,7 @@ namespace pengine {
@@ -170,7 +220,7 @@ namespace pengine {
|
|
|
|
|
return grid[x + xsize * y]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Grid::update_texture(SDL_Texture *texture) { |
|
|
|
|
void Grid::update_texture() { |
|
|
|
|
PixelColour defaultcol = PixelColour(0,0,0,0); |
|
|
|
|
for (int i = 0; i < xsize; i++) { |
|
|
|
|
for (int j = 0; j < ysize; j++) { |
|
|
|
@ -183,8 +233,6 @@ namespace pengine {
@@ -183,8 +233,6 @@ namespace pengine {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// SDL_Rect r {.x = 0, .y = 0, .w = xsize, .h = ysize};
|
|
|
|
|
SDL_UpdateTexture(texture, NULL, pixels, xsize * sizeof(Uint32)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool Grid::inside_grid(int x, int y) { |
|
|
|
@ -311,39 +359,6 @@ namespace pengine {
@@ -311,39 +359,6 @@ namespace pengine {
|
|
|
|
|
|
|
|
|
|
BasicParticle::BasicParticle() : Particle(ParticleID::BASIC) {} |
|
|
|
|
|
|
|
|
|
struct particle_data BasicParticle::default_data(ParticleID id) { |
|
|
|
|
struct particle_data datap; |
|
|
|
|
switch (id) { |
|
|
|
|
case ParticleID::WATER: |
|
|
|
|
datap = {.density=10, .liquid = true, .temperature=20, |
|
|
|
|
.boiling_point = 100, .gas_state = ParticleID::STEAM}; |
|
|
|
|
break; |
|
|
|
|
case ParticleID::LAVA: |
|
|
|
|
datap = {.density=20, .liquid = true, .temperature=5000, |
|
|
|
|
.boiling_point = 10000,.freezing_point=200, .solid_state=ParticleID::ROCK}; |
|
|
|
|
break; |
|
|
|
|
case ParticleID::STEAM: |
|
|
|
|
datap = {.density=0, .liquid = false, .temperature=150,
|
|
|
|
|
.liquid_state = ParticleID::WATER}; |
|
|
|
|
break; |
|
|
|
|
case ParticleID::SAND: |
|
|
|
|
datap = {.density=100, .liquid = false, .temperature=20}; |
|
|
|
|
break; |
|
|
|
|
case ParticleID::ROCK: |
|
|
|
|
datap = {.density=150, .liquid = false, .temperature=20, |
|
|
|
|
.melting_point = 700, .liquid_state=ParticleID::LAVA}; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
datap = {.temperature = 0}; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
return datap; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
BasicParticle::BasicParticle(ParticleID id) : Particle(id) { |
|
|
|
|
this->id = id; |
|
|
|
|
data = default_data(id); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
void BasicParticle::update(Grid * const g, int x, int y) { |
|
|
|
|
return; |
|
|
|
|