Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
MapHeadRenderer.cs
Go to the documentation of this file.
1
using
System
;
2
using
System.Collections.Generic
;
3
using
Microsoft.Xna.Framework
;
4
using
Microsoft.Xna.Framework.Graphics
;
5
using
Terraria.DataStructures
;
6
using
Terraria.GameContent
;
7
using
Terraria.ID
;
8
9
namespace
Terraria.Graphics.Renderers
;
10
11
public
class
MapHeadRenderer
:
INeedRenderTargetContent
12
{
13
private
bool
_anyDirty
;
14
15
private
PlayerHeadDrawRenderTargetContent
[]
_playerRenders
=
new
PlayerHeadDrawRenderTargetContent
[255];
16
17
private
readonly
List<DrawData>
_drawData
=
new
List<DrawData>
();
18
19
public
bool
IsReady
=> !
_anyDirty
;
20
21
public
MapHeadRenderer
()
22
{
23
for
(
int
i = 0; i <
_playerRenders
.Length; i++)
24
{
25
_playerRenders
[i] =
new
PlayerHeadDrawRenderTargetContent
();
26
}
27
}
28
29
public
void
Reset
()
30
{
31
_anyDirty
=
false
;
32
_drawData
.
Clear
();
33
for
(
int
i = 0; i <
_playerRenders
.Length; i++)
34
{
35
_playerRenders
[i].
Reset
();
36
}
37
}
38
39
public
void
DrawPlayerHead
(
Camera
camera
,
Player
drawPlayer,
Vector2
position,
float
alpha = 1f,
float
scale = 1f,
Color
borderColor
=
default
(
Color
))
40
{
41
PlayerHeadDrawRenderTargetContent
playerHeadDrawRenderTargetContent
=
_playerRenders
[drawPlayer.
whoAmI
];
42
playerHeadDrawRenderTargetContent
.UsePlayer(drawPlayer);
43
playerHeadDrawRenderTargetContent
.UseColor(
borderColor
);
44
playerHeadDrawRenderTargetContent
.Request();
45
_anyDirty
=
true
;
46
_drawData
.
Clear
();
47
if
(
playerHeadDrawRenderTargetContent
.IsReady)
48
{
49
RenderTarget2D
target =
playerHeadDrawRenderTargetContent
.GetTarget();
50
_drawData
.
Add
(
new
DrawData
(target, position,
null
,
Color
.
White
, 0f, ((
Texture2D
)target).Size() / 2f, scale,
SpriteEffects
.None));
51
RenderDrawData
(drawPlayer);
52
}
53
}
54
55
private
void
RenderDrawData
(
Player
drawPlayer)
56
{
57
Effect
pixelShader =
Main
.
pixelShader
;
58
_
=
Main
.
projectile
;
59
SpriteBatch
spriteBatch =
Main
.
spriteBatch
;
60
for
(
int
i = 0; i <
_drawData
.
Count
; i++)
61
{
62
DrawData
cdd
=
_drawData
[i];
63
if
(!
cdd
.sourceRect.HasValue)
64
{
65
cdd.sourceRect =
cdd
.texture.Frame();
66
}
67
PlayerDrawHelper
.
SetShaderForData
(drawPlayer, drawPlayer.
cHead
,
ref
cdd
);
68
if
(
cdd
.texture !=
null
)
69
{
70
cdd
.Draw(spriteBatch);
71
}
72
}
73
pixelShader.
CurrentTechnique
.
Passes
[0].Apply();
74
}
75
76
public
void
PrepareRenderTarget
(
GraphicsDevice
device,
SpriteBatch
spriteBatch)
77
{
78
if
(
_anyDirty
)
79
{
80
for
(
int
i = 0; i <
_playerRenders
.Length; i++)
81
{
82
_playerRenders
[i].
PrepareRenderTarget
(device, spriteBatch);
83
}
84
_anyDirty
=
false
;
85
}
86
}
87
88
private
void
CreateOutlines
(
float
alpha,
float
scale,
Color
borderColor
)
89
{
90
if
(!(
borderColor
!=
Color
.
Transparent
))
91
{
92
return
;
93
}
94
List<DrawData>
collection
=
new
List<DrawData>
(
_drawData
);
95
List<DrawData>
list
=
new
List<DrawData>
(
_drawData
);
96
_drawData
.
Clear
();
97
float
num = 2f * scale;
98
Color
color =
borderColor
;
99
color *= alpha * alpha;
100
Color
black
=
Color
.
Black
;
101
black
*= alpha * alpha;
102
int
colorOnlyShaderIndex
=
ContentSamples
.
CommonlyUsedContentSamples
.
ColorOnlyShaderIndex
;
103
for
(
int
i = 0; i <
list
.Count; i++)
104
{
105
DrawData
value
=
list
[i];
106
value.shader =
colorOnlyShaderIndex
;
107
value.color =
black
;
108
list
[i] =
value
;
109
}
110
int
num2
= 2;
111
Vector2
vector
;
112
for
(
int
j
= -
num2
;
j
<=
num2
;
j
++)
113
{
114
for
(
int
k
= -
num2
;
k
<=
num2
;
k
++)
115
{
116
if
(
Math
.
Abs
(
j
) +
Math
.
Abs
(
k
) ==
num2
)
117
{
118
vector
=
new
Vector2
((
float
)
j
* num, (
float
)
k
* num);
119
for
(
int
l
= 0;
l
<
list
.
Count
;
l
++)
120
{
121
DrawData
item
=
list
[
l
];
122
item.position +=
vector
;
123
_drawData
.
Add
(
item
);
124
}
125
}
126
}
127
}
128
for
(
int
m
= 0;
m
<
list
.
Count
;
m
++)
129
{
130
DrawData
value2
=
list
[
m
];
131
value2.shader =
colorOnlyShaderIndex
;
132
value2.color = color;
133
list
[
m
] =
value2
;
134
}
135
vector
=
Vector2
.
Zero
;
136
num2
= 1;
137
for
(
int
n
= -
num2
;
n
<=
num2
;
n
++)
138
{
139
for
(
int
num3
= -
num2
;
num3
<=
num2
;
num3
++)
140
{
141
if
(
Math
.
Abs
(
n
) +
Math
.
Abs
(
num3
) ==
num2
)
142
{
143
vector
=
new
Vector2
((
float
)
n
* num, (
float
)
num3
* num);
144
for
(
int
num4
= 0;
num4
<
list
.
Count
;
num4
++)
145
{
146
DrawData
item2
=
list
[
num4
];
147
item2.position +=
vector
;
148
_drawData
.
Add
(
item2
);
149
}
150
}
151
}
152
}
153
_drawData
.
AddRange
(
collection
);
154
}
155
}
Microsoft.Xna.Framework.Graphics.EffectTechnique.Passes
EffectPassCollection Passes
Definition
EffectTechnique.cs:23
Microsoft.Xna.Framework.Graphics.Effect.CurrentTechnique
unsafe EffectTechnique CurrentTechnique
Definition
Effect.cs:34
Microsoft.Xna.Framework.Graphics.Effect
Definition
Effect.cs:12
Microsoft.Xna.Framework.Graphics.GraphicsDevice
Definition
GraphicsDevice.cs:13
Microsoft.Xna.Framework.Graphics.RenderTarget2D
Definition
RenderTarget2D.cs:9
Microsoft.Xna.Framework.Graphics.SpriteBatch
Definition
SpriteBatch.cs:8
Microsoft.Xna.Framework.Graphics.Texture2D
Definition
Texture2D.cs:13
System.Collections.Generic.Dictionary.Count
int Count
Definition
Dictionary.cs:682
System.Collections.Generic.Dictionary
Definition
Dictionary.cs:14
System.Collections.Generic.List.Clear
void Clear()
Definition
List.cs:313
System.Collections.Generic.List.AddRange
void AddRange(IEnumerable< T > collection)
Definition
List.cs:275
System.Collections.Generic.List.Count
int Count
Definition
List.cs:123
System.Collections.Generic.List.Add
void Add(T item)
Definition
List.cs:236
System.Math.Abs
static double Abs(double value)
System.Math
Definition
Math.cs:13
Terraria.DataStructures.PlayerDrawHelper.SetShaderForData
static void SetShaderForData(Player player, int cHead, ref DrawData cdd)
Definition
PlayerDrawHelper.cs:29
Terraria.DataStructures.PlayerDrawHelper
Definition
PlayerDrawHelper.cs:7
Terraria.Entity.whoAmI
int whoAmI
Definition
Entity.cs:8
Terraria.GameContent.ARenderTargetContentByRequest.Reset
void Reset()
Definition
ARenderTargetContentByRequest.cs:64
Terraria.GameContent.ARenderTargetContentByRequest.PrepareRenderTarget
void PrepareRenderTarget(GraphicsDevice device, SpriteBatch spriteBatch)
Definition
ARenderTargetContentByRequest.cs:26
Terraria.GameContent.PlayerHeadDrawRenderTargetContent
Definition
PlayerHeadDrawRenderTargetContent.cs:8
Terraria.Graphics.Camera
Definition
Camera.cs:7
Terraria.Graphics.Renderers.MapHeadRenderer._drawData
readonly List< DrawData > _drawData
Definition
MapHeadRenderer.cs:17
Terraria.Graphics.Renderers.MapHeadRenderer.RenderDrawData
void RenderDrawData(Player drawPlayer)
Definition
MapHeadRenderer.cs:55
Terraria.Graphics.Renderers.MapHeadRenderer.PrepareRenderTarget
void PrepareRenderTarget(GraphicsDevice device, SpriteBatch spriteBatch)
Definition
MapHeadRenderer.cs:76
Terraria.Graphics.Renderers.MapHeadRenderer._anyDirty
bool _anyDirty
Definition
MapHeadRenderer.cs:13
Terraria.Graphics.Renderers.MapHeadRenderer.MapHeadRenderer
MapHeadRenderer()
Definition
MapHeadRenderer.cs:21
Terraria.Graphics.Renderers.MapHeadRenderer.CreateOutlines
void CreateOutlines(float alpha, float scale, Color borderColor)
Definition
MapHeadRenderer.cs:88
Terraria.Graphics.Renderers.MapHeadRenderer.Reset
void Reset()
Definition
MapHeadRenderer.cs:29
Terraria.Graphics.Renderers.MapHeadRenderer.DrawPlayerHead
void DrawPlayerHead(Camera camera, Player drawPlayer, Vector2 position, float alpha=1f, float scale=1f, Color borderColor=default(Color))
Definition
MapHeadRenderer.cs:39
Terraria.Graphics.Renderers.MapHeadRenderer._playerRenders
PlayerHeadDrawRenderTargetContent[] _playerRenders
Definition
MapHeadRenderer.cs:15
Terraria.Graphics.Renderers.MapHeadRenderer.IsReady
bool IsReady
Definition
MapHeadRenderer.cs:19
Terraria.Graphics.Renderers.MapHeadRenderer
Definition
MapHeadRenderer.cs:12
Terraria.ID.ContentSamples.CommonlyUsedContentSamples.ColorOnlyShaderIndex
static int ColorOnlyShaderIndex
Definition
ContentSamples.cs:14
Terraria.ID.ContentSamples.CommonlyUsedContentSamples
Definition
ContentSamples.cs:11
Terraria.ID.ContentSamples
Definition
ContentSamples.cs:9
Terraria.Main.spriteBatch
static SpriteBatch spriteBatch
Definition
Main.cs:974
Terraria.Main.pixelShader
static Effect pixelShader
Definition
Main.cs:2764
Terraria.Main.projectile
static Projectile[] projectile
Definition
Main.cs:1691
Terraria.Main
Definition
Main.cs:79
Terraria.Player.cHead
int cHead
Definition
Player.cs:2475
Terraria.Player
Definition
Player.cs:42
Terraria.GameContent.INeedRenderTargetContent
Definition
INeedRenderTargetContent.cs:6
Microsoft.Xna.Framework.Graphics.SurfaceFormat.Vector2
@ Vector2
Microsoft.Xna.Framework.Graphics.SpriteEffects
SpriteEffects
Definition
SpriteEffects.cs:7
Microsoft.Xna.Framework.Graphics
Definition
AlphaTestEffect.cs:1
Microsoft.Xna.Framework
Definition
AlphaTestEffect.cs:1
System.Collections.Generic
Definition
IHashKeyCollection.cs:1
System.ExceptionArgument.list
@ list
System.ExceptionArgument.value
@ value
System.ExceptionArgument.item
@ item
System.ExceptionArgument.collection
@ collection
System
Definition
BlockingCollection.cs:8
Terraria.DataStructures
Definition
AEntitySource_OnHit.cs:1
Terraria.GameContent
Definition
AchievementsHelper.cs:1
Terraria.Graphics.Renderers
Definition
ABasicParticle.cs:5
Terraria.ID
Definition
AchievementHelperID.cs:1
Microsoft.Xna.Framework.Color.Black
static Color Black
Definition
Color.cs:92
Microsoft.Xna.Framework.Color.Transparent
static Color Transparent
Definition
Color.cs:76
Microsoft.Xna.Framework.Color.White
static Color White
Definition
Color.cs:350
Microsoft.Xna.Framework.Color
Definition
Color.cs:12
Microsoft.Xna.Framework.Vector2.Zero
static Vector2 Zero
Definition
Vector2.cs:27
Microsoft.Xna.Framework.Vector2
Definition
Vector2.cs:12
Terraria.DataStructures.DrawData
Definition
DrawData.cs:7
source
Terraria.Graphics.Renderers
MapHeadRenderer.cs
Generated by
1.10.0