From 13bdabe15614a97226cf812f1de8379360e35ec3 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Sun, 19 Apr 2020 10:18:22 +0200 Subject: [PATCH 01/13] aStar implementation with todos --- src/Overlap/AI/AI_Hero.gd | 208 +++++++++++++++++++++++++++++++++ src/Overlap/AI/prio_queue.gd | 53 +++++++++ src/Overlap/Stats/player_ai.gd | 97 --------------- src/World.tscn | 10 +- 4 files changed, 266 insertions(+), 102 deletions(-) create mode 100644 src/Overlap/AI/AI_Hero.gd create mode 100644 src/Overlap/AI/prio_queue.gd delete mode 100644 src/Overlap/Stats/player_ai.gd diff --git a/src/Overlap/AI/AI_Hero.gd b/src/Overlap/AI/AI_Hero.gd new file mode 100644 index 0000000..776019c --- /dev/null +++ b/src/Overlap/AI/AI_Hero.gd @@ -0,0 +1,208 @@ +extends Node +const PrioQueue = preload("prio_queue.gd") # Relative pat + +enum{ + BOSS, + TORCH, + MINION, + RED, + BLUE, + GREEN, + HEART, + BONFIRE, + BARREL, + TERMINAL_SYMBOL +} + +enum{ + LENGTH, + WAY +} + +enum{ + DAMAGE, + SLOW, + WALL, + FIELD +} + +enum{ + STEP, + ROLL, + NOTHING +} + +var Grid = [] +var used_Flags = [] + +var numbers = [0,0,0,0,0,0,0,0,0] +var prios = [7,6,5,4,3,2,0,0,4] + +var totalPrioTurn = 0 +var executesTurn = false +var abortProb = 0.01 + +#calculates the sum of all present prios +func calcTotalPrio(): + var sum = 0 + var i = BOSS + while i != TERMINAL_SYMBOL: + if(numbers[i]>0): + sum += prios[i] + i=i+1 + return sum + +#calculates the relative porio +func calcRelPrio(index, sum): + return prios[index]/sum + +#calucaltes the prio table of all enemies[0,1) +func calcPrioTable(): + var table = [0,0,0,0,0,0,0,0,0] + var lower = 0 + var sum = calcTotalPrio() + + var i = 0; + while i != TERMINAL_SYMBOL: + lower += calcRelPrio(i, sum) + table[i] = lower + i = i+1 + + return table + +#updates heart and bonfire prio +func adjustPrio(currentHealth, maxHealth): + var prioVal = 10 - (currentHealth/maxHealth)*10 + var bonfire = prioVal + var hearts = prioVal -1 + if(hearts < 0): + hearts = 0 + prios[BONFIRE]=bonfire + prios[HEART]=hearts + +#return the enemie which will be attacked +func calcEnemie(): + var table = calcPrioTable() + var number = randf() + var i = TERMINAL_SYMBOL-1 + while table[i] > number: + i=i-1 + return i + +#returns a move +func getMoveDescription(myPosition : Vector2, targetPositions): + var way = AStar(myPosition, targetPositions[0]) + + #TODO choose enemie with loest distance + return 0 + + +func getFieldState(position): + pass + +func getCost(position): + # var cost = 0 + # for i in Feld[position.x][position.y]: + # match i: + # DAMAGE : cost += damage*prios[BONFIRE]*3 + # SLOW : cost += 2 + # + #return cost + return 0 + +#return an heurestic of distance +# curr - current position +# targ - atarget position +func h(curr, targ): + return min(abs(target[0]-curr[0]),abs(target[0]-curr[0])) + +# currCost - currentCost +# position - position of the field to move to +func g(currCost, position): + return curr + getCost(position) + +#returns the list of adjacent nodes +func adjacent(currentPosition): + var adj := [] + #adj.append([STEP, Vector2(0,0)]) + var p = currentPosition + var pot_adj_step = [[p[0]-1, p[1]-1], [p[0]-1, p[1]-0], [p[0]-1, p[1]+1], + [p[0]+0, p[1]-1], [p[0]+0, p[1]+1], + [p[0]+1, p[1]-1], [p[0]+1, p[1]+0], [p[0]+1, p[1]+1]] + + var pot_adj_roll = [[p[0]-2, p[1]-2], [p[0]-2, p[1]-0], [p[0]-2, p[1]+2], + [p[0]+0, p[1]-2], [p[0]+0, p[1]+2], + [p[0]+2, p[1]-2], [p[0]+2, p[1]+0], [p[0]+2, p[1]+2]] + + for next in pot_adj_step: + if(next[0]<0): + continue + if(next[0]>13): + continue + if(next[1]<0): + continue + if(next[1]>6): + continue + if(used_Flags[next[0]][next[1]]==true): + continue + if(Grid[next[0]][next[1]][0]!=WALL): + adj.append([STEP, Vector2(next[0],next[1])]) + + for next in pot_adj_roll: + if(next[0]<0): + continue + if(next[0]>13): + continue + if(next[1]<0): + continue + if(next[1]>6): + continue + if(used_Flags[next[0]][next[1]]==true): + continue + if(Grid[next[0]][next[1]][0]!=WALL): + adj.append([ROLL, Vector2(next[0],next[1])]) + + return adj + + + +func AStar(source, target): + #swap rtarget and source, when target source istr reached, do inversxse step + # node layout [g+h(x), g(x), current, from, kind] + var tmp = source + source = target + target = tmp + + var Q = PrioQueue.new() + Q.insert([0,0, [source[0], source[1]]]) + while !Q.empty(): + var node = Q.delMin() + + #check if reached + if(node[2][0]==target[0] and node[2][1]==target[1]): + return [node[4], 0]#todo map movement] + + #set flag + used_Flags[current[0]][current[1]] = true + var adj_list = adjacent(node[2]) + for i in adj_ist: + var move_cost = 0 + if(i[0]==STEP): + move_cost = 1 + else: + rmove_cost = 2 + + + + return [NOTHING, 0] + +# Called when the node enters the scene tree for the first time. +func _ready(): + + + + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass diff --git a/src/Overlap/AI/prio_queue.gd b/src/Overlap/AI/prio_queue.gd new file mode 100644 index 0000000..b428bf9 --- /dev/null +++ b/src/Overlap/AI/prio_queue.gd @@ -0,0 +1,53 @@ +extends Node + +# Priority Queue implementation with binary heap +var heaplist +var currentSize + +# node layout [g+h(x), g(x), position] + +func _init(): + heaplist = [[0]] + currentSize = 0 + +func percUp(i): + while floor(i / 2) > 0: + if heaplist[i][0] < heaplist[floor(i / 2)][0]: + var tmp = heaplist[floor(i / 2)] + heaplist[floor(i / 2)] = heaplist[i] + heaplist[i] = tmp + i = floor(i / 2) + +func insert(k): + heaplist.append(k) + currentSize += 1 + percUp(currentSize) + +func percDown(i): + while (i * 2) <= currentSize: + var mc = minChild(i) + if heaplist[i][0] > heaplist[mc][0]: + var tmp = heaplist[i] + heaplist[i] = heaplist[mc] + heaplist[mc] = tmp + i = mc + +func minChild(i): + if i * 2 + 1 > currentSize: + return i * 2 + else: + if heaplist[i*2][0] < heaplist[i*2+1][0]: + return i * 2 + else: + return i * 2 + 1 + +func delMin(): + var retval = heaplist[1] + heaplist[1] = heaplist[currentSize] + heaplist.remove(currentSize - 1) + currentSize -= 1 + percDown(1) + return retval + +func empty(): + return currentSize < 1 diff --git a/src/Overlap/Stats/player_ai.gd b/src/Overlap/Stats/player_ai.gd deleted file mode 100644 index a176ec4..0000000 --- a/src/Overlap/Stats/player_ai.gd +++ /dev/null @@ -1,97 +0,0 @@ -extends Node - -enum{ - BOSS, - TORCH, - MINION, - RED, - BLUE, - GREEN, - HEART, - BONFIRE, - BARREL, - TERMINAL_SYMBOL -} - -enum{ - LENGTH, - WAY -} - -var numbers = [0,0,0,0,0,0,0,0,0] -var prios = [7,6,5,4,3,2,0,0,4] - -var totalPrioTurn = 0 -var executesTurn = false -var abortProb = 0.01 - -func calcTotalPrio(): - var sum = 0 - var i = BOSS - while i != TERMINAL_SYMBOL: - if(numbers[i]>0): - sum += prios[i] - i=i+1 - return sum - -func calcRelPrio(index, sum): - return prios[index]/sum - -func calcPrioTable(): - var table = [0,0,0,0,0,0,0,0,0] - var lower = 0 - var sum = calcTotalPrio() - - var i = 0; - while i != TERMINAL_SYMBOL: - lower += calcRelPrio(i, sum) - table[i] = lower - i = i+1 - - return table - -func adjustPrio(currentHealth, maxHealth): - var prioVal = 10 - (currentHealth/maxHealth)*10 - var bonfire = prioVal - var hearts = prioVal -1 - if(hearts < 0): - hearts = 0 - prios[BONFIRE]=bonfire - prios[HEART]=hearts - -func calcEnemie(): - var table = calcPrioTable() - var number = randf() - var i = TERMINAL_SYMBOL-1 - while table[i] > number: - i=i-1 - return i - -func getMoveDescription(myPosition : Vector2, targetPositions): - var way = AStar(myPosition, targetPositions[0]) - - for i in range(1, targetPositions.size()): - var tmp_way = AStar(myPosition, targetPositions[i]) - if(tmp_way[LENGTH] < way[LENGTH]): - way = tmp_way - return way[WAY] - -func h(curr, targ): - return sqrt(pow(curr,2)+pow(targ,2)) - -func h(curr, position): - - -func AStar(source, target): - pass - -# Called when the node enters the scene tree for the first time. -func _ready(): - prios[BOSS] = 1 - - - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# pass diff --git a/src/World.tscn b/src/World.tscn index 96dd2cf..0873cb6 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -92,19 +92,19 @@ position = Vector2( 8.00002, -96 ) position = Vector2( -128, 16 ) [node name="Barrel7" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( -56, 16 ) +position = Vector2( -48, 16 ) [node name="Barrel8" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( -72, 16 ) +position = Vector2( -64, 16 ) [node name="Barrel9" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( -88, 16 ) +position = Vector2( -80, 16 ) [node name="Barrel10" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( -104, 16 ) +position = Vector2( -96, 16 ) [node name="Barrel11" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( -120, 16 ) +position = Vector2( -112, 16 ) [node name="Barrel2" parent="YSort" instance=ExtResource( 10 )] position = Vector2( 8.00002, -48 ) From c62dfed8d23fc528edb832fba0dd53088afe6c28 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Sun, 19 Apr 2020 10:50:16 +0200 Subject: [PATCH 02/13] layyout for ai finished, todos must be cleared --- src/Overlap/AI/AI_Hero.gd | 66 ++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 18 deletions(-) diff --git a/src/Overlap/AI/AI_Hero.gd b/src/Overlap/AI/AI_Hero.gd index 776019c..08c4abc 100644 --- a/src/Overlap/AI/AI_Hero.gd +++ b/src/Overlap/AI/AI_Hero.gd @@ -32,6 +32,13 @@ enum{ NOTHING } +enum{ + EXECUTING, + AI_MOVE +} + +var ExecutionState = AI_MOVE + var Grid = [] var used_Flags = [] @@ -81,14 +88,19 @@ func adjustPrio(currentHealth, maxHealth): prios[HEART]=hearts #return the enemie which will be attacked -func calcEnemie(): +func calcEnemy(): var table = calcPrioTable() var number = randf() - var i = TERMINAL_SYMBOL-1 + var i = 0 while table[i] > number: - i=i-1 + i=i+1 return i +func getTargetField(currentField): + return [0,0] + pass + #todo + #returns a move func getMoveDescription(myPosition : Vector2, targetPositions): var way = AStar(myPosition, targetPositions[0]) @@ -98,9 +110,10 @@ func getMoveDescription(myPosition : Vector2, targetPositions): func getFieldState(position): + #todo pass -func getCost(position): +func getCost(field): # var cost = 0 # for i in Feld[position.x][position.y]: # match i: @@ -113,13 +126,13 @@ func getCost(position): #return an heurestic of distance # curr - current position # targ - atarget position -func h(curr, targ): +func h(curr, target): return min(abs(target[0]-curr[0]),abs(target[0]-curr[0])) # currCost - currentCost -# position - position of the field to move to -func g(currCost, position): - return curr + getCost(position) +# target - position of the field to move to +func g(currCost, target): + return currCost + getCost(target) #returns the list of adjacent nodes func adjacent(currentPosition): @@ -174,7 +187,7 @@ func AStar(source, target): target = tmp var Q = PrioQueue.new() - Q.insert([0,0, [source[0], source[1]]]) + Q.insert([0,0, [source[0], source[1]], [source[0], source[1]], NOTHING] ) while !Q.empty(): var node = Q.delMin() @@ -183,23 +196,40 @@ func AStar(source, target): return [node[4], 0]#todo map movement] #set flag - used_Flags[current[0]][current[1]] = true + used_Flags[node[2][0]][node[2][1]] = true var adj_list = adjacent(node[2]) - for i in adj_ist: + for i in adj_list: var move_cost = 0 if(i[0]==STEP): move_cost = 1 else: - rmove_cost = 2 + move_cost = 2 + + var g_val = g(node[1]+move_cost, i[1]) + var h_val = h(i[1], target) - - + #[g+h(x), g(x), current, from, kind] + var new_node = [g_val+h_val, g_val,i[1], node, i[0]] + Q.insert(new_node) + return [NOTHING, 0] -# Called when the node enters the scene tree for the first time. -func _ready(): - - +func makeMove(): + match ExecutionState: + EXECUTING: + pass + AI_MOVE: + var field = [0.1*prios[BONFIRE], 1] + var decision = randf() + var i = 0 + while field[i] > decision: + i=i+1 + if(i==0): + var targetField = getTargetField(currentField) + + else: + pass + pass From e0e66623090aecc99c2ba311e9d82672f6ae4a93 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Sun, 19 Apr 2020 13:44:25 +0200 Subject: [PATCH 03/13] Added Grid, and Kind describtion --- src/Boss/Boss_template.tscn | 5 +- src/Maps/Grid.gd | 92 ++++++++++++++++++++++++++++++ src/Maps/Grid.tscn | 6 ++ src/Objects/Banana/Banana.tscn | 7 ++- src/Objects/Barrel/Barrel.tscn | 7 ++- src/Objects/Bonfire/Bonfire.tscn | 7 ++- src/Objects/Heart/Heart.tscn | 7 ++- src/Objects/Rubies/Blue.tscn | 7 ++- src/Objects/Rubies/Green.tscn | 7 ++- src/Objects/Rubies/Red.tscn | 7 ++- src/Objects/Slime/Slime.tscn | 7 ++- src/Objects/Torch/Torch.gd | 2 +- src/Objects/Torch/Torch.tscn | 9 ++- src/Objects/Traps/Flame.tscn | 6 +- src/Objects/Traps/Spike.tscn | 8 ++- src/Objects/Traps/Sting.tscn | 8 ++- src/Objects/Traps/bear.tscn | 22 +++++--- src/Overlap/AI/AI_Hero.gd | 1 + src/Overlap/Kind.gd | 28 +++++++++ src/Overlap/Kind.tscn | 6 ++ src/Player/Player.tscn | 6 +- src/World.tscn | 97 +++----------------------------- 22 files changed, 235 insertions(+), 117 deletions(-) create mode 100644 src/Maps/Grid.gd create mode 100644 src/Maps/Grid.tscn create mode 100644 src/Overlap/Kind.gd create mode 100644 src/Overlap/Kind.tscn diff --git a/src/Boss/Boss_template.tscn b/src/Boss/Boss_template.tscn index 93a4a11..d7a53a3 100644 --- a/src/Boss/Boss_template.tscn +++ b/src/Boss/Boss_template.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=9 format=2] +[gd_scene load_steps=10 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=2] [ext_resource path="res://Overlap/Stats/Stats.tscn" type="PackedScene" id=3] [ext_resource path="res://Boss/Boss_template.gd" type="Script" id=4] [ext_resource path="res://testSprites/white_boss_dog.png" type="Texture" id=5] +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=6] [sub_resource type="CapsuleShape2D" id=1] radius = 18.0 @@ -21,6 +22,8 @@ height = 15.0 [node name="Boss_template" type="KinematicBody2D"] script = ExtResource( 4 ) +[node name="Kind" parent="." instance=ExtResource( 6 )] + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 3.13451, -20.1418 ) scale = Vector2( 2, 2 ) diff --git a/src/Maps/Grid.gd b/src/Maps/Grid.gd new file mode 100644 index 0000000..fdff42c --- /dev/null +++ b/src/Maps/Grid.gd @@ -0,0 +1,92 @@ +extends Node + +const Kind = preload("res://Overlap/Kind.gd") # Relative pat + + +var object_grid : Array = [] +var prio_grid : Array = [] +var time_passed := 0.0 +var offset +export(float,0,42.0) var refresh_rate = 1.0 + + +func _draw_object_grid(): + for y in range(7): + var stri = "" + for x in range(14): + stri += str(object_grid[x][y]) + " " + print(stri) + print() + +func _draw_prio_grid(): + for y in range(7): + var stri = "" + for x in range(14): + stri += str(prio_grid[x][y]) + " " + print(stri) + print() + +func _reset_grids(): + for x in range(14): + for y in range(7): + var lulul = object_grid[x][y].back() + while (object_grid[x][y].back()!=Kind.FIELD) and (Kind.WALL != object_grid[x][y].back()): + object_grid[x][y].pop_back() + while (prio_grid[x][y].back()!=Kind.TERMINAL_SYMBOL): + prio_grid[x][y].pop_back() + +func _ready(): + var walls = get_tree().current_scene.get_child(1) + offset = walls.global_position + #todo put in grid_lul + for x in range(14): + object_grid.push_back([]) + prio_grid.push_back([]) + for y in range(7): + object_grid[x].push_back([Kind.FIELD]) + prio_grid[x].push_back([Kind.TERMINAL_SYMBOL]) + + + for tile in walls.get_used_cells(): + if(_is_in_grid(tile)): + object_grid[tile.x][tile.y][0] = Kind.WALL + + _update_grid() + + +func _pixel_to_grid_coords(pixel : Vector2) -> Vector2: + var new_coords : Vector2 + new_coords.x = floor((pixel.x-offset.x)/32.0) + new_coords.y = floor((pixel.y-offset.y)/32.0) + return new_coords + +func _is_in_grid(grid_coords : Vector2) -> bool: + if(grid_coords.x<0): + return false + if(grid_coords.x>13): + return false + if(grid_coords.y<0): + return false + if(grid_coords.y>6): + return false + return true + + +func _update_grid(): + _reset_grids() + var world = get_tree().current_scene.get_child(2) + for node in world.get_children(): + var node_kind = node.get_child(0) + var grid_corrds = _pixel_to_grid_coords(node.global_position) + if (_is_in_grid(grid_corrds)): + if(node_kind.general!=Kind.FIELD and node_kind.general!=Kind.WALL): + object_grid[grid_corrds.x][grid_corrds.y].push_back(node_kind.general) + prio_grid[grid_corrds.x][grid_corrds.y].push_back(node_kind.kind) + + +func _physics_process(delta): + if(time_passed > refresh_rate): + time_passed -= refresh_rate + _update_grid() + time_passed += delta + diff --git a/src/Maps/Grid.tscn b/src/Maps/Grid.tscn new file mode 100644 index 0000000..fcea5cc --- /dev/null +++ b/src/Maps/Grid.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://Maps/Grid.gd" type="Script" id=1] + +[node name="Grid" type="Node"] +script = ExtResource( 1 ) diff --git a/src/Objects/Banana/Banana.tscn b/src/Objects/Banana/Banana.tscn index 8b4d30e..4e28045 100644 --- a/src/Objects/Banana/Banana.tscn +++ b/src/Objects/Banana/Banana.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] [ext_resource path="res://Objects/Banana/Bannana.gd" type="Script" id=2] [ext_resource path="res://testSprites/bannane.png" type="Texture" id=3] +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=4] [sub_resource type="CapsuleShape2D" id=1] radius = 7.54726 @@ -11,6 +12,10 @@ height = 12.1493 [node name="Banana" type="Node2D"] script = ExtResource( 2 ) +[node name="Kind" parent="." instance=ExtResource( 4 )] +general = 2 +kind = 10 + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 1.54256, -4.73786 ) texture = ExtResource( 3 ) diff --git a/src/Objects/Barrel/Barrel.tscn b/src/Objects/Barrel/Barrel.tscn index a90bebd..942399f 100644 --- a/src/Objects/Barrel/Barrel.tscn +++ b/src/Objects/Barrel/Barrel.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=7 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] [ext_resource path="res://Objects/Barrel/Barrel.gd" type="Script" id=2] [ext_resource path="res://testSprites/Fass.png" type="Texture" id=3] +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=4] [sub_resource type="CapsuleShape2D" id=1] radius = 10.7634 @@ -15,6 +16,10 @@ height = 8.78242 [node name="Barrel" type="StaticBody2D"] script = ExtResource( 2 ) +[node name="Kind" parent="." instance=ExtResource( 4 )] +general = 1 +kind = 9 + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0.244171, -10.0111 ) texture = ExtResource( 3 ) diff --git a/src/Objects/Bonfire/Bonfire.tscn b/src/Objects/Bonfire/Bonfire.tscn index 99ca9e5..24a2e4d 100644 --- a/src/Objects/Bonfire/Bonfire.tscn +++ b/src/Objects/Bonfire/Bonfire.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=8 format=2] +[gd_scene load_steps=9 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] [ext_resource path="res://Objects/Bonfire/Bonfire.gd" type="Script" id=2] [ext_resource path="res://testSprites/Bonfire.png" type="Texture" id=3] [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=4] +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=5] [sub_resource type="CapsuleShape2D" id=1] radius = 7.76762 @@ -19,6 +20,10 @@ radius = 32.0 [node name="Bonfire" type="StaticBody2D"] script = ExtResource( 2 ) +[node name="Kind" parent="." instance=ExtResource( 5 )] +general = 1 +kind = 8 + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0.22036, -4.18694 ) texture = ExtResource( 3 ) diff --git a/src/Objects/Heart/Heart.tscn b/src/Objects/Heart/Heart.tscn index d540388..975d0f7 100644 --- a/src/Objects/Heart/Heart.tscn +++ b/src/Objects/Heart/Heart.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] [ext_resource path="res://Objects/Heart/Heart.gd" type="Script" id=2] [ext_resource path="res://testSprites/Herz.png" type="Texture" id=3] +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=4] [sub_resource type="CapsuleShape2D" id=1] radius = 7.43707 @@ -11,6 +12,10 @@ height = 2.89399 [node name="Heart" type="Node2D"] script = ExtResource( 2 ) +[node name="Kind" parent="." instance=ExtResource( 4 )] +general = 1 +kind = 7 + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0.22036, -4.18694 ) texture = ExtResource( 3 ) diff --git a/src/Objects/Rubies/Blue.tscn b/src/Objects/Rubies/Blue.tscn index cdc6a76..2826e60 100644 --- a/src/Objects/Rubies/Blue.tscn +++ b/src/Objects/Rubies/Blue.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] [ext_resource path="res://Objects/Rubies/Rubies.gd" type="Script" id=2] [ext_resource path="res://testSprites/blue_Rubi.png" type="Texture" id=3] +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=4] [sub_resource type="CapsuleShape2D" id=1] radius = 7.43707 @@ -11,6 +12,10 @@ height = 2.89399 [node name="Blue" type="Node2D"] script = ExtResource( 2 ) +[node name="Kind" parent="." instance=ExtResource( 4 )] +general = 1 +kind = 5 + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0.22036, -4.18694 ) texture = ExtResource( 3 ) diff --git a/src/Objects/Rubies/Green.tscn b/src/Objects/Rubies/Green.tscn index 2ef1a91..b0a81d1 100644 --- a/src/Objects/Rubies/Green.tscn +++ b/src/Objects/Rubies/Green.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] [ext_resource path="res://Objects/Rubies/Rubies.gd" type="Script" id=2] [ext_resource path="res://testSprites/green_Rubi.png" type="Texture" id=3] +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=4] [sub_resource type="CapsuleShape2D" id=1] radius = 7.43707 @@ -11,6 +12,10 @@ height = 2.89399 [node name="Green" type="Node2D"] script = ExtResource( 2 ) +[node name="Kind" parent="." instance=ExtResource( 4 )] +general = 1 +kind = 6 + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0.22036, -4.18694 ) texture = ExtResource( 3 ) diff --git a/src/Objects/Rubies/Red.tscn b/src/Objects/Rubies/Red.tscn index 2001ecd..bc3bd2f 100644 --- a/src/Objects/Rubies/Red.tscn +++ b/src/Objects/Rubies/Red.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] [ext_resource path="res://Objects/Rubies/Rubies.gd" type="Script" id=2] [ext_resource path="res://testSprites/red_Rubi.png" type="Texture" id=3] +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=4] [sub_resource type="CapsuleShape2D" id=1] radius = 7.43707 @@ -11,6 +12,10 @@ height = 2.89399 [node name="Red" type="Node2D"] script = ExtResource( 2 ) +[node name="Kind" parent="." instance=ExtResource( 4 )] +general = 1 +kind = 4 + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0.22036, -4.18694 ) texture = ExtResource( 3 ) diff --git a/src/Objects/Slime/Slime.tscn b/src/Objects/Slime/Slime.tscn index 70dc294..1a0c3d4 100644 --- a/src/Objects/Slime/Slime.tscn +++ b/src/Objects/Slime/Slime.tscn @@ -1,13 +1,18 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://testSprites/slime.png" type="Texture" id=1] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=2] +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=3] [sub_resource type="RectangleShape2D" id=1] extents = Vector2( 16, 16 ) [node name="Slime" type="Node2D"] +[node name="Kind" parent="." instance=ExtResource( 3 )] +general = 2 +kind = 10 + [node name="Sprite" type="Sprite" parent="."] texture = ExtResource( 1 ) diff --git a/src/Objects/Torch/Torch.gd b/src/Objects/Torch/Torch.gd index b9c999d..daf5e58 100644 --- a/src/Objects/Torch/Torch.gd +++ b/src/Objects/Torch/Torch.gd @@ -1,4 +1,4 @@ -extends StaticBody2D +extends Node2D export(int, 1, 5) var lifePoints = 3 export(int, 1, 30) var spawnRate = 5 diff --git a/src/Objects/Torch/Torch.tscn b/src/Objects/Torch/Torch.tscn index e07f98e..fec8284 100644 --- a/src/Objects/Torch/Torch.tscn +++ b/src/Objects/Torch/Torch.tscn @@ -1,16 +1,21 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] [ext_resource path="res://testSprites/fackel.png" type="Texture" id=2] [ext_resource path="res://Objects/Torch/Torch.gd" type="Script" id=3] +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=4] [sub_resource type="CapsuleShape2D" id=1] radius = 8.0 height = 12.0 -[node name="Torch" type="StaticBody2D"] +[node name="Torch" type="Node2D"] script = ExtResource( 3 ) +[node name="Kind" parent="." instance=ExtResource( 4 )] +general = 4 +kind = 2 + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0, -8 ) texture = ExtResource( 2 ) diff --git a/src/Objects/Traps/Flame.tscn b/src/Objects/Traps/Flame.tscn index eed9fd8..153904f 100644 --- a/src/Objects/Traps/Flame.tscn +++ b/src/Objects/Traps/Flame.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=1] +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=2] [ext_resource path="res://testSprites/flame.png" type="Texture" id=3] [sub_resource type="CapsuleShape2D" id=1] @@ -8,6 +9,9 @@ height = 6.36237 [node name="Flame" type="Node2D"] +[node name="Kind" parent="." instance=ExtResource( 2 )] +kind = 10 + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0.44072, -6.06005 ) texture = ExtResource( 3 ) diff --git a/src/Objects/Traps/Spike.tscn b/src/Objects/Traps/Spike.tscn index 024826f..8991297 100644 --- a/src/Objects/Traps/Spike.tscn +++ b/src/Objects/Traps/Spike.tscn @@ -1,10 +1,9 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=1] [ext_resource path="res://Objects/Banana/Bannana.gd" type="Script" id=2] [ext_resource path="res://testSprites/Spike.png" type="Texture" id=3] - - +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=4] [sub_resource type="CapsuleShape2D" id=1] height = 6.36237 @@ -12,6 +11,9 @@ height = 6.36237 [node name="Spike" type="Node2D"] script = ExtResource( 2 ) +[node name="Kind" parent="." instance=ExtResource( 4 )] +kind = 10 + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0.220352, -3.63603 ) texture = ExtResource( 3 ) diff --git a/src/Objects/Traps/Sting.tscn b/src/Objects/Traps/Sting.tscn index b102af5..f640195 100644 --- a/src/Objects/Traps/Sting.tscn +++ b/src/Objects/Traps/Sting.tscn @@ -1,10 +1,9 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=1] [ext_resource path="res://Objects/Banana/Bannana.gd" type="Script" id=2] [ext_resource path="res://testSprites/Sting.png" type="Texture" id=3] - - +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=4] [sub_resource type="CapsuleShape2D" id=1] radius = 6.77597 @@ -13,6 +12,9 @@ height = 6.36237 [node name="Sting" type="Node2D"] script = ExtResource( 2 ) +[node name="Kind" parent="." instance=ExtResource( 4 )] +kind = 10 + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0.44072, -9.03499 ) texture = ExtResource( 3 ) diff --git a/src/Objects/Traps/bear.tscn b/src/Objects/Traps/bear.tscn index 7d23975..006bbd1 100644 --- a/src/Objects/Traps/bear.tscn +++ b/src/Objects/Traps/bear.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=7 format=2] +[gd_scene load_steps=8 format=2] -[ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=1] -[ext_resource path="res://Objects/Traps/Bear.gd" type="Script" id=2] -[ext_resource path="res://testSprites/falle.png" type="Texture" id=3] -[ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=4] +[ext_resource path="res://Objects/Traps/Bear.gd" type="Script" id=1] +[ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=2] +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=3] +[ext_resource path="res://testSprites/falle.png" type="Texture" id=4] +[ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=5] [sub_resource type="CapsuleShape2D" id=1] height = 9.0 @@ -12,20 +13,23 @@ height = 9.0 height = 9.0 [node name="Bear_trap" type="Node2D"] -script = ExtResource( 2 ) +script = ExtResource( 1 ) + +[node name="Kind" parent="." instance=ExtResource( 3 )] +kind = 10 [node name="Sprite" type="Sprite" parent="."] position = Vector2( -7.62939e-06, 0 ) -texture = ExtResource( 3 ) +texture = ExtResource( 4 ) -[node name="Hitbox" parent="." instance=ExtResource( 1 )] +[node name="Hitbox" parent="." instance=ExtResource( 2 )] collision_layer = 16 [node name="CollisionShape2D" parent="Hitbox" index="0"] rotation = 1.5708 shape = SubResource( 1 ) -[node name="Hurtbox" parent="." instance=ExtResource( 4 )] +[node name="Hurtbox" parent="." instance=ExtResource( 5 )] collision_layer = 32 collision_mask = 0 diff --git a/src/Overlap/AI/AI_Hero.gd b/src/Overlap/AI/AI_Hero.gd index 08c4abc..f29320a 100644 --- a/src/Overlap/AI/AI_Hero.gd +++ b/src/Overlap/AI/AI_Hero.gd @@ -21,6 +21,7 @@ enum{ enum{ DAMAGE, + HEALING, SLOW, WALL, FIELD diff --git a/src/Overlap/Kind.gd b/src/Overlap/Kind.gd new file mode 100644 index 0000000..d37fa85 --- /dev/null +++ b/src/Overlap/Kind.gd @@ -0,0 +1,28 @@ +extends Node + +enum { + BOSS = 0, + PLAYER, + TORCH, + MINION, + RED, + BLUE, + GREEN, + HEART, + BONFIRE, + BARREL, + TERMINAL_SYMBOL +} + +enum{ + DAMAGE = 0, + HEALING, + SLOW, + WALL, + FIELD +} + +export(int, "DAMAGE","HEALING","SLOW","WALL","FIELD") var general = DAMAGE +export(int,"BOSS","PLAYER","TORCH","MINION","RED","BLUE","GREEN","HEART","BONFIRE","BARREL","TERMINAL_SYMBOL") var kind = BOSS + + diff --git a/src/Overlap/Kind.tscn b/src/Overlap/Kind.tscn new file mode 100644 index 0000000..547647d --- /dev/null +++ b/src/Overlap/Kind.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://Overlap/Kind.gd" type="Script" id=1] + +[node name="Kind" type="Node"] +script = ExtResource( 1 ) diff --git a/src/Player/Player.tscn b/src/Player/Player.tscn index 42b3231..c74ea6c 100644 --- a/src/Player/Player.tscn +++ b/src/Player/Player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=56 format=2] +[gd_scene load_steps=57 format=2] [ext_resource path="res://Player/Player.gd" type="Script" id=1] [ext_resource path="res://Player/Player.png" type="Texture" id=2] @@ -6,6 +6,7 @@ [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=4] [ext_resource path="res://Overlap/Stats/Stats.tscn" type="PackedScene" id=5] [ext_resource path="res://Fonts/Harmonic/Harmonic.ttf" type="DynamicFontData" id=6] +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=7] [sub_resource type="CapsuleShape2D" id=1] radius = 2.15976 @@ -620,6 +621,9 @@ font_data = ExtResource( 6 ) script = ExtResource( 1 ) FRICTION = 270 +[node name="Kind" parent="." instance=ExtResource( 7 )] +kind = 1 + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0.273621, 3.88423 ) scale = Vector2( 0.5, 0.5 ) diff --git a/src/World.tscn b/src/World.tscn index 0873cb6..6b32ef9 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -1,22 +1,12 @@ -[gd_scene load_steps=18 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://Player/Player.tscn" type="PackedScene" id=1] [ext_resource path="res://World.gd" type="Script" id=2] [ext_resource path="res://Maps/Tilesets/Room/tileset_room.tres" type="TileSet" id=3] [ext_resource path="res://testSprites/dark.png" type="Texture" id=4] -[ext_resource path="res://Objects/Traps/bear.tscn" type="PackedScene" id=5] -[ext_resource path="res://Objects/Banana/Banana.tscn" type="PackedScene" id=6] [ext_resource path="res://Objects/Bonfire/Bonfire.tscn" type="PackedScene" id=7] -[ext_resource path="res://Objects/Traps/Sting.tscn" type="PackedScene" id=8] -[ext_resource path="res://Objects/Rubies/Blue.tscn" type="PackedScene" id=9] -[ext_resource path="res://Objects/Barrel/Barrel.tscn" type="PackedScene" id=10] -[ext_resource path="res://Objects/Heart/Heart.tscn" type="PackedScene" id=11] -[ext_resource path="res://Objects/Rubies/Red.tscn" type="PackedScene" id=12] -[ext_resource path="res://Objects/Rubies/Green.tscn" type="PackedScene" id=13] -[ext_resource path="res://Objects/Traps/Flame.tscn" type="PackedScene" id=14] -[ext_resource path="res://Objects/Traps/Spike.tscn" type="PackedScene" id=15] -[ext_resource path="res://Objects/Slime/Slime.tscn" type="PackedScene" id=16] [ext_resource path="res://Boss/Boss_template.tscn" type="PackedScene" id=17] +[ext_resource path="res://Maps/Grid.tscn" type="PackedScene" id=18] [node name="World" type="Node2D"] script = ExtResource( 2 ) @@ -28,11 +18,11 @@ region_enabled = true region_rect = Rect2( 0, 0, 1280, 720 ) [node name="FloorTileMap" type="TileMap" parent="."] -position = Vector2( -16, 16 ) +position = Vector2( 16, 16 ) tile_set = ExtResource( 3 ) cell_size = Vector2( 32, 32 ) format = 1 -tile_data = PoolIntArray( -65537, 47, 0, -131072, 47, 1, -131071, 47, 1, -131070, 47, 1, -131069, 47, 1, -131068, 47, 1, -131067, 47, 1, -131066, 47, 1, -131065, 47, 1, -131064, 47, 1, -131063, 47, 1, -131062, 47, 1, -131061, 47, 1, -131060, 47, 1, -131059, 47, 1, -131058, 47, 1, -131057, 47, 1, -131056, 47, 2, -1, 47, 65536, -65536, 47, 65541, -65535, 47, 131073, -65534, 47, 131073, -65533, 47, 131073, -65532, 47, 131073, -65531, 47, 131073, -65530, 47, 131073, -65529, 47, 131073, -65528, 47, 131073, -65527, 47, 131073, -65526, 47, 65544, -65525, 47, 131073, -65524, 47, 131073, -65523, 47, 131073, -65522, 47, 131073, -65521, 47, 65542, -65520, 47, 65538, 65535, 47, 65536, 0, 47, 65538, 10, 47, 65539, 15, 47, 65536, 16, 47, 65538, 131071, 47, 65536, 65536, 47, 65538, 65546, 47, 65539, 65549, 47, 3, 65551, 47, 65536, 65552, 47, 65538, 196607, 47, 65536, 131072, 47, 65538, 131077, 47, 3, 131082, 47, 65539, 131085, 47, 65539, 131087, 47, 65536, 131088, 47, 65538, 262143, 47, 65536, 196608, 47, 65538, 196612, 47, 196608, 196613, 47, 262152, 196614, 47, 196610, 196618, 47, 65539, 196621, 47, 196612, 196622, 47, 196609, 196623, 47, 262150, 196624, 47, 65538, 327679, 47, 65536, 262144, 47, 65538, 262149, 47, 131075, 262154, 47, 65539, 262159, 47, 65536, 262160, 47, 65538, 393215, 47, 65536, 327680, 47, 65538, 327690, 47, 196612, 327691, 47, 196610, 327695, 47, 65536, 327696, 47, 65538, 458751, 47, 65536, 393216, 47, 65538, 393231, 47, 65536, 393232, 47, 65538, 524287, 47, 65536, 458752, 47, 131077, 458753, 47, 1, 458754, 47, 1, 458755, 47, 1, 458756, 47, 1, 458757, 47, 1, 458758, 47, 1, 458759, 47, 1, 458760, 47, 1, 458761, 47, 1, 458762, 47, 1, 458763, 47, 1, 458764, 47, 1, 458765, 47, 1, 458766, 47, 1, 458767, 47, 131078, 458768, 47, 65538, 589823, 47, 131072, 524288, 47, 131073, 524289, 47, 131073, 524290, 47, 131073, 524291, 47, 131073, 524292, 47, 131073, 524293, 47, 131073, 524294, 47, 131073, 524295, 47, 131073, 524296, 47, 131073, 524297, 47, 131073, 524298, 47, 131073, 524299, 47, 131073, 524300, 47, 131073, 524301, 47, 131073, 524302, 47, 131073, 524303, 47, 131073, 524304, 47, 131074 ) +tile_data = PoolIntArray( -1, 47, 4, -65536, 47, 196609, -65535, 47, 196609, -65534, 47, 196609, -65533, 47, 196609, -65532, 47, 196609, -65531, 47, 196609, -65530, 47, 196609, -65529, 47, 196609, -65528, 47, 196609, -65527, 47, 196609, -65526, 47, 196609, -65525, 47, 196609, -65524, 47, 196609, -65523, 47, 196609, -65522, 47, 7, 65535, 47, 65539, 14, 47, 65539, 131071, 47, 65539, 65545, 47, 4, 65546, 47, 196609, 65547, 47, 196610, 65550, 47, 65539, 196607, 47, 65539, 131081, 47, 65539, 131086, 47, 65539, 262143, 47, 65539, 196617, 47, 196612, 196618, 47, 196609, 196619, 47, 7, 196622, 47, 65539, 327679, 47, 65539, 262155, 47, 65539, 262158, 47, 65539, 393215, 47, 65539, 327689, 47, 196608, 327690, 47, 196609, 327691, 47, 196615, 327694, 47, 65539, 458751, 47, 65539, 393230, 47, 65539, 524287, 47, 196612, 458752, 47, 196609, 458753, 47, 196609, 458754, 47, 196609, 458755, 47, 196609, 458756, 47, 196609, 458757, 47, 196609, 458758, 47, 196609, 458759, 47, 196609, 458760, 47, 196609, 458761, 47, 196609, 458762, 47, 196609, 458763, 47, 196609, 458764, 47, 196609, 458765, 47, 196609, 458766, 47, 196615 ) __meta__ = { "_edit_group_": true, "_edit_lock_": true @@ -41,86 +31,17 @@ __meta__ = { [node name="YSort" type="YSort" parent="."] position = Vector2( 152, 120 ) -[node name="Boss_template" parent="YSort" instance=ExtResource( 17 )] -position = Vector2( -107.855, -54.5179 ) - [node name="Player" parent="YSort" instance=ExtResource( 1 )] position = Vector2( 296, -32 ) scale = Vector2( 2, 2 ) debug = true FRICTION = 200 -[node name="minion" parent="YSort" instance=ExtResource( 17 )] -position = Vector2( 88, 24 ) -scale = Vector2( 0.3, 0.3 ) -collision_layer = 8 +[node name="Bonfire" parent="YSort" instance=ExtResource( 7 )] +position = Vector2( 296, -16 ) -[node name="Bear_trap" parent="YSort" instance=ExtResource( 5 )] -position = Vector2( 68.1447, -38.5179 ) +[node name="Boss_template" parent="YSort" instance=ExtResource( 17 )] -[node name="Slime" parent="YSort" instance=ExtResource( 16 )] -position = Vector2( 68.1447, 57.4821 ) +[node name="Grid" parent="." instance=ExtResource( 18 )] -[node name="Flame" parent="YSort" instance=ExtResource( 14 )] -position = Vector2( 124.145, 65.4821 ) - -[node name="Spike" parent="YSort" instance=ExtResource( 15 )] -position = Vector2( 272, 88 ) - -[node name="Sting" parent="YSort" instance=ExtResource( 8 )] -position = Vector2( 132.145, 17.4821 ) - -[node name="Heart" parent="YSort" instance=ExtResource( 11 )] -position = Vector2( -43.8553, 65.4821 ) - -[node name="Blue" parent="YSort" instance=ExtResource( 9 )] -position = Vector2( -3.8553, 81.4821 ) - -[node name="Red" parent="YSort" instance=ExtResource( 12 )] -position = Vector2( -51.8553, 41.4821 ) - -[node name="Green" parent="YSort" instance=ExtResource( 13 )] -position = Vector2( -19.8553, 73.4821 ) - -[node name="Barrel" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( 8.00002, -32 ) - -[node name="Barrel5" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( 8.00002, -96 ) - -[node name="Barrel6" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( -128, 16 ) - -[node name="Barrel7" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( -48, 16 ) - -[node name="Barrel8" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( -64, 16 ) - -[node name="Barrel9" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( -80, 16 ) - -[node name="Barrel10" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( -96, 16 ) - -[node name="Barrel11" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( -112, 16 ) - -[node name="Barrel2" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( 8.00002, -48 ) - -[node name="Barrel3" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( 8.00002, -64 ) - -[node name="Barrel4" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( 8.00002, -80 ) - -[node name="Banana" parent="YSort" instance=ExtResource( 6 )] -position = Vector2( -107.855, 73.4821 ) - -[node name="Bonfire" parent="." instance=ExtResource( 7 )] -position = Vector2( 448, 104 ) - -[editable path="YSort/minion"] - -[editable path="YSort/minion/Hurtbox"] +[editable path="YSort/Boss_template"] From 1c2bb672460d59b527f52437ec0aad0665248607 Mon Sep 17 00:00:00 2001 From: Conrad Date: Sun, 19 Apr 2020 14:25:15 +0200 Subject: [PATCH 04/13] Added Interface for AI control --- src/Maps/Grid.gd | 16 ++++-- src/Overlap/AI/AI_Hero.gd | 116 ++++++++++++++++---------------------- src/Player/Player.gd | 30 +++++++++- src/World.tscn | 5 +- 4 files changed, 93 insertions(+), 74 deletions(-) diff --git a/src/Maps/Grid.gd b/src/Maps/Grid.gd index fdff42c..2fd104c 100644 --- a/src/Maps/Grid.gd +++ b/src/Maps/Grid.gd @@ -1,10 +1,11 @@ extends Node -const Kind = preload("res://Overlap/Kind.gd") # Relative pat +const Kind = preload("res://Overlap/Kind.gd") # Relative path var object_grid : Array = [] var prio_grid : Array = [] +var used_grid : Array = [] var time_passed := 0.0 var offset export(float,0,42.0) var refresh_rate = 1.0 @@ -42,18 +43,25 @@ func _ready(): for x in range(14): object_grid.push_back([]) prio_grid.push_back([]) + used_grid.push_back([]) for y in range(7): object_grid[x].push_back([Kind.FIELD]) prio_grid[x].push_back([Kind.TERMINAL_SYMBOL]) - - + used_grid[x].push_back(false) + for tile in walls.get_used_cells(): if(_is_in_grid(tile)): object_grid[tile.x][tile.y][0] = Kind.WALL - + _update_grid() +func _reset_history(): + for x in range(14): + for y in range(7): + used_grid[x][y] = false + + func _pixel_to_grid_coords(pixel : Vector2) -> Vector2: var new_coords : Vector2 new_coords.x = floor((pixel.x-offset.x)/32.0) diff --git a/src/Overlap/AI/AI_Hero.gd b/src/Overlap/AI/AI_Hero.gd index f29320a..ff08a9c 100644 --- a/src/Overlap/AI/AI_Hero.gd +++ b/src/Overlap/AI/AI_Hero.gd @@ -1,18 +1,7 @@ -extends Node -const PrioQueue = preload("prio_queue.gd") # Relative pat +extends Player -enum{ - BOSS, - TORCH, - MINION, - RED, - BLUE, - GREEN, - HEART, - BONFIRE, - BARREL, - TERMINAL_SYMBOL -} +const PrioQueue = preload("prio_queue.gd") # Relative path +const Grid = preload("res://Maps/Grid.gd") enum{ LENGTH, @@ -40,9 +29,6 @@ enum{ var ExecutionState = AI_MOVE -var Grid = [] -var used_Flags = [] - var numbers = [0,0,0,0,0,0,0,0,0] var prios = [7,6,5,4,3,2,0,0,4] @@ -53,11 +39,11 @@ var abortProb = 0.01 #calculates the sum of all present prios func calcTotalPrio(): var sum = 0 - var i = BOSS - while i != TERMINAL_SYMBOL: + var i = Grid.Kind.BOSS + while i != Grid.Kind.TERMINAL_SYMBOL: if(numbers[i]>0): sum += prios[i] - i=i+1 + i += 1 return sum #calculates the relative porio @@ -71,10 +57,10 @@ func calcPrioTable(): var sum = calcTotalPrio() var i = 0; - while i != TERMINAL_SYMBOL: + while i != Grid.Kind.TERMINAL_SYMBOL: lower += calcRelPrio(i, sum) table[i] = lower - i = i+1 + i += 1 return table @@ -82,11 +68,11 @@ func calcPrioTable(): func adjustPrio(currentHealth, maxHealth): var prioVal = 10 - (currentHealth/maxHealth)*10 var bonfire = prioVal - var hearts = prioVal -1 + var hearts = prioVal - 1 if(hearts < 0): hearts = 0 - prios[BONFIRE]=bonfire - prios[HEART]=hearts + prios[Grid.Kind.BONFIRE]=bonfire + prios[Grid.Kind.HEART]=hearts #return the enemie which will be attacked func calcEnemy(): @@ -96,37 +82,28 @@ func calcEnemy(): while table[i] > number: i=i+1 return i - + + func getTargetField(currentField): - return [0,0] - pass - #todo - + return Grid.prio_grid[currentField.x][currentField.y] + + #returns a move func getMoveDescription(myPosition : Vector2, targetPositions): - var way = AStar(myPosition, targetPositions[0]) + return AStar(myPosition, targetPositions[0]) - #TODO choose enemie with loest distance - return 0 - -func getFieldState(position): - #todo - pass - func getCost(field): - # var cost = 0 - # for i in Feld[position.x][position.y]: - # match i: - # DAMAGE : cost += damage*prios[BONFIRE]*3 - # SLOW : cost += 2 - # - #return cost - return 0 + var cost = 0 + for i in Grid.prio_grid[field.x][field.y]: + match i: + Grid.kind.DAMAGE : cost += prios[Grid.kind.BONFIRE] * 6 + Grid.kind.SLOW : cost += 2 + return cost #return an heurestic of distance # curr - current position -# targ - atarget position +# targ - a target position func h(curr, target): return min(abs(target[0]-curr[0]),abs(target[0]-curr[0])) @@ -135,8 +112,8 @@ func h(curr, target): func g(currCost, target): return currCost + getCost(target) -#returns the list of adjacent nodes -func adjacent(currentPosition): +# Returns the list of adjacent nodes +func adjacent(currentPosition, can_roll = false): var adj := [] #adj.append([STEP, Vector2(0,0)]) var p = currentPosition @@ -157,11 +134,14 @@ func adjacent(currentPosition): continue if(next[1]>6): continue - if(used_Flags[next[0]][next[1]]==true): + if(Grid.used_grid[next[0]][next[1]]): continue if(Grid[next[0]][next[1]][0]!=WALL): adj.append([STEP, Vector2(next[0],next[1])]) - + + if not can_roll: + return adj + for next in pot_adj_roll: if(next[0]<0): continue @@ -171,37 +151,36 @@ func adjacent(currentPosition): continue if(next[1]>6): continue - if(used_Flags[next[0]][next[1]]==true): + if(Grid.used_grid[next[0]][next[1]]): continue if(Grid[next[0]][next[1]][0]!=WALL): adj.append([ROLL, Vector2(next[0],next[1])]) return adj - - - + + func AStar(source, target): #swap rtarget and source, when target source istr reached, do inversxse step # node layout [g+h(x), g(x), current, from, kind] var tmp = source source = target target = tmp - + var Q = PrioQueue.new() Q.insert([0,0, [source[0], source[1]], [source[0], source[1]], NOTHING] ) while !Q.empty(): var node = Q.delMin() - #check if reached - if(node[2][0]==target[0] and node[2][1]==target[1]): - return [node[4], 0]#todo map movement] + # Check if reached + if(node[2][0] == target[0] and node[2][1] == target[1]): + return [node[4], node[3]] # 4 is kind | 3 is from - #set flag - used_Flags[node[2][0]][node[2][1]] = true + # Set flag + Grid.used_grid[node[2][0]][node[2][1]] = true var adj_list = adjacent(node[2]) for i in adj_list: var move_cost = 0 - if(i[0]==STEP): + if (i[0] == STEP): move_cost = 1 else: move_cost = 2 @@ -213,21 +192,22 @@ func AStar(source, target): var new_node = [g_val+h_val, g_val,i[1], node, i[0]] Q.insert(new_node) - return [NOTHING, 0] + return [NOTHING, [0,0]] + func makeMove(): match ExecutionState: EXECUTING: pass AI_MOVE: - var field = [0.1*prios[BONFIRE], 1] + var field = [0.1 * prios[Grid.Kind.BONFIRE], 1] var decision = randf() var i = 0 while field[i] > decision: - i=i+1 - if(i==0): - var targetField = getTargetField(currentField) - + i += 1 + if (i == 0): + var targetField = getTargetField(Grid.prio_grid) + # Todo: move player else: pass pass diff --git a/src/Player/Player.gd b/src/Player/Player.gd index 0083706..8aa25e3 100644 --- a/src/Player/Player.gd +++ b/src/Player/Player.gd @@ -63,7 +63,35 @@ func _physics_process(delta): # In move_and_collide(...) you have to multiply by delta. func move(): move_and_slide(velocity) - + + +func set_animation_tree_vector(): + animation_tree.set("parameters/idle/blend_position", rollvector) + animation_tree.set("parameters/hit/blend_position", rollvector) + animation_tree.set("parameters/roll/blend_position", rollvector) + animation_tree.set("parameters/run/blend_position", rollvector) + +# API Interface for ai_hero +func attac(direction): + rollvector = direction + set_animation_tree_vector() + movementState = moveState.HIT + + +# API Interface for ai_hero +func roll(direction): + rollvector = direction + set_animation_tree_vector() + movementState = moveState.ROLL + + +# API Interface for ai_hero +func run(direction): + rollvector = direction + set_animation_tree_vector() + movementState = moveState.MOVE + + func movement_move(delta): var input_vector = Vector2.ZERO # This is a clever way to handle directional input diff --git a/src/World.tscn b/src/World.tscn index 6b32ef9..00f8f8c 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -12,7 +12,7 @@ script = ExtResource( 2 ) [node name="WallSprite" type="Sprite" parent="."] -position = Vector2( 352, 184 ) +position = Vector2( 351.915, 184 ) texture = ExtResource( 4 ) region_enabled = true region_rect = Rect2( 0, 0, 1280, 720 ) @@ -42,6 +42,9 @@ position = Vector2( 296, -16 ) [node name="Boss_template" parent="YSort" instance=ExtResource( 17 )] +[node name="DebugLabel" parent="YSort/Boss_template" index="6"] +text = "Obermutti" + [node name="Grid" parent="." instance=ExtResource( 18 )] [editable path="YSort/Boss_template"] From ac97b3b49e83c5fcecaa76d098bf5d29ab432548 Mon Sep 17 00:00:00 2001 From: Conrad Date: Sun, 19 Apr 2020 15:20:59 +0200 Subject: [PATCH 05/13] AI API Interface --- src/Overlap/AI/AI_Hero.gd | 47 +++++++++++++++---------- src/Player/Player.gd | 73 ++++++++++++++++++++++++++++----------- src/Player/Player.tscn | 2 +- src/World.tscn | 3 +- src/project.godot | 6 ++++ 5 files changed, 89 insertions(+), 42 deletions(-) diff --git a/src/Overlap/AI/AI_Hero.gd b/src/Overlap/AI/AI_Hero.gd index ff08a9c..ada283e 100644 --- a/src/Overlap/AI/AI_Hero.gd +++ b/src/Overlap/AI/AI_Hero.gd @@ -1,4 +1,6 @@ -extends Player +extends KinematicBody2D + +class_name Hero const PrioQueue = preload("prio_queue.gd") # Relative path const Grid = preload("res://Maps/Grid.gd") @@ -195,25 +197,32 @@ func AStar(source, target): return [NOTHING, [0,0]] -func makeMove(): - match ExecutionState: - EXECUTING: - pass - AI_MOVE: - var field = [0.1 * prios[Grid.Kind.BONFIRE], 1] - var decision = randf() - var i = 0 - while field[i] > decision: - i += 1 - if (i == 0): - var targetField = getTargetField(Grid.prio_grid) - # Todo: move player - else: - pass +func makeMove(delta): + #match ExecutionState: + # EXECUTING: + # pass + # AI_MOVE: + # var field = [0.1 * prios[Grid.Kind.BONFIRE], 1] + # var decision = randf() + ## var i = 0 + #while field[i] > decision: + # i += 1 + ## if (i == 0): + # var targetField = getTargetField(Grid.prio_grid) + # run(targetField) + # else: + # pass pass +# API Interface for ai_hero -> methods are handled in player.gd +func attac(direction, delta): + pass -# Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# pass + +func roll(direction, delta): + pass + + +func run(direction, delta): + pass diff --git a/src/Player/Player.gd b/src/Player/Player.gd index 8aa25e3..bd6f6e5 100644 --- a/src/Player/Player.gd +++ b/src/Player/Player.gd @@ -1,4 +1,4 @@ -extends KinematicBody2D +extends Hero class_name Player """ This is an example player controller script created by Paul @@ -21,7 +21,8 @@ onready var animation_state = animation_tree.get("parameters/playback") enum moveState{ MOVE, ROLL, - HIT + HIT, + IDLE } @@ -38,12 +39,12 @@ func _debug_update(): func _physics_process(delta): - totaldamage+=damage_per_second*delta - player_stats.speed+=10*delta + totaldamage += damage_per_second*delta + player_stats.speed += 10 * delta while(totaldamage>1): - totaldamage-=1 + totaldamage -= 1 player_stats.health-=1 - while(totaldamage<-1): + while(totaldamage < -1): totaldamage+=1 player_stats.health+=1 _debug_update() @@ -55,7 +56,15 @@ func _physics_process(delta): movement_roll() moveState.HIT: movement_hit() - + elif movementState == moveState.ROLL: + movement_roll() + elif movementState == moveState.HIT: + movement_hit() + elif movementState == moveState.IDLE: + movement_idle() + else: + movement_run(Vector2(0,0), delta) + makeMove(delta) move() # IMPORTANT: If you are using move_and_slide don't multiply by delta @@ -71,25 +80,35 @@ func set_animation_tree_vector(): animation_tree.set("parameters/roll/blend_position", rollvector) animation_tree.set("parameters/run/blend_position", rollvector) + # API Interface for ai_hero -func attac(direction): +func attac(direction, delta): + direction = direction.normalized() rollvector = direction set_animation_tree_vector() movementState = moveState.HIT # API Interface for ai_hero -func roll(direction): +func roll(direction, delta): + direction = direction.normalized() rollvector = direction set_animation_tree_vector() movementState = moveState.ROLL # API Interface for ai_hero -func run(direction): +func run(direction, delta): + direction = direction.normalized() rollvector = direction set_animation_tree_vector() movementState = moveState.MOVE + velocity = velocity.move_toward(player_stats.speed * rollvector, ACCELERATION * delta) + + if direction == Vector2.ZERO: + animation_state.travel("idle") + else: + animation_state.travel("run") func movement_move(delta): @@ -108,30 +127,34 @@ func movement_move(delta): velocity = Vector2.ZERO else: rollvector = input_vector - animation_tree.set("parameters/idle/blend_position", input_vector) - animation_tree.set("parameters/hit/blend_position", input_vector) - animation_tree.set("parameters/roll/blend_position", input_vector) - animation_tree.set("parameters/run/blend_position", input_vector) + set_animation_tree_vector() animation_state.travel("run") velocity = velocity.move_toward(player_stats.speed * input_vector, ACCELERATION * delta) if Input.is_action_just_pressed("roll"): movementState = moveState.ROLL elif Input.is_action_just_pressed("attack"): movementState = moveState.HIT - + + func movement_hit(): velocity = Vector2.ZERO animation_state.travel("hit") - + + func hit_finished(): - movementState = moveState.MOVE - + movementState = moveState.IDLE + ExecutionState = AI_MOVE + + func movement_roll(): velocity = rollvector * ROLL_SPEED animation_state.travel("roll") - + ExecutionState = EXECUTING + + func roll_finished(): - movementState = moveState.MOVE + movementState = moveState.IDLE + ExecutionState = AI_MOVE func _on_Hurtbox_area_entered(area): @@ -151,3 +174,13 @@ func _on_Hitbox_area_entered(area): currency += area.currency_value player_stats.health = player_stats.health+area.health_value player_stats.speed -= area.slowdown_value + + +func movement_run(direction, delta): + run(direction, delta) + + +func movement_idle(): + movementState = moveState.IDLE + velocity = Vector2.ZERO + animation_state.travel("idle") diff --git a/src/Player/Player.tscn b/src/Player/Player.tscn index c74ea6c..7feeace 100644 --- a/src/Player/Player.tscn +++ b/src/Player/Player.tscn @@ -684,7 +684,7 @@ shape = SubResource( 47 ) [node name="Pivot" type="Position2D" parent="."] position = Vector2( 0, -4.16248 ) -rotation = 1.5708 +rotation = 3.14159 __meta__ = { "_gizmo_extents_": 20.0 } diff --git a/src/World.tscn b/src/World.tscn index 00f8f8c..9e79e36 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -32,9 +32,8 @@ __meta__ = { position = Vector2( 152, 120 ) [node name="Player" parent="YSort" instance=ExtResource( 1 )] -position = Vector2( 296, -32 ) +position = Vector2( 84.2923, 24.0572 ) scale = Vector2( 2, 2 ) -debug = true FRICTION = 200 [node name="Bonfire" parent="YSort" instance=ExtResource( 7 )] diff --git a/src/project.godot b/src/project.godot index 69d0a35..705c113 100644 --- a/src/project.godot +++ b/src/project.godot @@ -15,6 +15,11 @@ _global_script_classes=[ { "path": "res://Boss/Boss_template.gd" }, { "base": "KinematicBody2D", +"class": "Hero", +"language": "GDScript", +"path": "res://Overlap/AI/AI_Hero.gd" +}, { +"base": "Hero", "class": "Player", "language": "GDScript", "path": "res://Player/Player.gd" @@ -31,6 +36,7 @@ _global_script_classes=[ { } ] _global_script_class_icons={ "Boss": "", +"Hero": "", "Player": "", "TitleSceenButton": "", "TitleScreen": "" From 78af38456309b9529c2d59e0b0deab3d0a5fa791 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Sun, 19 Apr 2020 17:41:57 +0200 Subject: [PATCH 06/13] basics of ai, ready for soundeffects --- src/Maps/Grid.gd | 26 ++++++++++- src/Objects/Torch/Torch.gd | 15 +++--- src/Overlap/AI/AI_Hero.gd | 94 +++++++++++++++++++------------------- src/Player/Player.gd | 2 + src/Player/Player.tscn | 3 ++ src/World.tscn | 14 ++---- 6 files changed, 90 insertions(+), 64 deletions(-) diff --git a/src/Maps/Grid.gd b/src/Maps/Grid.gd index 2fd104c..f59f13c 100644 --- a/src/Maps/Grid.gd +++ b/src/Maps/Grid.gd @@ -8,7 +8,7 @@ var prio_grid : Array = [] var used_grid : Array = [] var time_passed := 0.0 var offset -export(float,0,42.0) var refresh_rate = 1.0 +export(float,0,42.0) var refresh_rate = 5.0 func _draw_object_grid(): @@ -61,6 +61,14 @@ func _reset_history(): for y in range(7): used_grid[x][y] = false +func countTargets(table): + for x in range(14): + for y in range(7): + for i in prio_grid[x][y]: + if i == Kind.TERMINAL_SYMBOL: + continue + table[i]+=1 + return table func _pixel_to_grid_coords(pixel : Vector2) -> Vector2: var new_coords : Vector2 @@ -79,6 +87,22 @@ func _is_in_grid(grid_coords : Vector2) -> bool: return false return true +func get_nearest(position, kind): + var list = [] + for x in range(14): + for y in range(7): + for i in prio_grid[x][y]: + if(i == kind): + list.append([x,y]) + var dist = [] + for field in list: + var tmp = sqrt(pow(position[0]-field[0],2)+pow(position[1]-field[1],2)) + dist.append(tmp) + var mini = 0 + for i in range(1, dist.size()): + if(dist[i]=spawnRate): - elapsedTime-=spawnRate - var Minion = load("") - var world = get_tree().current_scene.get_child(2) - var minion = Minion.instance() - world.add_child(minion) - minion.global_position = global_position + #if(elapsedTime>=spawnRate): + # elapsedTime-=spawnRate + # var Minion = load("") + # var world = get_tree().current_scene.get_child(2) + # #TODO minions + # var minion = Minion.instance() + # world.add_child(minion) + # minion.global_position = global_position func _on_Hurtbox_area_entered(area): diff --git a/src/Overlap/AI/AI_Hero.gd b/src/Overlap/AI/AI_Hero.gd index ada283e..715fb11 100644 --- a/src/Overlap/AI/AI_Hero.gd +++ b/src/Overlap/AI/AI_Hero.gd @@ -5,19 +5,13 @@ class_name Hero const PrioQueue = preload("prio_queue.gd") # Relative path const Grid = preload("res://Maps/Grid.gd") +var grid + enum{ LENGTH, WAY } -enum{ - DAMAGE, - HEALING, - SLOW, - WALL, - FIELD -} - enum{ STEP, ROLL, @@ -31,13 +25,15 @@ enum{ var ExecutionState = AI_MOVE -var numbers = [0,0,0,0,0,0,0,0,0] -var prios = [7,6,5,4,3,2,0,0,4] +var numbers = [0,0,0,0,0,0,0,0,0,0] +var prios = [7,0,6,5,4,3,2,0,0,4] var totalPrioTurn = 0 var executesTurn = false var abortProb = 0.01 +var targetField = [0,0] +var targetFieldUsed = false #calculates the sum of all present prios func calcTotalPrio(): var sum = 0 @@ -49,18 +45,22 @@ func calcTotalPrio(): return sum #calculates the relative porio -func calcRelPrio(index, sum): - return prios[index]/sum +func calcRelPrio(index, sum) -> float: + if(sum==0): + return 0.0 + return float(prios[index])/float(sum) #calucaltes the prio table of all enemies[0,1) func calcPrioTable(): - var table = [0,0,0,0,0,0,0,0,0] - var lower = 0 + var table = [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0] + numbers = grid.countTargets(numbers) + var lower = 0.0 var sum = calcTotalPrio() var i = 0; while i != Grid.Kind.TERMINAL_SYMBOL: - lower += calcRelPrio(i, sum) + if(numbers[i]!=0): + lower += calcRelPrio(i, sum) table[i] = lower i += 1 @@ -77,30 +77,27 @@ func adjustPrio(currentHealth, maxHealth): prios[Grid.Kind.HEART]=hearts #return the enemie which will be attacked -func calcEnemy(): +func calcEnemyKind(): var table = calcPrioTable() var number = randf() var i = 0 - while table[i] > number: - i=i+1 + while table[i] <= number: + i += 1 return i - -func getTargetField(currentField): - return Grid.prio_grid[currentField.x][currentField.y] - - #returns a move func getMoveDescription(myPosition : Vector2, targetPositions): - return AStar(myPosition, targetPositions[0]) + return AStar(myPosition, targetPositions) func getCost(field): var cost = 0 - for i in Grid.prio_grid[field.x][field.y]: + for i in grid.prio_grid[field.x][field.y]: match i: - Grid.kind.DAMAGE : cost += prios[Grid.kind.BONFIRE] * 6 - Grid.kind.SLOW : cost += 2 + Grid.Kind.DAMAGE: + cost += prios[Grid.kind.BONFIRE] * 6 + Grid.Kind.SLOW: + cost += 2 return cost #return an heurestic of distance @@ -136,9 +133,9 @@ func adjacent(currentPosition, can_roll = false): continue if(next[1]>6): continue - if(Grid.used_grid[next[0]][next[1]]): + if(grid.used_grid[next[0]][next[1]]): continue - if(Grid[next[0]][next[1]][0]!=WALL): + if(grid.object_grid[next[0]][next[1]][0]!=Grid.Kind.WALL): adj.append([STEP, Vector2(next[0],next[1])]) if not can_roll: @@ -153,9 +150,9 @@ func adjacent(currentPosition, can_roll = false): continue if(next[1]>6): continue - if(Grid.used_grid[next[0]][next[1]]): + if(grid.used_grid[next[0]][next[1]]): continue - if(Grid[next[0]][next[1]][0]!=WALL): + if(grid.object_grid[next[0]][next[1]][0]!=Grid.Kind.WALL): adj.append([ROLL, Vector2(next[0],next[1])]) return adj @@ -178,7 +175,7 @@ func AStar(source, target): return [node[4], node[3]] # 4 is kind | 3 is from # Set flag - Grid.used_grid[node[2][0]][node[2][1]] = true + grid.used_grid[node[2][0]][node[2][1]] = true var adj_list = adjacent(node[2]) for i in adj_list: var move_cost = 0 @@ -191,27 +188,30 @@ func AStar(source, target): var h_val = h(i[1], target) #[g+h(x), g(x), current, from, kind] - var new_node = [g_val+h_val, g_val,i[1], node, i[0]] + var new_node = [g_val+h_val, g_val,i[1], node[2], i[0]] Q.insert(new_node) return [NOTHING, [0,0]] func makeMove(delta): - #match ExecutionState: - # EXECUTING: - # pass - # AI_MOVE: - # var field = [0.1 * prios[Grid.Kind.BONFIRE], 1] - # var decision = randf() - ## var i = 0 - #while field[i] > decision: - # i += 1 - ## if (i == 0): - # var targetField = getTargetField(Grid.prio_grid) - # run(targetField) - # else: - # pass + pass + if ExecutionState == AI_MOVE: + var currentPosition = grid._pixel_to_grid_coords(global_position) + var enemyKind = calcEnemyKind() + var targetField = grid.get_nearest(currentPosition, enemyKind) + var MoveAdvice = getMoveDescription(currentPosition, targetField) + print(MoveAdvice) + ExecutionState = EXECUTING + pass + elif ExecutionState == EXECUTING: + if(targetFieldUsed): + pass + var cur = grid._pixel_to_grid_coords(global_position) + var distance = sqrt(pow(cur[0]-targetField[0],2)+ pow(cur[1]-targetField[1],2)) + if(distance<0.5): + targetFieldUsed = false + ExecutionState = AI_MOVE pass diff --git a/src/Player/Player.gd b/src/Player/Player.gd index bd6f6e5..bfdb6c4 100644 --- a/src/Player/Player.gd +++ b/src/Player/Player.gd @@ -37,6 +37,8 @@ var experience := 0.0 func _debug_update(): debug_label.text = str(player_stats.health) + "/" + str(player_stats.max_health) + " HP\n" + str(currency) + " €" +func _ready(): + grid = get_tree().current_scene.get_child(3) func _physics_process(delta): totaldamage += damage_per_second*delta diff --git a/src/Player/Player.tscn b/src/Player/Player.tscn index 7feeace..d1df54f 100644 --- a/src/Player/Player.tscn +++ b/src/Player/Player.tscn @@ -619,7 +619,10 @@ font_data = ExtResource( 6 ) [node name="Player" type="KinematicBody2D"] script = ExtResource( 1 ) +debug = null +ROLL_SPEED = null FRICTION = 270 +ACCELERATION = null [node name="Kind" parent="." instance=ExtResource( 7 )] kind = 1 diff --git a/src/World.tscn b/src/World.tscn index 9e79e36..119dfe1 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -12,7 +12,7 @@ script = ExtResource( 2 ) [node name="WallSprite" type="Sprite" parent="."] -position = Vector2( 351.915, 184 ) +position = Vector2( 352, 184 ) texture = ExtResource( 4 ) region_enabled = true region_rect = Rect2( 0, 0, 1280, 720 ) @@ -32,18 +32,14 @@ __meta__ = { position = Vector2( 152, 120 ) [node name="Player" parent="YSort" instance=ExtResource( 1 )] -position = Vector2( 84.2923, 24.0572 ) +position = Vector2( 176, 112 ) scale = Vector2( 2, 2 ) -FRICTION = 200 +FRICTION = null [node name="Bonfire" parent="YSort" instance=ExtResource( 7 )] position = Vector2( 296, -16 ) -[node name="Boss_template" parent="YSort" instance=ExtResource( 17 )] - -[node name="DebugLabel" parent="YSort/Boss_template" index="6"] -text = "Obermutti" +[node name="Boss_template2" parent="YSort" instance=ExtResource( 17 )] +position = Vector2( -40, 16 ) [node name="Grid" parent="." instance=ExtResource( 18 )] - -[editable path="YSort/Boss_template"] From 9799fdde04cef39483a57dabc2ada5223f6eb819 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Sun, 19 Apr 2020 17:49:00 +0200 Subject: [PATCH 07/13] Fireparticle added --- src/Effects/Fire/FireEffect.tscn | 31 +++++++++++++++++++++++++++++++ src/Objects/Torch/Torch.tscn | 6 +++++- src/World.tscn | 1 + 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/Effects/Fire/FireEffect.tscn diff --git a/src/Effects/Fire/FireEffect.tscn b/src/Effects/Fire/FireEffect.tscn new file mode 100644 index 0000000..1fc4b5d --- /dev/null +++ b/src/Effects/Fire/FireEffect.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://Effects/Fire/fire-particle.png" type="Texture" id=1] + +[sub_resource type="Gradient" id=1] +offsets = PoolRealArray( 0.488889, 1 ) +colors = PoolColorArray( 1, 1, 1, 1, 0, 0, 0, 0 ) + +[sub_resource type="GradientTexture" id=2] +gradient = SubResource( 1 ) + +[sub_resource type="ParticlesMaterial" id=3] +lifetime_randomness = 0.12 +emission_shape = 1 +emission_sphere_radius = 3.0 +flag_disable_z = true +gravity = Vector3( 0, -20, 0 ) +orbit_velocity = 0.0 +orbit_velocity_random = 0.0 +radial_accel = 9.2 +scale = 0.25 +scale_random = 0.15 +color_ramp = SubResource( 2 ) +hue_variation = 0.18 + +[node name="FireEffect" type="Particles2D"] +amount = 10 +lifetime = 1.2 +speed_scale = 1.3 +process_material = SubResource( 3 ) +texture = ExtResource( 1 ) diff --git a/src/Objects/Torch/Torch.tscn b/src/Objects/Torch/Torch.tscn index e07f98e..17920a5 100644 --- a/src/Objects/Torch/Torch.tscn +++ b/src/Objects/Torch/Torch.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] [ext_resource path="res://testSprites/fackel.png" type="Texture" id=2] [ext_resource path="res://Objects/Torch/Torch.gd" type="Script" id=3] +[ext_resource path="res://Effects/Fire/FireEffect.tscn" type="PackedScene" id=4] [sub_resource type="CapsuleShape2D" id=1] radius = 8.0 @@ -11,6 +12,9 @@ height = 12.0 [node name="Torch" type="StaticBody2D"] script = ExtResource( 3 ) +[node name="FireEffect" parent="." instance=ExtResource( 4 )] +position = Vector2( 1.88936, -12.4698 ) + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0, -8 ) texture = ExtResource( 2 ) diff --git a/src/World.tscn b/src/World.tscn index e93b79c..2476275 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -121,6 +121,7 @@ position = Vector2( -107.855, 73.4821 ) [node name="Player" parent="YSort" instance=ExtResource( 1 )] position = Vector2( 96, -69.5179 ) scale = Vector2( 2, 2 ) +debug = true FRICTION = 200 [node name="Bonfire" parent="YSort" instance=ExtResource( 7 )] From 4f20e43e5243f889332e55e8f61f3bc245beb1a5 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Sun, 19 Apr 2020 17:55:51 +0200 Subject: [PATCH 08/13] Splash Effect added --- src/Effects/Debris/SplashEffect.tscn | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/Effects/Debris/SplashEffect.tscn diff --git a/src/Effects/Debris/SplashEffect.tscn b/src/Effects/Debris/SplashEffect.tscn new file mode 100644 index 0000000..a21e24b --- /dev/null +++ b/src/Effects/Debris/SplashEffect.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://Effects/Debris/debris-splash.png" type="Texture" id=1] + +[sub_resource type="Animation" id=1] +resource_name = "__INIT__" +tracks/0/type = "value" +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ] +} + +[node name="SplashEffect" type="Sprite"] +texture = ExtResource( 1 ) +vframes = 3 +hframes = 3 +frame = 8 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +autoplay = "__INIT__" +anims/__INIT__ = SubResource( 1 ) From 92b97972bfa957ca61921fed17a8a5879560ea64 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Sun, 19 Apr 2020 18:07:34 +0200 Subject: [PATCH 09/13] Buug Fixes Maybe Destroyed on last merge --- src/Effects/Debris/SplashEffect.tscn | 1 - src/Player/Player.gd | 17 +++-------------- src/Player/Player.tscn | 11 ++++------- src/World.tscn | 10 +++------- 4 files changed, 10 insertions(+), 29 deletions(-) diff --git a/src/Effects/Debris/SplashEffect.tscn b/src/Effects/Debris/SplashEffect.tscn index a21e24b..e62ce1a 100644 --- a/src/Effects/Debris/SplashEffect.tscn +++ b/src/Effects/Debris/SplashEffect.tscn @@ -21,7 +21,6 @@ tracks/0/keys = { texture = ExtResource( 1 ) vframes = 3 hframes = 3 -frame = 8 [node name="AnimationPlayer" type="AnimationPlayer" parent="."] autoplay = "__INIT__" diff --git a/src/Player/Player.gd b/src/Player/Player.gd index c7f80f6..e007690 100644 --- a/src/Player/Player.gd +++ b/src/Player/Player.gd @@ -66,7 +66,6 @@ func _physics_process(delta): moveState.HIT: movement_hit() - $"Effects/HealEffect".emitting = heal_per_second > 0 elif movementState == moveState.ROLL: movement_roll() elif movementState == moveState.HIT: @@ -75,6 +74,7 @@ func _physics_process(delta): movement_idle() else: movement_run(Vector2(0,0), delta) + $"Effects/HealEffect".emitting = heal_per_second > 0 makeMove(delta) move() @@ -85,18 +85,10 @@ func move(): move_and_slide(velocity) -func set_animation_tree_vector(): - animation_tree.set("parameters/idle/blend_position", rollvector) - animation_tree.set("parameters/hit/blend_position", rollvector) - animation_tree.set("parameters/roll/blend_position", rollvector) - animation_tree.set("parameters/run/blend_position", rollvector) - - # API Interface for ai_hero func attac(direction, delta): direction = direction.normalized() rollvector = direction - set_animation_tree_vector() movementState = moveState.HIT @@ -104,7 +96,6 @@ func attac(direction, delta): func roll(direction, delta): direction = direction.normalized() rollvector = direction - set_animation_tree_vector() movementState = moveState.ROLL @@ -112,14 +103,13 @@ func roll(direction, delta): func run(direction, delta): direction = direction.normalized() rollvector = direction - set_animation_tree_vector() movementState = moveState.MOVE velocity = velocity.move_toward(player_stats.speed * rollvector, ACCELERATION * delta) if direction == Vector2.ZERO: - animation_state.travel("idle") + animation_state.change_state("idle") else: - animation_state.travel("run") + animation_state.change_state("run") func movement_move(delta): @@ -139,7 +129,6 @@ func movement_move(delta): velocity = Vector2.ZERO else: rollvector = input_vector - set_animation_tree_vector() animation_state.change_state("run") velocity = velocity.move_toward(player_stats.speed * input_vector, ACCELERATION * delta) if Input.is_action_just_pressed("roll"): diff --git a/src/Player/Player.tscn b/src/Player/Player.tscn index 258ab70..becf75b 100644 --- a/src/Player/Player.tscn +++ b/src/Player/Player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=57 format=2] +[gd_scene load_steps=63 format=2] [ext_resource path="res://Player/Player.gd" type="Script" id=1] [ext_resource path="res://Player/player.png" type="Texture" id=2] @@ -6,13 +6,13 @@ [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=4] [ext_resource path="res://Overlap/Stats/Stats.tscn" type="PackedScene" id=5] [ext_resource path="res://Fonts/Harmonic/Harmonic.ttf" type="DynamicFontData" id=6] -[ext_resource path="res://Effects/Heal/HealEffect.tscn" type="PackedScene" id=7] +[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=7] +[ext_resource path="res://Effects/Heal/HealEffect.tscn" type="PackedScene" id=8] [ext_resource path="res://Player/States/Idle.gd" type="Script" id=12] [ext_resource path="res://Player/States/Run.gd" type="Script" id=13] [ext_resource path="res://Player/States/Attack.gd" type="Script" id=14] [ext_resource path="res://Player/PlayerStateMachine.gd" type="Script" id=15] [ext_resource path="res://Player/States/Roll.gd" type="Script" id=16] -[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=7] [sub_resource type="CapsuleShape2D" id=1] radius = 2.15976 @@ -626,11 +626,8 @@ font_data = ExtResource( 6 ) [node name="Player" type="KinematicBody2D"] script = ExtResource( 1 ) -debug = null -ROLL_SPEED = null FRICTION = 270 title_scene = "res://Menus/TitleScreen/TitleScreen.tscn" -ACCELERATION = null [node name="Kind" parent="." instance=ExtResource( 7 )] kind = 1 @@ -743,7 +740,7 @@ script = ExtResource( 16 ) [node name="Effects" type="Node2D" parent="."] -[node name="HealEffect" parent="Effects" instance=ExtResource( 7 )] +[node name="HealEffect" parent="Effects" instance=ExtResource( 8 )] [connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"] [connection signal="area_entered" from="Hurtbox" to="." method="_on_Hurtbox_area_entered"] [connection signal="area_exited" from="Hurtbox" to="." method="_on_Hurtbox_area_exited"] diff --git a/src/World.tscn b/src/World.tscn index 33cf280..32c063e 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -4,13 +4,8 @@ [ext_resource path="res://World.gd" type="Script" id=2] [ext_resource path="res://Maps/Tilesets/Room/tileset_room.tres" type="TileSet" id=3] [ext_resource path="res://testSprites/dark.png" type="Texture" id=4] -[ext_resource path="res://Objects/Traps/Bear.tscn" type="PackedScene" id=5] -[ext_resource path="res://Objects/Banana/Banana.tscn" type="PackedScene" id=6] [ext_resource path="res://Objects/Bonfire/Bonfire.tscn" type="PackedScene" id=7] [ext_resource path="res://Boss/Boss_template.tscn" type="PackedScene" id=17] -[ext_resource path="res://Boss/SlimeBoss/SlimeBoss.tscn" type="PackedScene" id=18] -[ext_resource path="res://Menus/DialogueBox/DialogueBox.tscn" type="PackedScene" id=19] -[ext_resource path="res://Menus/DragNDrop/DragNDropUI.tscn" type="PackedScene" id=20] [ext_resource path="res://Maps/Grid.tscn" type="PackedScene" id=21] [node name="World" type="Node2D"] @@ -39,7 +34,8 @@ position = Vector2( 152, 120 ) [node name="Player" parent="YSort" instance=ExtResource( 1 )] position = Vector2( 176, 112 ) scale = Vector2( 2, 2 ) -FRICTION = null +debug = true +FRICTION = 200 [node name="Bonfire" parent="YSort" instance=ExtResource( 7 )] position = Vector2( 296, -16 ) @@ -47,4 +43,4 @@ position = Vector2( 296, -16 ) [node name="Boss_template2" parent="YSort" instance=ExtResource( 17 )] position = Vector2( -40, 16 ) -[node name="Grid" parent="." instance=ExtResource( 18 )] +[node name="Grid" parent="." instance=ExtResource( 21 )] From dd227744acea341d7dab13fed4999865915cc173 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Sun, 19 Apr 2020 18:23:50 +0200 Subject: [PATCH 10/13] fixed no target bug --- src/Maps/Grid.gd | 2 +- src/Overlap/AI/AI_Hero.gd | 41 +++++++++++++++++++++++++++------------ src/Player/Player.gd | 3 ++- src/Player/Player.tscn | 3 --- src/World.tscn | 17 ++++++++-------- 5 files changed, 40 insertions(+), 26 deletions(-) diff --git a/src/Maps/Grid.gd b/src/Maps/Grid.gd index f59f13c..811ba51 100644 --- a/src/Maps/Grid.gd +++ b/src/Maps/Grid.gd @@ -56,7 +56,7 @@ func _ready(): _update_grid() -func _reset_history(): +func reset_history(): for x in range(14): for y in range(7): used_grid[x][y] = false diff --git a/src/Overlap/AI/AI_Hero.gd b/src/Overlap/AI/AI_Hero.gd index 715fb11..958f20d 100644 --- a/src/Overlap/AI/AI_Hero.gd +++ b/src/Overlap/AI/AI_Hero.gd @@ -24,9 +24,10 @@ enum{ } var ExecutionState = AI_MOVE +var movmentState = NOTHING var numbers = [0,0,0,0,0,0,0,0,0,0] -var prios = [7,0,6,5,4,3,2,0,0,4] +var prios = [7,0,6,5,4,3,2,1,1,4] var totalPrioTurn = 0 var executesTurn = false @@ -68,7 +69,7 @@ func calcPrioTable(): #updates heart and bonfire prio func adjustPrio(currentHealth, maxHealth): - var prioVal = 10 - (currentHealth/maxHealth)*10 + var prioVal = 1000 - (float(currentHealth)/float(maxHealth))*1000 var bonfire = prioVal var hearts = prioVal - 1 if(hearts < 0): @@ -81,7 +82,7 @@ func calcEnemyKind(): var table = calcPrioTable() var number = randf() var i = 0 - while table[i] <= number: + while i!=Grid.Kind.TERMINAL_SYMBOL and table[i] <= number: i += 1 return i @@ -95,7 +96,7 @@ func getCost(field): for i in grid.prio_grid[field.x][field.y]: match i: Grid.Kind.DAMAGE: - cost += prios[Grid.kind.BONFIRE] * 6 + cost += prios[Grid.Kind.BONFIRE] * 6 Grid.Kind.SLOW: cost += 2 return cost @@ -193,25 +194,41 @@ func AStar(source, target): return [NOTHING, [0,0]] - func makeMove(delta): - pass if ExecutionState == AI_MOVE: var currentPosition = grid._pixel_to_grid_coords(global_position) var enemyKind = calcEnemyKind() - var targetField = grid.get_nearest(currentPosition, enemyKind) - var MoveAdvice = getMoveDescription(currentPosition, targetField) - print(MoveAdvice) + if(enemyKind==Grid.Kind.TERMINAL_SYMBOL): + return + var target = grid.get_nearest(currentPosition, enemyKind) + var MoveAdvice = getMoveDescription(currentPosition, target) + target = MoveAdvice[1] + if(MoveAdvice[0]==STEP): + run(Vector2(target[0]-currentPosition[0], target[1]-currentPosition[1]), delta*10) + targetField = target + targetFieldUsed = true + movmentState = STEP + elif(MoveAdvice[0]==ROLL): + roll(Vector2(target[0]-currentPosition[0], target[1]-currentPosition[1]), delta*10) + targetFieldUsed = true + targetField = target ExecutionState = EXECUTING - pass + grid.reset_history() elif ExecutionState == EXECUTING: if(targetFieldUsed): - pass var cur = grid._pixel_to_grid_coords(global_position) var distance = sqrt(pow(cur[0]-targetField[0],2)+ pow(cur[1]-targetField[1],2)) - if(distance<0.5): + if(distance<0.01): targetFieldUsed = false ExecutionState = AI_MOVE + else: + var currentPosition = grid._pixel_to_grid_coords(global_position) + if(movmentState==STEP): + run(Vector2(targetField[0]-currentPosition[0], targetField[1]-currentPosition[1]), delta*10) + elif(movmentState==ROLL): + roll(Vector2(targetField[0]-currentPosition[0], targetField[1]-currentPosition[1]), delta*10) + else: + ExecutionState = AI_MOVE pass diff --git a/src/Player/Player.gd b/src/Player/Player.gd index bfdb6c4..eb6972b 100644 --- a/src/Player/Player.gd +++ b/src/Player/Player.gd @@ -49,6 +49,7 @@ func _physics_process(delta): while(totaldamage < -1): totaldamage+=1 player_stats.health+=1 + adjustPrio(player_stats.health, player_stats.max_health) _debug_update() if debug == true: match movementState: @@ -169,7 +170,7 @@ func _on_Hurtbox_area_exited(area): func _on_Stats_no_health(): queue_free() - get_tree().change_scene("res://Menus/TitleScreen/TitleScreen.tscn") + #get_tree().change_scene("res://Menus/TitleScreen/TitleScreen.tscn") func _on_Hitbox_area_entered(area): diff --git a/src/Player/Player.tscn b/src/Player/Player.tscn index d1df54f..7feeace 100644 --- a/src/Player/Player.tscn +++ b/src/Player/Player.tscn @@ -619,10 +619,7 @@ font_data = ExtResource( 6 ) [node name="Player" type="KinematicBody2D"] script = ExtResource( 1 ) -debug = null -ROLL_SPEED = null FRICTION = 270 -ACCELERATION = null [node name="Kind" parent="." instance=ExtResource( 7 )] kind = 1 diff --git a/src/World.tscn b/src/World.tscn index 119dfe1..d90d371 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -1,13 +1,13 @@ -[gd_scene load_steps=8 format=2] +[gd_scene load_steps=7 format=2] [ext_resource path="res://Player/Player.tscn" type="PackedScene" id=1] [ext_resource path="res://World.gd" type="Script" id=2] [ext_resource path="res://Maps/Tilesets/Room/tileset_room.tres" type="TileSet" id=3] [ext_resource path="res://testSprites/dark.png" type="Texture" id=4] -[ext_resource path="res://Objects/Bonfire/Bonfire.tscn" type="PackedScene" id=7] -[ext_resource path="res://Boss/Boss_template.tscn" type="PackedScene" id=17] [ext_resource path="res://Maps/Grid.tscn" type="PackedScene" id=18] +[sub_resource type="AnimationNodeStateMachinePlayback" id=1] + [node name="World" type="Node2D"] script = ExtResource( 2 ) @@ -34,12 +34,11 @@ position = Vector2( 152, 120 ) [node name="Player" parent="YSort" instance=ExtResource( 1 )] position = Vector2( 176, 112 ) scale = Vector2( 2, 2 ) -FRICTION = null +FRICTION = 200 -[node name="Bonfire" parent="YSort" instance=ExtResource( 7 )] -position = Vector2( 296, -16 ) - -[node name="Boss_template2" parent="YSort" instance=ExtResource( 17 )] -position = Vector2( -40, 16 ) +[node name="AnimationTree" parent="YSort/Player" index="4"] +parameters/playback = SubResource( 1 ) [node name="Grid" parent="." instance=ExtResource( 18 )] + +[editable path="YSort/Player"] From 1a58a9689eee177bdd14baf04a121fdbd4e74cb9 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Sun, 19 Apr 2020 18:27:48 +0200 Subject: [PATCH 11/13] fixed placer movement --- src/Player/Player.gd | 21 ++++++++++++--------- src/World.tscn | 1 + 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/Player/Player.gd b/src/Player/Player.gd index eb6972b..8bccff7 100644 --- a/src/Player/Player.gd +++ b/src/Player/Player.gd @@ -49,25 +49,28 @@ func _physics_process(delta): while(totaldamage < -1): totaldamage+=1 player_stats.health+=1 - adjustPrio(player_stats.health, player_stats.max_health) + #adjustPrio(player_stats.health, player_stats.max_health) _debug_update() if debug == true: match movementState: moveState.MOVE: movement_move(delta) + moveState.IDLE: + movement_move(delta) moveState.ROLL: movement_roll() moveState.HIT: movement_hit() - elif movementState == moveState.ROLL: - movement_roll() - elif movementState == moveState.HIT: - movement_hit() - elif movementState == moveState.IDLE: - movement_idle() else: - movement_run(Vector2(0,0), delta) - makeMove(delta) + if movementState == moveState.ROLL: + movement_roll() + elif movementState == moveState.HIT: + movement_hit() + elif movementState == moveState.IDLE: + movement_idle() + else: + movement_run(Vector2(0,0), delta) + makeMove(delta) move() # IMPORTANT: If you are using move_and_slide don't multiply by delta diff --git a/src/World.tscn b/src/World.tscn index d90d371..84e817d 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -34,6 +34,7 @@ position = Vector2( 152, 120 ) [node name="Player" parent="YSort" instance=ExtResource( 1 )] position = Vector2( 176, 112 ) scale = Vector2( 2, 2 ) +debug = true FRICTION = 200 [node name="AnimationTree" parent="YSort/Player" index="4"] From 1df204e98753c62cefa092d8d372637ec71017ce Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Sun, 19 Apr 2020 18:29:19 +0200 Subject: [PATCH 12/13] Updated World for Testing --- src/World.tscn | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/World.tscn b/src/World.tscn index b5c9826..03c7346 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -1,9 +1,11 @@ -[gd_scene load_steps=7 format=2] +[gd_scene load_steps=9 format=2] [ext_resource path="res://Player/Player.tscn" type="PackedScene" id=1] [ext_resource path="res://World.gd" type="Script" id=2] [ext_resource path="res://Maps/Tilesets/Room/tileset_room.tres" type="TileSet" id=3] [ext_resource path="res://testSprites/dark.png" type="Texture" id=4] +[ext_resource path="res://Menus/DragNDrop/DragNDropUI.tscn" type="PackedScene" id=5] +[ext_resource path="res://Menus/DialogueBox/DialogueBox.tscn" type="PackedScene" id=6] [ext_resource path="res://Maps/Grid.tscn" type="PackedScene" id=18] [sub_resource type="AnimationNodeStateMachinePlayback" id=1] @@ -34,6 +36,7 @@ position = Vector2( 152, 120 ) [node name="Player" parent="YSort" instance=ExtResource( 1 )] position = Vector2( 176, 112 ) scale = Vector2( 2, 2 ) +debug = true FRICTION = 200 [node name="AnimationTree" parent="YSort/Player" index="4"] @@ -41,4 +44,10 @@ parameters/playback = SubResource( 1 ) [node name="Grid" parent="." instance=ExtResource( 18 )] +[node name="CanvasLayer" type="CanvasLayer" parent="."] + +[node name="DragNDropUI" parent="CanvasLayer" instance=ExtResource( 5 )] + +[node name="DialogueBox" parent="CanvasLayer" instance=ExtResource( 6 )] + [editable path="YSort/Player"] From f470b57b715db241709b684df59d41d91709bbb3 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Sun, 19 Apr 2020 18:37:01 +0200 Subject: [PATCH 13/13] Some Testing done and drop down fixed --- src/World.tscn | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/World.tscn b/src/World.tscn index 03c7346..673d9cd 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=9 format=2] +[gd_scene load_steps=11 format=2] [ext_resource path="res://Player/Player.tscn" type="PackedScene" id=1] [ext_resource path="res://World.gd" type="Script" id=2] @@ -6,6 +6,8 @@ [ext_resource path="res://testSprites/dark.png" type="Texture" id=4] [ext_resource path="res://Menus/DragNDrop/DragNDropUI.tscn" type="PackedScene" id=5] [ext_resource path="res://Menus/DialogueBox/DialogueBox.tscn" type="PackedScene" id=6] +[ext_resource path="res://Boss/Boss_template.tscn" type="PackedScene" id=7] +[ext_resource path="res://Objects/Bonfire/Bonfire.tscn" type="PackedScene" id=8] [ext_resource path="res://Maps/Grid.tscn" type="PackedScene" id=18] [sub_resource type="AnimationNodeStateMachinePlayback" id=1] @@ -14,7 +16,7 @@ script = ExtResource( 2 ) [node name="WallSprite" type="Sprite" parent="."] -position = Vector2( 357.587, 175.62 ) +position = Vector2( 355.382, 175.62 ) texture = ExtResource( 4 ) region_enabled = true region_rect = Rect2( 0, 0, 1280, 720 ) @@ -42,12 +44,20 @@ FRICTION = 200 [node name="AnimationTree" parent="YSort/Player" index="4"] parameters/playback = SubResource( 1 ) -[node name="Grid" parent="." instance=ExtResource( 18 )] +[node name="Boss_template" parent="YSort" instance=ExtResource( 7 )] +position = Vector2( -67.0889, 2.27742 ) + +[node name="Bonfire" parent="YSort" instance=ExtResource( 8 )] +position = Vector2( 214.647, -24.9932 ) [node name="CanvasLayer" type="CanvasLayer" parent="."] -[node name="DragNDropUI" parent="CanvasLayer" instance=ExtResource( 5 )] - [node name="DialogueBox" parent="CanvasLayer" instance=ExtResource( 6 )] +visible = false + +[node name="DragNDropUI" parent="CanvasLayer" instance=ExtResource( 5 )] +ObjectParent = NodePath("../..") + +[node name="Grid" parent="." instance=ExtResource( 18 )] [editable path="YSort/Player"]