Browse Source

:tada: Add ball

DricomDragon 2 years ago
parent
commit
9bd45cfd21

+ 17 - 0
godot/component/entity/ball/Ball.tscn

@@ -0,0 +1,17 @@
+[gd_scene load_steps=3 format=3 uid="uid://b4cy6e2mi1i51"]
+
+[ext_resource type="Texture2D" uid="uid://dy5g3iswdrc1t" path="res://icon.svg" id="1_81xv1"]
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_unjtu"]
+
+[node name="Ball" type="RigidBody2D"]
+gravity_scale = 0.0
+linear_damp = 1.0
+angular_damp = 0.1
+
+[node name="Box" type="CollisionShape2D" parent="."]
+shape = SubResource("CircleShape2D_unjtu")
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+scale = Vector2(0.148438, 0.148438)
+texture = ExtResource("1_81xv1")

+ 17 - 17
godot/component/entity/land/land_tile_set.tres

@@ -7,39 +7,39 @@ resource_name = "Ground"
 texture = ExtResource("1_lvbaa")
 texture_region_size = Vector2i(65, 89)
 0:0/0 = 0
-0:0/0/texture_offset = Vector2i(0, -10)
+0:0/0/texture_origin = Vector2i(0, -10)
 1:0/0 = 0
-1:0/0/texture_offset = Vector2i(0, -10)
+1:0/0/texture_origin = Vector2i(0, -10)
 2:0/0 = 0
-2:0/0/texture_offset = Vector2i(0, -10)
+2:0/0/texture_origin = Vector2i(0, -10)
 4:0/0 = 0
-4:0/0/texture_offset = Vector2i(0, -10)
+4:0/0/texture_origin = Vector2i(0, -10)
 0:1/0 = 0
-0:1/0/texture_offset = Vector2i(0, -10)
+0:1/0/texture_origin = Vector2i(0, -10)
 1:1/0 = 0
-1:1/0/texture_offset = Vector2i(0, -10)
+1:1/0/texture_origin = Vector2i(0, -10)
 2:1/0 = 0
-2:1/0/texture_offset = Vector2i(0, -10)
+2:1/0/texture_origin = Vector2i(0, -10)
 4:1/0 = 0
-4:1/0/texture_offset = Vector2i(0, -10)
+4:1/0/texture_origin = Vector2i(0, -10)
 0:2/0 = 0
-0:2/0/texture_offset = Vector2i(0, -10)
+0:2/0/texture_origin = Vector2i(0, -10)
 1:2/0 = 0
-1:2/0/texture_offset = Vector2i(0, -10)
+1:2/0/texture_origin = Vector2i(0, -10)
 2:2/0 = 0
-2:2/0/texture_offset = Vector2i(0, -10)
+2:2/0/texture_origin = Vector2i(0, -10)
 0:3/0 = 0
-0:3/0/texture_offset = Vector2i(0, -10)
+0:3/0/texture_origin = Vector2i(0, -10)
 1:3/0 = 0
-1:3/0/texture_offset = Vector2i(0, -10)
+1:3/0/texture_origin = Vector2i(0, -10)
 2:3/0 = 0
-2:3/0/texture_offset = Vector2i(0, -10)
+2:3/0/texture_origin = Vector2i(0, -10)
 0:4/0 = 0
-0:4/0/texture_offset = Vector2i(0, -10)
+0:4/0/texture_origin = Vector2i(0, -10)
 1:4/0 = 0
-1:4/0/texture_offset = Vector2i(0, -10)
+1:4/0/texture_origin = Vector2i(0, -10)
 2:4/0 = 0
-2:4/0/texture_offset = Vector2i(0, -10)
+2:4/0/texture_origin = Vector2i(0, -10)
 
 [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_0cmhd"]
 resource_name = "Rock"

+ 24 - 3
godot/component/entity/player/Player.gd

@@ -2,23 +2,44 @@ extends CharacterBody2D
 
 
 const SPEED = 300.0
+const SLIDE = 50.0
+const FORCE = 800.0
+
 
 
 func _physics_process(delta):
+	prepare_to_move()
+
+	var collided = move_and_slide()
 
+	if collided:
+		try_to_shoot()
 
+
+func prepare_to_move():
 	if Input.is_action_pressed("ui_right"):
 		velocity.x = SPEED
 	elif Input.is_action_pressed("ui_left"):
 		velocity.x = -SPEED
 	else:
-		velocity.x = move_toward(velocity.x, 0, SPEED)
+		velocity.x = move_toward(velocity.x, 0, SLIDE)
 
 	if Input.is_action_pressed("ui_down"):
 		velocity.y = SPEED
 	elif Input.is_action_pressed("ui_up"):
 		velocity.y = -SPEED
 	else:
-		velocity.y = move_toward(velocity.y, 0, SPEED)
+		velocity.y = move_toward(velocity.y, 0, SLIDE)
+
+
+func try_to_shoot():
+	var collision = get_last_slide_collision()
+	var target = collision.get_collider()
+	var normal = collision.get_normal()
+
+	if target is PhysicsBody2D:
+		shoot(target, -normal)
+
 
-	move_and_slide()
+func shoot(target: PhysicsBody2D, dir: Vector2) -> void:
+	target.apply_force(dir * FORCE)

+ 3 - 0
godot/component/entity/player/Player.tscn

@@ -8,6 +8,9 @@ radius = 18.0
 height = 52.0
 
 [node name="Player" type="CharacterBody2D"]
+slide_on_ceiling = false
+floor_stop_on_slope = false
+floor_block_on_wall = false
 script = ExtResource("1_364t3")
 
 [node name="Body" type="CollisionShape2D" parent="."]

File diff suppressed because it is too large
+ 9 - 4
godot/world.tscn