This commit is contained in:
Segey Lapin
2021-12-24 23:56:10 +03:00
parent d401cf1090
commit f62e7fa720
113 changed files with 198252 additions and 412103 deletions

View File

@@ -1,12 +1,14 @@
extends Node
signal character_ready
export var trailer_house: PackedScene
export var palace: PackedScene
export var car: PackedScene
onready var obj_names = {
"palace": palace,
"trailer_house": trailer_house
"trailer_house": trailer_house,
}
var done = false
@@ -34,6 +36,9 @@ var gate_top_tile: PackedScene = preload("res://objects/gate-top.scn")
var entry_tile: PackedScene = preload("res://objects/block-room-entry.scn")
var roof_tile: PackedScene = preload("res://objects/roof.scn")
var tower_roof_tile: PackedScene = preload("res://objects/tower-roof.scn")
var courtroom: PackedScene = preload("res://objects/courtroom.tscn")
var bandit_camp: PackedScene = preload("res://bandit_camp.tscn")
var hostile_dwelling: PackedScene = preload("res://hostile_dwelling.tscn")
onready var palace_map_data = {
"courtyard_tile": courtyard_tile,
@@ -46,11 +51,12 @@ onready var palace_map_data = {
"gate_top_tile": gate_top_tile,
"entry_tile": entry_tile,
"roof_tile": roof_tile,
"tower_roof_tile": tower_roof_tile
"tower_roof_tile": tower_roof_tile,
"courtroom": courtroom,
}
onready var buildings = {
"trailer_house": preload("res://buildings/trailer-house.gd").new()
"trailer_house": preload("res://buildings/trailer-house.gd").new(),
}
func spawn_building(bname: String, xform: Transform) -> void:
@@ -126,13 +132,13 @@ func setup_town(site):
dst -= step
towns += 1
func setup_first_town():
func setup_first_town(site):
assert(!done)
var poly = RoadsData.get_site_polygon_3d(0)
var height = RoadsData.get_site_avg_height(0)
var border = RoadsData.get_site_border(0, 32)
var border1a = RoadsData.get_site_border(0, 42)
var border2 = RoadsData.get_site_border(0, 60)
var poly = RoadsData.get_site_polygon_3d(site)
var height = RoadsData.get_site_avg_height(site)
var border = RoadsData.get_site_border(site, 32)
var border1a = RoadsData.get_site_border(site, 42)
var border2 = RoadsData.get_site_border(site, 60)
var poly2 = []
poly2.resize(border2.size())
@@ -146,7 +152,7 @@ func setup_first_town():
var infl = RoadsData.get_influence_cached(center.x, center.z, 256)
center.y = infl.y
print("first town center: ", center)
var radial_points = RoadsData.get_site_radial_points(0, 32.0, 64.0)
var radial_points = RoadsData.get_site_radial_points(site, 32.0, 64.0)
var max_r = 0.0
for p in range(radial_points.size()):
var ep = radial_points[p]
@@ -219,7 +225,8 @@ func setup_traffic(site):
var n = (p2 - p1).cross(Vector3.UP).normalized()
var t = (p2 - p1).normalized()
var l = p1.distance_to(p2)
assert(l > 0 && t.length_squared() > 0)
assert(l > 0)
assert(t.length_squared() > 0)
var xpos = p1 + t * 8.0
var xe = 128.0
if l < xe + 16.0:
@@ -244,7 +251,6 @@ func setup_traffic(site):
c.add_to_group("traffic_spawn")
xpos += t * xe
l -= xe
func _ready():
traffic_rnd = RandomNumberGenerator.new()
traffic_rnd.randomize()
@@ -277,6 +283,7 @@ func _ready():
Traffic.add_traffic_vehicle(car)
var water_mat = load("res://water/Water.material")
Water.set_material(water_mat)
connect("character_ready", self, "char_ready")
var delay = 3.0
var state = 0
@@ -301,6 +308,9 @@ func _process(delta):
func stream_obj(obj: String, xform: Transform):
Spawner.place_scene(obj, xform)
var can_spawn = false
func char_ready():
can_spawn = true
func _physics_process(delta):
var cam = get_viewport().get_camera()
if !cam:
@@ -309,35 +319,48 @@ func _physics_process(delta):
1:
var space_state = get_viewport().get_world().direct_space_state
# probaly should not be here
for n in get_tree().get_nodes_in_group("spawn"):
var ok = false
if !n.is_in_group("keep"):
var where = n.get_global_transform().origin
var from = where
var to = where
from.y -= 8.0
to.y += 8.0
var result = space_state.intersect_ray(from, to)
if result.empty() || !result.has("collider"):
continue
if result.collider:
n.global_transform.origin = result.position
ok = true
if ok || n.is_in_group("keep"):
if n.is_in_group("male"):
characters.replace_character(n, "male", ["cmdq", "marker", "hurtboxes", "student"])
elif n.is_in_group("female"):
characters.replace_character(n, "female", ["cmdq", "marker", "hurtboxes", "student"])
elif n.is_in_group("car"):
var p1 = cam.global_transform.origin
var p2 = n.global_transform.origin
if p1.distance_squared_to(p2) < 5000.0:
var c = car.instance()
c.add_to_group("saved_vehicle")
var p = get_tree().root
p.add_child(c)
c.global_transform = n.global_transform
n.queue_free()
if can_spawn:
for n in get_tree().get_nodes_in_group("spawn"):
var ok = false
# if !n.is_in_group("keep"):
# var where = n.get_global_transform().origin
# var from = where
# var to = where
# from.y -= 8.0
# to.y += 8.0
# var result = space_state.intersect_ray(from, to)
# if result.empty() || !result.has("collider"):
# continue
# if result.collider:
# n.global_transform.origin = result.position
# ok = true
ok = true
if ok || n.is_in_group("keep"):
var base = ["cmdq", "marker", "hurtboxes"]
var g = ""
if n.is_in_group("male"):
g = "male"
elif n.is_in_group("female"):
g = "female"
if n.is_in_group("mystress"):
base.push_back("mystress")
if n.is_in_group("student"):
base.push_back("student")
elif n.is_in_group("bandit"):
base.push_back("bandit")
if g.length() > 0:
print(g, " ", base)
characters.replace_character(n, g, base)
elif n.is_in_group("car"):
var p1 = cam.global_transform.origin
var p2 = n.global_transform.origin
if p1.distance_squared_to(p2) < 5000.0:
var c = car.instance()
c.add_to_group("saved_vehicle")
var p = get_tree().root
p.add_child(c)
c.global_transform = n.global_transform
n.queue_free()
# buildings
@@ -379,3 +402,29 @@ static func get_place_rnd(xform: Transform):
rnd.seed = s
return rnd
func setup_bandit_camp(site):
var poly = RoadsData.get_site_polygon_3d(site)
var height = RoadsData.get_site_avg_height(site)
var center = Vector3()
for p in poly:
center += p
center /= poly.size()
center.y = height
var xform = Transform(Basis(), center)
var camp = bandit_camp.instance()
get_tree().root.add_child(camp)
camp.global_transform = xform
return camp
func setup_bandit_camp_outskirts(site):
var b = RoadsData.get_site_border(site, 96.0)
for e in range(min(4, b.size())):
if scenario.camp_dwellings.has(e):
if scenario.camp_dwellings[e].health <= 0:
continue
var h_xform = Transform(Basis(), b[e])
var dwg = hostile_dwelling.instance()
get_tree().root.add_child(dwg)
dwg.global_transform = h_xform
if !scenario.camp_dwellings.has(e):
scenario.camp_dwellings[e] = {}
scenario.camp_dwellings[e].health = 100.0