From 25ce83d5bff3566368f44501cd674a93b1e286e9 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Tue, 17 Apr 2012 16:04:48 +0100 Subject: [PATCH] TPT: Implement PROP_NEUTABSORB bdf277e687 --- src/simulation/Elements.h | 4 ++-- src/simulation/Simulation.cpp | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/simulation/Elements.h b/src/simulation/Elements.h index 204460c43..9e7e654ea 100644 --- a/src/simulation/Elements.h +++ b/src/simulation/Elements.h @@ -34,9 +34,9 @@ #define PROP_CONDUCTS 0x00020 //32 Conducts electricity #define PROP_BLACK 0x00040 //64 Absorbs Photons (not currently implemented or used, a photwl attribute might be better) #define PROP_NEUTPENETRATE 0x00080 //128 Penetrated by neutrons -#define PROP_NEUTABSORB 0x00100 //256 Absorbs neutrons, reflect is default (not currently implemented or used) +#define PROP_NEUTABSORB 0x00100 //256 Absorbs neutrons, reflect is default #define PROP_NEUTPASS 0x00200 //512 Neutrons pass through, such as with glass -#define PROP_DEADLY 0x00400 //1024 Is deadly for stickman (not currently implemented or used) +#define PROP_DEADLY 0x00400 //1024 Is deadly for stickman #define PROP_HOT_GLOW 0x00800 //2048 Hot Metal Glow #define PROP_LIFE 0x01000 //4096 Is a GoL type #define PROP_RADIOACTIVE 0x02000 //8192 Radioactive diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index c266e22de..3d0ab0e9f 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -1126,6 +1126,8 @@ void Simulation::init_can_move() if (ptypes[t].weight <= ptypes[rt].weight) can_move[t][rt] = 0; if (t==PT_NEUT && (ptypes[rt].properties&PROP_NEUTPASS)) can_move[t][rt] = 2; + if (t==PT_NEUT && (ptypes[rt].properties&PROP_NEUTABSORB)) + can_move[t][rt] = 1; if (t==PT_NEUT && (ptypes[rt].properties&PROP_NEUTPENETRATE)) can_move[t][rt] = 1; if ((ptypes[t].properties&PROP_NEUTPENETRATE) && rt==PT_NEUT) @@ -1345,6 +1347,11 @@ int Simulation::try_move(int i, int x, int y, int nx, int ny) } //else e=1 , we are trying to swap the particles, return 0 no swap/move, 1 is still overlap/move, because the swap takes place later + if (parts[i].type == PT_NEUT && (ptypes[r & 0xFF].properties & PROP_NEUTABSORB)) + { + parts[i].type = PT_NONE; + return 0; + } if ((r&0xFF)==PT_VOID || (r&0xFF)==PT_PVOD) //this is where void eats particles { if (parts[i].type == PT_STKM)