way too many changes to list, oops. big rewrite.
This commit is contained in:
Assets
Fonts
GGBotNet Fonts.URLGGBotNet.urlLicense.txt
OpenType (.otf)
TrueType (.ttf)
Web Open Font Format (.woff)
Sagewold-Italic.woffSagewold-Italic.woff.importSagewold-Italic.woff2Sagewold-Italic.woff2.importSagewold-Regular.woffSagewold-Regular.woff.importSagewold-Regular.woff2Sagewold-Regular.woff2.import
ZeroCool.otfZeroCool.otf.importZeroCool.ttfZeroCool.ttf.importZeroCool.woffZeroCool.woff.importZeroCool.woff2ZeroCool.woff2.importTextureAtlases
Textures
dead_leapfrog.pngdead_leapfrog.png.importenergy_bar.pngenergy_bar.png.importenergy_bar_bg.pngenergy_bar_bg.png.importenergy_bar_overlay.pngenergy_bar_overlay.png.importenergy_cell.pngenergy_cell.png.importfirst_scroll_seen.pngfirst_scroll_seen.png.importfirst_win_achievements.pngfirst_win_achievements.png.importleapfrog.pngleapfrog.png.importleapfrog_2.pngleapfrog_2.png.importstars_legendary-Sheet.pngstars_legendary-Sheet.png.importunlock_mage_achievement.pngunlock_mage_achievement.png.import
Audio
Cards
ascension.tresassault.tresblowdart.tresbomb_launcher.tresfireball.tresflamethrower.tresgatling.tresglue_launcher.tresicicle.tresoverclock_card.tresreactor.tresrefrigerator.tresrocket_launcher.tressniper.tres
Classes
Engineer
Mage
blue.pngblue.png.importblue_hand.pngblue_hand.png.importclass.trespodium.tscnyeen.pngyeen.png.import
NewHero3
NewHero4
Mods/Base
PCs
Entomologist
Mage
Mechanic
ClassCards
Assault
BombLauncher
Flamethrower
Gatling
GlueLauncher
Reactor
RocketLauncher
card_rocket_launcher.tresrocket.png.krashot1.wavshot1.wav.importtower_rocket_launcher.gdtower_rocket_launcher.tscn
Sniper
Projectiles
Bomb
Fireball
fireball_projectile.gdfireball_projectile.gd.uidfireball_projectile.pngfireball_projectile.png.importfireball_projectile.tscn
Icicle
icicle_projectile.gdicicle_projectile.gd.uidicicle_projectile.pngicicle_projectile.png.importicicle_projectile.tscn
Rocket
Resources
Enemies
Keymaps
StatusEffects
Scenes
8_direction_sprite.tscn
CardPrinter
Menus
CharacterSelect
character_podium.gdcharacter_podium.gd.uidcharacter_preview.gdcharacter_preview.gd.uidcharacter_select.gdcharacter_select.gd.uidcharacter_select.tscncharselect.gdcharselect.tscn
GameEndScreen
MainMenu
PauseMenu
alert_popup.tscnaudio_options.tscnconfirmation_popup.tscngameplay_options.tscngraphics_options.tscnkeybind_options.tscnloadout_editor.tscnmultiplayer_lobby.tscnoptions_menu.tscnserver_form.tscnsingleplayer_lobby.tscntext_input_popup.tscnProjectiles
ShopStand
Shredder
TowerBase
Towers
area_tower.tscndirect_affect_tower.tscnhitscan_tower.tscnprojectile_tower.tscnrange_affecting_tower.tscnshapecast_tower.tscnstatus_applying_tower.tscntower.tscn
UI
card_hand.tscnchatbox.tscnhero_card.tscnkeybind_entry.tscnkeybind_popup.tscnlifebar_segment.tscnlives_bar.tscnpickup_notification.tscnscoreboard.tscnscoreboard_entry.tscn
Weapons
hitscan_weapon.tscnprojectile_weapon.tscnshapecast_weapon.tscnstatus_applying_weapon.tscnweapon.tscn
corpse.tscndamage_particle.tscnenemy_spawner.tscngauntlet.tscnhealth_bar.tscnitem_card.tscnitem_container.tscnpath_visual_thing.tscnvisual_path.tscnScripts
Affectors
affector.gdaffector.gd.uidarea_affector.gdarea_affector.gd.uiddirect_affect.gddirect_affect.gd.uidspawn_affect.gdspawn_affect.gd.uid
EnemyAI
beelining_controller.gd.uidenemy_movement.gdenemy_movement.gd.uidleaping_controller.gdleaping_controller.gd.uidpathing_controller.gdpathing_controller.gd.uid
Projectiles
explosive_projectile.gdexplosive_projectile.gd.uidhoming_projectile.gd.uidprojectile.gdprojectile.gd.uidstatus_applying_projectile.gd.uid
Resources
card.gdcard.gd.uidcard_text.gdcard_text.gd.uidenemy.gdenemy.gd.uidhero_class.gdhero_class.gd.uiditem.gd.uidplayer_audio_settings.gd.uidplayer_graphics_settings.gdplayer_graphics_settings.gd.uidplayer_keymap.gd.uidplayer_preferences.gd.uidplayer_profile.gd.uidsave_data.gdsave_data.gd.uidsave_stats.gdstat_attribute.gd.uidstatus_stats.gd.uid
StatusEffects
Towers
hitscan_tower.gdprojectile_tower.gdrange_affecting_tower.gdshapecast_tower.gdstatus_applying_tower.gd
Weapons
hitscan_weapon.gdhitscan_weapon.gd.uidprojectile_weapon.gdprojectile_weapon.gd.uidshapecast_weapon.gd.uidstatus_applying_weapon.gd.uidweapon.gdweapon.gd.uid
a_star_graph_3d.gda_star_graph_3d.gd.uidalert_popup.gd.uidaudio_options.gd.uidcard_hand.gd.uidchatbox.gd.uidcinema_cam.gd.uidconfirmation_popup.gd.uidcorpse.gdcorpse.gd.uiddamage_particle.gd.uiddata.gddata.gd.uidedit_tool.gd.uideffect.gdeffect.gd.uideight_direction_sprite.gd.uidenemy_card.gdenemy_card.gd.uidenemy_goal.gd.uidenemy_spawner.gdenemy_spawner.gd.uidfloat_and_spin.gd.uidgame.gdgame.gd.uidgame_mode.gdgame_mode.gd.uidgameplay_options.gd.uidgraphics_options.gd.uidhealth.gdhealth.gd.uidhealth_bar.gd.uidhitbox.gdhitbox.gd.uidinteract_button.gdinteract_button.gd.uidinventory.gd.uiditem_card.gd.uiditem_container.gd.uidkey_icon_map.gd.uidkeybind_options.gd.uidkillbox.gd.uidlevel.gdlevel.gd.uidlifebar_segment.gd.uidlives_bar.gd.uidloadout_editor.gdlobby.gdlobby.gd.uidminimap_cam.gd.uidmultiplayer_lobby.gdmultiplayer_lobby.gd.uidon_top_camera.gd.uidoptions_menu.gd.uidpath_visual_thing.gd.uidpickup_notification.gd.uidround_stats.gd.uidscoreboard.gd.uidscoreboard_entry.gd.uidserver_form.gdserver_form.gd.uidsingleplayer_lobby.gdsingleplayer_lobby.gd.uidsprite_bobber.gd.uidstatus_effector.gd.uidtarget_dummy.gd.uidtarget_finder.gdtarget_finder.gd.uidtext_input_popup.gd.uidtower_base.gd.uidvisualized_path.gdvisualized_path.gd.uidwave.gdwave.gd.uidwave_manager.gdwave_manager.gd.uidTowers
Ascension
Assault
assaultmod.resassaultmod.res.deprenassaultmodel.glbassaultmodel.glb.importassaulttex.pngassaulttex.png.importtower_assault.tscntower_stats.tres
Blowdart
blowdart.glbblowdart.glb.importblowdart.resblowdart.res.deprenblowdarttex.pngblowdarttex.png.importtower_blowdart.tscntower_stats.tres
BombLauncher
bombamod.glbbombamod.glb.importbombamodel.resbombamodel.res.deprenbombatex.pngbombatex.png.importbombtower.tscntower_bomb_launcher.gdtower_bomb_launcher.gd.uidtower_stats.tres
Fireball
fireballtower.tscnmagetower.glbmagetower.glb.importmagetower.pngmagetower.png.importmagetowermesh.resmagetowermesh.res.deprentower_stats.tres
Flamethrower
flamethrower.pngflamethrower.png.importflamethrower_mesh.resflamethrower_mesh.res.deprentower_flamethrower.tscntower_stats.tresuntirastflametled.glbuntirastflametled.glb.import
Gatling
gatling.glbgatling.glb.importgatling.pnggatling.png.importgattlemesh.resgattlemesh.res.deprentower_gatling.gdtower_gatling.gd.uidtower_gatling.tscntower_stats.tres
GlueLauncher
glue_launcher_model.resglue_launcher_model.res.deprengluegun.glbgluegun.glb.importglueguntex.pngglueguntex.png.importtower_glue_launcher.tscntower_stats.tres
Icicle
Overclock
Reactor
reactor.glbreactor.glb.importreactor.pngreactor.png.importreactor_mesh.resreactor_mesh.res.deprenreactortower.tscntower_reactor.gdtower_reactor.gd.uidtower_stats.tres
Refrigerator
fridge.glbfridge.glb.importfridge.pngfridge.png.importfridge_mesh.resfridge_mesh.res.deprenfridgetower.tscntower_stats.tres
RocketLauncher
rocket_launcher.glbrocket_launcher.glb.importrocket_launcher_model.resrocket_launcher_model.res.deprenrocket_launcher_tex.pngrocket_launcher_tex.png.importrocket_tower.tscntower_stats.tres
Sniper
sniper.glbsniper.glb.importsnipermodel.ressnipermodel.res.deprensnipertex.pngsnipertex.png.importtower_sniper.tscntower_stats.tres
tower.gdtower.gd.uidUI
KeybindEntry.gdKeybindEntry.gd.uidbutton_stylebox.trescrosshair.gdshadercrosshair.gdshader.uidenemybox.gdenemybox.gd.uidh_box_container.tscnhealth_bar_gradient.treshero_select_card.gdhero_select_card.gd.uidhover_button_stylebox.treskeybind_screen.gdkeybind_screen.gd.uidnew_theme.trestower_label.gdtower_label.gd.uidtower_label.tscn
Weapons
Ascension
ascension.tscnascension_export.pngascension_export.png.importascension_weapon.gdascension_weapon.gd.uidweapon_stats.tres
Assault
g_assault.pngg_assault.png.importweapon_assault.gdweapon_assault.gd.uidweapon_assault.tscnweapon_stats.tres
Blowdart
blowdart.pngblowdart.png.importweapon_blowdart.gdweapon_blowdart.gd.uidweapon_blowdart.tscnweapon_stats.tres
BombLauncher
grenade_launcher.pnggrenade_launcher.png.importweapon_bomb_launcher.gdweapon_bomb_launcher.gd.uidweapon_bomb_launcher.tscnweapon_stats.tres
Fireball
fireball.pngfireball.png.importweapon_fireball.gdweapon_fireball.gd.uidweapon_fireball.tscnweapon_stats.tres
Flamethrower
flame_particles.tresweapon_flamethrower.gdweapon_flamethrower.gd.uidweapon_flamethrower.tscnweapon_stats.tres
Gatling
accelerator.pngaccelerator.png.importweapon_gatling.gdweapon_gatling.gd.uidweapon_gatling.tscnweapon_stats.tres
GlueLauncher
glue_gun.pngglue_gun.png.importweapon_glue_launcher.gdweapon_glue_launcher.gd.uidweapon_glue_launcher.tscnweapon_stats.tres
Icicle
Overclock
g_asssrault-export.pngg_asssrault-export.png.importoverclock_weapon.gdoverclock_weapon.gd.uidoverclock_weapon.tscnweapon_stats.tres
Reactor
Refrigerator
RocketLauncher
rocket_launcher.pngrocket_launcher.png.importtarget_icon.pngtarget_icon.png.importtarget_icon.tscntarget_list.pngtarget_list.png.importweapon_rocket_launcher.gdweapon_rocket_launcher.gd.uidweapon_rocket_launcher.tscnweapon_stats.tres
Sniper
Worlds
achievement_popup.gdachievement_popup.gd.uidachievement_popup.tscnbridge.blendbridge.glbbridge.glb.importcard_item.gdcard_item.gd.uidenemy_card_ui.gdenemy_card_ui.gd.uidenemy_card_ui.tscnenergy_bar.gdenergy_bar.gd.uidenergy_bar.tscnexport_presets.cfgjoytest.gdjoytest.tscnladder.gdladder.gd.uidladder.tscnmat1.tresmat13.tresmat2.tresmod_menu.gdmod_menu.gd.uidmouse_hover_material.tresnew_standard_material_3d.tresnew_style_box_flat.tresnew_theme.tresplan.glbplan.glb.importplan.tscnplan_mat.tresplan_plan_tex.pngplan_plan_tex.png.importproject.godotshot1.wavvisualized_path.tscnworld_test.tscn
312
PCs/hero.gd
312
PCs/hero.gd
@ -1,8 +1,6 @@
|
||||
class_name Hero extends CharacterBody3D
|
||||
|
||||
signal ready_state_changed(state: bool)
|
||||
signal spawned
|
||||
signal died
|
||||
|
||||
@export var hero_class: HeroClass
|
||||
@export var camera: Camera3D
|
||||
@ -18,14 +16,15 @@ signal died
|
||||
@export var hand_sprite: Sprite2D
|
||||
@export var interaction_raycast: RayCast3D
|
||||
@export var inventory: Inventory
|
||||
@export var gauntlet_card_1: CardInHand
|
||||
@export var gauntlet_card_2: CardInHand
|
||||
@export var gauntlet_cards: Array[CardInHand]
|
||||
@export var pause_menu_scene: PackedScene
|
||||
@export var hud: HUD
|
||||
@export var movement: PlayerMovement
|
||||
@export var sprint_zoom_speed: float = 0.2
|
||||
@export var player_name_tag: Label
|
||||
@export var weapon_swap_timer: Timer
|
||||
|
||||
@export_subgroup("Audio")
|
||||
@export var ears: AudioListener3D
|
||||
@export var place_card_audio: AudioStreamPlayer
|
||||
@export var swap_card_audio: AudioStreamPlayer
|
||||
@ -36,12 +35,16 @@ signal died
|
||||
@export var swap_off_audio: AudioStreamPlayer
|
||||
@export var swap_on_audio: AudioStreamPlayer
|
||||
|
||||
var hovering_item: InteractButton = null
|
||||
var weapons_spawn_count: int = 0 #Used to prevent node name collisions for multiplayer
|
||||
var inventory_selected_index: int = 0
|
||||
var equipped_card: Card
|
||||
var offhand_card: Card
|
||||
var weapon: Weapon
|
||||
var offhand_weapon: Weapon
|
||||
#var equipped_card: Card
|
||||
#var offhand_card: Card
|
||||
var equipped_weapon: int = 0
|
||||
var weapons: Array[Weapon] = [null, null]
|
||||
var cards: Array[Card] = [null, null]
|
||||
#var weapon: Weapon
|
||||
#var offhand_weapon: Weapon
|
||||
var weapons_active: bool = false
|
||||
var paused: bool = false
|
||||
var editing_mode: bool = true
|
||||
@ -77,8 +80,8 @@ func _ready() -> void:
|
||||
camera.set_visible(false)
|
||||
gun_camera.set_visible(false)
|
||||
hud.set_visible(false)
|
||||
if weapon != null:
|
||||
weapon.set_raycast_origin(camera)
|
||||
if weapons[equipped_weapon] != null:
|
||||
weapons[equipped_weapon].set_raycast_origin(camera)
|
||||
sprite.texture.atlas = hero_class.texture
|
||||
check_left_hand_valid()
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
@ -106,8 +109,16 @@ func _process(delta: float) -> void:
|
||||
if editing_mode:
|
||||
if interaction_raycast.is_colliding() and interaction_raycast.get_collider() is InteractButton:
|
||||
hud.set_hover_text(interaction_raycast.get_collider().hover_text)
|
||||
if !hovering_item or hovering_item != interaction_raycast.get_collider():
|
||||
if hovering_item:
|
||||
hovering_item.disable_hover_effect()
|
||||
hovering_item = interaction_raycast.get_collider()
|
||||
hovering_item.enable_hover_effect()
|
||||
else:
|
||||
hud.unset_hover_text()
|
||||
if hovering_item:
|
||||
hovering_item.disable_hover_effect()
|
||||
hovering_item = null
|
||||
|
||||
if edit_tool.is_looking_at_tower_base:
|
||||
card_sprites[0].view_tower()
|
||||
@ -122,11 +133,21 @@ func _process(delta: float) -> void:
|
||||
currency -= button.press_cost
|
||||
if interaction_raycast.get_collider() is ItemCard:
|
||||
add_card(interaction_raycast.get_collider().pick_up())
|
||||
if Input.is_action_just_pressed("Equip In Gauntlet"):
|
||||
equip_weapon()
|
||||
if Input.is_action_just_pressed("Secondary Fire"):
|
||||
if equipped_card or offhand_card:
|
||||
swap_weapons()
|
||||
#if Input.is_action_just_pressed("Equip In Gauntlet"):
|
||||
# equip_weapon()
|
||||
#if Input.is_action_just_pressed("Secondary Fire"):
|
||||
# if equipped_card or offhand_card:
|
||||
# swap_weapons()
|
||||
if Input.is_action_just_pressed("Equip Primary Weapon"):
|
||||
if weapons[0]:
|
||||
unequip_weapon(0)
|
||||
else:
|
||||
equip_weapon(0)
|
||||
if Input.is_action_just_pressed("Equip Secondary Weapon"):
|
||||
if weapons[1]:
|
||||
unequip_weapon(1)
|
||||
else:
|
||||
equip_weapon(1)
|
||||
if Input.is_action_just_pressed("Select Next Card") and inventory.contents.size() > 1:
|
||||
increment_selected()
|
||||
swap_card_audio.play()
|
||||
@ -137,26 +158,25 @@ func _process(delta: float) -> void:
|
||||
edit_tool.interact_key_held = true
|
||||
if Input.is_action_just_released("Primary Fire"):
|
||||
edit_tool.interact_key_held = false
|
||||
if weapon != null:
|
||||
weapon.release_trigger()
|
||||
weapon.release_second_trigger()
|
||||
if weapons[equipped_weapon] != null:
|
||||
weapons[equipped_weapon].release_trigger()
|
||||
weapons[equipped_weapon].release_second_trigger()
|
||||
else:
|
||||
if weapon and weapons_active:
|
||||
if weapons[equipped_weapon] and weapons_active:
|
||||
if Input.is_action_just_pressed("Primary Fire"):
|
||||
weapon.hold_trigger()
|
||||
weapons[equipped_weapon].hold_trigger()
|
||||
if Input.is_action_just_released("Primary Fire"):
|
||||
weapon.release_trigger()
|
||||
weapons[equipped_weapon].release_trigger()
|
||||
if Input.is_action_pressed("Secondary Fire"):
|
||||
weapon.hold_second_trigger()
|
||||
weapons[equipped_weapon].hold_second_trigger()
|
||||
if Input.is_action_just_released("Secondary Fire"):
|
||||
weapon.release_second_trigger()
|
||||
weapons[equipped_weapon].release_second_trigger()
|
||||
if Input.is_action_pressed("Primary Fire"):
|
||||
movement.can_sprint = false
|
||||
if Input.is_action_pressed("Secondary Fire"):
|
||||
movement.can_sprint = false
|
||||
if Input.is_action_just_pressed("Equip In Gauntlet"):
|
||||
if weapon and offhand_weapon:
|
||||
swap_weapons()
|
||||
swap_weapons()
|
||||
|
||||
if movement.sprinting:
|
||||
movement.zoom_factor -= sprint_zoom_speed * delta
|
||||
@ -214,10 +234,10 @@ func ready_self() -> void:
|
||||
func unready_self() -> void:
|
||||
if ready_state:
|
||||
ready_state = false
|
||||
if !equipped_card:
|
||||
hud.place_icon.set_visible(true)
|
||||
if !offhand_card:
|
||||
hud.swap_icon.set_visible(true)
|
||||
#if !equipped_card:
|
||||
# hud.place_icon.set_visible(true)
|
||||
#if !offhand_card:
|
||||
# hud.swap_icon.set_visible(true)
|
||||
hud.grow_wave_start_label()
|
||||
unready_audio.play()
|
||||
networked_set_ready_state(ready_state)
|
||||
@ -242,7 +262,7 @@ func pause() -> void:
|
||||
|
||||
|
||||
func enter_editing_mode(value: int) -> void:
|
||||
gauntlet_sprite.set_visible(true)
|
||||
gauntlet_sprite.visible = true
|
||||
weapons_active = false
|
||||
hud.set_wave_count(value + 1)
|
||||
hud.set_energy_visible(false)
|
||||
@ -250,30 +270,33 @@ func enter_editing_mode(value: int) -> void:
|
||||
hud.grow_wave_start_label()
|
||||
editing_mode = true
|
||||
edit_tool.enabled = true
|
||||
left_hand.set_visible(true)
|
||||
if weapon:
|
||||
weapon.release_trigger()
|
||||
weapon.set_visible(false)
|
||||
left_hand.visible = true
|
||||
if weapons[equipped_weapon]:
|
||||
weapons[equipped_weapon].release_trigger()
|
||||
weapons[equipped_weapon].visible = false
|
||||
|
||||
|
||||
func exit_editing_mode(value: int) -> void:
|
||||
gauntlet_sprite.set_visible(false)
|
||||
gauntlet_sprite.visible = false
|
||||
weapons_active = false
|
||||
hud.set_wave_count(value)
|
||||
if !weapon and offhand_weapon:
|
||||
swap_weapons()
|
||||
if weapon:
|
||||
#if !weapon and offhand_weapon:
|
||||
# swap_weapons()
|
||||
if weapons[equipped_weapon]:
|
||||
hud.set_energy_visible(true)
|
||||
#weapon.set_visible(false)
|
||||
weapon.current_energy = weapon.max_energy
|
||||
weapon.energy_changed.emit(weapon.current_energy)
|
||||
weapons[equipped_weapon].current_energy = weapons[equipped_weapon].max_energy
|
||||
#this had to be commented out coz the new energy bar thinks "energy changed" is "energy used"
|
||||
#weapons[equipped_weapon].energy_changed.emit(weapons[equipped_weapon].current_energy)
|
||||
var offhand_weapon: Weapon = weapons[0] if equipped_weapon == 1 else weapons[1]
|
||||
if offhand_weapon:
|
||||
hud.set_offhand_energy_visible(true)
|
||||
offhand_weapon.current_energy = offhand_weapon.max_energy
|
||||
offhand_weapon.energy_changed.emit(offhand_weapon.current_energy)
|
||||
#offhand_weapon.energy_changed.emit(offhand_weapon.current_energy)
|
||||
edit_tool.enabled = false
|
||||
edit_tool.delete_tower_preview()
|
||||
left_hand.set_visible(false)
|
||||
left_hand.visible = false
|
||||
hud.unset_hover_text()
|
||||
editing_mode = false
|
||||
weapon_swap_timer.start()
|
||||
|
||||
@ -282,112 +305,129 @@ func check_left_hand_valid() -> void:
|
||||
if !editing_mode:
|
||||
return
|
||||
if inventory.size == 0:
|
||||
left_hand_sprite.set_visible(false)
|
||||
left_hand_sprite.visible = false
|
||||
#gauntlet.texture.region = Rect2(64, 0, 64, 64)
|
||||
else:
|
||||
left_hand_sprite.set_visible(true)
|
||||
left_hand_sprite.visible = true
|
||||
#gauntlet.texture.region = Rect2(0, 0, 64, 64)
|
||||
var selected_card: Card = inventory.contents.keys()[inventory_selected_index]
|
||||
for index: int in card_sprites.size():
|
||||
if index < inventory.contents[selected_card]:
|
||||
card_sprites[index].set_visible(true)
|
||||
card_sprites[index].visible = true
|
||||
card_sprites[index].set_card(selected_card)
|
||||
#card_sprites[index].view_weapon()
|
||||
else:
|
||||
card_sprites[index].set_visible(false)
|
||||
card_sprites[index].visible = false
|
||||
|
||||
|
||||
func equip_weapon() -> void:
|
||||
if weapon != null:
|
||||
func equip_weapon(slot: int = 0) -> void:
|
||||
if weapons[slot] != null:
|
||||
unequip_weapon()
|
||||
return
|
||||
if inventory.size > 0:
|
||||
place_card_audio.play()
|
||||
equipped_card = inventory.remove_at(inventory_selected_index)
|
||||
if !inventory.contents.has(equipped_card):
|
||||
cards[slot] = inventory.remove_at(inventory_selected_index)
|
||||
if !inventory.contents.has(cards[slot]):
|
||||
decrement_selected()
|
||||
weapon = equipped_card.weapon_scene.instantiate()
|
||||
weapon.name = str(weapons_spawn_count)
|
||||
networked_equip_weapon.rpc(Data.cards.find(equipped_card), 0, weapons_spawn_count)
|
||||
weapons[slot] = cards[slot].weapon_scene.instantiate()
|
||||
weapons[slot].name = str(weapons_spawn_count)
|
||||
networked_equip_weapon.rpc(Data.cards.find(cards[slot]), 0, weapons_spawn_count)
|
||||
weapons_spawn_count += 1
|
||||
weapon.energy_changed.connect(hud.set_weapon_energy)
|
||||
weapon.set_multiplayer_authority(multiplayer.get_unique_id())
|
||||
gauntlet_card_1.set_card(equipped_card)
|
||||
hud.place_icon.set_visible(false)
|
||||
gauntlet_card_1.view_weapon()
|
||||
gauntlet_card_1.set_visible(true)
|
||||
weapon.set_hero(self)
|
||||
weapon.set_visible(false)
|
||||
right_hand.add_child(weapon)
|
||||
#weapons[slot].energy_changed.connect(hud.set_weapon_energy.bind(weapons[slot].stats.energy_type))
|
||||
weapons[slot].set_multiplayer_authority(multiplayer.get_unique_id())
|
||||
gauntlet_cards[slot].set_card(cards[slot])
|
||||
if slot == 0:
|
||||
hud.place_icon.visible = false
|
||||
else:
|
||||
hud.swap_icon.visible = false
|
||||
gauntlet_cards[slot].view_weapon()
|
||||
gauntlet_cards[slot].visible = true
|
||||
weapons[slot].set_hero(self)
|
||||
weapons[slot].visible = false
|
||||
right_hand.add_child(weapons[slot])
|
||||
check_left_hand_valid()
|
||||
if slot == 0:
|
||||
weapons[slot].energy_spent.connect(hud.new_energy_bar.use_energy)
|
||||
weapons[slot].energy_recharged.connect(hud.new_energy_bar.gain_energy)
|
||||
hud.new_energy_bar.max_energy = weapons[slot].max_energy
|
||||
if weapons[slot].stats.energy_type == Data.EnergyType.CONTINUOUS:
|
||||
hud.new_energy_bar.enable_progress_bar()
|
||||
if weapons[slot].stats.energy_type == Data.EnergyType.DISCRETE:
|
||||
hud.new_energy_bar.create_discrete_icons(weapons[slot].max_energy)
|
||||
else:
|
||||
weapons[slot].energy_spent.connect(hud.new_energy_bar2.use_energy)
|
||||
weapons[slot].energy_recharged.connect(hud.new_energy_bar2.gain_energy)
|
||||
hud.new_energy_bar2.max_energy = weapons[slot].max_energy
|
||||
if weapons[slot].stats.energy_type == Data.EnergyType.CONTINUOUS:
|
||||
hud.new_energy_bar2.enable_progress_bar()
|
||||
if weapons[slot].stats.energy_type == Data.EnergyType.DISCRETE:
|
||||
hud.new_energy_bar2.create_discrete_icons(weapons[slot].max_energy)
|
||||
|
||||
|
||||
func stow_weapon(slot: int = 0) -> void:
|
||||
weapons[slot].release_trigger()
|
||||
weapons[slot].release_second_trigger()
|
||||
weapons[slot].visible = false
|
||||
weapons[slot].energy_spent.disconnect(hud.new_energy_bar.use_energy)
|
||||
weapons[slot].energy_recharged.disconnect(hud.new_energy_bar.gain_energy)
|
||||
weapons[slot].energy_spent.connect(hud.new_energy_bar2.use_energy)
|
||||
weapons[slot].energy_recharged.connect(hud.new_energy_bar2.gain_energy)
|
||||
hud.set_offhand_energy(weapons[slot].current_energy)
|
||||
hud.new_energy_bar2.max_energy = weapons[slot].max_energy
|
||||
if weapons[slot].stats.energy_type == Data.EnergyType.CONTINUOUS:
|
||||
hud.new_energy_bar2.enable_progress_bar()
|
||||
if weapons[slot].stats.energy_type == Data.EnergyType.DISCRETE:
|
||||
hud.new_energy_bar2.create_discrete_icons(weapons[slot].max_energy)
|
||||
|
||||
|
||||
func show_weapon(slot: int = 0) -> void:
|
||||
weapons[slot].release_trigger()
|
||||
weapons[slot].release_second_trigger()
|
||||
weapons[slot].energy_spent.disconnect(hud.new_energy_bar2.use_energy)
|
||||
weapons[slot].energy_recharged.disconnect(hud.new_energy_bar2.gain_energy)
|
||||
weapons[slot].energy_spent.connect(hud.new_energy_bar.use_energy)
|
||||
weapons[slot].energy_recharged.connect(hud.new_energy_bar.gain_energy)
|
||||
hud.set_weapon_energy(weapons[slot].current_energy, weapons[slot].stats.energy_type)
|
||||
hud.new_energy_bar.max_energy = weapons[slot].max_energy
|
||||
if weapons[slot].stats.energy_type == Data.EnergyType.CONTINUOUS:
|
||||
hud.new_energy_bar.enable_progress_bar()
|
||||
if weapons[slot].stats.energy_type == Data.EnergyType.DISCRETE:
|
||||
hud.new_energy_bar.create_discrete_icons(weapons[slot].max_energy)
|
||||
|
||||
|
||||
func swap_weapons() -> void:
|
||||
if !editing_mode:
|
||||
weapons_active = false
|
||||
if weapon or offhand_weapon:
|
||||
if editing_mode:
|
||||
swap_card_audio.play()
|
||||
else:
|
||||
swap_off_audio.play()
|
||||
if !weapons[0] and !weapons[1]:
|
||||
return
|
||||
weapons_active = false
|
||||
swap_off_audio.play()
|
||||
hud.audio_guard = true
|
||||
var temp: Weapon = offhand_weapon
|
||||
var temp_card: Card = offhand_card
|
||||
if weapon:
|
||||
offhand_weapon = weapon
|
||||
offhand_card = equipped_card
|
||||
offhand_weapon.set_visible(false)
|
||||
offhand_weapon.energy_changed.disconnect(hud.set_weapon_energy)
|
||||
offhand_weapon.energy_changed.connect(hud.set_offhand_energy)
|
||||
offhand_weapon.energy_changed.emit(offhand_weapon.current_energy)
|
||||
offhand_weapon.release_trigger()
|
||||
offhand_weapon.release_second_trigger()
|
||||
gauntlet_card_2.set_card(offhand_card)
|
||||
gauntlet_card_2.view_weapon()
|
||||
gauntlet_card_2.set_visible(true)
|
||||
hud.swap_icon.set_visible(false)
|
||||
else:
|
||||
offhand_weapon = null
|
||||
offhand_card = null
|
||||
gauntlet_card_2.set_visible(false)
|
||||
hud.swap_icon.set_visible(true)
|
||||
if temp:
|
||||
weapon = temp
|
||||
equipped_card = temp_card
|
||||
weapon.energy_changed.disconnect(hud.set_offhand_energy)
|
||||
weapon.energy_changed.connect(hud.set_weapon_energy)
|
||||
weapon.energy_changed.emit(weapon.current_energy)
|
||||
weapon.release_trigger()
|
||||
weapon.release_second_trigger()
|
||||
gauntlet_card_1.set_card(equipped_card)
|
||||
gauntlet_card_1.view_weapon()
|
||||
gauntlet_card_1.set_visible(true)
|
||||
hud.place_icon.set_visible(false)
|
||||
else:
|
||||
weapon = null
|
||||
equipped_card = null
|
||||
gauntlet_card_1.set_visible(false)
|
||||
hud.place_icon.set_visible(true)
|
||||
if !editing_mode:
|
||||
weapon_swap_timer.start()
|
||||
stow_weapon(equipped_weapon)
|
||||
equipped_weapon = 0 if equipped_weapon == 1 else 1
|
||||
show_weapon(equipped_weapon)
|
||||
weapon_swap_timer.start()
|
||||
|
||||
|
||||
func _on_timer_timeout() -> void:
|
||||
weapons_active = true
|
||||
if weapon:
|
||||
if weapons[equipped_weapon]:
|
||||
swap_on_audio.play()
|
||||
weapon.set_visible(true)
|
||||
weapons[equipped_weapon].visible = true
|
||||
|
||||
|
||||
func unequip_weapon() -> void:
|
||||
networked_unequip_weapon.rpc(0)
|
||||
gauntlet_card_1.set_visible(false)
|
||||
hud.place_icon.set_visible(true)
|
||||
func unequip_weapon(slot: int = 0) -> void:
|
||||
networked_unequip_weapon.rpc(slot)
|
||||
gauntlet_cards[slot].visible = false
|
||||
if slot == 0:
|
||||
hud.place_icon.visible = true
|
||||
hud.new_energy_bar.blank()
|
||||
else:
|
||||
hud.swap_icon.visible = true
|
||||
hud.new_energy_bar2.blank()
|
||||
#gauntlet_sprite.set_visible(true)
|
||||
weapon.queue_free()
|
||||
weapon = null
|
||||
inventory.add(equipped_card)
|
||||
equipped_card = null
|
||||
weapons[slot].queue_free()
|
||||
weapons[slot] = null
|
||||
inventory.add(cards[slot])
|
||||
cards[slot] = null
|
||||
place_card_audio.play()
|
||||
check_left_hand_valid()
|
||||
|
||||
@ -400,20 +440,7 @@ func networked_set_ready_state(state: bool) -> void:
|
||||
|
||||
@rpc("reliable")
|
||||
func networked_swap_weapon() -> void:
|
||||
var temp: Weapon = offhand_weapon
|
||||
var temp_card: Card = offhand_card
|
||||
if weapon:
|
||||
offhand_weapon = weapon
|
||||
offhand_card = equipped_card
|
||||
else:
|
||||
offhand_weapon = null
|
||||
offhand_card = null
|
||||
if temp:
|
||||
weapon = temp
|
||||
equipped_card = temp_card
|
||||
else:
|
||||
weapon = null
|
||||
equipped_card = null
|
||||
swap_weapons()
|
||||
|
||||
|
||||
@rpc("reliable")
|
||||
@ -424,23 +451,12 @@ func networked_equip_weapon(card_index: int, slot: int, id: int) -> void:
|
||||
new_weapon.name = str(id)
|
||||
new_weapon.set_hero(self)
|
||||
right_hand.add_child(new_weapon)
|
||||
match slot:
|
||||
0:
|
||||
equipped_card = new_card
|
||||
weapon = new_weapon
|
||||
1:
|
||||
offhand_card = new_card
|
||||
offhand_weapon = new_weapon
|
||||
cards[slot] = new_card
|
||||
weapons[slot] = new_weapon
|
||||
|
||||
|
||||
@rpc("reliable")
|
||||
func networked_unequip_weapon(slot: int) -> void:
|
||||
match slot:
|
||||
0:
|
||||
weapon.queue_free()
|
||||
weapon = null
|
||||
equipped_card = null
|
||||
1:
|
||||
offhand_weapon.queue_free()
|
||||
offhand_weapon = null
|
||||
offhand_card = null
|
||||
weapons[slot].queue_free()
|
||||
weapons[slot] = null
|
||||
cards[slot] = null
|
||||
|
Reference in New Issue
Block a user