diff --git a/MLPAssets/Background/boardbg.jpg b/MLPAssets/Background/boardbg.jpg new file mode 100644 index 0000000..ee714f0 Binary files /dev/null and b/MLPAssets/Background/boardbg.jpg differ diff --git a/MLPAssets/Background/boardbg.jpg.import b/MLPAssets/Background/boardbg.jpg.import new file mode 100644 index 0000000..c6a88e6 --- /dev/null +++ b/MLPAssets/Background/boardbg.jpg.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="StreamTexture" +path.s3tc="res://.import/boardbg.jpg-892d674dbade1effb8d6d07916c18ae8.s3tc.stex" +path.etc="res://.import/boardbg.jpg-892d674dbade1effb8d6d07916c18ae8.etc.stex" +metadata={ +"imported_formats": [ "s3tc", "etc" ], +"vram_texture": true +} + +[deps] + +source_file="res://MLPAssets/Background/boardbg.jpg" +dest_files=[ "res://.import/boardbg.jpg-892d674dbade1effb8d6d07916c18ae8.s3tc.stex", "res://.import/boardbg.jpg-892d674dbade1effb8d6d07916c18ae8.etc.stex" ] + +[params] + +compress/mode=2 +compress/lossy_quality=0.8 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=true +flags/filter=true +flags/mipmaps=true +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/MLPAssets/Models/#cardborder.wings# b/MLPAssets/Models/#cardborder.wings# new file mode 100644 index 0000000..6293264 Binary files /dev/null and b/MLPAssets/Models/#cardborder.wings# differ diff --git a/MLPAssets/Models/cardborder.material b/MLPAssets/Models/cardborder.material new file mode 100644 index 0000000..ad97723 Binary files /dev/null and b/MLPAssets/Models/cardborder.material differ diff --git a/MLPAssets/Models/cardborder.mtl b/MLPAssets/Models/cardborder.mtl new file mode 100644 index 0000000..008bfbd --- /dev/null +++ b/MLPAssets/Models/cardborder.mtl @@ -0,0 +1,11 @@ +# Exported from Wings 3D 2.2.1 +newmtl Cube2_auv +Ns 19.999999999999996 +d 1.0 +illum 2 +Kd 1.0 1.0 1.0 +Ka 0.0 0.0 0.0 +Ks 0.19 0.19 0.19 +Ke 0.0 0.0 0.0 +map_Kd CardBack.png + diff --git a/MLPAssets/Models/cardborder.obj b/MLPAssets/Models/cardborder.obj new file mode 100644 index 0000000..f400026 --- /dev/null +++ b/MLPAssets/Models/cardborder.obj @@ -0,0 +1,99 @@ +# Exported from Wings 3D 2.2.1 +mtllib cardborder.mtl +o Cube2 +#16 vertices, 28 faces +v -1.72000000 3.2818681e-2 -2.18667858 +v -1.67165352 3.2818681e-2 -2.30339731 +v -1.62339731 3.2818681e-2 -2.35165352 +v -1.50667858 3.2818681e-2 -2.40000000 +v -1.72000000 3.2818681e-2 2.18667858 +v -1.67165352 3.2818681e-2 2.30339731 +v -1.50667858 3.2818681e-2 2.40000000 +v -1.62339731 3.2818681e-2 2.35165352 +v 1.50667858 3.2818681e-2 -2.40000000 +v 1.62339731 3.2818681e-2 -2.35165352 +v 1.67165352 3.2818681e-2 -2.30339731 +v 1.72000000 3.2818681e-2 -2.18667858 +v 1.72000000 3.2818681e-2 2.18667858 +v 1.67165352 3.2818681e-2 2.30339731 +v 1.62339731 3.2818681e-2 2.35165352 +v 1.50667858 3.2818681e-2 2.40000000 +vt 4.1666667e-2 4.4441963e-2 +vt 4.1666667e-2 0.95555804 +vt 5.1738851e-2 2.0125561e-2 +vt 5.1738851e-2 0.97987444 +vt 6.1792227e-2 1.0072184e-2 +vt 6.1792227e-2 0.98992782 +vt 8.6108630e-2 1.6151895e-14 +vt 8.6108630e-2 1.00000000 +vt 0.71389137 0.0000000e+0 +vt 0.71389137 1.00000000 +vt 0.73820777 1.0072184e-2 +vt 0.73820777 0.98992782 +vt 0.74826115 2.0125561e-2 +vt 0.74826115 0.97987444 +vt 0.75833333 4.4441963e-2 +vt 0.75833333 0.95555804 +vt 0.78431656 0.34479267 +vt 0.78431656 0.58110397 +vt 0.78692892 0.33848585 +vt 0.78692892 0.58741079 +vt 0.78953641 0.33587836 +vt 0.78953641 0.59001828 +vt 0.79584323 0.33326599 +vt 0.79584323 0.59263065 +vt 0.95866788 0.33326599 +vt 0.95866788 0.59263065 +vt 0.96497470 0.33587836 +vt 0.96497470 0.59001828 +vt 0.96758219 0.33848585 +vt 0.96758219 0.58741079 +vt 0.97019456 0.34479267 +vt 0.97019456 0.58110397 +vn 0.0000000e+0 1.00000000 5.9098621e-18 +vn 0.0000000e+0 -1.00000000 -5.9468352e-17 +vn 0.0000000e+0 1.00000000 5.9468352e-17 +vn 0.0000000e+0 -1.00000000 -1.8694771e-28 +vn 0.0000000e+0 -1.00000000 -9.3473854e-29 +vn 0.0000000e+0 1.00000000 -5.9468352e-17 +vn 0.0000000e+0 1.00000000 -1.8694771e-28 +vn 0.0000000e+0 -1.00000000 5.9468352e-17 +vn 0.0000000e+0 1.00000000 1.1819724e-17 +vn 0.0000000e+0 -1.00000000 -5.9468352e-17 +vn 0.0000000e+0 1.00000000 5.9468352e-17 +vn 0.0000000e+0 -1.00000000 5.9098621e-18 +vn 0.0000000e+0 1.00000000 9.3473854e-29 +vn 0.0000000e+0 -1.00000000 5.9468352e-17 +vn 0.0000000e+0 1.00000000 -5.9468352e-17 +vn 0.0000000e+0 -1.00000000 1.8694771e-28 +g Cube2_Cube2_auv +usemtl Cube2_auv +s 1 +f 1/16/1 12/2/12 5/15/5 +f 2/20/2 1/18/1 3/22/3 +f 2/14/2 4/10/4 1/16/1 +f 3/22/3 1/18/1 4/24/4 +f 3/12/3 4/10/4 2/14/2 +f 4/24/4 1/18/1 9/26/9 +f 5/17/5 13/31/13 1/18/1 +f 6/13/6 5/15/5 8/11/8 +f 6/19/6 7/23/7 5/17/5 +f 7/9/7 5/15/5 16/7/16 +f 8/11/8 5/15/5 7/9/7 +f 8/21/8 7/23/7 6/19/6 +f 9/8/9 1/16/1 4/10/4 +f 9/26/9 1/18/1 12/32/12 +f 9/8/9 12/2/12 1/16/1 +f 10/28/10 9/26/9 11/30/11 +f 10/6/10 12/2/12 9/8/9 +f 11/30/11 9/26/9 12/32/12 +f 11/4/11 12/2/12 10/6/10 +f 12/32/12 1/18/1 13/31/13 +f 13/1/13 5/15/5 12/2/12 +f 13/1/13 16/7/16 5/15/5 +f 14/29/14 13/31/13 15/27/15 +f 14/3/14 16/7/16 13/1/13 +f 15/27/15 13/31/13 16/25/16 +f 15/5/15 16/7/16 14/3/14 +f 16/25/16 5/17/5 7/23/7 +f 16/25/16 13/31/13 5/17/5 diff --git a/MLPAssets/Models/cardborder.obj.import b/MLPAssets/Models/cardborder.obj.import new file mode 100644 index 0000000..f81b8ec --- /dev/null +++ b/MLPAssets/Models/cardborder.obj.import @@ -0,0 +1,18 @@ +[remap] + +importer="wavefront_obj" +type="Mesh" +path="res://.import/cardborder.obj-a6a8929c16d8d520e99a408fe4e7f808.mesh" + +[deps] + +files=[ "res://.import/cardborder.obj-a6a8929c16d8d520e99a408fe4e7f808.mesh" ] + +source_file="res://MLPAssets/Models/cardborder.obj" +dest_files=[ "res://.import/cardborder.obj-a6a8929c16d8d520e99a408fe4e7f808.mesh", "res://.import/cardborder.obj-a6a8929c16d8d520e99a408fe4e7f808.mesh" ] + +[params] + +generate_tangents=true +scale_mesh=Vector3( 0.2, 0.2, 0.2 ) +optimize_mesh=true diff --git a/MLPAssets/Models/cardborder.wings b/MLPAssets/Models/cardborder.wings new file mode 100644 index 0000000..7d2d2d0 Binary files /dev/null and b/MLPAssets/Models/cardborder.wings differ diff --git a/MLPAssets/Textures/CardBack.png b/MLPAssets/Textures/CardBack.png new file mode 100644 index 0000000..60870fc Binary files /dev/null and b/MLPAssets/Textures/CardBack.png differ diff --git a/MLPAssets/Textures/CardBack.png.import b/MLPAssets/Textures/CardBack.png.import new file mode 100644 index 0000000..76c5dad --- /dev/null +++ b/MLPAssets/Textures/CardBack.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/CardBack.png-c3e28c09100eabc5562ed76709826ce0.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://MLPAssets/Textures/CardBack.png" +dest_files=[ "res://.import/CardBack.png-c3e28c09100eabc5562ed76709826ce0.stex" ] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=true +flags/filter=true +flags/mipmaps=true +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/Scenes/Board.tscn b/Scenes/Board.tscn new file mode 100644 index 0000000..0125c2e --- /dev/null +++ b/Scenes/Board.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=7 format=2] + +[ext_resource path="res://Scenes/Scripts/Board.gd" type="Script" id=1] +[ext_resource path="res://Scenes/Scripts/Camera.gd" type="Script" id=2] +[ext_resource path="res://MLPAssets/Background/boardbg.jpg" type="Texture" id=3] +[ext_resource path="res://Scenes/Components/Card.tscn" type="PackedScene" id=4] + +[sub_resource type="SpatialMaterial" id=2] +flags_unshaded = true +albedo_texture = ExtResource( 3 ) + +[sub_resource type="PlaneMesh" id=3] +material = SubResource( 2 ) +size = Vector2( 16, 9 ) + +[node name="Spatial" type="Spatial"] +script = ExtResource( 1 ) + +[node name="Camera" type="Camera" parent="."] +transform = Transform( 1, 0, 0, 0, 0.367808, 0.929902, 0, -0.929902, 0.367808, -0.232958, 4.94606, 3.11883 ) +script = ExtResource( 2 ) + +[node name="MeshInstance" type="MeshInstance" parent="."] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.001, 0 ) +mesh = SubResource( 3 ) +material/0 = null + +[node name="Card" parent="." instance=ExtResource( 4 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.433312, -0.001, 1.49195 ) diff --git a/Scenes/Components/Card.tscn b/Scenes/Components/Card.tscn index e327f9e..2bd7154 100644 --- a/Scenes/Components/Card.tscn +++ b/Scenes/Components/Card.tscn @@ -1,17 +1,58 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=5 format=2] -[sub_resource type="ImageTexture" id=1] +[ext_resource path="res://MLPAssets/Models/cardborder.obj" type="ArrayMesh" id=1] +[ext_resource path="res://MLPAssets/Models/cardborder.material" type="Material" id=2] -[node name="Node2D" type="Node2D"] +[sub_resource type="Animation" id=2] +resource_name = "flip" +length = 0.5 +step = 0.05 +tracks/0/type = "value" +tracks/0/path = NodePath(".:translation") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0.00886994, 0.25, 0.5 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector3( 0, 0, 0 ), Vector3( 0, 0.5, 0 ), Vector3( 0, 0, 0 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath(".:rotation_degrees") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0.00886994, 0.5 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Vector3( 0, 0, 0 ), Vector3( 0, 0, 180 ) ] +} -[node name="Border" type="Polygon2D" parent="."] -color = Color( 0, 0, 0, 1 ) -offset = Vector2( -180, -240 ) -antialiased = true -polygon = PoolVector2Array( 4, 4, 9, 1, 16, 0, 324, 0, 331, 1, 336, 4, 339, 9, 340, 16, 340, 464, 339, 471, 336, 476, 331, 479, 324, 480, 16, 480, 9, 479, 4, 476, 1, 471, 0, 464, 0, 16, 1, 9 ) +[sub_resource type="Animation" id=1] +resource_name = "tap" +length = 0.3 +tracks/0/type = "value" +tracks/0/path = NodePath(".:rotation_degrees") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.3 ), +"transitions": PoolRealArray( 0.466516, 2.37841 ), +"update": 0, +"values": [ Vector3( 0, 0, 0 ), Vector3( 0, -90, 0 ) ] +} -[node name="InsideBG" type="Polygon2D" parent="Border"] -offset = Vector2( -180, -240 ) -antialiased = true -texture = SubResource( 1 ) -polygon = PoolVector2Array( 18, 18, 322, 18, 322, 462, 18, 462 ) +[node name="Card" type="MeshInstance"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) +mesh = ExtResource( 1 ) +material/0 = ExtResource( 2 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +anims/flip = SubResource( 2 ) +anims/tap = SubResource( 1 ) diff --git a/Scenes/Game.tscn b/Scenes/Game.tscn deleted file mode 100644 index e0c6bd6..0000000 --- a/Scenes/Game.tscn +++ /dev/null @@ -1,15 +0,0 @@ -[gd_scene load_steps=3 format=2] - -[ext_resource path="res://Scenes/Scripts/Game.gd" type="Script" id=1] -[ext_resource path="res://Scenes/Components/Card.tscn" type="PackedScene" id=2] - -[node name="Node2D" type="Control"] -anchor_right = 1.0 -anchor_bottom = 1.0 -script = ExtResource( 1 ) - -[node name="Board" type="Node2D" parent="."] - -[node name="Node2D3" parent="Board" instance=ExtResource( 2 )] -position = Vector2( 736.851, 566.497 ) -scale = Vector2( 0.3, 0.3 ) diff --git a/Scenes/Scripts/Board.gd b/Scenes/Scripts/Board.gd new file mode 100644 index 0000000..591858a --- /dev/null +++ b/Scenes/Scripts/Board.gd @@ -0,0 +1,24 @@ +extends Spatial + +onready var camera := $Camera + +var mouseOrigin: Vector2 +var lastCameraTransform: Transform + +func _input(event: InputEvent): + # Camera zoom + if event.is_action("zoom_in"): + camera.zoom(true) + elif event.is_action("zoom_out"): + camera.zoom(false) + # Save original camera and mouse position before panning + if event.is_action_pressed("pan"): + mouseOrigin = get_viewport().get_mouse_position() + lastCameraTransform = camera.transform + +func _process(delta): + # If panning, translate mouse delta to camera delta + if Input.is_action_pressed("pan"): + var mouseDelta := get_viewport().get_mouse_position() - mouseOrigin + var mousePos: Vector2 = mouseDelta * 0.0096 * (1-camera.getZoomLevel()/5) # Magic numbers everywhere + camera.transform.origin = lastCameraTransform.origin - Vector3(mousePos.x, 0, mousePos.y) \ No newline at end of file diff --git a/Scenes/Scripts/Camera.gd b/Scenes/Scripts/Camera.gd new file mode 100644 index 0000000..3d2b193 --- /dev/null +++ b/Scenes/Scripts/Camera.gd @@ -0,0 +1,22 @@ +extends Camera + +export var scaleFactor := 0.2 +export var animSpeed := 20 + +var targetZoom := 0.0 +var currentZoom := 0.0 + +func zoom(inward: bool): + var direction := 1 + if !inward: + direction *= -1 + targetZoom += scaleFactor * direction + +func _process(delta: float): + if abs(targetZoom - currentZoom) > 0: + var deltaZoom := (targetZoom - currentZoom) * (delta * animSpeed) + transform = transform.translated(Vector3.FORWARD * deltaZoom) + currentZoom += deltaZoom + +func getZoomLevel() -> float: + return currentZoom \ No newline at end of file diff --git a/Scenes/Scripts/Game.gd b/Scenes/Scripts/Game.gd deleted file mode 100644 index 4b88a02..0000000 --- a/Scenes/Scripts/Game.gd +++ /dev/null @@ -1,15 +0,0 @@ -extends Control - -func _input(event: InputEvent): - if event.is_action_pressed("zoom_in"): - zoom(true) - elif event.is_action_pressed("zoom_out"): - zoom(false) - -const SCALE_FACTOR := 0.1 - -func zoom(direction: bool): - var scaleFactor := 1 + SCALE_FACTOR - if not direction: - scaleFactor = 1 - SCALE_FACTOR - $Board.scale *= scaleFactor \ No newline at end of file diff --git a/project.godot b/project.godot index a9ca1c1..87d12bd 100644 --- a/project.godot +++ b/project.godot @@ -37,6 +37,12 @@ zoom_out={ , Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":5,"pressed":false,"doubleclick":false,"script":null) ] } +pan={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"unicode":0,"echo":false,"script":null) +, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":2,"pressed":false,"doubleclick":false,"script":null) + ] +} [rendering]