Jypeli
9
The simple game programming library
Lightning.cs
Siirry tämän tiedoston dokumentaatioon.
1
using
System
.Collections.Generic;
2
3
namespace
Jypeli.Effects
4
{
5
internal
class
LightningLayer
6
{
7
public
List<LightningNode>
Nodes
8
{
9
get
{
return
nodes
; }
10
set
{
nodes
= value; }
11
}
12
13
private
List<LightningNode>
nodes
;
14
15
private
double
y
;
16
public
double
Y
{
get
{
return
y
; }
set
{
y
= value; } }
17
18
public
LightningLayer
()
19
{
20
nodes
=
new
List<LightningNode>();
21
}
22
23
public
void
Add
(
LightningNode
n)
24
{
25
nodes
.Add(n);
26
}
27
}
28
29
internal
class
LightningNode
30
{
31
private
LightningNode
parentNode
;
32
private
List<LightningNode>
childNodes
;
33
public
List<LightningNode>
ChildNodes
{
get
{
return
childNodes
; } }
34
35
private
double
splitChance
= 0;
36
public
double
SplitChance
{
get
{
return
splitChance
; } }
37
38
private
Vector
position
;
39
public
Vector
Position
{
get
{
return
position
; }
set
{
position
= value; } }
40
public
LightningNode
()
41
{
42
childNodes
=
new
List<LightningNode>();
43
}
44
45
public
LightningNode
(
Vector
position
)
46
{
47
this.position =
position
;
48
childNodes
=
new
List<LightningNode>();
49
}
50
51
public
void
AddChild
(
Vector
position
)
52
{
53
AddChild
(
new
LightningNode
(
position
));
54
}
55
56
public
void
AddChild
(
LightningNode
node)
57
{
58
node.
parentNode
=
this
;
59
this.childNodes.Add(node);
60
}
61
}
62
63
64
public
class
Lightning
:
ParticleSystem
65
{
66
private
LightningLayer
[]
layers
;
67
//public LightningLayer[] Layers { get { return layers; } }
68
//private List<LightningNode> nodes;
69
private
int
layerAmount
= 7;
70
71
private
int
currentLayer
;
72
73
//private double height;
74
//private double width;
75
76
private
bool
striking
=
false
;
77
private
double
strikeSpeed
= 0.0;
78
79
//private Color levelColor;
80
81
private
int
particlesPerLayer
;
82
83
public
Lightning
(
Image
particleImage,
int
maxAmountOfParticles)
84
: base(particleImage, maxAmountOfParticles)
85
{
86
InitializeLayers
();
87
particlesPerLayer
= maxAmountOfParticles /
layers
.Length;
88
}
89
90
protected
override
void
InitializeParticle
(
Particle
p,
Vector
position)
91
{
92
p.
Initialize
(position, 2.0, 0.0, 0.0,
Vector
.
Zero
,
Vector
.
Zero
, 0.4);
93
}
94
95
public
override
void
Update
(
Time
time)
96
{
97
double
t = time.
SinceLastUpdate
.TotalSeconds;
98
strikeSpeed
+= t;
99
if
(
striking
)
100
{
101
if
(
strikeSpeed
> 0.01)
102
{
103
foreach
(
LightningNode
node
in
layers
[
currentLayer
].Nodes)
104
{
105
foreach
(
LightningNode
child
in
node.
ChildNodes
)
106
{
107
Vector
v = child.
Position
- node.
Position
;
108
int
particlesPerBranch =
particlesPerLayer
/ node.
ChildNodes
.Count;
109
for
(
int
i = 0; i < particlesPerBranch; i++)
110
{
111
base.AddEffect(node.
Position
+ v*(i/(
double
)particlesPerBranch), 1);
112
}
113
}
114
//base.AddEffect(node.Position, 1);
115
}
116
currentLayer
++;
117
strikeSpeed
= 0.0;
118
if
(
currentLayer
>=
layers
.Length)
119
{
120
striking
=
false
;
121
currentLayer
= 0;
122
}
123
}
124
}
125
base.Update(time);
126
}
127
128
private
void
InitializeLayers
()
129
{
130
layers
=
new
LightningLayer
[
layerAmount
];
131
for
(
int
i = 0; i <
layers
.Length; i++)
132
{
133
layers
[i] =
new
LightningLayer
();
134
}
135
}
136
137
public
void
Strike
(
Vector
startPoint,
double
width,
double
height)
138
{
139
double
branchHeight = height /
layerAmount
;
140
InitializeLayers
();
141
LightningNode
startNode =
new
LightningNode
(startPoint);
142
layers
[0].
Add
(startNode);
143
layers
[0].
Y
= startNode.
Position
.
Y
;
144
//startNode.AddChild(startPoint);
145
146
for
(
int
i = 1; i <
layers
.Length - 1; i++)
147
{
148
for
(
int
j = 0; j <
layers
[i - 1].
Nodes
.Count; j++)
149
{
150
LightningNode
currentNode =
layers
[i - 1].
Nodes
[j];
151
layers
[i].
Y
=
layers
[i - 1].
Y
- branchHeight;
152
if
(
RandomGen
.
NextDouble
(0, 100) <
layers
[i - 1].
Nodes
[j].SplitChance)
153
{
154
Vector
pLeft =
new
Vector
(
RandomGen
.
NextDouble
(currentNode.
Position
.
X
- width / 6, currentNode.
Position
.
X
),
layers
[i].
Y
);
155
Vector
pRight =
new
Vector
(
RandomGen
.
NextDouble
(currentNode.
Position
.
X
, currentNode.
Position
.
X
+ width / 6),
layers
[i].
Y
);
156
LightningNode
nLeft =
new
LightningNode
(pLeft);
157
LightningNode
nRight =
new
LightningNode
(pRight);
158
layers
[i].
Nodes
.Add(nLeft);
159
currentNode.
AddChild
(nLeft);
160
layers
[i].
Nodes
.Add(nRight);
161
currentNode.
AddChild
(nRight);
162
163
}
164
Vector
p =
new
Vector
(
RandomGen
.
NextDouble
(startPoint.
X
- width / 4, startPoint.
X
+ width / 4),
layers
[i].
Y
);
165
LightningNode
n =
new
LightningNode
(p);
166
layers
[i].
Nodes
.Add(n);
167
currentNode.
AddChild
(n);
168
}
169
}
170
striking
=
true
;
171
}
172
}
173
}
Jypeli.Effects.LightningNode.AddChild
void AddChild(Vector position)
Definition:
Lightning.cs:51
Jypeli.Effects.Lightning.strikeSpeed
double strikeSpeed
Definition:
Lightning.cs:77
Jypeli.Effects.Lightning.striking
bool striking
Definition:
Lightning.cs:76
Jypeli.Effects.LightningLayer.y
double y
Definition:
Lightning.cs:15
Jypeli.Effects.LightningNode.childNodes
List< LightningNode > childNodes
Definition:
Lightning.cs:32
Jypeli.Effects.LightningNode.LightningNode
LightningNode()
Definition:
Lightning.cs:40
Jypeli.Effects.ParticleSystem
Järjestelmä partikkelien käsittelyyn
Definition:
ParticleSystem.cs:19
Jypeli.Effects.Particle.Initialize
void Initialize(Vector position, double scale, double rotation, double rotationSpeed, Vector velocity, Vector acceleration, double lifetime)
Alusta partikkeli
Definition:
Particle.cs:112
Jypeli.Vector.X
double X
Definition:
Vector.cs:312
Jypeli.Vector.Zero
static readonly Vector Zero
Nollavektori.
Definition:
Vector.cs:63
Jypeli.Effects.LightningNode.LightningNode
LightningNode(Vector position)
Definition:
Lightning.cs:45
Jypeli.Effects.Lightning.currentLayer
int currentLayer
Definition:
Lightning.cs:71
Jypeli.Effects.LightningNode.SplitChance
double SplitChance
Definition:
Lightning.cs:36
Jypeli.Effects.LightningNode
Definition:
Lightning.cs:30
Jypeli.Effects.Lightning.Strike
void Strike(Vector startPoint, double width, double height)
Definition:
Lightning.cs:137
Jypeli.Effects.LightningLayer.Nodes
List< LightningNode > Nodes
Definition:
Lightning.cs:8
Jypeli.Effects.Lightning
Definition:
Lightning.cs:65
Jypeli.Effects.Lightning.layers
LightningLayer[] layers
Definition:
Lightning.cs:66
Jypeli.Effects.LightningNode.splitChance
double splitChance
Definition:
Lightning.cs:35
Jypeli.Effects.LightningLayer.nodes
List< LightningNode > nodes
Definition:
Lightning.cs:13
Jypeli.Effects.LightningNode.ChildNodes
List< LightningNode > ChildNodes
Definition:
Lightning.cs:33
Jypeli.Effects.LightningNode.parentNode
LightningNode parentNode
Definition:
Lightning.cs:31
Jypeli.Effects.LightningNode.position
Vector position
Definition:
Lightning.cs:38
Jypeli.RandomGen
Satunnaisgeneraattori. Luo satunnaisia arvoja, mm. lukuja, vektoreita sekä kulmia.
Definition:
RandomGen.cs:39
Jypeli.Effects.LightningNode.Position
Vector Position
Definition:
Lightning.cs:39
Jypeli.Time
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
Definition:
Time.cs:14
Jypeli.Effects.Lightning.InitializeParticle
override void InitializeParticle(Particle p, Vector position)
Alustaa yhden partikkelin
Definition:
Lightning.cs:90
Jypeli.Time.SinceLastUpdate
TimeSpan SinceLastUpdate
Aika joka on kulunut viime päivityksestä.
Definition:
Time.cs:24
Jypeli.Effects.Lightning.InitializeLayers
void InitializeLayers()
Definition:
Lightning.cs:128
Jypeli.Effects.Particle
Partikkeli
Definition:
Particle.cs:9
Jypeli.Effects.LightningLayer.Add
void Add(LightningNode n)
Definition:
Lightning.cs:23
Jypeli.Effects.Lightning.layerAmount
int layerAmount
Definition:
Lightning.cs:69
Jypeli.RandomGen.NextDouble
static double NextDouble(double min, double max)
Palauttaa satunnaisen liukuluvun parametrien
Definition:
RandomGen.cs:70
Jypeli.Image
Kuva.
Definition:
Image.cs:29
Jypeli.Effects.Lightning.Update
override void Update(Time time)
Definition:
Lightning.cs:95
Jypeli.Effects.Lightning.particlesPerLayer
int particlesPerLayer
Definition:
Lightning.cs:81
Jypeli.Vector
2D-vektori.
Definition:
Vector.cs:59
System
Definition:
CFFauxAttributes.cs:29
Jypeli.Effects
Definition:
ExplosionSystem.cs:4
Jypeli.Effects.LightningNode.AddChild
void AddChild(LightningNode node)
Definition:
Lightning.cs:56
Jypeli.Effects.Lightning.Lightning
Lightning(Image particleImage, int maxAmountOfParticles)
Definition:
Lightning.cs:83
Jypeli.Effects.LightningLayer
Definition:
Lightning.cs:6
Jypeli.Effects.LightningLayer.Y
double Y
Definition:
Lightning.cs:16
Jypeli.Vector.Y
double Y
Definition:
Vector.cs:313
Jypeli.Effects.LightningLayer.LightningLayer
LightningLayer()
Definition:
Lightning.cs:18
Jypeli
Effects
Lightning.cs
Generoinut projektille Jypeli Sat Oct 17 2020 19:03:14
1.8.20