Get Map Gernation in #17
4 changed files with 214 additions and 18 deletions
174
Scenes/Game.tscn
Normal file
174
Scenes/Game.tscn
Normal file
|
@ -0,0 +1,174 @@
|
|||
[gd_scene load_steps=17 format=3 uid="uid://c4btepmue6d7p"]
|
||||
|
||||
[ext_resource type="TileSet" uid="uid://bj7uu2180mie3" path="res://Assets/Tileset.tres" id="1_38041"]
|
||||
[ext_resource type="Script" path="res://Scripts/GameManager.gd" id="1_t708k"]
|
||||
[ext_resource type="Script" path="res://Scripts/MapGenerator.gd" id="2_ope8r"]
|
||||
[ext_resource type="Script" path="res://Scripts/EntitySystem/BunnyGenerator.gd" id="3_o045y"]
|
||||
[ext_resource type="PackedScene" uid="uid://cpl4tllohhyel" path="res://Prefabs/bunny.tscn" id="4_hpafd"]
|
||||
[ext_resource type="Script" path="res://Scripts/PlayerController.gd" id="5_d2cbj"]
|
||||
[ext_resource type="Texture2D" uid="uid://db70wcy5ua3jd" path="res://Assets/Sprites/Jesus/jesus_spritesheet.png" id="6_p526i"]
|
||||
[ext_resource type="Script" path="res://Scripts/WeaponSystem/WeaponController.gd" id="7_mtrts"]
|
||||
[ext_resource type="PackedScene" uid="uid://csxh42o8twxwn" path="res://Prefabs/projectile.tscn" id="8_fp1vx"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_kdxam"]
|
||||
resource_name = "Idle"
|
||||
length = 0.1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Player Sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_dwpep"]
|
||||
resource_name = "MoveDown"
|
||||
length = 0.8
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Player Sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = false
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [0, 1, 2, 3, 4, 5, 6, 7]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_2jvl5"]
|
||||
resource_name = "MoveLeft"
|
||||
length = 0.8
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Player Sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [24, 25, 26, 27, 28, 29, 30, 31]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_4ig1u"]
|
||||
resource_name = "MoveRight"
|
||||
length = 0.8
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Player Sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [8, 9, 10, 11, 12, 13, 14, 15]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_pswkh"]
|
||||
resource_name = "MoveUp"
|
||||
length = 0.8
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Player Sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [16, 17, 18, 19, 20, 21, 22, 23]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_o3hln"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Player Sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [0]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_bi1h3"]
|
||||
_data = {
|
||||
"Idle": SubResource("Animation_kdxam"),
|
||||
"MoveDown": SubResource("Animation_dwpep"),
|
||||
"MoveLeft": SubResource("Animation_2jvl5"),
|
||||
"MoveRight": SubResource("Animation_4ig1u"),
|
||||
"MoveUp": SubResource("Animation_pswkh"),
|
||||
"RESET": SubResource("Animation_o3hln")
|
||||
}
|
||||
|
||||
[node name="GameManager" type="Node2D" node_paths=PackedStringArray("map_generator", "bunny_generator")]
|
||||
script = ExtResource("1_t708k")
|
||||
map_generator = NodePath("Map Generator")
|
||||
bunny_generator = NodePath("Bunny Generator")
|
||||
|
||||
[node name="Map Generator" type="TileMap" parent="."]
|
||||
scale = Vector2(1.5, 1.5)
|
||||
tile_set = ExtResource("1_38041")
|
||||
cell_quadrant_size = 32
|
||||
format = 2
|
||||
script = ExtResource("2_ope8r")
|
||||
start_area_corner_size = 3
|
||||
|
||||
[node name="Bunny Generator" type="Node2D" parent="." node_paths=PackedStringArray("player")]
|
||||
script = ExtResource("3_o045y")
|
||||
bunny_prefab = ExtResource("4_hpafd")
|
||||
player = NodePath("../Player")
|
||||
player_save_distance = 320.0
|
||||
|
||||
[node name="Player" type="CharacterBody2D" parent="." node_paths=PackedStringArray("animation_player")]
|
||||
position = Vector2(1440, 810)
|
||||
collision_layer = 0
|
||||
script = ExtResource("5_d2cbj")
|
||||
speed = 200
|
||||
animation_player = NodePath("Player Animator")
|
||||
|
||||
[node name="Player Sprite" type="Sprite2D" parent="Player"]
|
||||
position = Vector2(0, -20)
|
||||
texture = ExtResource("6_p526i")
|
||||
hframes = 8
|
||||
vframes = 4
|
||||
|
||||
[node name="Player Collider" type="CollisionPolygon2D" parent="Player"]
|
||||
position = Vector2(2, -24)
|
||||
polygon = PackedVector2Array(12, 32, -16, 32, -16, -24, 12, -24)
|
||||
|
||||
[node name="Player Camera" type="Camera2D" parent="Player"]
|
||||
position = Vector2(-1, -25)
|
||||
zoom = Vector2(3, 3)
|
||||
position_smoothing_enabled = true
|
||||
drag_horizontal_enabled = true
|
||||
drag_vertical_enabled = true
|
||||
editor_draw_drag_margin = true
|
||||
|
||||
[node name="Player Animator" type="AnimationPlayer" parent="Player"]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_bi1h3")
|
||||
}
|
||||
|
||||
[node name="WeaponController" type="Node2D" parent="Player"]
|
||||
position = Vector2(0, -16)
|
||||
script = ExtResource("7_mtrts")
|
||||
projectile_prefab = ExtResource("8_fp1vx")
|
|
@ -1,4 +1,5 @@
|
|||
extends Node
|
||||
class_name BunnyGenerator
|
||||
|
||||
@export var bunny_prefab : Resource
|
||||
@export var player : CharacterBody2D
|
||||
|
@ -13,20 +14,18 @@ func spawn_bunny(pos : Vector2, team : int, health : int) -> Bunny:
|
|||
bunny.team = team
|
||||
return bunny
|
||||
|
||||
func spawn_wave(free_tiles : Array, amount : int, health : int):
|
||||
func spawn_wave(free_tiles : Array, team: int, amount : int, health : int) -> Array:
|
||||
var bunnys = []
|
||||
|
||||
# Make Sure that no possitions to near to the player are insdie of the list
|
||||
for tile in free_tiles:
|
||||
if tile.distance_to(player.global_position) <= player_save_distance:
|
||||
free_tiles.erase(tile)
|
||||
|
||||
free_tiles = free_tiles.filter(func(val): return val.distance_to(player.global_position) > player_save_distance)
|
||||
# Make sure amount isnt bigger then available positions
|
||||
if free_tiles.size() < amount: amount = free_tiles.size()
|
||||
|
||||
# Spawn at random psoitions of the list
|
||||
# Spawn at random positions of the list
|
||||
for i in amount:
|
||||
var pos = free_tiles.pick_random()
|
||||
free_tiles.erase(pos)
|
||||
var bunny = spawn_bunny(pos, TEAM.EVIL, 3)
|
||||
bunny.sub_on_death(func(bunny): bunny.queue_free())
|
||||
pass
|
||||
var bunny = spawn_bunny(pos, team, 3)
|
||||
bunnys.push_back(bunny)
|
||||
return bunnys
|
||||
|
|
23
Scripts/GameManager.gd
Normal file
23
Scripts/GameManager.gd
Normal file
|
@ -0,0 +1,23 @@
|
|||
extends Node2D
|
||||
|
||||
@export var map_generator : Node
|
||||
@export var bunny_generator : Node
|
||||
|
||||
var bunnys = []
|
||||
var gen_data : Dictionary
|
||||
var wave := 0
|
||||
|
||||
func _ready():
|
||||
gen_data = map_generator.generate() as Dictionary
|
||||
print("time for generation: " + str(gen_data.time))
|
||||
pass
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
if(bunnys.size() == 0):
|
||||
wave += 1
|
||||
bunnys = bunny_generator.spawn_wave(gen_data.free_tiles.duplicate(), TEAM.EVIL, wave, 3)
|
||||
for bunny in bunnys:
|
||||
bunny.sub_on_death(func(bunny): bunnys.erase(bunny))
|
||||
bunny.sub_on_death(func(bunny): bunny.queue_free())
|
||||
pass
|
|
@ -15,13 +15,7 @@ extends TileMap
|
|||
|
||||
var tile_array : Array
|
||||
|
||||
func _ready():
|
||||
var time = generate()
|
||||
print("time for generation: " + str(time))
|
||||
pass
|
||||
|
||||
|
||||
func generate() -> float:
|
||||
func generate() -> Dictionary:
|
||||
var start_time = Time.get_unix_time_from_system()
|
||||
|
||||
randomize()
|
||||
|
@ -39,8 +33,14 @@ func generate() -> float:
|
|||
|
||||
tile_array_to_terrain()
|
||||
|
||||
return {"time": Time.get_unix_time_from_system() - start_time, "free_tiles": get_free_tiles()}
|
||||
|
||||
return Time.get_unix_time_from_system() - start_time
|
||||
func get_free_tiles() -> Array:
|
||||
var free_tiles = []
|
||||
for x in width:
|
||||
for y in height:
|
||||
if get_tile_non_solid(x, y): free_tiles.push_back(Vector2(x, y) * self.cell_quadrant_size * self.scale + (Vector2(self.cell_quadrant_size, self.cell_quadrant_size) / 2))
|
||||
return free_tiles
|
||||
|
||||
func setup_tile_data_array():
|
||||
tile_array.clear()
|
||||
|
|
Reference in a new issue