Adjust sprite sizes to accomodate pixel melt
@@ -30,14 +30,14 @@ public partial class EnemyModelView2D : EnemyModelView, IEnemyModelView
|
|||||||
|
|
||||||
public new void OnReady()
|
public new void OnReady()
|
||||||
{
|
{
|
||||||
Hitbox.AreaEntered += Hitbox_AreaEntered;
|
Hitbox.AreaEntered += Hitbox_AreaEntered;
|
||||||
base.OnReady();
|
base.OnReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public override Vector2 GetSize()
|
public override Vector2 GetSize()
|
||||||
{
|
{
|
||||||
return Sprite3D.GetItemRect().Size;
|
return Sprite3D.GetItemRect().Size;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Hitbox_AreaEntered(Area3D area) => OnPlayerHit(new AttackEventArgs(AttackData));
|
private void Hitbox_AreaEntered(Area3D area) => OnPlayerHit(new AttackEventArgs(AttackData));
|
||||||
@@ -46,102 +46,102 @@ public partial class EnemyModelView2D : EnemyModelView, IEnemyModelView
|
|||||||
|
|
||||||
public override void PlayHitAnimation()
|
public override void PlayHitAnimation()
|
||||||
{
|
{
|
||||||
LoadShader("res://src/vfx/shaders/DamageHit.gdshader");
|
LoadShader("res://src/vfx/shaders/DamageHit.gdshader");
|
||||||
var tweener = GetTree().CreateTween();
|
var tweener = GetTree().CreateTween();
|
||||||
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 1.0f, 1.0f);
|
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 1.0f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void PlayDeathAnimation()
|
public override void PlayDeathAnimation()
|
||||||
{
|
{
|
||||||
LoadShader("res://src/vfx/shaders/PixelMelt.gdshader");
|
LoadShader("res://src/vfx/shaders/PixelMelt.gdshader");
|
||||||
var tweener = GetTree().CreateTween();
|
var tweener = GetTree().CreateTween();
|
||||||
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 1.0f, 0.8f);
|
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 0.1f, 0.8f);
|
||||||
}
|
}
|
||||||
|
|
||||||
private EnemyDirection GetEnemyDirection(
|
private EnemyDirection GetEnemyDirection(
|
||||||
Basis enemyBasis,
|
Basis enemyBasis,
|
||||||
Vector3 cameraDirection,
|
Vector3 cameraDirection,
|
||||||
float rotateUpperThreshold,
|
float rotateUpperThreshold,
|
||||||
float rotateLowerThreshold)
|
float rotateLowerThreshold)
|
||||||
{
|
{
|
||||||
var enemyForwardDirection = enemyBasis.Z;
|
var enemyForwardDirection = enemyBasis.Z;
|
||||||
var enemyLeftDirection = enemyBasis.X;
|
var enemyLeftDirection = enemyBasis.X;
|
||||||
|
|
||||||
var leftDotProduct = enemyLeftDirection.Dot(cameraDirection);
|
var leftDotProduct = enemyLeftDirection.Dot(cameraDirection);
|
||||||
var forwardDotProduct = enemyForwardDirection.Dot(cameraDirection);
|
var forwardDotProduct = enemyForwardDirection.Dot(cameraDirection);
|
||||||
|
|
||||||
// Check if forward facing. If the dot product is -1, the enemy is facing the camera.
|
// Check if forward facing. If the dot product is -1, the enemy is facing the camera.
|
||||||
if (forwardDotProduct < _lowerThreshold)
|
if (forwardDotProduct < _lowerThreshold)
|
||||||
{
|
{
|
||||||
SetForward();
|
SetForward();
|
||||||
return EnemyDirection.Forward;
|
return EnemyDirection.Forward;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if backward facing. If the dot product is 1, the enemy is facing the same direction as the camera.
|
// Check if backward facing. If the dot product is 1, the enemy is facing the same direction as the camera.
|
||||||
else if (forwardDotProduct > rotateUpperThreshold)
|
else if (forwardDotProduct > rotateUpperThreshold)
|
||||||
{
|
{
|
||||||
SetBack();
|
SetBack();
|
||||||
return EnemyDirection.Backward;
|
return EnemyDirection.Backward;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If the dot product of the perpendicular direction is positive (up to 1), the enemy is facing to the left (since it's mirrored).
|
// If the dot product of the perpendicular direction is positive (up to 1), the enemy is facing to the left (since it's mirrored).
|
||||||
if (leftDotProduct < _lowerThreshold)
|
if (leftDotProduct < _lowerThreshold)
|
||||||
{
|
{
|
||||||
SetRight();
|
SetRight();
|
||||||
return EnemyDirection.Left;
|
return EnemyDirection.Left;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if side facing. If the dot product is close to zero in the positive or negative direction, its close to the threshold for turning.
|
// Check if side facing. If the dot product is close to zero in the positive or negative direction, its close to the threshold for turning.
|
||||||
if (leftDotProduct > rotateUpperThreshold)
|
if (leftDotProduct > rotateUpperThreshold)
|
||||||
{
|
{
|
||||||
SetLeft();
|
SetLeft();
|
||||||
return EnemyDirection.Right;
|
return EnemyDirection.Right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return _enemyDirection;
|
return _enemyDirection;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadShader(string shaderPath)
|
private void LoadShader(string shaderPath)
|
||||||
{
|
{
|
||||||
var shader = GD.Load<Shader>(shaderPath);
|
var shader = GD.Load<Shader>(shaderPath);
|
||||||
var sprites = FindChildren("*", "AnimatedSprite2D", true).Cast<AnimatedSprite2D>();
|
var sprites = FindChildren("*", "AnimatedSprite2D", true).Cast<AnimatedSprite2D>();
|
||||||
foreach (var sprite in sprites)
|
foreach (var sprite in sprites)
|
||||||
{
|
{
|
||||||
sprite.Material = new ShaderMaterial();
|
sprite.Material = new ShaderMaterial();
|
||||||
var shaderMaterial = (ShaderMaterial)sprite.Material;
|
var shaderMaterial = (ShaderMaterial)sprite.Material;
|
||||||
shaderMaterial.Shader = shader;
|
shaderMaterial.Shader = shader;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetShaderValue(float shaderValue)
|
private void SetShaderValue(float shaderValue)
|
||||||
{
|
{
|
||||||
var sprites = FindChildren("*", "AnimatedSprite2D", true).Cast<AnimatedSprite2D>();
|
var sprites = FindChildren("*", "AnimatedSprite2D", true).Cast<AnimatedSprite2D>();
|
||||||
foreach (var sprite in sprites)
|
foreach (var sprite in sprites)
|
||||||
{
|
{
|
||||||
var shaderMaterial = (ShaderMaterial)sprite.Material;
|
var shaderMaterial = (ShaderMaterial)sprite.Material;
|
||||||
shaderMaterial.SetShaderParameter("progress", shaderValue);
|
shaderMaterial.SetShaderParameter("progress", shaderValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetForward()
|
private void SetForward()
|
||||||
{
|
{
|
||||||
_enemyDirection = EnemyDirection.Forward;
|
_enemyDirection = EnemyDirection.Forward;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetLeft()
|
private void SetLeft()
|
||||||
{
|
{
|
||||||
_enemyDirection = EnemyDirection.Left;
|
_enemyDirection = EnemyDirection.Left;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetRight()
|
private void SetRight()
|
||||||
{
|
{
|
||||||
_enemyDirection = EnemyDirection.Right;
|
_enemyDirection = EnemyDirection.Right;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetBack()
|
private void SetBack()
|
||||||
{
|
{
|
||||||
_enemyDirection = EnemyDirection.Backward;
|
_enemyDirection = EnemyDirection.Backward;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,6 +66,13 @@
|
|||||||
script = ExtResource("2_7hf3j")
|
script = ExtResource("2_7hf3j")
|
||||||
Name = "Sproingy"
|
Name = "Sproingy"
|
||||||
Description = "He's smaller than I expected..."
|
Description = "He's smaller than I expected..."
|
||||||
|
MaximumHP = ""
|
||||||
|
ATK = ""
|
||||||
|
DEF = ""
|
||||||
|
Affinity = ""
|
||||||
|
Weakness = ""
|
||||||
|
Drop1 = ""
|
||||||
|
Drop2 = ""
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
||||||
|
|
||||||
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
|
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
|
||||||
@@ -670,21 +677,21 @@ texture = SubResource("ViewportTexture_h1kaf")
|
|||||||
|
|
||||||
[node name="SubViewportContainer" type="SubViewportContainer" parent="Sprite3D"]
|
[node name="SubViewportContainer" type="SubViewportContainer" parent="Sprite3D"]
|
||||||
visibility_layer = 0
|
visibility_layer = 0
|
||||||
offset_right = 40.0
|
offset_right = 800.0
|
||||||
offset_bottom = 40.0
|
offset_bottom = 800.0
|
||||||
|
|
||||||
[node name="SubViewport" type="SubViewport" parent="Sprite3D/SubViewportContainer"]
|
[node name="SubViewport" type="SubViewport" parent="Sprite3D/SubViewportContainer"]
|
||||||
disable_3d = true
|
disable_3d = true
|
||||||
transparent_bg = true
|
transparent_bg = true
|
||||||
handle_input_locally = false
|
handle_input_locally = false
|
||||||
size = Vector2i(200, 200)
|
size = Vector2i(800, 800)
|
||||||
render_target_update_mode = 4
|
render_target_update_mode = 4
|
||||||
|
|
||||||
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
material = ExtResource("3_ivy74")
|
material = ExtResource("3_ivy74")
|
||||||
position = Vector2(100, 100)
|
position = Vector2(400, 400)
|
||||||
sprite_frames = SubResource("SpriteFrames_6drt6")
|
sprite_frames = SubResource("SpriteFrames_6drt6")
|
||||||
animation = &"idle_left_walk"
|
animation = &"idle_left_walk"
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 7.0 KiB |
@@ -81,6 +81,13 @@
|
|||||||
script = ExtResource("2_3eot4")
|
script = ExtResource("2_3eot4")
|
||||||
Name = "Michael"
|
Name = "Michael"
|
||||||
Description = "Basic angel guy"
|
Description = "Basic angel guy"
|
||||||
|
MaximumHP = ""
|
||||||
|
ATK = ""
|
||||||
|
DEF = ""
|
||||||
|
Affinity = ""
|
||||||
|
Weakness = ""
|
||||||
|
Drop1 = ""
|
||||||
|
Drop2 = ""
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
||||||
|
|
||||||
[sub_resource type="ViewportTexture" id="ViewportTexture_v7t0v"]
|
[sub_resource type="ViewportTexture" id="ViewportTexture_v7t0v"]
|
||||||
@@ -1197,7 +1204,7 @@ offset_bottom = 40.0
|
|||||||
disable_3d = true
|
disable_3d = true
|
||||||
transparent_bg = true
|
transparent_bg = true
|
||||||
handle_input_locally = false
|
handle_input_locally = false
|
||||||
size = Vector2i(200, 200)
|
size = Vector2i(800, 800)
|
||||||
render_target_update_mode = 4
|
render_target_update_mode = 4
|
||||||
|
|
||||||
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
||||||
@@ -1205,10 +1212,9 @@ unique_name_in_owner = true
|
|||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
texture_repeat = 1
|
texture_repeat = 1
|
||||||
material = SubResource("ShaderMaterial_wey7h")
|
material = SubResource("ShaderMaterial_wey7h")
|
||||||
position = Vector2(45, 45)
|
|
||||||
sprite_frames = SubResource("SpriteFrames_v4v5p")
|
sprite_frames = SubResource("SpriteFrames_v4v5p")
|
||||||
animation = &"idle_front_walk"
|
animation = &"idle_front_walk"
|
||||||
offset = Vector2(45, 45)
|
offset = Vector2(400, 400)
|
||||||
|
|
||||||
[node name="Hitbox" type="Area3D" parent="."]
|
[node name="Hitbox" type="Area3D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 15 KiB |