just reorganised files thats it

This commit is contained in:
2025-06-24 02:55:20 +10:00
parent 3c5c8f1a44
commit 2bfea6471c
198 changed files with 313 additions and 747 deletions

View File

@@ -1,8 +1,10 @@
class_name Affector extends Node
class_name Affector
extends Node
var damage_particle_scene: PackedScene = preload("res://Scenes/damage_particle.tscn")
@warning_ignore("unused_parameter")
func apply_effect(effect: Effect, targets: Array[EnemyController]) -> void:
pass

View File

@@ -1,4 +1,5 @@
class_name AreaAffector extends Affector
class_name AreaAffector
extends Affector
@export var shapecast: ShapeCast3D

View File

@@ -1,4 +1,5 @@
class_name DirectAffect extends Affector
class_name DirectAffect
extends Affector
func apply_effect(effect: Effect, targets: Array[EnemyController]) -> void:

View File

@@ -1,4 +1,5 @@
class_name SpawnAffect extends Affector
class_name SpawnAffect
extends Affector
@export var spawn_scene: PackedScene
@export var tower: Tower

View File

@@ -1,4 +1,5 @@
class_name BeeliningController extends EnemyMovement
class_name BeeliningController
extends EnemyMovement
var goal: Node3D
var direction: Vector3

View File

@@ -1,4 +1,5 @@
class_name EnemyMovement extends Node
class_name EnemyMovement
extends Node
@export var character: EnemyController

View File

@@ -1,4 +1,5 @@
class_name LeapingController extends PathingController
class_name LeapingController
extends PathingController
@export var eastl: Label
@export var westl: Label

View File

@@ -1,4 +1,5 @@
class_name PathingController extends EnemyMovement
class_name PathingController
extends EnemyMovement
#var path: Curve3D
#var path_progress: float = 0.0

View File

@@ -1,4 +1,5 @@
class_name ExplosiveProjectile extends Projectile
class_name ExplosiveProjectile
extends Projectile
@export var explosion_range: float = 3.0

View File

@@ -1,4 +1,5 @@
class_name HomingProjectile extends ExplosiveProjectile
class_name HomingProjectile
extends ExplosiveProjectile
var target: Node3D
var acceleration: float = 50.0

View File

@@ -1,4 +1,5 @@
class_name Projectile extends RigidBody3D
class_name Projectile
extends RigidBody3D
@export var collision_shape: CollisionShape3D

View File

@@ -1,4 +1,5 @@
class_name StatusApplyingProjectile extends ExplosiveProjectile
class_name StatusApplyingProjectile
extends ExplosiveProjectile
@export var status_stats: StatusStats

View File

@@ -1,4 +1,5 @@
class_name Card extends Item
class_name Card
extends Item
enum Faction {
GENERIC = 0,

View File

@@ -1,4 +1,5 @@
class_name CardText extends Resource
class_name CardText
extends Resource
@export var target_type: Data.TargetType
@export var energy_type: Data.EnergyType

View File

@@ -1,4 +1,5 @@
class_name Enemy extends Resource
class_name Enemy
extends Resource
@export var title: String = "dog"
@export var target_type: Data.EnemyType

View File

@@ -1,4 +1,5 @@
class_name HeroClass extends Resource
class_name HeroClass
extends Resource
@export var hero_name: String = "Default"
@export var texture: Texture

View File

@@ -1,4 +1,5 @@
class_name Item extends Resource
class_name Item
extends Resource
@export var display_name: String
@export var icon: Texture

View File

@@ -1,4 +1,5 @@
class_name PlayerAudioSettings extends Resource
class_name PlayerAudioSettings
extends Resource
const SAVE_PATH: String = "user://audio_settings.tres"
@@ -19,4 +20,3 @@ static func load_profile_from_disk() -> PlayerAudioSettings:
if ResourceLoader.exists(SAVE_PATH):
return ResourceLoader.load(SAVE_PATH)
return PlayerAudioSettings.new()

View File

@@ -1,4 +1,5 @@
class_name PlayerGraphicsSettings extends Resource
class_name PlayerGraphicsSettings
extends Resource
const SAVE_PATH: String = "user://graphics_settings.tres"

View File

@@ -1,4 +1,5 @@
class_name PlayerPreferences extends Resource
class_name PlayerPreferences
extends Resource
const SAVE_PATH: String = "user://preferences.tres"

View File

@@ -1,4 +1,5 @@
class_name PlayerProfile extends Resource
class_name PlayerProfile
extends Resource
signal display_name_changed(old_name: String, new_name: String)
signal preferred_class_changed(old_class: int, new_class: int)

View File

@@ -1,4 +1,5 @@
class_name SaveData extends RefCounted
class_name SaveData
extends RefCounted
var save_slot: int = 0

View File

@@ -1,4 +1,5 @@
class_name StatAttribute extends Resource
class_name StatAttribute
extends Resource
@export var key: String
@export var value: float

View File

@@ -1,4 +1,5 @@
class_name StatusStats extends Resource
class_name StatusStats
extends Resource
@export var name: String
@export var max_stacks: int = 0

View File

@@ -1,4 +1,5 @@
class_name StatusDoT extends StatusEffect
class_name StatusDoT
extends StatusEffect
func proc(affected: EnemyController, stacks: int, _existing_effects: Dictionary) -> void:

View File

@@ -1,4 +1,5 @@
class_name StatusEffect extends Resource
class_name StatusEffect
extends Resource
@export var stats: StatusStats

View File

@@ -1,4 +1,5 @@
class_name StatusSlow extends StatusEffect
class_name StatusSlow
extends StatusEffect
func on_attached(affected: EnemyController, _existing_effects: Dictionary) -> void:

View File

@@ -1,4 +1,5 @@
class_name HitscanWeapon extends Weapon
class_name HitscanWeapon
extends Weapon
@export var raycast: RayCast3D
@export var range_debug_indicator: CSGSphere3D

View File

@@ -1,4 +1,5 @@
class_name ProjectileWeapon extends Weapon
class_name ProjectileWeapon
extends Weapon
@export var projectile_scene: PackedScene

View File

@@ -1,4 +1,5 @@
class_name ShapecastWeapon extends Weapon
class_name ShapecastWeapon
extends Weapon
@export var shapecast: ShapeCast3D
@export var range_debug_indicator: CSGSphere3D

View File

@@ -1,4 +1,5 @@
class_name StatusApplyingWeapon extends HitscanWeapon
class_name StatusApplyingWeapon
extends HitscanWeapon
@export var status_stats: StatusStats

View File

@@ -1,4 +1,5 @@
class_name Weapon extends Node3D
class_name Weapon
extends Node3D
signal energy_spent(energy: int, type: Data.EnergyType)
signal energy_recharged(energy: int, type: Data.EnergyType)
@@ -54,6 +55,7 @@ func _process(delta: float) -> void:
energy_spent.emit(delta, stats.energy_type)
@warning_ignore("unused_parameter")
func _physics_process(delta: float) -> void:
if trigger_held and current_energy >= energy_cost and time_since_firing >= time_between_shots:
if stats.energy_type == Data.EnergyType.DISCRETE:

View File

@@ -1,4 +1,5 @@
class_name AlertPopup extends PanelContainer
class_name AlertPopup
extends PanelContainer
signal completed()

View File

@@ -1,4 +1,5 @@
class_name AudioOptions extends VBoxContainer
class_name AudioOptions
extends VBoxContainer
@export var master_input: SpinBox
@export var master_slider: HSlider

View File

@@ -1,3 +1,4 @@
class_name BindButton extends Button
class_name BindButton
extends Button
var trigger_event: InputEvent

32
Scripts/boot_logo.gd Normal file
View File

@@ -0,0 +1,32 @@
class_name BootLogo
extends TextureRect
signal animation_finished()
var time: float = 0.0
var x: int = 0
var y: int = 0
var signalled: bool = false
@export var color_rect: ColorRect
func _process(delta: float) -> void:
time += delta
if time >= (1.0 / 24.0):
time -= (1.0 / 24.0)
x += 1
if x >= 10:
x = 0
y += 1
if y == 4 and x == 4:
var tween: Tween = create_tween()
tween.set_ease(Tween.EASE_OUT)
tween.set_trans(Tween.TRANS_CUBIC)
tween.tween_property(color_rect, "offset_top", 155.0, 1.5)
if y == 8 and x == 4:
y = 7
x = 5
if !signalled:
signalled = true
animation_finished.emit()
texture.region = Rect2(256.0 * x, 256.0 * y, 256.0, 256.0)

1
Scripts/boot_logo.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://p1ugbcmjuwxg

View File

@@ -1,4 +1,5 @@
class_name CardInHand extends Node2D
class_name CardInHand
extends Node2D
var stats: Card
@export var rarity_sprite: Sprite2D

35
Scripts/card_item.gd Normal file
View File

@@ -0,0 +1,35 @@
class_name CardItem
extends InteractButton
signal pressed(card_item: CardItem)
@export var outline_mesh: MeshInstance3D
@export var card_ui: CardInHand
var card: Card = null
var rarity_colors: Array[Color] = [
Color8(255, 255, 255),
Color8(50, 204, 36),
Color8(36, 59, 204),
Color8(181, 36, 204),
Color8(225, 112, 30)
]
func set_card(new_card: Card) -> void:
card = new_card
card_ui.set_card(card)
card_ui.view_tower()
outline_mesh.get_surface_override_material(0).albedo_color = rarity_colors[card.rarity]
#print(rarity_colors[card.rarity])
func press(callback_player: Hero) -> void:
pressed.emit(self)
func enable_hover_effect() -> void:
$Sprite3D.visible = true
func disable_hover_effect() -> void:
$Sprite3D.visible = false

1
Scripts/card_item.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://bj7oafusrrsk

View File

@@ -1,4 +1,5 @@
class_name Chatbox extends Control
class_name Chatbox
extends Control
signal opened
signal closed

View File

@@ -1,4 +1,5 @@
class_name CinematicCamManager extends Node3D
class_name CinematicCamManager
extends Node3D
@export var path_follows: Array[PathFollow3D]
@export var cameras: Array[Camera3D]

View File

@@ -1,4 +1,5 @@
class_name ConfirmationPopup extends PanelContainer
class_name ConfirmationPopup
extends PanelContainer
signal completed(outcome: bool)

View File

@@ -1,4 +1,5 @@
class_name Corpse extends RigidBody3D
class_name Corpse
extends RigidBody3D
func set_sprite(tex: Texture) -> void:

View File

@@ -1,4 +1,5 @@
class_name DamageParticle extends Sprite3D
class_name DamageParticle
extends Sprite3D
@onready var label: Label = $SubViewport/Label
var time_alive: float = 0.0

View File

@@ -1,4 +1,5 @@
class_name Effect extends Resource
class_name Effect
extends Resource
@export var damage: int = 0

View File

@@ -1,4 +1,5 @@
class_name EightDirectionSprite3D extends Sprite3D
class_name EightDirectionSprite3D
extends Sprite3D
func _process(_delta: float) -> void:

View File

@@ -1,4 +1,5 @@
class_name EnemyCard extends RefCounted
class_name EnemyCard
extends RefCounted
var enemy: Enemy = null

View File

@@ -1,4 +1,5 @@
class_name EnemyGoal extends Node3D
class_name EnemyGoal
extends Node3D
@export var audio_player: AudioStreamPlayer3D

View File

@@ -1,11 +1,11 @@
class_name EnemySpawner extends Node3D
class_name EnemySpawner
extends Node3D
signal enemy_spawned()
@export var land_enemy_scene: PackedScene
@export var leap_enemy_scene: PackedScene
@export var air_enemy_scene: PackedScene
@export var path: VisualizedPath
@export var flow_field: FlowField
@export var own_id: int = 0
@export var type: Data.EnemyType
@@ -21,7 +21,7 @@ var enemies_spawned: Dictionary = {}
var enemies_to_spawn: int = 0
var done_spawning: bool = true
var enemy_id: int = 0
var new_path: Path3D
var path: Path3D
var path_polygon: PackedScene = preload("res://path_polygon.tscn")
var game_manager: GameManager
@@ -82,14 +82,14 @@ func networked_spawn_land_enemy(enemy_stats: String, id1: int, id2: int) -> void
func create_path() -> void:
if type != Data.EnemyType.LAND:
return
new_path = Path3D.new()
new_path.curve = Curve3D.new()
add_child(new_path)
path = Path3D.new()
path.curve = Curve3D.new()
add_child(path)
var polygon: CSGPolygon3D = path_polygon.instantiate()
new_path.add_child(polygon)
path.add_child(polygon)
polygon.mode = CSGPolygon3D.MODE_PATH
polygon.path_node = new_path.get_path()
new_path.global_position = Vector3.ZERO
polygon.path_node = path.get_path()
path.global_position = Vector3.ZERO
update_path()
@@ -97,13 +97,13 @@ func create_path() -> void:
func update_path() -> void:
if type != Data.EnemyType.LAND:
return
new_path.curve.add_point(global_position + Vector3(0, 0.5, 0))
new_path.curve = Curve3D.new()
path.curve.add_point(global_position + Vector3(0, 0.5, 0))
path.curve = Curve3D.new()
var node: FlowNode = flow_field.get_closest_traversable_point(global_position)
new_path.curve.add_point(node.global_position + Vector3(0, 0.5, 0))
path.curve.add_point(node.global_position + Vector3(0, 0.5, 0))
while node.best_path:
node = node.best_path
new_path.curve.add_point(node.global_position + Vector3(0, 0.5, 0))
path.curve.add_point(node.global_position + Vector3(0, 0.5, 0))

View File

@@ -1,4 +1,5 @@
class_name FloatAndSpin extends RayCast3D
class_name FloatAndSpin
extends RayCast3D
@export_range(0.0, 3.0) var float_height: float = 1.5
@export_range(0.0, 2.0) var bounce_dist: float = 0.5

View File

@@ -1,4 +1,5 @@
class_name FlowFieldTool extends Node
class_name FlowFieldTool
extends Node
@export var flow_field: FlowField
@export var raycast: RayCast3D

View File

@@ -1,8 +1,9 @@
class_name FlowNode extends StaticBody3D
class_name FlowNode
extends StaticBody3D
@export var connections: Array[FlowNode]
@export var visualisers: Array[Node3D]
var visual_scene: PackedScene = preload("res://cube2.tscn")
var visual_scene: PackedScene = preload("res://Scenes/FlowField/cube2.tscn")
@export var traversable: bool = true
@export var buildable: bool = true
var best_path: FlowNode :
@@ -24,6 +25,7 @@ func _ready() -> void:
set_connector_color(node, Color.WEB_GRAY)
@warning_ignore("unused_parameter")
func _process(delta: float) -> void:
if visible:
for i: int in connections.size():

View File

@@ -13,7 +13,7 @@ signal switch_to_single_player
signal switch_to_multi_player
signal switch_to_main_menu
var level_scene: PackedScene = load("res://Worlds/GreenPlanet/Levels/first_level.tscn")
var level_scene: PackedScene = load("res://Worlds/GreenPlanet/Levels/Bridge/bridge.tscn")
var player_scene: PackedScene = load("res://PCs/hero.tscn")
var game_end_scene: PackedScene = load("res://Scenes/Menus/GameEndScreen/game_end_screen.tscn")
var connected_players_nodes: Dictionary = {}

View File

@@ -1,4 +1,5 @@
class_name GameMode extends RefCounted
class_name GameMode
extends RefCounted
var multiplayer: bool = false
var seeded: bool = false

View File

@@ -1,4 +1,5 @@
class_name GameplayOptionsMenu extends VBoxContainer
class_name GameplayOptionsMenu
extends VBoxContainer
@export var look_sens_slider: HSlider
@export var look_sens_input: SpinBox

View File

@@ -1,4 +1,5 @@
class_name GraphicsOptionsMenu extends VBoxContainer
class_name GraphicsOptionsMenu
extends VBoxContainer
@export var fov_input: SpinBox
@export var fov_slider: HSlider

View File

@@ -1,4 +1,5 @@
class_name Health extends Node
class_name Health
extends Node
signal health_depleted
signal health_changed(health: int)

View File

@@ -1,4 +1,5 @@
class_name HealthBar extends TextureProgressBar
class_name HealthBar
extends TextureProgressBar
@export var health_bar_gradient: Gradient

View File

@@ -1,4 +1,5 @@
class_name Hitbox extends CollisionShape3D
class_name Hitbox
extends CollisionShape3D
@export var critical_zone: bool = false

View File

@@ -1,4 +1,5 @@
class_name InteractButton extends StaticBody3D
class_name InteractButton
extends StaticBody3D
signal button_interacted(value: int, callback: Hero)

View File

@@ -1,4 +1,5 @@
class_name Inventory extends Node
class_name Inventory
extends Node
signal item_added(item: Item)
signal item_removed(item: Item)

View File

@@ -1,4 +1,5 @@
class_name ItemCard extends StaticBody3D
class_name ItemCard
extends StaticBody3D
@export var card: Card

View File

@@ -1 +0,0 @@
class_name ItemContainer extends StaticBody3D

View File

@@ -1 +0,0 @@
uid://c0pqprebrhakh

View File

@@ -1,4 +1,5 @@
class_name KeymapData extends RefCounted
class_name KeymapData
extends RefCounted
var title: String = "default"
var map: Dictionary[String, Array]

View File

@@ -1,4 +1,5 @@
class_name KillBox extends Area3D
class_name KillBox
extends Area3D
@export var level: Level

View File

@@ -1,11 +1,12 @@
class_name Level extends GridMap
class_name Level
extends Node3D
@export var enemy_pool: Array[Enemy]
@export var tower_path: Node
@export var player_spawns: Array[Node3D]
@export var enemy_spawns: Array[EnemySpawner]
@export var enemy_goals: Array[Node3D]
@export var corpses: Node3D
@export var corpses: Node
@export var flow_field: FlowField
@export var cinematic_cam: CinematicCamManager
@export var printer: CardPrinter

View File

@@ -1,5 +1,5 @@
extends Control
class_name LivesBarSegment
extends Control
var lives_left: int = 6

View File

@@ -1,3 +1,4 @@
class_name LivesBar
extends TextureRect
@export var segments: Array[LivesBarSegment]

View File

@@ -1,4 +1,5 @@
class_name Lobby extends Control
class_name Lobby
extends Control
@export var character_select_screen: PackedScene
#@export var scoreboard: Scoreboard

View File

@@ -1,5 +1,5 @@
extends Camera3D
class_name MinimapCamera3D
extends Camera3D
@export var anchor: Node3D
#@export var face_north: bool

30
Scripts/mod_menu.gd Normal file
View File

@@ -0,0 +1,30 @@
class_name ModMenu
extends PanelContainer
var entry_containers: Array[HBoxContainer]
var entry_names: Dictionary[String, Label]
var entry_boxes: Dictionary[String, CheckBox]
func _ready() -> void:
for mod_name: String in Data.mods:
var container: HBoxContainer = HBoxContainer.new()
entry_containers.append(container)
$VBoxContainer/ScrollContainer/VBoxContainer.add_child(container)
var label: Label = Label.new()
label.text = mod_name
container.add_child(label)
var box: CheckBox = CheckBox.new()
box.button_pressed = false
container.add_child(box)
entry_names[mod_name] = label
entry_boxes[mod_name] = box
load_mod_list()
#TODO: make this remember preferences instead of always starting not loaded
#TODO: make this always load the base mod
func load_mod_list() -> void:
var mod_list: Dictionary[String, bool] = {}
for entry: String in entry_boxes:
mod_list[entry] = entry_boxes[entry].button_pressed
Data.load_mods(mod_list)

1
Scripts/mod_menu.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://cxrm2naq75jo1

View File

@@ -1,4 +1,5 @@
class_name MultiplayerLobby extends Lobby
class_name MultiplayerLobby
extends Lobby
signal player_connected(peer_id: int, player_profile: PlayerProfile)
signal player_disconnected(peer_id: int)

View File

@@ -1,4 +1,5 @@
class_name OnTopCamera extends Camera3D
class_name OnTopCamera
extends Camera3D
@export var clone_camera: Node3D

View File

@@ -1,4 +1,5 @@
class_name OptionsMenu extends Control
class_name OptionsMenu
extends Control
@export var gameplay: GameplayOptionsMenu
@export var graphics: GraphicsOptionsMenu

View File

@@ -1,17 +0,0 @@
class_name PathVisualThing extends PathFollow3D
@export var speed: float = 0.5
@export var world_model: Node3D
@export var minimap_model: Node3D
func _process(delta: float) -> void:
progress += speed * delta
func set_world_visible(value: bool) -> void:
world_model.set_visible(value)
func set_minimap_visible(value: bool) -> void:
minimap_model.set_visible(value)

View File

@@ -1 +0,0 @@
uid://cr3sfjjo6l6n2

View File

@@ -1,4 +1,5 @@
class_name PickupNotification extends PanelContainer
class_name PickupNotification
extends PanelContainer
@export var fade_out_time: float
@export var style: StyleBoxFlat

View File

@@ -1,4 +1,5 @@
class_name RoundStats extends RefCounted
class_name RoundStats
extends RefCounted
var enemies_undefeated: Dictionary

View File

@@ -1,4 +1,5 @@
class_name Scoreboard extends PanelContainer
class_name Scoreboard
extends PanelContainer
signal all_players_ready()

View File

@@ -1,4 +1,5 @@
class_name ScoreboardEntry extends HBoxContainer
class_name ScoreboardEntry
extends HBoxContainer
var display_name: String
var character: int

View File

@@ -1,4 +1,5 @@
class_name ServerForm extends PanelContainer
class_name ServerForm
extends PanelContainer
signal connect_button_pressed
signal host_button_pressed

View File

@@ -1,4 +1,5 @@
class_name SinglePlayerLobby extends Lobby
class_name SinglePlayerLobby
extends Lobby
func _ready() -> void:

View File

@@ -1,4 +1,5 @@
class_name SpriteBobber extends Node
class_name SpriteBobber
extends Node
@export var character: EnemyController
@export var sprite: Node3D

View File

@@ -1,4 +1,5 @@
class_name StatusEffector extends Node
class_name StatusEffector
extends Node
@export var sprite_container: Container ## Container that effect icons should be instantiated under

View File

@@ -1,4 +1,5 @@
class_name Dummy extends EnemyController
class_name Dummy
extends EnemyController
func _on_health_health_depleted() -> void:

View File

@@ -1,4 +1,5 @@
class_name TargetFinder extends Node
class_name TargetFinder
extends Node
enum TARGETING_STRATEGY {
RANDOM = 0,

View File

@@ -1,4 +1,5 @@
class_name TextInputPopup extends PanelContainer
class_name TextInputPopup
extends PanelContainer
signal completed(outcome: bool)

View File

@@ -1,28 +0,0 @@
class_name VisualizedPath extends Path3D
var visual_scene: PackedScene = preload("res://Scenes/path_visual_thing.tscn")
var length: float = 0.0
var visualizer_points: Array = []
func spawn_visualizer_points() -> void:
var new_length: float = curve.get_baked_length()
for x: int in floori(new_length) - visualizer_points.size():
var point: PathFollow3D = visual_scene.instantiate()
visualizer_points.append(point)
add_child(point)
length = new_length
#print(str(int(length)) + " / " + str(visualizer_points.size()) + ", diff: " + str(visualizer_points.size() - length))
for x: int in visualizer_points.size():
visualizer_points[x].progress_ratio = float(x) / visualizer_points.size()
enable_visualization()
func disable_visualization() -> void:
for x: PathFollow3D in visualizer_points:
x.set_world_visible(false)
func enable_visualization() -> void:
for x: PathFollow3D in visualizer_points:
x.set_world_visible(true)

View File

@@ -1 +0,0 @@
uid://cd500cyj1tdyw

View File

@@ -1,4 +1,5 @@
class_name Wave extends RefCounted
class_name Wave
extends RefCounted
var enemy_groups: Array[EnemyCard]

View File

@@ -1,4 +1,5 @@
class_name WaveManager extends Object
class_name WaveManager
extends Object
## A collection of static functions related to enemy wave generation
##
## Contains the algorithm for generating a wave based on a given pool of enemies