123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- extends Node
- var enemy = preload('res://Enemy.tscn')
- export var wave_num = 1
- export var spawn_speed = 10
- export var limit = 32
- export var maxlimit = 1024
- export var mod = 1.5
- export var mod2 = 1.2
- var dict = {
- "arraypos":[],
- "arrayvida":[],
- "arraytype":[],
- "arraytarget":[],
- "arraymotion":[],
- "arraydirtime":[],
- 'attacker':[],
- 'enabled':[],
- 'type':[],
- }
- var collisions = []
- var areas = preload('res://Enemy2.tscn')
- func _ready():
-
- yield(get_tree().create_timer(1.0),"timeout")
-
- for x in maxlimit:
- var rot = rand_range(-PI,PI)
- var pos = (Vector2(sin(rot), cos(rot)) * rand_range(400,800)) + Vector2(320,180)
- dict.arraytarget.append(null)
- dict.arraypos.append(pos)
- dict.arrayvida.append(100)
- dict.arraytype.append('goblin')
- dict.attacker.append('')
- dict.arraymotion.append(Vector2.ZERO)
- dict.arraydirtime.append(int(rand_range(60,120)))
- dict.enabled.append(true)
- dict.type.append(randi()%4)
-
- var motion = Vector2()
- export var speed = 2.3
- var tick = 0
- export var tickrate = 4
- var blockmapenemy = {}
- #func _physics_process(delta):
- #
- ##setting tickrate, to reduce executions per second
- ## tick += 1
- ## if fmod(tick,tickrate) == 0:
- # if true:
- #
- ##dict of aprox positions of players
- # var blockmap = {}
- # if get_node('../players').get_child_count() == 0: return
- # for z in get_node('../players').get_children():
- # var x = int(z.global_position.x/20)
- # var y = int(z.global_position.y/20)
- # blockmap[Vector2(x,y)] = z
- #
- ##yes this abomination controls the enemies, ECS code looks ugly as fuck in this engine
- # for i in dict.arraytarget.size():
- #
- ## death checking
- # if dict.arrayvida[i] > 0 and dict.enabled[i]:
- #
- ##picking new targets if the last one is invalid
- # if dict.arraytarget[i] == null:
- # if get_node('../players').get_child_count() == 0: return
- # var array = get_node('../players').get_children()
- # if array.size() > 0:
- # dict.arraytarget[i] = array[randi()%array.size()]
- #
- ##exclusive movmenet code
- # if fmod(tick, dict.arraydirtime[i]) == 0:
- # if is_instance_valid(dict.arraytarget[i]):
- # dict.arraymotion[i] = (dict.arraytarget[i].global_position - dict.arraypos[i]).normalized() * speed
- # dict.arraypos[i] += dict.arraymotion[i]
- #
- ## enemy attak on players
- # var x = int(dict.arraypos[i].x/20)
- # var y = int(dict.arraypos[i].y/20)
- # if blockmap.has(Vector2(x,y)):
- # blockmap[Vector2(x,y)].damage( -enemydmg, '')
- ##recycling enemies
- # elif dict.enabled[i]:
- # var rot = rand_range(-PI,PI)
- # dict.arraypos[i] = (Vector2(sin(rot), cos(rot)) * rand_range(400,800)) + Vector2(320,180)
- # dict.arrayvida[i] = 100
- # dict.arraytarget[i] = null
- # death_count(dict.attacker[i])
- #
- func damage_detection(arg,dmg, attacker):
- blockmapenemy = {}
- for i in dict.arraypos.size():
- var x2 = int( (dict.arraypos[i].x -16)/32)
- var y2 = int( (dict.arraypos[i].y -16)/32)
- if blockmapenemy.has(Vector2(x2,y2)):
- blockmapenemy[Vector2(x2,y2)].append(i)
- else:
- blockmapenemy[Vector2(x2,y2)] = [i]
-
- var x = int((arg.x -16)/32)
- var y = int((arg.y -16)/32)
- for x2 in range(-2,2):
- for y2 in range(-2,2):
- if blockmapenemy.has(Vector2(x+x2,y+y2)):
- for i in blockmapenemy[Vector2(x+x2,y+y2)]:
- dict.arrayvida[i] -= dmg
- if dict.arrayvida[i] <= 0:
- dict.attacker[i] = attacker
- #unrelated code that takes care of level up, kill counts, xp and etc
- var counter = 0
- var score = {}
- var xp = {}
- var nxt = {}
- var lv = {}
- var maxhp = {}
- export var hpgain = 5
- export var dmggain = 5
- export var xpggain = 10
- export var xpnext = 1.2
- export var enemydmg = 3.0
- func death_count(id):
- if not nxt.has(id):
- nxt[id] = 100
-
- if not maxhp.has(id):
- maxhp[id] = 100
-
- if not lv.has(id):
- lv[id] = 0
-
- if score.has(id):
- score[id] += 1
- else:
- score[id] = 1
-
- if xp.has(id):
- xp[id] += xpggain
- if xp[id] > nxt[id]:
- lv[id] += 1
- var gain = hpgain * lv[id]
- maxhp[id] += gain
- get_parent().level_up(lv[id] , maxhp[id], gain, dmggain, id)
- xp[id] = 0
- nxt[id] *= xpnext
- else:
- xp[id] = xpggain
- get_parent().kill_update(score[id], xp[id], lv[id], nxt[id], id)
|