Spawn random unit powerup

This commit is contained in:
Kienan Stewart 2022-04-03 17:26:11 -04:00
parent 6a62c84595
commit f279ac3f54
2 changed files with 42 additions and 17 deletions

View File

@ -1,5 +1,3 @@
1. Power ups
* spawn a new random piece powerup
2. Visual polish
* a visual / title in the left sidebar
* multiple square tiles to add variation

View File

@ -261,7 +261,7 @@ func _ready():
get_node("/root/Game/EndMenu/VBoxContainer/Fail Game").connect("pressed", self, "_on_fail_game")
get_node("/root/Game/EndMenu/VBoxContainer/Win Game").connect("pressed", self, "_on_win_game")
get_node("/root/Game/PanelRight/VBox/PieceInfo").connect("stat_change_requested", self, "_on_piece_stat_change_requested")
get_node("/root/Game/PanelRight/VBox/PieceInfo/Vbox/Powerup").connect("pressed", self, "try_spawn_powerup")
get_node("/root/Game/PanelRight/VBox/PieceInfo/Vbox/Powerup").connect("pressed", self, "try_spawn_powerup", [true])
reset_game_state()
func _on_piece_stat_change_requested(piece, attribute, value):
@ -271,7 +271,7 @@ func _on_piece_stat_change_requested(piece, attribute, value):
func _input(ev):
if Input.is_action_just_pressed("ui_cancel"):
print(ev)
#print(ev)
self._on_escape(false, "Paused")
func _on_escape(force_visible = false, message = null):
@ -297,7 +297,8 @@ func reset_game_state():
self.turn = 0
for p in get_tree().get_nodes_in_group("pieces"):
p.queue_free()
for p in get_tree().get_nodes_in_group("powerup"):
p.queue_free()
self.board_squares = {}
var x = 0;
var y = 0;
@ -452,7 +453,7 @@ func _on_new_turn():
if self.reinforcements == null and not just_spawned:
var chance = lerp(0, 50, 1 - float(opponent_pieces.size())/16.0)
var i = self.rng.randi() % 100
print("Roll for reinforcements ", i, " < ", chance)
#print("Roll for reinforcements ", i, " < ", chance)
if i < chance:
self.reinforcements = 2
self.reinforcements_size = 1
@ -555,6 +556,9 @@ func _process(delta):
for m in moves:
if m.has("target"):
priority_moves.append(m)
continue
if self.board_squares[m['pos']]['powerup'] != null:
priority_moves.append(m)
if not priority_moves.empty():
# @TODO Check for the most "valuable" piece to take
var i = self.rng.randi() % (priority_moves.size())
@ -585,7 +589,7 @@ func _physics_process(delta):
var s = null
for m in matches:
if m["collider"].get_parent() is Square:
print(m["collider"].get_parent())
#print(m["collider"].get_parent())
s = m["collider"].get_parent()
if s == null:
# No valid position, we'll return the piece to where it should be
@ -599,7 +603,7 @@ func _physics_process(delta):
if pf.squares[k].get_ref() == s:
dest = k
if dest != null:
print(dest)
#print(dest)
var dest_valid = false;
for m in moves:
if m['pos'] == dest:
@ -708,8 +712,7 @@ var available_powerups = {
# @TODO remove attack_only from pawn
# @TODO choose a new movement pattern
}
func try_spawn_powerup():
print('blah')
func try_spawn_powerup(var force = false):
var try = 0
var i = null
var sq = null
@ -724,7 +727,8 @@ func try_spawn_powerup():
return
i = null
var c = self.rng.randi() % 100
print("Chance: ", c)
if force:
c = self.rng.randi() % 46 + 55
for k in self.available_powerups.keys():
if c >= k:
i = k
@ -751,13 +755,36 @@ func try_spawn_powerup():
func apply_powerup_to_piece(square):
print("Applying powerup ", square['powerup'], " to piece ", square['piece'])
# @TODO Play a sound
if square['powerup'].target_attribute == "special":
print("Special powerups not implemented yet")
var powerup = square['powerup']
if powerup.target_attribute == "special":
if powerup.target_value == "spawn_unit":
var for_opponent = true
var group = "opponent"
if square['piece'].is_in_group("player"):
for_opponent = false
group = "player"
var coords = choose_reinforcements(1, for_opponent, false)
for c in coords:
square = self.board_squares[c]
new_piece(square['reinforcement'], group, c)
square = self.board_squares[c]
if self.reinforcement_buff != null:
square['piece'].damage += self.reinforcement_buff
square['piece'].movement += self.reinforcement_buff
square['piece'].health += self.reinforcement_buff
if self.reinforcement_buff > 5:
square['piece'].jump = true
else:
if square['powerup'].target_value == "increase":
var value = square['piece'].get(square['powerup'].target_attribute) + 1
square['piece'].set(square['powerup'].target_attribute, value)
print("Unknown special powerup: ", powerup.target_value)
else:
if powerup.target_value == "increase":
var value = square['piece'].get(powerup.target_attribute) + 1
square['piece'].set(powerup.target_attribute, value)
elif powerup.target_value == "set_true":
square['piece'].set(powerup.target_attribute, true)
else:
print("Unknown value type: ", powerup.target_value)
if square['piece'] == self.selected_piece:
get_node("/root/Game/PanelRight/VBox/PieceInfo").set_piece_info(square['piece'])
square['powerup'].queue_free()
powerup.queue_free()
square['powerup'] = null