Advertisement
Guest User

bmtl.c

a guest
Sep 7th, 2012
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.64 KB | None | 0 0
  1. /*
  2.  * This program is free software; you can redistribute it and/or modify
  3.  * it under the terms of the GNU General Public License as published by
  4.  * the Free Software Foundation; either version 3 of the License, or
  5.  * (at your option) any later version.
  6.  *
  7.  * This program is distributed in the hope that it will be useful,
  8.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.  * GNU General Public License for more details.
  11.  *
  12.  * You should have received a copy of the GNU General Public License
  13.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  14.  * PersistStone algorithm is property of ColemanSystems Studios Ltd.
  15.  */
  16.  
  17. #include <element.h>
  18.  
  19. int update_BMTL(UPDATE_FUNC_ARGS) {
  20.     int r, rx, ry, rt, tempFactor;
  21.     if (parts[i].tmp>1)
  22.     {
  23.         parts[i].tmp--;
  24.         for (rx=-1; rx<2; rx++)
  25.             for (ry=-1; ry<2; ry++)
  26.                 if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry))
  27.                 {
  28.                     r = pmap[y+ry][x+rx];
  29.                     if (!r)
  30.                         continue;
  31.                     rt = parts[r>>8].type;
  32.                     if ((rt==PT_METL || rt==PT_IRON) && 1>(rand()/(RAND_MAX/100)))
  33.                     {
  34.                         part_change_type(r>>8,x+rx,y+ry,PT_BMTL);
  35.                         parts[r>>8].tmp=(parts[i].tmp<=7)?parts[i].tmp=1:parts[i].tmp-(rand()%5);//rand()/(RAND_MAX/300)+100;
  36.                     }
  37.                 }
  38.     }
  39.     else if (parts[i].tmp==1 && 1>rand()%1000)
  40.     {
  41.         parts[i].tmp = 0;
  42.         part_change_type(i,x,y,PT_BRMT);
  43.     }
  44.    
  45.     // Break if stress > 100
  46.     if (parts[i].tmp2>100) {
  47.         parts[i].tmp2 = 0;
  48.         part_change_type(i,x,y,PT_BRMT);
  49.     }
  50.     //Add Stress
  51.     parts[i].tmp2++;
  52.     //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.
  53.    
  54.     // Equib stress
  55.     //Find particle id's
  56.     int pleft = pmap[y][x-1];
  57.     int pright = pmap[y][x+1];
  58.     int pup = pmap[y-1][x];
  59.     int pdown = pmap[y+1][x];
  60.    
  61.     float splitstress;
  62.     int stresscount=1;
  63.    
  64.     //Find out what particles around it ARE PT_BMTL
  65.     if {parts[pleft].type==PT_BMTL){stresscount++;}
  66.     if {parts[pright].type==PT_BMTL){stresscount++;}
  67.     if {parts[pup].type==PT_BMTL){stresscount++;}
  68.     if {parts[pdown].type==PT_BMTL){stresscount = stresscount + 2;}
  69.    
  70.     splitstress = parts[i].tmp2 / stresscount;
  71.     if {parts[pleft].type==PT_BMTL){parts[pleft].tmp2 = parts[pleft].tmp2 + splitstress;}
  72.     if {parts[pright].type==PT_BMTL){parts[pright].tmp2 = parts[pright].tmp2 + splitstress;}
  73.     if {parts[pup].type==PT_BMTL){parts[pup].tmp2 = parts[pup].tmp2 + splitstress;}
  74.     if {parts[pdown].type==PT_BMTL){parts[pdown].tmp2 = parts[pdown].tmp2 + (splitstress * 2);}
  75.     parts[i].tmp2 = splitstress;
  76.    
  77.     return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement