Week 1: static/rigid/charcter bodies, timer, game controller
This commit is contained in:
		
						commit
						435a143e59
					
				
							
								
								
									
										4
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| root = true | ||||
| 
 | ||||
| [*] | ||||
| charset = utf-8 | ||||
							
								
								
									
										2
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| # Normalize EOL for all files that Git considers text files. | ||||
| * text=auto eol=lf | ||||
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| # Godot 4+ specific ignores | ||||
| .godot/ | ||||
| /android/ | ||||
							
								
								
									
										35
									
								
								gamecontroller.gd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								gamecontroller.gd
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | ||||
| class_name GameController extends Node2D | ||||
| 
 | ||||
| var totalCrates = 3 | ||||
| var timeLimit = 10 | ||||
| var timer = Timer.new() | ||||
| 
 | ||||
| # Called when the node enters the scene tree for the first time. | ||||
| func _ready() -> void:	 | ||||
| 	add_child(timer) | ||||
| 	timer.wait_time = 1 | ||||
| 	timer.one_shot = false | ||||
| 	timer.connect("timeout", secondCounter) | ||||
| 	timer.start() | ||||
| 
 | ||||
| func secondCounter(): | ||||
| 	print("tick "+str(timeLimit)) | ||||
| 	timeLimit -= 1 | ||||
| 	if timeLimit <= 0: | ||||
| 		print("YOU LOSE...") | ||||
| 		get_tree().reload_current_scene() | ||||
| 
 | ||||
| # Called every frame. 'delta' is the elapsed time since the previous frame. | ||||
| func _process(delta: float) -> void: | ||||
| 	pass | ||||
| 
 | ||||
| 
 | ||||
| func _on_trigger_trigger_fired(effect: Variant, body: Variant) -> void: | ||||
| 	print("GameController know about trigger " + effect) | ||||
| 	if effect == "destroy": | ||||
| 		totalCrates -= 1 | ||||
| 		print("Crates remaining: " + str(totalCrates)) | ||||
| 		body.queue_free() | ||||
| 		if totalCrates == 0: | ||||
| 			print("YOU WIN!") | ||||
| 			get_tree().reload_current_scene() | ||||
							
								
								
									
										1
									
								
								gamecontroller.gd.uid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								gamecontroller.gd.uid
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| uid://dtod1rsvbxyti | ||||
							
								
								
									
										1
									
								
								icon.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								icon.svg
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><rect width="124" height="124" x="2" y="2" fill="#363d52" stroke="#212532" stroke-width="4" rx="14"/><g fill="#fff" transform="translate(12.322 12.322)scale(.101)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(12.322 12.322)scale(.101)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg> | ||||
| After Width: | Height: | Size: 994 B | 
							
								
								
									
										37
									
								
								icon.svg.import
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								icon.svg.import
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | ||||
| [remap] | ||||
| 
 | ||||
| importer="texture" | ||||
| type="CompressedTexture2D" | ||||
| uid="uid://6fbahxk4v2f5" | ||||
| path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" | ||||
| metadata={ | ||||
| "vram_texture": false | ||||
| } | ||||
| 
 | ||||
| [deps] | ||||
| 
 | ||||
| source_file="res://icon.svg" | ||||
| dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] | ||||
| 
 | ||||
| [params] | ||||
| 
 | ||||
| compress/mode=0 | ||||
| compress/high_quality=false | ||||
| compress/lossy_quality=0.7 | ||||
| compress/hdr_compression=1 | ||||
| compress/normal_map=0 | ||||
| compress/channel_pack=0 | ||||
| mipmaps/generate=false | ||||
| mipmaps/limit=-1 | ||||
| roughness/mode=0 | ||||
| roughness/src_normal="" | ||||
| process/fix_alpha_border=true | ||||
| process/premult_alpha=false | ||||
| process/normal_map_invert_y=false | ||||
| process/hdr_as_srgb=false | ||||
| process/hdr_clamp_exposure=false | ||||
| process/size_limit=0 | ||||
| detect_3d/compress_to=1 | ||||
| svg/scale=1.0 | ||||
| editor/scale_with_editor_scale=false | ||||
| editor/convert_colors_with_editor_theme=false | ||||
							
								
								
									
										22
									
								
								project.godot
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								project.godot
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| ; Engine configuration file. | ||||
| ; It's best edited using the editor UI and not directly, | ||||
| ; since the parameters that go here are not all obvious. | ||||
| ; | ||||
| ; Format: | ||||
| ;   [section] ; section goes between [] | ||||
| ;   param=value ; assign values to parameters | ||||
| 
 | ||||
| config_version=5 | ||||
| 
 | ||||
| [application] | ||||
| 
 | ||||
| config/name="AprilGodotProject" | ||||
| run/main_scene="res://scenes/game.tscn" | ||||
| config/features=PackedStringArray("4.4", "Forward Plus") | ||||
| config/icon="res://icon.svg" | ||||
| 
 | ||||
| [file_customization] | ||||
| 
 | ||||
| folder_colors={ | ||||
| "res://scripts/": "red" | ||||
| } | ||||
							
								
								
									
										95
									
								
								scenes/game.tscn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								scenes/game.tscn
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,95 @@ | ||||
| [gd_scene load_steps=8 format=3 uid="uid://bvs868ncmeoj5"] | ||||
| 
 | ||||
| [ext_resource type="Script" uid="uid://dtod1rsvbxyti" path="res://gamecontroller.gd" id="1_lnu2h"] | ||||
| [ext_resource type="Script" uid="uid://c3vqmu6nc4gb0" path="res://scripts/player.gd" id="1_uwrxv"] | ||||
| [ext_resource type="PackedScene" uid="uid://dgbqoys4mm8j" path="res://scenes/trigger.tscn" id="3_lnu2h"] | ||||
| 
 | ||||
| [sub_resource type="CircleShape2D" id="CircleShape2D_8cj0n"] | ||||
| radius = 21.2132 | ||||
| 
 | ||||
| [sub_resource type="RectangleShape2D" id="RectangleShape2D_8cj0n"] | ||||
| size = Vector2(160, 48) | ||||
| 
 | ||||
| [sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_uwrxv"] | ||||
| 
 | ||||
| [sub_resource type="RectangleShape2D" id="RectangleShape2D_uwrxv"] | ||||
| size = Vector2(144, 44) | ||||
| 
 | ||||
| [node name="Game" type="Node2D"] | ||||
| script = ExtResource("1_lnu2h") | ||||
| 
 | ||||
| [node name="CharacterBody2D" type="CharacterBody2D" parent="."] | ||||
| position = Vector2(489, 45) | ||||
| script = ExtResource("1_uwrxv") | ||||
| metadata/_edit_group_ = true | ||||
| 
 | ||||
| [node name="CollisionShape2D" type="CollisionShape2D" parent="CharacterBody2D"] | ||||
| shape = SubResource("CircleShape2D_8cj0n") | ||||
| debug_color = Color(0.332985, 0.606108, 0.412422, 0.42) | ||||
| 
 | ||||
| [node name="Level" type="Node2D" parent="."] | ||||
| 
 | ||||
| [node name="Plat 0" type="StaticBody2D" parent="Level"] | ||||
| position = Vector2(510, 276) | ||||
| metadata/_edit_group_ = true | ||||
| 
 | ||||
| [node name="CollisionShape2D" type="CollisionShape2D" parent="Level/Plat 0"] | ||||
| shape = SubResource("RectangleShape2D_8cj0n") | ||||
| 
 | ||||
| [node name="Plat 1" type="StaticBody2D" parent="Level"] | ||||
| position = Vector2(715, 276) | ||||
| metadata/_edit_group_ = true | ||||
| 
 | ||||
| [node name="CollisionShape2D" type="CollisionShape2D" parent="Level/Plat 1"] | ||||
| shape = SubResource("RectangleShape2D_8cj0n") | ||||
| 
 | ||||
| [node name="Floor" type="StaticBody2D" parent="Level"] | ||||
| position = Vector2(564, 515) | ||||
| metadata/_edit_group_ = true | ||||
| 
 | ||||
| [node name="CollisionShape2D" type="CollisionShape2D" parent="Level/Floor"] | ||||
| shape = SubResource("WorldBoundaryShape2D_uwrxv") | ||||
| 
 | ||||
| [node name="Crates" type="Node2D" parent="."] | ||||
| 
 | ||||
| [node name="Crate 0" type="RigidBody2D" parent="Crates"] | ||||
| position = Vector2(580, 158) | ||||
| rotation = 1.08962 | ||||
| metadata/_edit_group_ = true | ||||
| 
 | ||||
| [node name="CollisionShape2D" type="CollisionShape2D" parent="Crates/Crate 0"] | ||||
| shape = SubResource("RectangleShape2D_uwrxv") | ||||
| debug_color = Color(0.82094, 0.38733, 0.296015, 0.42) | ||||
| 
 | ||||
| [node name="Crate 1" type="RigidBody2D" parent="Crates"] | ||||
| position = Vector2(758, 131) | ||||
| rotation = 2.21149 | ||||
| metadata/_edit_group_ = true | ||||
| 
 | ||||
| [node name="CollisionShape2D" type="CollisionShape2D" parent="Crates/Crate 1"] | ||||
| shape = SubResource("RectangleShape2D_uwrxv") | ||||
| debug_color = Color(0.82094, 0.38733, 0.296015, 0.42) | ||||
| 
 | ||||
| [node name="Crate 2" type="RigidBody2D" parent="Crates"] | ||||
| position = Vector2(390, 129) | ||||
| rotation = 2.24474 | ||||
| metadata/_edit_group_ = true | ||||
| 
 | ||||
| [node name="CollisionShape2D" type="CollisionShape2D" parent="Crates/Crate 2"] | ||||
| shape = SubResource("RectangleShape2D_uwrxv") | ||||
| debug_color = Color(0.82094, 0.38733, 0.296015, 0.42) | ||||
| 
 | ||||
| [node name="Trigger" parent="." instance=ExtResource("3_lnu2h")] | ||||
| position = Vector2(254, 406) | ||||
| 
 | ||||
| [node name="Trigger2" parent="." instance=ExtResource("3_lnu2h")] | ||||
| position = Vector2(860, 415) | ||||
| effect = "destroy" | ||||
| 
 | ||||
| [node name="Trigger3" parent="." instance=ExtResource("3_lnu2h")] | ||||
| position = Vector2(582, 414) | ||||
| effect = "elaborate" | ||||
| 
 | ||||
| [connection signal="triggerFired" from="Trigger" to="." method="_on_trigger_trigger_fired"] | ||||
| [connection signal="triggerFired" from="Trigger2" to="." method="_on_trigger_trigger_fired"] | ||||
| [connection signal="triggerFired" from="Trigger3" to="." method="_on_trigger_trigger_fired"] | ||||
							
								
								
									
										17
									
								
								scenes/trigger.tscn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								scenes/trigger.tscn
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | ||||
| [gd_scene load_steps=3 format=3 uid="uid://dgbqoys4mm8j"] | ||||
| 
 | ||||
| [ext_resource type="Script" uid="uid://duv4xlinu0hlj" path="res://scripts/trigger.gd" id="1_du5ex"] | ||||
| 
 | ||||
| [sub_resource type="CircleShape2D" id="CircleShape2D_uwrxv"] | ||||
| radius = 81.0987 | ||||
| 
 | ||||
| [node name="Trigger" type="Area2D"] | ||||
| script = ExtResource("1_du5ex") | ||||
| effect = "teleport" | ||||
| metadata/_edit_group_ = true | ||||
| 
 | ||||
| [node name="CollisionShape2D" type="CollisionShape2D" parent="."] | ||||
| shape = SubResource("CircleShape2D_uwrxv") | ||||
| debug_color = Color(0.743052, 0.352443, 0.77245, 0.42) | ||||
| 
 | ||||
| [connection signal="body_entered" from="." to="." method="_on_body_entered"] | ||||
							
								
								
									
										30
									
								
								scripts/player.gd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								scripts/player.gd
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| extends CharacterBody2D | ||||
| 
 | ||||
| 
 | ||||
| const SPEED = 300.0 | ||||
| const JUMP_VELOCITY = -400.0 | ||||
| 
 | ||||
| @export var pushpower = 80.0 | ||||
| 
 | ||||
| func _physics_process(delta: float) -> void: | ||||
| 	# Add the gravity. | ||||
| 	if not is_on_floor(): | ||||
| 		velocity += get_gravity() * delta | ||||
| 
 | ||||
| 	# Handle jump. | ||||
| 	if Input.is_action_just_pressed("ui_accept") and is_on_floor(): | ||||
| 		velocity.y = JUMP_VELOCITY | ||||
| 
 | ||||
| 	# Get the input direction and handle the movement/deceleration. | ||||
| 	# As good practice, you should replace UI actions with custom gameplay actions. | ||||
| 	var direction := Input.get_axis("ui_left", "ui_right") | ||||
| 	if direction: | ||||
| 		velocity.x = direction * SPEED | ||||
| 	else: | ||||
| 		velocity.x = move_toward(velocity.x, 0, SPEED) | ||||
| 
 | ||||
| 	move_and_slide() | ||||
| 	for i in get_slide_collision_count(): | ||||
| 		var c = get_slide_collision(i) | ||||
| 		if c.get_collider() is RigidBody2D: | ||||
| 			c.get_collider().apply_central_impulse(-c.get_normal() * pushpower) | ||||
							
								
								
									
										1
									
								
								scripts/player.gd.uid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								scripts/player.gd.uid
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| uid://c3vqmu6nc4gb0 | ||||
							
								
								
									
										19
									
								
								scripts/trigger.gd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								scripts/trigger.gd
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| extends Area2D | ||||
| 
 | ||||
| @export var effect = "destroy" | ||||
| 
 | ||||
| signal triggerFired(effect, body) | ||||
| 
 | ||||
| # Called when the node enters the scene tree for the first time. | ||||
| func _ready() -> void: | ||||
| 	pass # Replace with function body. | ||||
| 
 | ||||
| 
 | ||||
| # Called every frame. 'delta' is the elapsed time since the previous frame. | ||||
| func _process(delta: float) -> void: | ||||
| 	pass | ||||
| 
 | ||||
| 
 | ||||
| func _on_body_entered(body: Node2D) -> void: | ||||
| 	print("trigger fired "+effect) | ||||
| 	triggerFired.emit(effect, body) | ||||
							
								
								
									
										1
									
								
								scripts/trigger.gd.uid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								scripts/trigger.gd.uid
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| uid://duv4xlinu0hlj | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user