launcher selection list WIP, Player controller :D
This commit is contained in:
parent
0dea1e57bf
commit
bef423c5a7
9 changed files with 154 additions and 44 deletions
9
scenes/gui/SelectionList.tscn
Normal file
9
scenes/gui/SelectionList.tscn
Normal file
|
@ -0,0 +1,9 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://0k0j6ct7kxtt"]
|
||||
|
||||
[ext_resource type="Script" path="res://src/SelectionList.gd" id="1_bao2f"]
|
||||
|
||||
[node name="SelectionList" type="Control"]
|
||||
custom_minimum_size = Vector2(100, 20)
|
||||
layout_mode = 3
|
||||
anchors_preset = 0
|
||||
script = ExtResource("1_bao2f")
|
|
@ -1,7 +1,8 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://dc8jcyubx5hv7"]
|
||||
[gd_scene load_steps=6 format=3 uid="uid://dc8jcyubx5hv7"]
|
||||
|
||||
[ext_resource type="Script" path="res://src/Launcher.gd" id="1_cf26g"]
|
||||
[ext_resource type="Texture2D" uid="uid://d3sh54nbyqqiu" path="res://GFX/menu/launcher.jpg" id="2_6ldjf"]
|
||||
[ext_resource type="PackedScene" uid="uid://0k0j6ct7kxtt" path="res://scenes/gui/SelectionList.tscn" id="3_1mhbm"]
|
||||
[ext_resource type="PackedScene" uid="uid://5ktmpg8aurb7" path="res://scenes/gui/Button.tscn" id="3_nah2s"]
|
||||
[ext_resource type="FontFile" uid="uid://xe31montgcoo" path="res://GFX/font/cour/Courier New.ttf" id="4_8vkjh"]
|
||||
|
||||
|
@ -15,6 +16,7 @@ grow_vertical = 2
|
|||
script = ExtResource("1_cf26g")
|
||||
|
||||
[node name="BG" type="TextureRect" parent="."]
|
||||
texture_filter = 1
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
|
@ -23,6 +25,14 @@ grow_horizontal = 2
|
|||
grow_vertical = 2
|
||||
texture = ExtResource("2_6ldjf")
|
||||
|
||||
[node name="SelectionList" parent="." instance=ExtResource("3_1mhbm")]
|
||||
layout_mode = 1
|
||||
offset_left = 20.0
|
||||
offset_top = 197.0
|
||||
offset_right = 450.0
|
||||
offset_bottom = 335.0
|
||||
selectionList = ["1920x1080", "1680x1050", "1440x900", "1280x800", "1280x720", "1152x864", "1024x768", "800x600", "720x576", "720x480", "640x480"]
|
||||
|
||||
[node name="Launch" parent="." instance=ExtResource("3_nah2s")]
|
||||
custom_minimum_size = Vector2(100, 30)
|
||||
offset_left = 520.0
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://bw0tk6ml7gayq"]
|
||||
[gd_scene load_steps=7 format=3 uid="uid://bw0tk6ml7gayq"]
|
||||
|
||||
[ext_resource type="Script" path="res://src/DynamicMap.gd" id="1_mytgt"]
|
||||
[ext_resource type="Script" path="res://src/TempDebugCamera.gd" id="2_co6fy"]
|
||||
[ext_resource type="PackedScene" uid="uid://dm33ofcbh8sht" path="res://scenes/world/Player.tscn" id="3_58gow"]
|
||||
|
||||
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_tvhkv"]
|
||||
sky_top_color = Color(0.483795, 0.593484, 0.746094, 1)
|
||||
|
@ -22,9 +23,17 @@ script = ExtResource("1_mytgt")
|
|||
environment = SubResource("Environment_d5g72")
|
||||
|
||||
[node name="CameraPivot" type="Node3D" parent="."]
|
||||
visible = false
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="CameraPivot"]
|
||||
script = ExtResource("2_co6fy")
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0)
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("3_58gow")]
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.97521, -1.86909, -3.06)
|
||||
use_collision = true
|
||||
size = Vector3(15.4238, 0.866943, 15.2599)
|
||||
|
|
|
@ -8,9 +8,19 @@ size = Vector3(1, 2, 1)
|
|||
[node name="Player" type="CharacterBody3D"]
|
||||
script = ExtResource("1_n772d")
|
||||
|
||||
[node name="Camera" type="Camera3D" parent="."]
|
||||
[node name="Head" type="Node3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.75, 0)
|
||||
|
||||
[node name="Camera" type="Camera3D" parent="Head"]
|
||||
|
||||
[node name="Collision" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
shape = SubResource("BoxShape3D_7hapa")
|
||||
|
||||
[node name="FloorRay" type="RayCast3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0)
|
||||
target_position = Vector3(0, -0.1, 0)
|
||||
hit_from_inside = true
|
||||
|
||||
[node name="FloorPick" type="RayCast3D" parent="."]
|
||||
target_position = Vector3(0, -10, 0)
|
||||
|
|
|
@ -3,7 +3,7 @@ extends Node3D
|
|||
var roomTemplatesRaw = Dictionary()
|
||||
|
||||
func _ready() -> void:
|
||||
#RMesh.LoadRMesh(self, "GFX\\map\\gatea_opt.rmesh")
|
||||
RMesh.LoadRMesh(self, "GFX\\map\\gatea_opt.rmesh")
|
||||
#B3D.Load("GFX\\npcs\\106_2.b3d")
|
||||
add_child(B3D.Load("GFX\\apache.b3d"))
|
||||
var rooms = INI.Load("res://Data/rooms.ini")
|
||||
|
@ -172,29 +172,31 @@ func CreateMap():
|
|||
|
||||
# count the amount of rooms
|
||||
#For y = 1 To MapHeight - 1
|
||||
for y1 in range(1, MapHeight - 1):
|
||||
for y1 in range(MapHeight):
|
||||
zone = GetZone(y)
|
||||
|
||||
for x1 in range(1, MapWidth - 1):
|
||||
for x1 in range(MapWidth):
|
||||
if MapTemp[x1][y1] > 0:
|
||||
temp = min(MapTemp[x1 + 1][y1], 1) + min(MapTemp[x1 - 1][y1], 1)
|
||||
temp = temp + min(MapTemp[x1][y1 + 1], 1) + min(MapTemp[x1][y1 - 1], 1)
|
||||
if MapTemp[x1][y1] < 255:
|
||||
MapTemp[x1][y1] = temp
|
||||
print(MapTemp[x1][y1])
|
||||
match MapTemp[x1][y1]:
|
||||
1:
|
||||
Room1Amount[zone] = Room1Amount[zone] +1
|
||||
Room1Amount[zone] += 1
|
||||
print("R1A ", Room1Amount[zone])
|
||||
2:
|
||||
if min(MapTemp[x1 + 1][y1], 1) + min(MapTemp[x1 - 1][y1], 1) == 2:
|
||||
Room2Amount[zone] = Room2Amount[zone] + 1
|
||||
Room2Amount[zone] += 1
|
||||
elif min(MapTemp[x1][y1 + 1], 1) + min(MapTemp[x1][y1 - 1], 1) == 2:
|
||||
Room2Amount[zone] = Room2Amount[zone] + 1
|
||||
Room2Amount[zone] += 1
|
||||
else:
|
||||
Room2CAmount[zone] = Room2CAmount[zone] + 1
|
||||
Room2CAmount[zone] += 1
|
||||
3:
|
||||
Room3Amount[zone] = Room3Amount[zone] + 1
|
||||
Room3Amount[zone] += 1
|
||||
4:
|
||||
Room4Amount[zone] = Room4Amount[zone] + 1
|
||||
Room4Amount[zone] += 1
|
||||
|
||||
# force more room1s (if needed)
|
||||
for i in range(0, 2):
|
||||
|
|
|
@ -52,4 +52,4 @@ func _ready():
|
|||
LoadTexture("GFX/BlinkMeter.jpg")
|
||||
|
||||
func _process(delta):
|
||||
FPSfactor = delta
|
||||
FPSfactor = delta * 1000
|
||||
|
|
|
@ -1,9 +1,15 @@
|
|||
extends CharacterBody3D
|
||||
|
||||
var head: Node3D
|
||||
var camera: Camera3D
|
||||
var floorRay: RayCast3D
|
||||
var floorPick: RayCast3D
|
||||
|
||||
func _ready() -> void:
|
||||
camera = $Camera
|
||||
head = $Head
|
||||
camera = $Head/Camera
|
||||
floorRay = $FloorRay
|
||||
floorPick = $FloorPick
|
||||
|
||||
var CurrSpeed: float
|
||||
var CrouchState: float
|
||||
|
@ -26,7 +32,7 @@ var PlayerFallingPickDistance: float
|
|||
var NoClipSpeed: float
|
||||
var ForceAngle: float
|
||||
var DropSpeed: float
|
||||
var ShouldEntitiesFall: bool
|
||||
var ShouldEntitiesFall: bool = true
|
||||
|
||||
var Injuries: float
|
||||
|
||||
|
@ -36,6 +42,17 @@ func _physics_process(delta: float) -> void:
|
|||
var Sprint = 1.0
|
||||
var Speed = 0.018
|
||||
|
||||
if CurrSpeed > 0:
|
||||
Stamina = min(Stamina + 0.15 * Global.FPSfactor / 1.25, 100.0)
|
||||
else:
|
||||
Stamina = min(Stamina + 0.15 * Global.FPSfactor * 1.25, 100.0)
|
||||
|
||||
if StaminaEffectTimer > 0:
|
||||
StaminaEffectTimer = StaminaEffectTimer - (Global.FPSfactor / 70)
|
||||
else:
|
||||
if StaminaEffect != 1.0:
|
||||
StaminaEffect = 1.0
|
||||
|
||||
if abs(CrouchState - Crouch) < 0.001:
|
||||
CrouchState = Crouch
|
||||
else:
|
||||
|
@ -43,9 +60,9 @@ func _physics_process(delta: float) -> void:
|
|||
|
||||
if not NoClip:
|
||||
if ((Input.is_action_pressed("player_backwards") or Input.is_action_pressed("player_forwards")) or (Input.is_action_pressed("player_right") or Input.is_action_pressed("player_left")) and Playable) or ForceMove > 0:
|
||||
if Crouch == 0 and (Input.is_action_pressed("player_sprint")) and Stamina > 0.0 and (not IsZombie):
|
||||
if Crouch == 0 and Input.is_action_pressed("player_sprint") and Stamina > 0.0 and (not IsZombie):
|
||||
Sprint = 2.5
|
||||
Stamina = Stamina - Global.FPSfactor * 0.4 * StaminaEffect
|
||||
Stamina = Stamina - delta * 0.4 * StaminaEffect
|
||||
if Stamina <= 0:
|
||||
Stamina = -20.0
|
||||
|
||||
|
@ -69,9 +86,9 @@ func _physics_process(delta: float) -> void:
|
|||
var shake = fmod(Shake, 360)
|
||||
#Local tempchn%
|
||||
if not UnableToMove:
|
||||
Shake = fmod((Shake + Global.FPSfactor * min(Sprint, 1.5) * 7), 720)
|
||||
if shake < 180 and fmod(Shake, 360) >= 180 and KillTimer >= 0:
|
||||
print("step sound")
|
||||
Shake = fmod((Shake + delta * min(Sprint, 1.5) * 7), 720)
|
||||
#if shake < 180 and fmod(Shake, 360) >= 180 and KillTimer >= 0:
|
||||
#print("step sound")
|
||||
#if CurrStepSFX == 0:
|
||||
#temp = GetStepSound(Collider)
|
||||
#
|
||||
|
@ -107,7 +124,10 @@ func _physics_process(delta: float) -> void:
|
|||
Sprint = 0.5
|
||||
|
||||
if Input.is_action_just_pressed("player_crouch") and Playable:
|
||||
Crouch = not Crouch
|
||||
if Crouch == 1:
|
||||
Crouch = 0
|
||||
else:
|
||||
Crouch = 1
|
||||
|
||||
var movementSpeed = (Speed * Sprint) / (1.0 + CrouchState)
|
||||
|
||||
|
@ -119,7 +139,7 @@ func _physics_process(delta: float) -> void:
|
|||
|
||||
#RotateEntity Collider, WrapAngle(EntityPitch(Camera)), WrapAngle(EntityYaw(Camera)), 0
|
||||
camera.rotation.x = deg_to_rad(Rotation.x)
|
||||
rotation.y = deg_to_rad(Rotation.y)
|
||||
head.rotation.y = deg_to_rad(Rotation.y)
|
||||
|
||||
movementSpeed = movementSpeed * NoClipSpeed
|
||||
|
||||
|
@ -142,33 +162,24 @@ func _physics_process(delta: float) -> void:
|
|||
if not IsZombie:
|
||||
if Input.is_action_pressed("player_backwards") and Playable:
|
||||
temp = true
|
||||
angle = 180
|
||||
if Input.is_action_pressed("player_left"):
|
||||
angle = 135
|
||||
if Input.is_action_pressed("player_right"):
|
||||
angle = -135
|
||||
elif Input.is_action_pressed("player_forwards") and Playable: # Or ForceMove>0
|
||||
temp = true
|
||||
angle = 0
|
||||
if Input.is_action_pressed("player_left"):
|
||||
angle = 45
|
||||
if Input.is_action_pressed("player_right"):
|
||||
angle = -45
|
||||
elif ForceMove > 0:
|
||||
temp = true
|
||||
angle = ForceAngle
|
||||
elif Playable:
|
||||
if Input.is_action_pressed("player_left"):
|
||||
angle = 90
|
||||
temp = true
|
||||
if Input.is_action_pressed("player_right"):
|
||||
angle = -90
|
||||
temp = true
|
||||
else:
|
||||
temp = true
|
||||
angle = ForceAngle
|
||||
|
||||
angle = Utils.WrapAngle(Rotation.y + angle + 90.0)
|
||||
#angle = Utils.WrapAngle(Rotation.y + angle + 90.0)
|
||||
|
||||
var input_dir = Input.get_vector("player_left", "player_right", "player_forwards", "player_backwards")
|
||||
var direction = (head.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
|
||||
|
||||
if temp:
|
||||
CurrSpeed = Utils.CurveValue(movementSpeed, CurrSpeed, 20.0)
|
||||
|
@ -179,10 +190,28 @@ func _physics_process(delta: float) -> void:
|
|||
|
||||
if not UnableToMove:
|
||||
#TranslateEntity Collider, Cos(angle)*CurrSpeed * FPSfactor, 0, Sin(angle)*CurrSpeed * FPSfactor, True
|
||||
position.x += cos(angle) * CurrSpeed * 1000 * Global.FPSfactor
|
||||
position.z += sin(angle) * CurrSpeed * 1000 * Global.FPSfactor
|
||||
#print(str(cos(angle) * CurrSpeed * 100000 * Global.FPSfactor), " ", str(sin(angle) * CurrSpeed * 100000 * Global.FPSfactor))
|
||||
#position.x += cos(angle) * CurrSpeed * 100000 * Global.FPSfactor
|
||||
#position.z += sin(angle) * CurrSpeed * 100000 * Global.FPSfactor
|
||||
var movementX = (direction.x * CurrSpeed) * 40 * Global.FPSfactor
|
||||
var movementZ = (direction.z * CurrSpeed) * 40 * Global.FPSfactor
|
||||
#print(CurrSpeed, " ", direction.x, " ", direction.z, " ", str(movementX), " ", str(movementZ))
|
||||
velocity.x = movementX
|
||||
velocity.z = movementZ
|
||||
|
||||
var cameraRoll = max(min(sin(Shake / 2) * 2.5 * min(Injuries + 0.25, 3.0), 8.0), -8.0)
|
||||
var cameraBob = (sin(Shake) / (20.0 + CrouchState * 20.0)) * 0.6
|
||||
|
||||
camera.rotation.x = deg_to_rad(Rotation.x)
|
||||
camera.rotation.z = deg_to_rad(cameraRoll)
|
||||
camera.position.y = cameraBob
|
||||
head.position.y = 1.15 + 0.6 * (1 - CrouchState)
|
||||
head.rotation.y = deg_to_rad(Rotation.y)
|
||||
|
||||
var CollidedFloor = false
|
||||
if floorRay.is_colliding():
|
||||
CollidedFloor = true
|
||||
|
||||
#For i = 1 To CountCollisions(Collider)
|
||||
#If CollisionY(Collider, i) < EntityY(Collider) - 0.25 Then CollidedFloor = True
|
||||
#Next
|
||||
|
@ -204,7 +233,8 @@ func _physics_process(delta: float) -> void:
|
|||
else:
|
||||
DropSpeed = min(max(DropSpeed - 0.006 * Global.FPSfactor, -2.0), 0.0)
|
||||
if PlayerFallingPickDistance != 0:
|
||||
var pick = true#LinePick(EntityX(Collider),EntityY(Collider),EntityZ(Collider),0,-PlayerFallingPickDistance,0)
|
||||
floorPick.target_position.y = -PlayerFallingPickDistance
|
||||
var pick = floorPick.is_colliding()#LinePick(EntityX(Collider),EntityY(Collider),EntityZ(Collider),0,-PlayerFallingPickDistance,0)
|
||||
if pick:
|
||||
DropSpeed = min(max(DropSpeed - 0.006 * Global.FPSfactor, -2.0), 0.0)
|
||||
else:
|
||||
|
@ -215,12 +245,19 @@ func _physics_process(delta: float) -> void:
|
|||
|
||||
if not UnableToMove and ShouldEntitiesFall:
|
||||
#TranslateEntity Collider, 0, DropSpeed * FPSfactor, 0
|
||||
position.y += DropSpeed * Global.FPSfactor
|
||||
velocity.y += DropSpeed * Global.FPSfactor
|
||||
|
||||
if not UnableToMove:
|
||||
move_and_slide()
|
||||
|
||||
ForceMove = false
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseMotion:
|
||||
Rotation.y += event.relative.x
|
||||
Rotation.x += event.relative.y
|
||||
Rotation.y -= event.relative.x / 2
|
||||
Rotation.x -= event.relative.y / 2
|
||||
if Rotation.x > 70:
|
||||
Rotation.x = 70
|
||||
if Rotation.x < -70:
|
||||
Rotation.x = -70
|
||||
#event.velocity
|
||||
|
|
33
src/SelectionList.gd
Normal file
33
src/SelectionList.gd
Normal file
|
@ -0,0 +1,33 @@
|
|||
extends Control
|
||||
|
||||
@export var selectionList: Array
|
||||
|
||||
var options: Array
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
var font = load("res://GFX/font/cour/Courier New.ttf")
|
||||
|
||||
for column in range(ceil(selectionList.size() / 6.0)):
|
||||
var why = 0
|
||||
for i in range(6 * column, (6 * column) + 6):
|
||||
if i > selectionList.size() - 1:
|
||||
continue
|
||||
|
||||
var option = Control.new()
|
||||
option.position.x = 13 + (100 * column)
|
||||
option.position.y = 10 + (20 * why)
|
||||
option.size = Vector2(100, 20)
|
||||
var label = Label.new()
|
||||
label.text = selectionList[i]
|
||||
label.add_theme_font_override("font", font)
|
||||
label.add_theme_color_override("font_color", Color.BLACK)
|
||||
label.add_theme_font_size_override("font_size", int(58 * Global.menuScale))
|
||||
option.add_child(label)
|
||||
add_child(option)
|
||||
why += 1
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
|
@ -4,7 +4,7 @@ static func ReadString(reader:BufferStuffReader):
|
|||
var length = reader.readInt()
|
||||
return reader.readBuffer(length).get_string_from_ascii()
|
||||
|
||||
const WORLD_SCALE = 0.020
|
||||
const WORLD_SCALE = 0.010
|
||||
|
||||
static func StripFilename(file: String):
|
||||
var mi = ""
|
||||
|
@ -261,7 +261,7 @@ static func LoadRMesh(parentNode: Node3D, file: String):
|
|||
mat.albedo_texture = activeAlbedo
|
||||
mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA_DEPTH_PRE_PASS if activeAlbedoHasAlpha else BaseMaterial3D.TRANSPARENCY_DISABLED
|
||||
meshInstance.set_surface_override_material(0, mat)
|
||||
#meshInstance.create_trimesh_collision()
|
||||
meshInstance.create_trimesh_collision()
|
||||
scene.add_child(meshInstance)
|
||||
|
||||
#print("YOYOYO MARKER")
|
||||
|
@ -316,7 +316,7 @@ static func LoadRMesh(parentNode: Node3D, file: String):
|
|||
mat.albedo_color = Color.GREEN
|
||||
meshInstance.set_surface_override_material(0, mat)
|
||||
meshInstance.create_trimesh_collision()
|
||||
meshInstance.visible = false
|
||||
meshInstance.visible = true
|
||||
scene.add_child(meshInstance)
|
||||
|
||||
# trigger boxes
|
||||
|
|
Loading…
Add table
Reference in a new issue