Added more ship controls at helm
This commit is contained in:
parent
978bf30b6d
commit
efd712cff8
Binary file not shown.
59
assets/core/enviroment/dev-level/dev1D90.tmp
Normal file
59
assets/core/enviroment/dev-level/dev1D90.tmp
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
[gd_scene load_steps=11 format=3 uid="uid://ewovs6ns5y3k"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://assets/core/networking/NetworkManager.gd" id="1_kki4t"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://gymb0tju4y67" path="res://addons/kennysprototypetextures/Dark/texture_black (1).png" id="1_l0osb"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://c6w0ivy4hetrl" path="res://assets/core/player-controller/scenes/player.tscn" id="2_q510b"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://c7mtmmke1anxp" path="res://assets/core/ships/test-ship/test-ship.tscn" id="4_feinw"]
|
||||||
|
|
||||||
|
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_yg2er"]
|
||||||
|
sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
|
||||||
|
ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
|
||||||
|
|
||||||
|
[sub_resource type="Sky" id="Sky_roqfl"]
|
||||||
|
sky_material = SubResource("ProceduralSkyMaterial_yg2er")
|
||||||
|
|
||||||
|
[sub_resource type="Environment" id="Environment_nyust"]
|
||||||
|
background_mode = 2
|
||||||
|
sky = SubResource("Sky_roqfl")
|
||||||
|
tonemap_mode = 2
|
||||||
|
glow_enabled = true
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8ttyg"]
|
||||||
|
albedo_texture = ExtResource("1_l0osb")
|
||||||
|
uv1_triplanar = true
|
||||||
|
|
||||||
|
[sub_resource type="PlaneMesh" id="PlaneMesh_v66gr"]
|
||||||
|
lightmap_size_hint = Vector2i(102, 102)
|
||||||
|
size = Vector2(20, 20)
|
||||||
|
|
||||||
|
[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_4238x"]
|
||||||
|
|
||||||
|
[node name="DevLevel" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="NetworkManager" type="Node" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
script = ExtResource("1_kki4t")
|
||||||
|
|
||||||
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
|
environment = SubResource("Environment_nyust")
|
||||||
|
|
||||||
|
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||||
|
transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0)
|
||||||
|
shadow_enabled = true
|
||||||
|
|
||||||
|
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="StaticBody3D"]
|
||||||
|
material_override = SubResource("StandardMaterial3D_8ttyg")
|
||||||
|
mesh = SubResource("PlaneMesh_v66gr")
|
||||||
|
skeleton = NodePath("../..")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
|
||||||
|
shape = SubResource("WorldBoundaryShape3D_4238x")
|
||||||
|
|
||||||
|
[node name="Player" parent="." instance=ExtResource("2_q510b")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
|
joystick_camera_sens_multiplier = 5.0
|
||||||
|
|
||||||
|
[node name="TestShip" parent="." instance=ExtResource("4_feinw")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.24218, 0.563903, 0)
|
59
assets/core/enviroment/dev-level/dev81EA.tmp
Normal file
59
assets/core/enviroment/dev-level/dev81EA.tmp
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
[gd_scene load_steps=11 format=3 uid="uid://ewovs6ns5y3k"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://assets/core/networking/NetworkManager.gd" id="1_kki4t"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://gymb0tju4y67" path="res://addons/kennysprototypetextures/Dark/texture_black (1).png" id="1_l0osb"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://c6w0ivy4hetrl" path="res://assets/core/player-controller/scenes/player.tscn" id="2_q510b"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://c7mtmmke1anxp" path="res://assets/core/ships/test-ship/test-ship.tscn" id="4_feinw"]
|
||||||
|
|
||||||
|
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_yg2er"]
|
||||||
|
sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
|
||||||
|
ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
|
||||||
|
|
||||||
|
[sub_resource type="Sky" id="Sky_roqfl"]
|
||||||
|
sky_material = SubResource("ProceduralSkyMaterial_yg2er")
|
||||||
|
|
||||||
|
[sub_resource type="Environment" id="Environment_nyust"]
|
||||||
|
background_mode = 2
|
||||||
|
sky = SubResource("Sky_roqfl")
|
||||||
|
tonemap_mode = 2
|
||||||
|
glow_enabled = true
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8ttyg"]
|
||||||
|
albedo_texture = ExtResource("1_l0osb")
|
||||||
|
uv1_triplanar = true
|
||||||
|
|
||||||
|
[sub_resource type="PlaneMesh" id="PlaneMesh_v66gr"]
|
||||||
|
lightmap_size_hint = Vector2i(102, 102)
|
||||||
|
size = Vector2(20, 20)
|
||||||
|
|
||||||
|
[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_4238x"]
|
||||||
|
|
||||||
|
[node name="DevLevel" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="NetworkManager" type="Node" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
script = ExtResource("1_kki4t")
|
||||||
|
|
||||||
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
|
environment = SubResource("Environment_nyust")
|
||||||
|
|
||||||
|
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||||
|
transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0)
|
||||||
|
shadow_enabled = true
|
||||||
|
|
||||||
|
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="StaticBody3D"]
|
||||||
|
material_override = SubResource("StandardMaterial3D_8ttyg")
|
||||||
|
mesh = SubResource("PlaneMesh_v66gr")
|
||||||
|
skeleton = NodePath("../..")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
|
||||||
|
shape = SubResource("WorldBoundaryShape3D_4238x")
|
||||||
|
|
||||||
|
[node name="Player" parent="." instance=ExtResource("2_q510b")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
|
joystick_camera_sens_multiplier = 5.0
|
||||||
|
|
||||||
|
[node name="TestShip" parent="." instance=ExtResource("4_feinw")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.24218, 0.563903, 0)
|
@ -2,5 +2,8 @@ class_name Interactable
|
|||||||
|
|
||||||
extends Node3D
|
extends Node3D
|
||||||
|
|
||||||
|
var player_reference: Player
|
||||||
|
|
||||||
|
|
||||||
func interact():
|
func interact():
|
||||||
pass
|
pass
|
||||||
|
@ -1 +1,19 @@
|
|||||||
|
class_name ShipHelm
|
||||||
|
|
||||||
extends Interactable
|
extends Interactable
|
||||||
|
|
||||||
|
@export var parent_ship: Ship
|
||||||
|
|
||||||
|
var is_being_piloted: bool = false
|
||||||
|
|
||||||
|
func interact():
|
||||||
|
if !is_being_piloted:
|
||||||
|
player_reference.set_is_piloting(true)
|
||||||
|
print("set player to piloting")
|
||||||
|
is_being_piloted = true
|
||||||
|
parent_ship.ship_is_piloted = true
|
||||||
|
elif is_being_piloted:
|
||||||
|
player_reference.set_is_piloting(false)
|
||||||
|
print("set player to NOT piloting")
|
||||||
|
is_being_piloted = false
|
||||||
|
parent_ship.ship_is_piloted = false
|
||||||
|
35
assets/core/player-controller/scenes/pla106A.tmp
Normal file
35
assets/core/player-controller/scenes/pla106A.tmp
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://c6w0ivy4hetrl"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://assets/core/player-controller/scripts/player.gd" id="1_bv7t4"]
|
||||||
|
[ext_resource type="Script" path="res://assets/core/player-controller/scripts/player_interacter.gd" id="2_wvu3d"]
|
||||||
|
|
||||||
|
[sub_resource type="CapsuleMesh" id="CapsuleMesh_v7b3h"]
|
||||||
|
radius = 0.35
|
||||||
|
|
||||||
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_qlkab"]
|
||||||
|
radius = 0.35
|
||||||
|
|
||||||
|
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("camera")]
|
||||||
|
script = ExtResource("1_bv7t4")
|
||||||
|
camera = NodePath("Neck/Camera3D")
|
||||||
|
|
||||||
|
[node name="PlayerTag" type="Label3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.26654, 0)
|
||||||
|
billboard = 1
|
||||||
|
text = "username"
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
mesh = SubResource("CapsuleMesh_v7b3h")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
shape = SubResource("CapsuleShape3D_qlkab")
|
||||||
|
|
||||||
|
[node name="Neck" type="Node3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.65, 0)
|
||||||
|
|
||||||
|
[node name="Camera3D" type="Camera3D" parent="Neck"]
|
||||||
|
|
||||||
|
[node name="RayCast3D" type="RayCast3D" parent="Neck/Camera3D" node_paths=PackedStringArray("player")]
|
||||||
|
target_position = Vector3(0, 0, -2.5)
|
||||||
|
script = ExtResource("2_wvu3d")
|
||||||
|
player = NodePath("../../..")
|
@ -29,6 +29,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.65, 0)
|
|||||||
|
|
||||||
[node name="Camera3D" type="Camera3D" parent="Neck"]
|
[node name="Camera3D" type="Camera3D" parent="Neck"]
|
||||||
|
|
||||||
[node name="RayCast3D" type="RayCast3D" parent="Neck/Camera3D"]
|
[node name="RayCast3D" type="RayCast3D" parent="Neck/Camera3D" node_paths=PackedStringArray("player")]
|
||||||
target_position = Vector3(0, 0, -2.5)
|
target_position = Vector3(0, 0, -2.5)
|
||||||
script = ExtResource("2_wvu3d")
|
script = ExtResource("2_wvu3d")
|
||||||
|
player = NodePath("../../..")
|
||||||
|
@ -3,9 +3,10 @@ class_name Player extends CharacterBody3D
|
|||||||
var network_manager: NetworkManager
|
var network_manager: NetworkManager
|
||||||
var player_tag: Label3D
|
var player_tag: Label3D
|
||||||
var username: String = ""
|
var username: String = ""
|
||||||
|
var is_piloting: bool = false
|
||||||
|
|
||||||
@export_category("Player")
|
@export_category("Player")
|
||||||
@export_range(1, 35, 1) var speed: float = 10 # m/s
|
@export_range(1, 35, 1) var speed: float = 5 # m/s
|
||||||
@export_range(10, 400, 1) var acceleration: float = 100 # m/s^2
|
@export_range(10, 400, 1) var acceleration: float = 100 # m/s^2
|
||||||
|
|
||||||
@export_range(0.1, 3.0, 0.1) var jump_height: float = 1 # m
|
@export_range(0.1, 3.0, 0.1) var jump_height: float = 1 # m
|
||||||
@ -49,7 +50,7 @@ func _unhandled_input(event: InputEvent) -> void:
|
|||||||
_rotate_camera()
|
_rotate_camera()
|
||||||
elif event is InputEventJoypadMotion:
|
elif event is InputEventJoypadMotion:
|
||||||
is_using_joystick = true
|
is_using_joystick = true
|
||||||
if Input.is_action_just_pressed("jump"):
|
if Input.is_action_just_pressed("jump") and !is_piloting:
|
||||||
jumping = true
|
jumping = true
|
||||||
|
|
||||||
|
|
||||||
@ -62,12 +63,18 @@ func _input(event):
|
|||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
if current_ship != null:
|
if current_ship != null:
|
||||||
global_transform.basis = current_ship.global_transform.basis
|
if !is_piloting:
|
||||||
|
velocity = walk(delta) + _gravity(delta) + _jump(delta)
|
||||||
|
global_transform.basis = current_ship.global_transform.basis #TILTS PLAYER FIXXXX
|
||||||
|
else:
|
||||||
|
global_rotation.y = current_ship.global_rotation.y
|
||||||
|
else:
|
||||||
|
velocity = walk(delta) + _gravity(delta) + _jump(delta)
|
||||||
|
global_rotation.x = 0.0
|
||||||
|
global_rotation.z = 0.0
|
||||||
|
|
||||||
|
|
||||||
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||||
_handle_joypad_camera_rotation(delta)
|
_handle_joypad_camera_rotation(delta)
|
||||||
velocity = _walk(delta) + _gravity(delta) + _jump(delta)
|
|
||||||
move_and_slide()
|
move_and_slide()
|
||||||
|
|
||||||
|
|
||||||
@ -96,7 +103,7 @@ func _handle_joypad_camera_rotation(delta: float, sens_mod: float = 1.0) -> void
|
|||||||
look_dir = Vector2.ZERO
|
look_dir = Vector2.ZERO
|
||||||
|
|
||||||
|
|
||||||
func _walk(delta: float) -> Vector3:
|
func walk(delta: float) -> Vector3:
|
||||||
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||||
move_dir = Input.get_vector("move_left", "move_right", "move_forwards", "move_backwards")
|
move_dir = Input.get_vector("move_left", "move_right", "move_forwards", "move_backwards")
|
||||||
var _forward: Vector3 = camera.global_transform.basis * Vector3(move_dir.x, 0, move_dir.y)
|
var _forward: Vector3 = camera.global_transform.basis * Vector3(move_dir.x, 0, move_dir.y)
|
||||||
@ -129,3 +136,7 @@ func player_exited_ship(ship_global_position: Vector3, ship: Ship):
|
|||||||
current_ship = null
|
current_ship = null
|
||||||
print(ship.ship_id)
|
print(ship.ship_id)
|
||||||
print(global_position)
|
print(global_position)
|
||||||
|
|
||||||
|
|
||||||
|
func set_is_piloting(state: bool):
|
||||||
|
is_piloting = state
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
extends RayCast3D
|
extends RayCast3D
|
||||||
|
|
||||||
|
@export var player: Player
|
||||||
|
|
||||||
var current_interactable: Interactable
|
var current_interactable: Interactable
|
||||||
|
|
||||||
func _input(event):
|
func _input(event):
|
||||||
@ -7,4 +9,5 @@ func _input(event):
|
|||||||
if event.is_action_released("interact"):
|
if event.is_action_released("interact"):
|
||||||
current_interactable = get_collider() as Interactable
|
current_interactable = get_collider() as Interactable
|
||||||
GameConsole.log_debug("interacted with interactable: " + current_interactable.name)
|
GameConsole.log_debug("interacted with interactable: " + current_interactable.name)
|
||||||
|
current_interactable.player_reference = player
|
||||||
current_interactable.interact()
|
current_interactable.interact()
|
||||||
|
@ -21,10 +21,12 @@ top_radius = 0.1
|
|||||||
bottom_radius = 0.1
|
bottom_radius = 0.1
|
||||||
height = 4.5
|
height = 4.5
|
||||||
|
|
||||||
[node name="TestShip" type="RigidBody3D" node_paths=PackedStringArray("ship_area")]
|
[node name="TestShip" type="RigidBody3D" node_paths=PackedStringArray("ship_area", "ship_helm")]
|
||||||
|
mass = 800.0
|
||||||
gravity_scale = 0.0
|
gravity_scale = 0.0
|
||||||
script = ExtResource("1_yql7r")
|
script = ExtResource("1_yql7r")
|
||||||
ship_area = NodePath("Area3D")
|
ship_area = NodePath("Area3D")
|
||||||
|
ship_helm = NodePath("ShipHelm")
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
mesh = SubResource("BoxMesh_tkeg5")
|
mesh = SubResource("BoxMesh_tkeg5")
|
||||||
@ -59,8 +61,9 @@ mesh = SubResource("CylinderMesh_h3cm2")
|
|||||||
transform = Transform3D(0.866025, 0.5, 0, -0.5, 0.866025, 0, 0, 0, 1, -1.2691, 1.87582, -2.52429)
|
transform = Transform3D(0.866025, 0.5, 0, -0.5, 0.866025, 0, 0, 0, 1, -1.2691, 1.87582, -2.52429)
|
||||||
mesh = SubResource("CylinderMesh_h3cm2")
|
mesh = SubResource("CylinderMesh_h3cm2")
|
||||||
|
|
||||||
[node name="ShipHelm" parent="." instance=ExtResource("2_bmsx0")]
|
[node name="ShipHelm" parent="." node_paths=PackedStringArray("parent_ship") instance=ExtResource("2_bmsx0")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.8, -1.6)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.8, -0.598755)
|
||||||
|
parent_ship = NodePath("..")
|
||||||
|
|
||||||
[connection signal="body_entered" from="Area3D" to="." method="_on_area_3d_body_entered"]
|
[connection signal="body_entered" from="Area3D" to="." method="_on_area_3d_body_entered"]
|
||||||
[connection signal="body_exited" from="Area3D" to="." method="_on_area_3d_body_exited"]
|
[connection signal="body_exited" from="Area3D" to="." method="_on_area_3d_body_exited"]
|
||||||
|
@ -1,15 +1,45 @@
|
|||||||
class_name Ship
|
class_name Ship
|
||||||
|
|
||||||
extends RigidBody3D
|
extends RigidBody3D
|
||||||
|
|
||||||
@export var ship_area: Area3D
|
@export var ship_area: Area3D
|
||||||
|
@export var ship_helm: ShipHelm
|
||||||
|
|
||||||
var ship_id: String = "1a"
|
var ship_id: String = "1a"
|
||||||
|
var ship_is_piloted: bool = false
|
||||||
|
var base_turn_speed: float = 1
|
||||||
|
var ship_lift_speed: float = 20 # Adjust this value as needed
|
||||||
|
var acceleration: float = 50
|
||||||
|
var deceleration: float = acceleration * 0.5
|
||||||
|
var ship_top_speed: float = 100
|
||||||
|
var current_speed: float = 0.0
|
||||||
|
var max_force: float = 1000.0
|
||||||
|
|
||||||
func _physics_process(delta):
|
func _physics_process(delta):
|
||||||
global_rotation.x = lerpf(global_rotation.x, 0, 0.01)
|
global_rotation.x = lerpf(global_rotation.x, 0, 0.01)
|
||||||
global_rotation.z = lerpf(global_rotation.z, 0, 0.01)
|
global_rotation.z = lerpf(global_rotation.z, 0, 0.01)
|
||||||
|
|
||||||
|
if ship_is_piloted:
|
||||||
|
var turn_speed = base_turn_speed / max(mass, 1)
|
||||||
|
if Input.is_action_pressed("move_left"):
|
||||||
|
angular_velocity.y += turn_speed
|
||||||
|
elif Input.is_action_pressed("move_right"):
|
||||||
|
angular_velocity.y -= turn_speed
|
||||||
|
|
||||||
|
if Input.is_action_pressed("jump"):
|
||||||
|
# Apply an impulse to achieve instantaneous upward velocity
|
||||||
|
apply_impulse(Vector3.UP * ship_lift_speed)
|
||||||
|
|
||||||
|
if Input.is_action_pressed("move_forwards"):
|
||||||
|
current_speed = min(current_speed + acceleration * delta, ship_top_speed)
|
||||||
|
else:
|
||||||
|
current_speed = max(current_speed - deceleration * delta, 0.0)
|
||||||
|
|
||||||
|
var desired_velocity = -transform.basis.z * current_speed
|
||||||
|
var forward_force = (desired_velocity - linear_velocity) * mass
|
||||||
|
forward_force = forward_force.normalized() * min(forward_force.length(), max_force)
|
||||||
|
apply_central_force(forward_force)
|
||||||
|
|
||||||
|
angular_velocity.y = clamp(angular_velocity.y, -0.5, 0.5)
|
||||||
|
|
||||||
func _on_area_3d_body_entered(body):
|
func _on_area_3d_body_entered(body):
|
||||||
if body is Player:
|
if body is Player:
|
||||||
@ -19,3 +49,4 @@ func _on_area_3d_body_entered(body):
|
|||||||
func _on_area_3d_body_exited(body):
|
func _on_area_3d_body_exited(body):
|
||||||
if body is Player:
|
if body is Player:
|
||||||
body.player_exited_ship(global_position, self)
|
body.player_exited_ship(global_position, self)
|
||||||
|
ship_helm.is_being_piloted = false
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user