Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
UIScrollbar.cs
Go to the documentation of this file.
1
using
Microsoft.Xna.Framework
;
2
using
Microsoft.Xna.Framework.Graphics
;
3
using
ReLogic.Content
;
4
using
Terraria.Audio
;
5
using
Terraria.UI
;
6
7
namespace
Terraria.GameContent.UI.Elements
;
8
9
public
class
UIScrollbar
:
UIElement
10
{
11
private
float
_viewPosition
;
12
13
private
float
_viewSize
= 1f;
14
15
private
float
_maxViewSize
= 20f;
16
17
private
bool
_isDragging
;
18
19
private
bool
_isHoveringOverHandle
;
20
21
private
float
_dragYOffset
;
22
23
private
Asset<Texture2D>
_texture
;
24
25
private
Asset<Texture2D>
_innerTexture
;
26
27
public
float
ViewPosition
28
{
29
get
30
{
31
return
_viewPosition
;
32
}
33
set
34
{
35
_viewPosition
=
MathHelper
.
Clamp
(value, 0f,
_maxViewSize
-
_viewSize
);
36
}
37
}
38
39
public
bool
CanScroll
=>
_maxViewSize
!=
_viewSize
;
40
41
public
void
GoToBottom
()
42
{
43
ViewPosition
=
_maxViewSize
-
_viewSize
;
44
}
45
46
public
UIScrollbar
()
47
{
48
Width
.
Set
(20f, 0f);
49
MaxWidth
.
Set
(20f, 0f);
50
_texture
=
Main
.
Assets
.Request<
Texture2D
>(
"Images/UI/Scrollbar"
, (
AssetRequestMode
)1);
51
_innerTexture
=
Main
.
Assets
.Request<
Texture2D
>(
"Images/UI/ScrollbarInner"
, (
AssetRequestMode
)1);
52
PaddingTop
= 5f;
53
PaddingBottom
= 5f;
54
}
55
56
public
void
SetView
(
float
viewSize,
float
maxViewSize)
57
{
58
viewSize =
MathHelper
.
Clamp
(viewSize, 0f, maxViewSize);
59
_viewPosition
=
MathHelper
.
Clamp
(
_viewPosition
, 0f, maxViewSize - viewSize);
60
_viewSize
= viewSize;
61
_maxViewSize
= maxViewSize;
62
}
63
64
public
float
GetValue
()
65
{
66
return
_viewPosition
;
67
}
68
69
private
Rectangle
GetHandleRectangle
()
70
{
71
CalculatedStyle
innerDimensions =
GetInnerDimensions
();
72
if
(
_maxViewSize
== 0f &&
_viewSize
== 0f)
73
{
74
_viewSize
= 1f;
75
_maxViewSize
= 1f;
76
}
77
return
new
Rectangle
((
int
)innerDimensions.
X
, (
int
)(innerDimensions.
Y
+ innerDimensions.
Height
* (
_viewPosition
/
_maxViewSize
)) - 3, 20, (
int
)(innerDimensions.
Height
* (
_viewSize
/
_maxViewSize
)) + 7);
78
}
79
80
private
void
DrawBar
(
SpriteBatch
spriteBatch,
Texture2D
texture,
Rectangle
dimensions,
Color
color)
81
{
82
spriteBatch.
Draw
(texture,
new
Rectangle
(dimensions.
X
, dimensions.
Y
- 6, dimensions.
Width
, 6),
new
Rectangle
(0, 0, texture.
Width
, 6), color);
83
spriteBatch.
Draw
(texture,
new
Rectangle
(dimensions.
X
, dimensions.
Y
, dimensions.
Width
, dimensions.
Height
),
new
Rectangle
(0, 6, texture.
Width
, 4), color);
84
spriteBatch.
Draw
(texture,
new
Rectangle
(dimensions.
X
, dimensions.
Y
+ dimensions.
Height
, dimensions.
Width
, 6),
new
Rectangle
(0, texture.
Height
- 6, texture.
Width
, 6), color);
85
}
86
87
protected
override
void
DrawSelf
(
SpriteBatch
spriteBatch)
88
{
89
CalculatedStyle
dimensions =
GetDimensions
();
90
CalculatedStyle
innerDimensions =
GetInnerDimensions
();
91
if
(
_isDragging
)
92
{
93
float
num = UserInterface.ActiveInstance.MousePosition.Y - innerDimensions.Y -
_dragYOffset
;
94
_viewPosition
=
MathHelper
.
Clamp
(num / innerDimensions.
Height
*
_maxViewSize
, 0f,
_maxViewSize
-
_viewSize
);
95
}
96
Rectangle
handleRectangle =
GetHandleRectangle
();
97
Vector2
mousePosition =
UserInterface
.
ActiveInstance
.MousePosition;
98
bool
isHoveringOverHandle =
_isHoveringOverHandle
;
99
_isHoveringOverHandle
= handleRectangle.
Contains
(
new
Point
((
int
)mousePosition.
X
, (
int
)mousePosition.
Y
));
100
if
(!isHoveringOverHandle &&
_isHoveringOverHandle
&&
Main
.
hasFocus
)
101
{
102
SoundEngine
.
PlaySound
(12);
103
}
104
DrawBar
(spriteBatch,
_texture
.
Value
, dimensions.
ToRectangle
(),
Color
.
White
);
105
DrawBar
(spriteBatch,
_innerTexture
.
Value
, handleRectangle,
Color
.
White
* ((
_isDragging
||
_isHoveringOverHandle
) ? 1f : 0.85f));
106
}
107
108
public
override
void
LeftMouseDown
(
UIMouseEvent
evt)
109
{
110
base.LeftMouseDown(evt);
111
if
(evt.
Target
==
this
)
112
{
113
Rectangle
handleRectangle =
GetHandleRectangle
();
114
if
(handleRectangle.
Contains
(
new
Point
((
int
)evt.
MousePosition
.
X
, (
int
)evt.
MousePosition
.
Y
)))
115
{
116
_isDragging
=
true
;
117
_dragYOffset
= evt.MousePosition.Y - (float)handleRectangle.
Y
;
118
}
119
else
120
{
121
CalculatedStyle
innerDimensions =
GetInnerDimensions
();
122
float
num = UserInterface.ActiveInstance.MousePosition.Y - innerDimensions.Y - (float)(handleRectangle.
Height
>> 1);
123
_viewPosition
=
MathHelper
.
Clamp
(num / innerDimensions.
Height
*
_maxViewSize
, 0f,
_maxViewSize
-
_viewSize
);
124
}
125
}
126
}
127
128
public
override
void
LeftMouseUp
(
UIMouseEvent
evt)
129
{
130
base.LeftMouseUp(evt);
131
_isDragging
=
false
;
132
}
133
}
Microsoft.Xna.Framework.Graphics.SpriteBatch.Draw
void Draw(Texture2D texture, Vector2 position, Color color)
Definition
SpriteBatch.cs:397
Microsoft.Xna.Framework.Graphics.SpriteBatch
Definition
SpriteBatch.cs:8
Microsoft.Xna.Framework.Graphics.Texture2D.Width
int Width
Definition
Texture2D.cs:45
Microsoft.Xna.Framework.Graphics.Texture2D.Height
int Height
Definition
Texture2D.cs:43
Microsoft.Xna.Framework.Graphics.Texture2D
Definition
Texture2D.cs:13
Microsoft.Xna.Framework.MathHelper.Clamp
static float Clamp(float value, float min, float max)
Definition
MathHelper.cs:46
Microsoft.Xna.Framework.MathHelper
Definition
MathHelper.cs:6
ReLogic.Content.Asset.Value
T Value
Definition
Asset.cs:26
ReLogic.Content.Asset
Definition
Asset.cs:8
Terraria.Audio.SoundEngine.PlaySound
static void PlaySound(int type, Vector2 position, int style=1)
Definition
SoundEngine.cs:71
Terraria.Audio.SoundEngine
Definition
SoundEngine.cs:10
Terraria.GameContent.UI.Elements.UIScrollbar._isHoveringOverHandle
bool _isHoveringOverHandle
Definition
UIScrollbar.cs:19
Terraria.GameContent.UI.Elements.UIScrollbar.GoToBottom
void GoToBottom()
Definition
UIScrollbar.cs:41
Terraria.GameContent.UI.Elements.UIScrollbar.DrawSelf
override void DrawSelf(SpriteBatch spriteBatch)
Definition
UIScrollbar.cs:87
Terraria.GameContent.UI.Elements.UIScrollbar._maxViewSize
float _maxViewSize
Definition
UIScrollbar.cs:15
Terraria.GameContent.UI.Elements.UIScrollbar.GetHandleRectangle
Rectangle GetHandleRectangle()
Definition
UIScrollbar.cs:69
Terraria.GameContent.UI.Elements.UIScrollbar._dragYOffset
float _dragYOffset
Definition
UIScrollbar.cs:21
Terraria.GameContent.UI.Elements.UIScrollbar._viewPosition
float _viewPosition
Definition
UIScrollbar.cs:11
Terraria.GameContent.UI.Elements.UIScrollbar.LeftMouseDown
override void LeftMouseDown(UIMouseEvent evt)
Definition
UIScrollbar.cs:108
Terraria.GameContent.UI.Elements.UIScrollbar.UIScrollbar
UIScrollbar()
Definition
UIScrollbar.cs:46
Terraria.GameContent.UI.Elements.UIScrollbar._isDragging
bool _isDragging
Definition
UIScrollbar.cs:17
Terraria.GameContent.UI.Elements.UIScrollbar.DrawBar
void DrawBar(SpriteBatch spriteBatch, Texture2D texture, Rectangle dimensions, Color color)
Definition
UIScrollbar.cs:80
Terraria.GameContent.UI.Elements.UIScrollbar.CanScroll
bool CanScroll
Definition
UIScrollbar.cs:39
Terraria.GameContent.UI.Elements.UIScrollbar.LeftMouseUp
override void LeftMouseUp(UIMouseEvent evt)
Definition
UIScrollbar.cs:128
Terraria.GameContent.UI.Elements.UIScrollbar.ViewPosition
float ViewPosition
Definition
UIScrollbar.cs:28
Terraria.GameContent.UI.Elements.UIScrollbar._viewSize
float _viewSize
Definition
UIScrollbar.cs:13
Terraria.GameContent.UI.Elements.UIScrollbar._texture
Asset< Texture2D > _texture
Definition
UIScrollbar.cs:23
Terraria.GameContent.UI.Elements.UIScrollbar.GetValue
float GetValue()
Definition
UIScrollbar.cs:64
Terraria.GameContent.UI.Elements.UIScrollbar.SetView
void SetView(float viewSize, float maxViewSize)
Definition
UIScrollbar.cs:56
Terraria.GameContent.UI.Elements.UIScrollbar._innerTexture
Asset< Texture2D > _innerTexture
Definition
UIScrollbar.cs:25
Terraria.GameContent.UI.Elements.UIScrollbar
Definition
UIScrollbar.cs:10
Terraria.Main.hasFocus
static bool hasFocus
Definition
Main.cs:1781
Terraria.Main.Assets
static IAssetRepository Assets
Definition
Main.cs:209
Terraria.Main
Definition
Main.cs:79
Terraria.UI.UIElement.MaxWidth
StyleDimension MaxWidth
Definition
UIElement.cs:31
Terraria.UI.UIElement.GetInnerDimensions
CalculatedStyle GetInnerDimensions()
Definition
UIElement.cs:377
Terraria.UI.UIElement.PaddingBottom
float PaddingBottom
Definition
UIElement.cs:53
Terraria.UI.UIElement.Width
StyleDimension Width
Definition
UIElement.cs:27
Terraria.UI.UIElement.GetDimensions
CalculatedStyle GetDimensions()
Definition
UIElement.cs:382
Terraria.UI.UIElement.PaddingTop
float PaddingTop
Definition
UIElement.cs:47
Terraria.UI.UIElement
Definition
UIElement.cs:12
Terraria.UI.UIEvent.Target
readonly UIElement Target
Definition
UIEvent.cs:5
Terraria.UI.UIMouseEvent.MousePosition
readonly Vector2 MousePosition
Definition
UIMouseEvent.cs:7
Terraria.UI.UIMouseEvent
Definition
UIMouseEvent.cs:6
Terraria.UI.UserInterface.ActiveInstance
static UserInterface ActiveInstance
Definition
UserInterface.cs:48
Terraria.UI.UserInterface
Definition
UserInterface.cs:11
Microsoft.Xna.Framework.Graphics.TextureFilter.Point
@ Point
Microsoft.Xna.Framework.Graphics
Definition
AlphaTestEffect.cs:1
Microsoft.Xna.Framework
Definition
AlphaTestEffect.cs:1
ReLogic.Content.AssetRequestMode
AssetRequestMode
Definition
AssetRequestMode.cs:4
ReLogic.Content
Definition
IAssetReader.cs:5
Terraria.Audio
Definition
ActiveSound.cs:4
Terraria.GameContent.UI.Elements
Definition
AWorldListItem.cs:8
Terraria.UI
Definition
ChatLine.cs:3
Microsoft.Xna.Framework.Color.White
static Color White
Definition
Color.cs:350
Microsoft.Xna.Framework.Color
Definition
Color.cs:12
Microsoft.Xna.Framework.Point
Definition
Point.cs:12
Microsoft.Xna.Framework.Rectangle.Height
int Height
Definition
Rectangle.cs:23
Microsoft.Xna.Framework.Rectangle.X
int X
Definition
Rectangle.cs:14
Microsoft.Xna.Framework.Rectangle.Y
int Y
Definition
Rectangle.cs:17
Microsoft.Xna.Framework.Rectangle.Contains
bool Contains(int x, int y)
Definition
Rectangle.cs:92
Microsoft.Xna.Framework.Rectangle.Width
int Width
Definition
Rectangle.cs:20
Microsoft.Xna.Framework.Rectangle
Definition
Rectangle.cs:12
Microsoft.Xna.Framework.Vector2.X
float X
Definition
Vector2.cs:14
Microsoft.Xna.Framework.Vector2.Y
float Y
Definition
Vector2.cs:17
Microsoft.Xna.Framework.Vector2
Definition
Vector2.cs:12
Terraria.UI.CalculatedStyle.X
float X
Definition
CalculatedStyle.cs:7
Terraria.UI.CalculatedStyle.Y
float Y
Definition
CalculatedStyle.cs:9
Terraria.UI.CalculatedStyle.Height
float Height
Definition
CalculatedStyle.cs:13
Terraria.UI.CalculatedStyle.ToRectangle
Rectangle ToRectangle()
Definition
CalculatedStyle.cs:23
Terraria.UI.CalculatedStyle
Definition
CalculatedStyle.cs:6
Terraria.UI.StyleDimension.Set
void Set(float pixels, float precent)
Definition
StyleDimension.cs:19
source
Terraria.GameContent.UI.Elements
UIScrollbar.cs
Generated by
1.10.0