Basic Wave System is Down

This commit is contained in:
Snoweuph 2023-04-09 12:01:03 +02:00
parent 128abc60b8
commit 97a49b122b
4 changed files with 214 additions and 18 deletions

174
Scenes/Game.tscn Normal file
View 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")

View file

@ -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
View 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

View file

@ -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.get_unix_time_from_system() - start_time
return {"time": Time.get_unix_time_from_system() - start_time, "free_tiles": get_free_tiles()}
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()