mirror of
https://github.com/git-learning-game/oh-my-git.git
synced 2024-11-22 16:20:19 +01:00
201 lines
4.8 KiB
GDScript
201 lines
4.8 KiB
GDScript
extends Control
|
|
|
|
var cards = [
|
|
# {
|
|
# "command": 'git add .',
|
|
# "arg_number": 0,
|
|
# "description": "Add all files in the working directory to the index.",
|
|
# "energy": 1
|
|
# },
|
|
#
|
|
# {
|
|
# "command": 'touch "file$RANDOM"',
|
|
# "arg_number": 0,
|
|
# "description": "Create a new file.",
|
|
# "energy": 2
|
|
# },
|
|
# {
|
|
# "command": 'git checkout -b "$RANDOM"',
|
|
# "arg_number": 0,
|
|
# "description": "Create a new branch and switch to it.",
|
|
# "energy": 2
|
|
# },
|
|
# {
|
|
# "command": 'git merge',
|
|
# "arg_number": 1,
|
|
# "description": "Merge specified commit into HEAD.",
|
|
# "energy": 1
|
|
# },
|
|
# {
|
|
# "command": 'git commit --allow-empty -m "$RANDOM"',
|
|
# "arg_number": 0,
|
|
# "description": "Add a new commit under HEAD.",
|
|
# "energy": 1
|
|
# },
|
|
{
|
|
"command": 'git checkout',
|
|
"arg_number": 1,
|
|
"description": "Travel to a commit!",
|
|
#"description": "Point HEAD to a branch or commit, and update the index and the working directory.",
|
|
"energy": 1
|
|
},
|
|
{
|
|
"command": 'git add .; git commit',
|
|
"arg_number": 0,
|
|
"description": "Make a new commit!",
|
|
"energy": 1
|
|
},
|
|
# {
|
|
# "command": 'git branch new',
|
|
# "arg_number": 1,
|
|
# "description": "Create a new timeline.",
|
|
# "energy": 1
|
|
# },
|
|
{
|
|
"command": 'git merge',
|
|
"arg_number": 1,
|
|
"description": "Merge the specified timeline into yours.",
|
|
"energy": 1
|
|
},
|
|
{
|
|
"command": 'git rebase',
|
|
"arg_number": 1,
|
|
"description": "Put the events in your current timeline on top of the specified one.",
|
|
"energy": 1
|
|
},
|
|
{
|
|
"command": 'git pull',
|
|
"arg_number": 0,
|
|
"description": "Get timelines from a colleague.",
|
|
"energy": 1
|
|
},
|
|
{
|
|
"command": 'git push',
|
|
"arg_number": 0,
|
|
"description": "Give timelines to a colleague.",
|
|
"energy": 1
|
|
},
|
|
{
|
|
"command": 'git rebase -i',
|
|
"arg_number": 1,
|
|
"description": "Make changes to the events in your current timeline, back to the commit you drag this to.",
|
|
"energy": 1
|
|
},
|
|
{
|
|
"command": 'git reset --hard',
|
|
"arg_number": 1,
|
|
"description": "Reset current label to the specified commit.",
|
|
"energy": 1
|
|
},
|
|
{
|
|
"command": 'git cherry-pick',
|
|
"arg_number": 1,
|
|
"description": "Repeat the specified action on top of your current timeline.",
|
|
"energy": 1
|
|
},
|
|
# {
|
|
# "command": 'git update-ref -d',
|
|
# "arg_number": 1,
|
|
# "description": "Delete a ref.",
|
|
# "energy": 1
|
|
# },
|
|
# {
|
|
# "command": 'git reflog expire --expire=now --all; git prune',
|
|
# "arg_number": 0,
|
|
# "description": "Delete all unreferenced objects.",
|
|
# "energy": 1
|
|
# },
|
|
# {
|
|
# "command": 'git rebase',
|
|
# "arg_number": 1,
|
|
# "description": "Rebase current branch on top of specified commit.",
|
|
# "energy": 1
|
|
# },
|
|
# {
|
|
# "command": 'git push -f',
|
|
# "arg_number": 0,
|
|
# "description": "Push current branch to the remote, overwriting existing commits. Will make everyone angry.",
|
|
# "energy": 3
|
|
# },
|
|
# {
|
|
# "command": 'git pull',
|
|
# "arg_number": 0,
|
|
# "description": "Pull current branch from the remote.",
|
|
# "energy": 2
|
|
# },
|
|
]
|
|
|
|
func _ready():
|
|
redraw_all_cards()
|
|
arrange_cards()
|
|
pass
|
|
|
|
func _process(_delta):
|
|
if $Energy:
|
|
$Energy.text = str(game.energy)
|
|
|
|
func draw_rand_card():
|
|
var deck = []
|
|
|
|
for card in cards:
|
|
deck.push_back(card)
|
|
|
|
# We want a lot of commit and checkout cards!
|
|
for _i in range(5):
|
|
deck.push_back(cards[0])
|
|
deck.push_back(cards[1])
|
|
|
|
var card = deck[randi() % deck.size()]
|
|
draw_card(card)
|
|
|
|
func draw_card(card):
|
|
var new_card = preload("res://scenes/card.tscn").instance()
|
|
|
|
new_card.command = card.command
|
|
new_card.arg_number = card.arg_number
|
|
new_card.description = card.description
|
|
new_card.energy = 0 #card.energy
|
|
new_card.position = Vector2(rect_size.x, rect_size.y*2)
|
|
add_child(new_card)
|
|
arrange_cards()
|
|
|
|
func arrange_cards():
|
|
var t = Timer.new()
|
|
t.wait_time = 0.05
|
|
add_child(t)
|
|
t.start()
|
|
yield(t, "timeout")
|
|
|
|
var amount_cards = get_tree().get_nodes_in_group("cards").size()
|
|
var total_angle = min(50, 45.0/7*amount_cards)
|
|
var angle_between_cards = 0
|
|
if amount_cards > 1:
|
|
angle_between_cards = total_angle / (amount_cards-1)
|
|
|
|
var current_angle = -total_angle/2
|
|
for card in get_tree().get_nodes_in_group("cards"):
|
|
var target_position = Vector2(rect_size.x/2, rect_size.y + 1500)
|
|
var target_rotation = current_angle
|
|
var translation_vec = Vector2(0,-1500).rotated(current_angle/180.0*PI)
|
|
target_position += translation_vec
|
|
current_angle += angle_between_cards
|
|
card._home_position = target_position
|
|
card._home_rotation = target_rotation
|
|
|
|
var tween = Tween.new()
|
|
tween.interpolate_property(card, "position", card.position, target_position, 0.5, Tween.TRANS_CUBIC, Tween.EASE_IN_OUT)
|
|
tween.interpolate_property(card, "rotation_degrees", card.rotation_degrees, target_rotation, 0.5, Tween.TRANS_CUBIC, Tween.EASE_IN_OUT)
|
|
add_child(tween)
|
|
tween.start()
|
|
|
|
func redraw_all_cards():
|
|
game.energy = 5
|
|
|
|
for card in get_tree().get_nodes_in_group("cards"):
|
|
card.queue_free()
|
|
|
|
for card in cards:
|
|
draw_card(card)
|
|
|
|
func add_card(command):
|
|
draw_card({"command": command, "description": "", "arg_number": 0, "energy": 0})
|