Files
kicking-high/proto2/autoloads/world.gd
2020-04-13 12:45:25 +03:00

182 lines
3.9 KiB
GDScript

extends Node
signal room_event
signal next_day
signal next_period
signal level_up
signal start_training
var money: int = 2000
var master_node
var current_room
var team = {}
var cheer_team = {}
var room_events = {}
var line = {}
var training = false
var nav: Navigation
# warning-ignore:unused_class_variable
var quests : = []
# warning-ignore:unused_class_variable
var team_train_count : = 0
# warning-ignore:unused_class_variable
var arrow: Spatial
# warning-ignore:unused_class_variable
var next_scene: String
var player_visual = {
"gender": "male"
}
func room_event(ev: String):
if current_room:
if room_events.has(current_room.name):
if room_events[current_room.name].has(ev):
var evdata = room_events[current_room.name][ev]
evdata.obj.call_deferred(evdata.fname, evdata.name)
func register_room_event(roomobj, evname, fname):
if !room_events.has(roomobj.name):
room_events[roomobj.name] = {}
room_events[roomobj.name][evname] = {"obj": roomobj, "name": evname, "fname": fname}
func _ready():
connect("room_event", self, "room_event")
# warning-ignore:unused_class_variable
var master_stats:Dictionary = {
"type": 0,
"gender": 0,
"name": "John",
"lastname": "Smith",
"speed": 0.5,
"strength": 0.5,
"agression": 0.5,
"charisma": 0.5,
"obedience": 0.0,
"cost": 0,
"xp": 0,
"mext_xp": 100,
"points": 5,
"level": 1,
"look": {}
}
func new_candidate() -> Dictionary:
var gender = randi() % 2
var type = 0
if gender == 0:
type = 0
else:
type = randi() % 2
var ret = {}
if gender == 0:
ret.name = "John"
ret.lastname = "Doe"
else:
ret.name = "Jane"
ret.lastname = "Doe"
ret.gender = gender
ret.type = type
ret.speed = 0.3 + randf() * 0.7
ret.strength = 0.1 + randf() * 0.9
ret.agression = 0.1 + randf() * 0.9
ret.charisma = 0.1 + randf() * 0.9
ret.obedience = 0.1 + randf() * 0.9
if type == 0:
ret.cost = 2 + int(randf() * 20.0 * (ret.speed + ret.strength + ret.agression) / 3.0)
else:
ret.cost = 2 + int(randf() * 20.0 * (ret.speed + ret.strength + ret.charisma) / 3.0)
ret.xp = 0
ret.next_xp = 100
ret.points = 5
ret.level = 1
return ret
func auto_points(ch):
while ch.points > 0:
ch.points -= 1
var choice = randi() % 5
match(choice):
0:
if ch.type == 0:
ch.strength += 0.15
else:
ch.charisma += 0.15
1:
ch.speed += 0.2
2:
ch.agression += 0.2
3:
ch.obedience += 0.2
4:
if ch.type == 1:
ch.strength += 0.05
else:
ch.charisma += 0.05
func level_up(ch):
emit_signal("level_up", ch)
ch.points += 1 + randi() % 5
if ch.level < 20:
ch.next_xp *= 2
elif ch.level < 60:
ch.next_xp += (10 + ch.level) * 1000
else:
ch.next_xp += (20 + ch.level) * 2000
ch.level += 1
print("level up!, new level: ", ch.level, " next xp: ", ch.next_xp)
auto_points(ch)
func increase_xp(ch, num):
ch.xp += num
print("added ", num, " xp, xp = ", ch.xp)
if ch.xp >= ch.next_xp:
level_up(ch)
else:
print("next at ", ch.next_xp)
func init_data():
for ci in range(30):
var cd : = new_candidate()
line[ci] = cd
team = {}
cheer_team = {}
print(line)
func dialogue(npc):
pass
var day_period = 0
var day = 1
func next_day():
day += 1
emit_signal("next_day")
func next_period():
day_period += 1
emit_signal("next_period")
if day_period == 4:
day_period = 0
next_day()
func action1():
print("action1")
var obj = null
var dstc = 0.0
for k in get_tree().get_nodes_in_group("act") + get_tree().get_nodes_in_group("npc"):
if obj == null:
obj = k
dstc = master_node.global_position.distance_squared_to(obj.global_position)
continue
var dst = master_node.global_position.distance_squared_to(k.global_position)
if dstc > dst:
obj = k
dstc = master_node.global_position.distance_squared_to(obj.global_position)
continue
if obj && dstc < 400.0:
print("action1 obj")
if obj.is_in_group("npc"):
dialogue(obj)
else:
obj.call_deferred("activate")
else:
print("action1 room")
emit_signal("room_event", "action1")