summaryrefslogtreecommitdiff
path: root/src/simulation
diff options
context:
space:
mode:
authorStanislaw Skowronek <skylark@disorder.sko>2013-11-17 00:06:12 (GMT)
committer Stanislaw Skowronek <skylark@disorder.sko>2013-11-17 00:06:12 (GMT)
commit3ef113335f0ca08580961ee5bcc4b2dd93bff0aa (patch)
treee2ec6a067eea1450e9987f8cca6da17116f7439b /src/simulation
parent3d9395e3012a863fe1ce56719561d0ce1c534d1b (diff)
downloadpowder-3ef113335f0ca08580961ee5bcc4b2dd93bff0aa.zip
powder-3ef113335f0ca08580961ee5bcc4b2dd93bff0aa.tar.gz
Let's try and not mix parts in a solid.
Diffstat (limited to 'src/simulation')
-rw-r--r--src/simulation/Simulation.cpp42
-rw-r--r--src/simulation/elements/DMND.cpp2
-rw-r--r--src/simulation/elements/TTAN.cpp2
3 files changed, 27 insertions, 19 deletions
diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp
index f0bd48c..197e01f 100644
--- a/src/simulation/Simulation.cpp
+++ b/src/simulation/Simulation.cpp
@@ -4788,29 +4788,37 @@ int Simulation::GetParticleType(std::string type)
void Simulation::solid_respawn(int i, int pp, int dx, int dy)
{
int nx = (int)(parts[pp].x + 0.5f), ny = (int)(parts[pp].y + 0.5f);
- int nc, t, pq;
+ int nc, s, t, pq, pr, pt[4];
if(pmap[ny+dy][nx+dx])
return;
- nc = 1;
- t = pmap[ny+2*dy][nx+2*dx]; if(t && parts[t >> 8].sld == i+1) nc ++;
- t = pmap[ny+dy+dx][nx+dx+dy]; if(t && parts[t >> 8].sld == i+1) nc ++;
- t = pmap[ny+dy-dx][nx+dx-dy]; if(t && parts[t >> 8].sld == i+1) nc ++;
+ pt[0] = pp; nc = 1;
+ t = pmap[ny+2*dy][nx+2*dx]; if(t && parts[t >> 8].sld == i+1) { pt[nc] = t >> 8; nc ++; }
+ t = pmap[ny+dy+dx][nx+dx+dy]; if(t && parts[t >> 8].sld == i+1) { pt[nc] = t >> 8; nc ++; }
+ t = pmap[ny+dy-dx][nx+dx-dy]; if(t && parts[t >> 8].sld == i+1) { pt[nc] = t >> 8; nc ++; }
if(nc < 3)
return;
- pq = create_part(-1, nx+dx, ny+dy, parts[pp].type);
+ pr = pt[0];
+ for(s=0; s<nc; s++)
+ for(t=s+1; t<nc; t++)
+ if(parts[pt[s]].type == parts[pt[t]].type) {
+ pr = pt[s];
+ break;
+ }
+
+ pq = create_part(-1, nx+dx, ny+dy, parts[pr].type);
if(pq < 0)
return;
- parts[pq].life = parts[pp].life;
- parts[pq].ctype = parts[pp].ctype;
- parts[pq].flags = parts[pp].flags;
- parts[pq].temp = parts[pp].temp;
- parts[pq].tmp = parts[pp].tmp;
- parts[pq].tmp2 = parts[pp].tmp2;
- parts[pq].dcolour = parts[pp].dcolour;
+ parts[pq].life = parts[pr].life;
+ parts[pq].ctype = parts[pr].ctype;
+ parts[pq].flags = parts[pr].flags;
+ parts[pq].temp = parts[pr].temp;
+ parts[pq].tmp = parts[pr].tmp;
+ parts[pq].tmp2 = parts[pr].tmp2;
+ parts[pq].dcolour = parts[pr].dcolour;
if(pmap[ny+2*dy][nx+2*dx]) {
parts[pq].x = (parts[pp].x + parts[pmap[ny+2*dy][nx+2*dx] >> 8].x) * 0.5f;
parts[pq].y = (parts[pp].y + parts[pmap[ny+2*dy][nx+2*dx] >> 8].y) * 0.5f;
@@ -4868,10 +4876,10 @@ void Simulation::update_solids()
nx = (int)(parts[pp].x + 0.5f);
ny = (int)(parts[pp].y + 0.5f);
if((pmap[ny][nx] >> 8) != pp) {
- if(!pmap[ny][nx-1] || parts[pmap[ny][nx-1] >> 8].sld != i+1) continue;
- if(!pmap[ny][nx+1] || parts[pmap[ny][nx+1] >> 8].sld != i+1) continue;
- if(!pmap[ny-1][nx] || parts[pmap[ny-1][nx] >> 8].sld != i+1) continue;
- if(!pmap[ny+1][nx] || parts[pmap[ny+1][nx] >> 8].sld != i+1) continue;
+ if(!pmap[ny][nx-1] || parts[pmap[ny][nx-1] >> 8].sld != i+1 || parts[pmap[ny][nx-1] >> 8].type != parts[pp].type) continue;
+ if(!pmap[ny][nx+1] || parts[pmap[ny][nx+1] >> 8].sld != i+1 || parts[pmap[ny][nx+1] >> 8].type != parts[pp].type) continue;
+ if(!pmap[ny-1][nx] || parts[pmap[ny-1][nx] >> 8].sld != i+1 || parts[pmap[ny-1][nx] >> 8].type != parts[pp].type) continue;
+ if(!pmap[ny+1][nx] || parts[pmap[ny+1][nx] >> 8].sld != i+1 || parts[pmap[ny+1][nx] >> 8].type != parts[pp].type) continue;
pq = pmap[ny][nx] >> 8;
if(fabs(parts[pq].vx) < fabs(parts[pp].vx))
parts[pq].vx = parts[pp].vx;
diff --git a/src/simulation/elements/DMND.cpp b/src/simulation/elements/DMND.cpp
index 9b86a84..9b49a1a 100644
--- a/src/simulation/elements/DMND.cpp
+++ b/src/simulation/elements/DMND.cpp
@@ -12,7 +12,7 @@ Element_DMND::Element_DMND()
Advection = 0.0f;
AirDrag = 0.00f * CFDS;
AirLoss = 0.90f;
- Loss = 0.00f;
+ Loss = 1.00f;
Collision = 0.0f;
Gravity = 0.0f;
Diffusion = 0.00f;
diff --git a/src/simulation/elements/TTAN.cpp b/src/simulation/elements/TTAN.cpp
index b37ac61..7b4262d 100644
--- a/src/simulation/elements/TTAN.cpp
+++ b/src/simulation/elements/TTAN.cpp
@@ -11,7 +11,7 @@ Element_TTAN::Element_TTAN()
Enabled = 1;
Advection = 0.0f;
- AirDrag = 0.02f * CFDS;
+ AirDrag = 0.00f * CFDS;
AirLoss = 0.90f;
Loss = 0.999f;
Collision = 0.0f;