fixed supernova UI
This commit is contained in:
parent
7ec39b6c28
commit
19e75c60f9
2 changed files with 43 additions and 54 deletions
|
|
@ -51,8 +51,17 @@ func update_duration():
|
||||||
remaining_turns -= 1
|
remaining_turns -= 1
|
||||||
if remaining_turns <= 0:
|
if remaining_turns <= 0:
|
||||||
remove_effect()
|
remove_effect()
|
||||||
|
burn_or()
|
||||||
|
|
||||||
|
|
||||||
|
func burn_or():
|
||||||
|
|
||||||
|
match rank:
|
||||||
|
Rank.RANK_0: burned = true
|
||||||
|
Rank.RANK_1: burned = true
|
||||||
|
Rank.RANK_2: pass
|
||||||
|
Rank.RANK_3: pass
|
||||||
|
return true
|
||||||
func modify_moves() -> Dictionary:
|
func modify_moves() -> Dictionary:
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,19 @@
|
||||||
class_name SupernovaCard extends Card
|
class_name SupernovaCard extends Card
|
||||||
|
|
||||||
const CAPTURE_RADIUS = 4
|
const CAPTURE_RADIUS = 3
|
||||||
|
var started = false;
|
||||||
func _init():
|
func _init():
|
||||||
duration = 5
|
duration = 5
|
||||||
super._init()
|
super._init()
|
||||||
cardName = "Supernova"
|
cardName = "Supernova"
|
||||||
rank = Rank.RANK_0
|
rank = Rank.RANK_0
|
||||||
effectType = EffectType.PIECE_EFFECT
|
effectType = EffectType.PIECE_EFFECT
|
||||||
description = "All enemy units within 4 radius are captured"
|
description = "All enemy units within 3 radius are captured"
|
||||||
unitWhitelist = ["King"]
|
unitWhitelist = ["King"]
|
||||||
|
remaining_turns = duration
|
||||||
|
|
||||||
func apply_effect(target_piece = null, board_flow = null, game_state = null):
|
func apply_effect(target_piece = null, board_flow = null, game_state = null):
|
||||||
print(cardName, " APPLY EFFECT ")
|
print(cardName, " APPLY EFFECT ")
|
||||||
# if !super.apply_effect(target_piece, board_flow, game_state):
|
|
||||||
# print(cardName, " super apply false ")
|
|
||||||
# return false
|
|
||||||
|
|
||||||
remaining_turns = duration
|
|
||||||
attached_piece = target_piece
|
attached_piece = target_piece
|
||||||
if !target_piece or !board_flow or !game_state:
|
if !target_piece or !board_flow or !game_state:
|
||||||
print(cardName, " missing input param ")
|
print(cardName, " missing input param ")
|
||||||
|
|
@ -28,82 +24,71 @@ func apply_effect(target_piece = null, board_flow = null, game_state = null):
|
||||||
var king_x = int(king_pos[0])
|
var king_x = int(king_pos[0])
|
||||||
var king_y = int(king_pos[1])
|
var king_y = int(king_pos[1])
|
||||||
|
|
||||||
# Collect all tiles within radius to check
|
# Calculate tiles as before...
|
||||||
var tiles_to_check = []
|
var tiles_to_check = []
|
||||||
|
|
||||||
# Check in all directions (up, down, left, right and diagonals)
|
|
||||||
for dx in range(-CAPTURE_RADIUS, CAPTURE_RADIUS + 1):
|
for dx in range(-CAPTURE_RADIUS, CAPTURE_RADIUS + 1):
|
||||||
for dy in range(-CAPTURE_RADIUS, CAPTURE_RADIUS + 1):
|
for dy in range(-CAPTURE_RADIUS, CAPTURE_RADIUS + 1):
|
||||||
# Skip if outside Manhattan distance
|
|
||||||
if abs(dx) + abs(dy) > CAPTURE_RADIUS:
|
if abs(dx) + abs(dy) > CAPTURE_RADIUS:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Calculate target coordinates
|
|
||||||
var target_x = king_x + dx
|
var target_x = king_x + dx
|
||||||
var target_y = king_y + dy
|
var target_y = king_y + dy
|
||||||
|
|
||||||
# Skip if outside board bounds
|
|
||||||
if target_x < 0 or target_x >= 8 or target_y < 0 or target_y >= 8:
|
if target_x < 0 or target_x >= 8 or target_y < 0 or target_y >= 8:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Skip king's own position
|
|
||||||
if dx == 0 and dy == 0:
|
if dx == 0 and dy == 0:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Add tile to check list
|
|
||||||
tiles_to_check.append(str(target_x) + "-" + str(target_y))
|
tiles_to_check.append(str(target_x) + "-" + str(target_y))
|
||||||
|
|
||||||
print(tiles_to_check)
|
# Process tiles and add overlay
|
||||||
# reset_tile_styles(board_flow, tiles_to_check)
|
|
||||||
# Process each tile and capture pieces
|
|
||||||
for tile_name in tiles_to_check:
|
for tile_name in tiles_to_check:
|
||||||
var tile = board_flow.get_node(tile_name)
|
var tile = board_flow.get_node(tile_name)
|
||||||
var style = StyleBoxFlat.new()
|
|
||||||
style.bg_color = Color(1, 0, 0, 0.3) # Red tint
|
|
||||||
tile.remove_theme_stylebox_override("normal")
|
|
||||||
tile.add_theme_stylebox_override("normal", style)
|
|
||||||
|
|
||||||
if tile.get_child_count() > 0:
|
# Remove any existing overlay
|
||||||
var piece = tile.get_child(0)
|
var existing_overlay = tile.get_node_or_null("SupernovaOverlay")
|
||||||
# print("Process", piece.name, " | ", piece.Item_Color, " | ", target_piece.Item_Color)
|
if existing_overlay:
|
||||||
if piece.Item_Color != target_piece.Item_Color: # Only capture enemy pieces
|
existing_overlay.queue_free()
|
||||||
|
|
||||||
|
# Create new overlay
|
||||||
|
var overlay = ColorRect.new()
|
||||||
|
overlay.name = "SupernovaOverlay"
|
||||||
|
overlay.color = Color(1, 0, 0, 0.3)
|
||||||
|
overlay.size = tile.size
|
||||||
|
overlay.mouse_filter = Control.MOUSE_FILTER_IGNORE # Make sure overlay doesn't block input
|
||||||
|
tile.add_child(overlay)
|
||||||
|
overlay.show()
|
||||||
|
|
||||||
|
# Handle piece capture
|
||||||
|
if tile.get_child_count() > 1: # > 1 because we just added the overlay
|
||||||
|
var piece = tile.get_child(0) # Piece should still be first child
|
||||||
|
if piece.Item_Color != target_piece.Item_Color:
|
||||||
game_state.updatePoints(piece)
|
game_state.updatePoints(piece)
|
||||||
piece.queue_free()
|
piece.queue_free()
|
||||||
|
|
||||||
|
# Setup timer to remove overlays
|
||||||
var timer = Timer.new()
|
var timer = Timer.new()
|
||||||
board_flow.add_child(timer)
|
board_flow.add_child(timer)
|
||||||
timer.wait_time = 0.5
|
timer.wait_time = 0.5
|
||||||
timer.one_shot = true
|
timer.one_shot = true
|
||||||
timer.timeout.connect(func():
|
timer.timeout.connect(func():
|
||||||
reset_tile_styles(board_flow, tiles_to_check)
|
for tile_name in tiles_to_check:
|
||||||
|
var tile = board_flow.get_node(tile_name)
|
||||||
|
var overlay = tile.get_node_or_null("SupernovaOverlay")
|
||||||
|
if overlay:
|
||||||
|
overlay.queue_free()
|
||||||
timer.queue_free()
|
timer.queue_free()
|
||||||
)
|
)
|
||||||
timer.start()
|
timer.start()
|
||||||
# Visual feedback
|
|
||||||
# for tile_name in tiles_to_check:
|
setup_persistent_effect(game_state)
|
||||||
# var tile = board_flow.get_node(tile_name)
|
|
||||||
# var style = StyleBoxFlat.new()
|
|
||||||
# style.bg_color = Color(1, 0, 0, 0.3) # Red tint
|
|
||||||
# tile.add_theme_stylebox_override("normal", style)
|
|
||||||
|
|
||||||
# var timer = Timer.new()
|
|
||||||
# board_flow.add_child(timer)
|
|
||||||
# timer.wait_time = 0.5
|
|
||||||
# timer.one_shot = true
|
|
||||||
# timer.timeout.connect(func():
|
|
||||||
# tile.remove_theme_stylebox_override("normal")
|
|
||||||
# timer.queue_free()
|
|
||||||
# )
|
|
||||||
# timer.start()
|
|
||||||
setup_persistent_effect(game_state);
|
|
||||||
# game_state.stateMachine.transitionToNextState(Constants.POST_MOVE)
|
|
||||||
return true
|
return true
|
||||||
|
|
||||||
func reset_tile_styles(board_flow, tiles_to_check):
|
func reset_tile_styles(board_flow, tiles_to_check):
|
||||||
for tile_name in tiles_to_check:
|
for tile_name in tiles_to_check:
|
||||||
var tile = board_flow.get_node(tile_name)
|
var tile = board_flow.get_node(tile_name)
|
||||||
if !tile:
|
if !tile:
|
||||||
print("continue")
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Reset to original chess board pattern
|
# Reset to original chess board pattern
|
||||||
|
|
@ -135,11 +120,6 @@ func on_turn_changed():
|
||||||
|
|
||||||
# Now try apply_effect with these values
|
# Now try apply_effect with these values
|
||||||
apply_effect(piece, flow, state)
|
apply_effect(piece, flow, state)
|
||||||
remaining_turns -= 1
|
|
||||||
if remaining_turns <= 0:
|
|
||||||
remove_effect()
|
|
||||||
else:
|
|
||||||
burned = true
|
|
||||||
|
|
||||||
func remove_effect():
|
func remove_effect():
|
||||||
if attached_piece:
|
if attached_piece:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue