Converted Brushes to solid brudhes and increased performances
This commit is contained in:
@@ -10,10 +10,21 @@ namespace PropagationRemasteredBeta
|
|||||||
public class Human : ICloneable
|
public class Human : ICloneable
|
||||||
{
|
{
|
||||||
//State values
|
//State values
|
||||||
|
/*
|
||||||
public Color SAIN_COLOR = Color.Green;
|
public Color SAIN_COLOR = Color.Green;
|
||||||
public Color INFECTED_COLOR = Color.Red;
|
public Color INFECTED_COLOR = Color.Red;
|
||||||
public Color IMMUNE_COLOR = Color.Blue;
|
public Color IMMUNE_COLOR = Color.Blue;
|
||||||
public Color DEATH_COLOR = Color.Black;
|
public Color DEATH_COLOR = Color.Black;
|
||||||
|
|
||||||
|
public SolidBrush SAIN_COLOR = new SolidBrush(Color.Green);
|
||||||
|
public SolidBrush INFECTED_COLOR = new SolidBrush(Color.Red);
|
||||||
|
public SolidBrush IMMUNE_COLOR = new SolidBrush(Color.Blue);
|
||||||
|
public SolidBrush DEATH_COLOR = new SolidBrush(Color.Black);
|
||||||
|
*/
|
||||||
|
public SolidBrush SAIN_COLOR;
|
||||||
|
public SolidBrush INFECTED_COLOR;
|
||||||
|
public SolidBrush IMMUNE_COLOR;
|
||||||
|
public SolidBrush DEATH_COLOR;
|
||||||
|
|
||||||
public const int SAIN = 0;
|
public const int SAIN = 0;
|
||||||
public const int INFECTED = 1;
|
public const int INFECTED = 1;
|
||||||
@@ -27,7 +38,8 @@ namespace PropagationRemasteredBeta
|
|||||||
private Size _humanSize;
|
private Size _humanSize;
|
||||||
private int _lifeTimeCounter;
|
private int _lifeTimeCounter;
|
||||||
private int _InfectedTimeCounter;
|
private int _InfectedTimeCounter;
|
||||||
private Color _sprite;
|
//private Color _sprite;
|
||||||
|
private SolidBrush _sprite;
|
||||||
|
|
||||||
public Point Position { get => _position; set => _position = value; }
|
public Point Position { get => _position; set => _position = value; }
|
||||||
public int State
|
public int State
|
||||||
@@ -58,15 +70,27 @@ namespace PropagationRemasteredBeta
|
|||||||
public Size HumanSize { get => _humanSize; set => _humanSize = value; }
|
public Size HumanSize { get => _humanSize; set => _humanSize = value; }
|
||||||
public int LifeTimeCounter { get => _lifeTimeCounter; set => _lifeTimeCounter = value; }
|
public int LifeTimeCounter { get => _lifeTimeCounter; set => _lifeTimeCounter = value; }
|
||||||
public int InfectedTimeCounter { get => _InfectedTimeCounter; set => _InfectedTimeCounter = value; }
|
public int InfectedTimeCounter { get => _InfectedTimeCounter; set => _InfectedTimeCounter = value; }
|
||||||
public Color Sprite { get => _sprite; set => _sprite = value; }
|
//public Color Sprite { get => Sprite; set => Sprite = value; }
|
||||||
|
public SolidBrush Sprite { get => _sprite; set => _sprite = value; }
|
||||||
public Human(Point position, int state, Size humanSize)
|
public Human(Point position, int state, Size humanSize, SolidBrush sainColor, SolidBrush infectedColor, SolidBrush immuneColor, SolidBrush deadColor)
|
||||||
{
|
{
|
||||||
HumanSize = humanSize;
|
HumanSize = humanSize;
|
||||||
Position = position;
|
Position = position;
|
||||||
State = state;
|
|
||||||
LifeTimeCounter = 1;
|
LifeTimeCounter = 1;
|
||||||
InfectedTimeCounter = 0;
|
InfectedTimeCounter = 0;
|
||||||
|
SAIN_COLOR = sainColor;
|
||||||
|
INFECTED_COLOR = infectedColor;
|
||||||
|
IMMUNE_COLOR = immuneColor;
|
||||||
|
DEATH_COLOR = deadColor;
|
||||||
|
|
||||||
|
//IMPORTANT only set state AFTER colors
|
||||||
|
State = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Human(Point position, int state, Size humanSize) : this(position,state,humanSize, new SolidBrush(Color.Green), new SolidBrush(Color.Red), new SolidBrush(Color.Blue), new SolidBrush(Color.Black))
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
public Human(Point position, int state) : this(position, state, new Size(DEFAULT_HUMAN_SIZE, DEFAULT_HUMAN_SIZE))
|
public Human(Point position, int state) : this(position, state, new Size(DEFAULT_HUMAN_SIZE, DEFAULT_HUMAN_SIZE))
|
||||||
{
|
{
|
||||||
@@ -74,7 +98,7 @@ namespace PropagationRemasteredBeta
|
|||||||
}
|
}
|
||||||
//we dont have any constructor with only default values because the human needs his position in the field to process the infection
|
//we dont have any constructor with only default values because the human needs his position in the field to process the infection
|
||||||
|
|
||||||
public void ChangeBaseColors(Color sainColor, Color infectedColor, Color immuneColor, Color deadColor)
|
public void ChangeBaseColors(SolidBrush sainColor, SolidBrush infectedColor, SolidBrush immuneColor, SolidBrush deadColor)
|
||||||
{
|
{
|
||||||
SAIN_COLOR = sainColor;
|
SAIN_COLOR = sainColor;
|
||||||
IMMUNE_COLOR = immuneColor;
|
IMMUNE_COLOR = immuneColor;
|
||||||
@@ -112,7 +136,7 @@ namespace PropagationRemasteredBeta
|
|||||||
{
|
{
|
||||||
T.PeopleToCheck.Add(target);
|
T.PeopleToCheck.Add(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//check top
|
//check top
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
|
||||||
namespace PropagationRemasteredBeta
|
namespace PropagationRemasteredBeta
|
||||||
{
|
{
|
||||||
@@ -17,8 +18,13 @@ namespace PropagationRemasteredBeta
|
|||||||
const int DEFAULT_INFECTION_RATE = 20;
|
const int DEFAULT_INFECTION_RATE = 20;
|
||||||
const int DEFAULT_CURE_TIME = 25;
|
const int DEFAULT_CURE_TIME = 25;
|
||||||
|
|
||||||
|
public SolidBrush SAIN_COLOR = new SolidBrush(Color.Green);
|
||||||
|
public SolidBrush INFECTED_COLOR = new SolidBrush(Color.Red);
|
||||||
|
public SolidBrush IMMUNE_COLOR = new SolidBrush(Color.Blue);
|
||||||
|
public SolidBrush DEATH_COLOR = new SolidBrush(Color.Black);
|
||||||
|
|
||||||
private Human[,] _population;
|
private Human[,] _population;
|
||||||
private List<Human> _peopleToCheck;
|
private ConcurrentBag<Human> _peopleToCheck;
|
||||||
private Size _terrainSize;
|
private Size _terrainSize;
|
||||||
|
|
||||||
private int _infectedProportion;
|
private int _infectedProportion;
|
||||||
@@ -53,8 +59,8 @@ namespace PropagationRemasteredBeta
|
|||||||
public List<int> ImmuneCount { get => _immuneCount; set => _immuneCount = value; }
|
public List<int> ImmuneCount { get => _immuneCount; set => _immuneCount = value; }
|
||||||
public List<int> DeadCount { get => _deadCount; set => _deadCount = value; }
|
public List<int> DeadCount { get => _deadCount; set => _deadCount = value; }
|
||||||
public int SimulationDuration { get => _simulationDuration; set => _simulationDuration = value; }
|
public int SimulationDuration { get => _simulationDuration; set => _simulationDuration = value; }
|
||||||
public List<Human> PeopleToCheck { get => _peopleToCheck; set => _peopleToCheck = value; }
|
|
||||||
public Random Rnd { get => rnd; set => rnd = value; }
|
public Random Rnd { get => rnd; set => rnd = value; }
|
||||||
|
public ConcurrentBag<Human> PeopleToCheck { get => _peopleToCheck; set => _peopleToCheck = value; }
|
||||||
|
|
||||||
public Terrain(Size terrainSize, int infectedProportion, int resistantProportion, int deathRate, int infectionRate, int cureTime)
|
public Terrain(Size terrainSize, int infectedProportion, int resistantProportion, int deathRate, int infectionRate, int cureTime)
|
||||||
{
|
{
|
||||||
@@ -83,6 +89,10 @@ namespace PropagationRemasteredBeta
|
|||||||
}
|
}
|
||||||
public void Generate()
|
public void Generate()
|
||||||
{
|
{
|
||||||
|
if (Population[0,0] != null)
|
||||||
|
{
|
||||||
|
Population = new Human[TerrainSize.Width, TerrainSize.Height];
|
||||||
|
}
|
||||||
//That is the basic method to scan trough the entire field
|
//That is the basic method to scan trough the entire field
|
||||||
for (int width = 0; width < TerrainSize.Width; width += 1)
|
for (int width = 0; width < TerrainSize.Width; width += 1)
|
||||||
{
|
{
|
||||||
@@ -103,13 +113,17 @@ namespace PropagationRemasteredBeta
|
|||||||
state = Human.IMMUNE;
|
state = Human.IMMUNE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Human tmp = new Human(new Point(width, height), state,new Size(1,1),SAIN_COLOR,INFECTED_COLOR,IMMUNE_COLOR,DEATH_COLOR);
|
||||||
Population[width, height] = new Human(new Point(width, height), state);
|
Population[width, height] = tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void GenerateOneForAll()
|
public void GenerateOneForAll()
|
||||||
{
|
{
|
||||||
|
if (Population[0, 0] != null)
|
||||||
|
{
|
||||||
|
Population = new Human[TerrainSize.Width, TerrainSize.Height];
|
||||||
|
}
|
||||||
for (int width = 0; width < TerrainSize.Width; width += 1)
|
for (int width = 0; width < TerrainSize.Width; width += 1)
|
||||||
{
|
{
|
||||||
for (int height = 0; height < TerrainSize.Height; height += 1)
|
for (int height = 0; height < TerrainSize.Height; height += 1)
|
||||||
@@ -124,8 +138,9 @@ namespace PropagationRemasteredBeta
|
|||||||
state = Human.IMMUNE;
|
state = Human.IMMUNE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Human tmp = new Human(new Point(width, height), state,new Size(1, 1), SAIN_COLOR, INFECTED_COLOR, IMMUNE_COLOR, DEATH_COLOR);
|
||||||
Population[width, height] = new Human(new Point(width, height), state);
|
//Population[width, height] = new Human(new Point(width, height), state);
|
||||||
|
Population[width, height] = tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//we generate a single infected in a random location
|
//we generate a single infected in a random location
|
||||||
@@ -142,8 +157,9 @@ namespace PropagationRemasteredBeta
|
|||||||
InfectedCount.Add(0);
|
InfectedCount.Add(0);
|
||||||
DeadCount.Add(0);
|
DeadCount.Add(0);
|
||||||
|
|
||||||
PeopleToCheck = new List<Human>();
|
PeopleToCheck = new ConcurrentBag<Human>();
|
||||||
|
|
||||||
|
//Parallel.For(0, TerrainSize.Width, width =>
|
||||||
for (int width = 0; width < TerrainSize.Width; width += 1)
|
for (int width = 0; width < TerrainSize.Width; width += 1)
|
||||||
{
|
{
|
||||||
//Parallel.For(0, TerrainSize.Height, height =>
|
//Parallel.For(0, TerrainSize.Height, height =>
|
||||||
@@ -159,7 +175,7 @@ namespace PropagationRemasteredBeta
|
|||||||
//nothing to do
|
//nothing to do
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//only for stats purposes
|
//only for stats purposes
|
||||||
switch (Population[width, height].State)
|
switch (Population[width, height].State)
|
||||||
{
|
{
|
||||||
@@ -177,8 +193,19 @@ namespace PropagationRemasteredBeta
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}//);
|
}//);
|
||||||
}
|
}//);
|
||||||
|
|
||||||
|
/*
|
||||||
|
List<Human> filtered = PeopleToCheck.Distinct().ToList<Human>();
|
||||||
|
Parallel.ForEach(filtered,
|
||||||
|
target =>
|
||||||
|
{
|
||||||
|
Population[target.Position.X, target.Position.Y] = target.CheckInfection(InfectionRate,Rnd);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
|
//List<Human> filtered = PeopleToCheck.Distinct().ToList<Human>();
|
||||||
foreach (Human target in PeopleToCheck)
|
foreach (Human target in PeopleToCheck)
|
||||||
{
|
{
|
||||||
Population[target.Position.X,target.Position.Y] = target.CheckInfection(InfectionRate,Rnd);
|
Population[target.Position.X,target.Position.Y] = target.CheckInfection(InfectionRate,Rnd);
|
||||||
@@ -223,19 +250,19 @@ namespace PropagationRemasteredBeta
|
|||||||
switch (dominantState)
|
switch (dominantState)
|
||||||
{
|
{
|
||||||
case Human.SAIN:
|
case Human.SAIN:
|
||||||
gr.FillRectangle(new SolidBrush(sample.SAIN_COLOR), new Rectangle(new Point(0, 0), new Size(Render.Width, Render.Height)));
|
gr.FillRectangle(sample.SAIN_COLOR, new Rectangle(new Point(0, 0), new Size(Render.Width, Render.Height)));
|
||||||
break;
|
break;
|
||||||
case Human.IMMUNE:
|
case Human.IMMUNE:
|
||||||
gr.FillRectangle(new SolidBrush(sample.IMMUNE_COLOR), new Rectangle(new Point(0, 0), new Size(Render.Width, Render.Height)));
|
gr.FillRectangle(sample.IMMUNE_COLOR, new Rectangle(new Point(0, 0), new Size(Render.Width, Render.Height)));
|
||||||
break;
|
break;
|
||||||
case Human.INFECTED:
|
case Human.INFECTED:
|
||||||
gr.FillRectangle(new SolidBrush(sample.INFECTED_COLOR), new Rectangle(new Point(0, 0), new Size(Render.Width, Render.Height)));
|
gr.FillRectangle(sample.INFECTED_COLOR, new Rectangle(new Point(0, 0), new Size(Render.Width, Render.Height)));
|
||||||
break;
|
break;
|
||||||
case Human.DEAD:
|
case Human.DEAD:
|
||||||
gr.FillRectangle(new SolidBrush(sample.DEATH_COLOR), new Rectangle(new Point(0, 0), new Size(Render.Width, Render.Height)));
|
gr.FillRectangle(sample.DEATH_COLOR, new Rectangle(new Point(0, 0), new Size(Render.Width, Render.Height)));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
gr.FillRectangle(new SolidBrush(sample.SAIN_COLOR), new Rectangle(new Point(0, 0), new Size(Render.Width, Render.Height)));
|
gr.FillRectangle(sample.SAIN_COLOR, new Rectangle(new Point(0, 0), new Size(Render.Width, Render.Height)));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,8 +273,8 @@ namespace PropagationRemasteredBeta
|
|||||||
Human individual = Population[width, height];
|
Human individual = Population[width, height];
|
||||||
if (individual.State != dominantState)
|
if (individual.State != dominantState)
|
||||||
{
|
{
|
||||||
Color c = individual.Sprite;
|
SolidBrush c = individual.Sprite;
|
||||||
gr.FillRectangle(new SolidBrush(c), new Rectangle(individual.Position, individual.HumanSize));
|
gr.FillRectangle(c, new Rectangle(individual.Position, individual.HumanSize));
|
||||||
DRAWED_ELEMENTS++;
|
DRAWED_ELEMENTS++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user