Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * PersistStone algorithm is property of ColemanSystems Studios Ltd.
- */
- #include <element.h>
- int update_BMTL(UPDATE_FUNC_ARGS) {
- int r, rx, ry, rt, tempFactor;
- if (parts[i].tmp>1)
- {
- parts[i].tmp--;
- for (rx=-1; rx<2; rx++)
- for (ry=-1; ry<2; ry++)
- if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry))
- {
- r = pmap[y+ry][x+rx];
- if (!r)
- continue;
- rt = parts[r>>8].type;
- if ((rt==PT_METL || rt==PT_IRON) && 1>(rand()/(RAND_MAX/100)))
- {
- part_change_type(r>>8,x+rx,y+ry,PT_BMTL);
- parts[r>>8].tmp=(parts[i].tmp<=7)?parts[i].tmp=1:parts[i].tmp-(rand()%5);//rand()/(RAND_MAX/300)+100;
- }
- }
- }
- else if (parts[i].tmp==1 && 1>rand()%1000)
- {
- parts[i].tmp = 0;
- part_change_type(i,x,y,PT_BRMT);
- }
- // Break if stress > 100
- if (parts[i].tmp2>100) {
- parts[i].tmp2 = 0;
- part_change_type(i,x,y,PT_BRMT);
- }
- //Add Stress
- parts[i].tmp2++;
- //Transfer air pressure into stress on the structure. TODO. This will make buildings fall down in extreme wind/explosions. Plus pressurised gas containers can explode.
- // Equib stress
- //Find particle id's
- int pleft = pmap[y][x-1];
- int pright = pmap[y][x+1];
- int pup = pmap[y-1][x];
- int pdown = pmap[y+1][x];
- float splitstress;
- int stresscount=1;
- //Find out what particles around it ARE PT_BMTL
- if {parts[pleft].type==PT_BMTL){stresscount++;}
- if {parts[pright].type==PT_BMTL){stresscount++;}
- if {parts[pup].type==PT_BMTL){stresscount++;}
- if {parts[pdown].type==PT_BMTL){stresscount = stresscount + 2;}
- splitstress = parts[i].tmp2 / stresscount;
- if {parts[pleft].type==PT_BMTL){parts[pleft].tmp2 = parts[pleft].tmp2 + splitstress;}
- if {parts[pright].type==PT_BMTL){parts[pright].tmp2 = parts[pright].tmp2 + splitstress;}
- if {parts[pup].type==PT_BMTL){parts[pup].tmp2 = parts[pup].tmp2 + splitstress;}
- if {parts[pdown].type==PT_BMTL){parts[pdown].tmp2 = parts[pdown].tmp2 + (splitstress * 2);}
- parts[i].tmp2 = splitstress;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement