initial commit
This commit is contained in:
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# Godot 4+ specific ignores
|
||||
.godot/
|
||||
/android/
|
||||
BIN
Assets/MISC_Textures/DustMote.png
Normal file
BIN
Assets/MISC_Textures/DustMote.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
35
Assets/MISC_Textures/DustMote.png.import
Normal file
35
Assets/MISC_Textures/DustMote.png.import
Normal file
@@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c0qenaw8wxlbv"
|
||||
path.s3tc="res://.godot/imported/DustMote.png-ccf8f095a7e3eeb9e5d61dd7836e85d9.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/MISC_Textures/DustMote.png"
|
||||
dest_files=["res://.godot/imported/DustMote.png-ccf8f095a7e3eeb9e5d61dd7836e85d9.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
16
Assets/Scripts/Misc/flickering_light.gd
Normal file
16
Assets/Scripts/Misc/flickering_light.gd
Normal file
@@ -0,0 +1,16 @@
|
||||
extends OmniLight3D
|
||||
@onready var light: OmniLight3D = get_node(".")
|
||||
@onready var timer: Timer = get_node('Timer')
|
||||
|
||||
var randomRange: float = 0.0
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
light.light_energy = lerp(light.light_energy, randomRange, 0.3)
|
||||
|
||||
pass
|
||||
|
||||
func _on_timer_timeout() -> void:
|
||||
randomRange = randf_range(1.5, 4)
|
||||
timer.wait_time = randf_range(0.2, 0.5)
|
||||
pass # Replace with function body.
|
||||
1
Assets/Scripts/Misc/flickering_light.gd.uid
Normal file
1
Assets/Scripts/Misc/flickering_light.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bfsaxhnb0qpuk
|
||||
2
Assets/Scripts/Player Controls/global_settings.gd
Normal file
2
Assets/Scripts/Player Controls/global_settings.gd
Normal file
@@ -0,0 +1,2 @@
|
||||
extends Node
|
||||
@export var cameraSensitivity: float = 0.001
|
||||
1
Assets/Scripts/Player Controls/global_settings.gd.uid
Normal file
1
Assets/Scripts/Player Controls/global_settings.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ctroo2h1bbcyv
|
||||
40
Assets/Scripts/Player Controls/interact.gd
Normal file
40
Assets/Scripts/Player Controls/interact.gd
Normal file
@@ -0,0 +1,40 @@
|
||||
extends Camera3D
|
||||
|
||||
var rayRange = 2000
|
||||
|
||||
@onready var crosshair = %CrosshairCenter
|
||||
@export var terminal: TerminalControls
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
Get_Camera_Collision()
|
||||
|
||||
|
||||
func Get_Camera_Collision():
|
||||
var centre = get_viewport().get_size()/2
|
||||
|
||||
var rayOrigin = project_ray_origin(centre)
|
||||
var rayEnd = rayOrigin + project_ray_normal(centre)*rayRange
|
||||
|
||||
var newIntersection = PhysicsRayQueryParameters3D.create(rayOrigin, rayEnd)
|
||||
var intersection = get_world_3d().direct_space_state.intersect_ray(newIntersection)
|
||||
|
||||
var is_highlighted = not intersection.is_empty()
|
||||
|
||||
if crosshair and is_instance_valid(crosshair):
|
||||
crosshair.set_highlight(is_highlighted)
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event is InputEventKey and event.pressed and crosshair.is_highlighted:
|
||||
if event.is_echo(): return
|
||||
|
||||
if event.keycode == KEY_BACKSPACE:
|
||||
terminal.InputDelChar()
|
||||
|
||||
if event.unicode > 31:
|
||||
var character = char(event.unicode)
|
||||
if terminal: # Check that you assigned the node in the Inspector
|
||||
terminal.InputChar(character)
|
||||
|
||||
if event.keycode == KEY_ENTER:
|
||||
terminal.EnterCommand()
|
||||
1
Assets/Scripts/Player Controls/interact.gd.uid
Normal file
1
Assets/Scripts/Player Controls/interact.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://55cgjgncpb53
|
||||
44
Assets/Scripts/Player Controls/player_movement.gd
Normal file
44
Assets/Scripts/Player Controls/player_movement.gd
Normal file
@@ -0,0 +1,44 @@
|
||||
extends Node3D
|
||||
|
||||
@onready var camera: Camera3D = $Camera3D
|
||||
@export var verticalLookLimit: float = deg_to_rad(50)
|
||||
|
||||
|
||||
@export var psxScene: PackedScene
|
||||
var psxInstance: Node = null
|
||||
var togglePsxEffect: bool = false
|
||||
#@export var horizontalLookRightLimit: float = deg_to_rad(290)
|
||||
#@export var horizontalLookLeftLimit: float = deg_to_rad(-196)
|
||||
var cameraPitch: float = 0.0
|
||||
var cameraYaw: float = 0.0
|
||||
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
var currentRot = camera.rotation
|
||||
cameraPitch = currentRot.x
|
||||
cameraYaw = currentRot.y
|
||||
camera.rotation.z = 0.0
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseMotion:
|
||||
cameraPitch -= event.screen_relative.y * GlobalSettings.cameraSensitivity
|
||||
cameraYaw -= event.screen_relative.x * GlobalSettings.cameraSensitivity
|
||||
#cameraPitch = clamp(cameraPitch, -verticalLookLimit, verticalLookLimit)
|
||||
#cameraYaw = clamp(cameraYaw, -horizontalLookLeftLimit, horizontalLookRightLimit)
|
||||
cameraPitch = clamp(cameraPitch, -verticalLookLimit, verticalLookLimit)
|
||||
camera.rotation = Vector3(cameraPitch, cameraYaw, 0)
|
||||
|
||||
if Input.is_action_just_released("PSX Theme toggle"):
|
||||
togglePsxEffect = !togglePsxEffect
|
||||
|
||||
if togglePsxEffect:
|
||||
psxInstance = psxScene.instantiate()
|
||||
add_child(psxInstance)
|
||||
else:
|
||||
psxInstance.queue_free()
|
||||
psxInstance = null
|
||||
|
||||
|
||||
|
||||
1
Assets/Scripts/Player Controls/player_movement.gd.uid
Normal file
1
Assets/Scripts/Player Controls/player_movement.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dmtpstry0o0a3
|
||||
89
Assets/Scripts/Shaders/psx.gdshader
Normal file
89
Assets/Scripts/Shaders/psx.gdshader
Normal file
@@ -0,0 +1,89 @@
|
||||
shader_type canvas_item;
|
||||
|
||||
uniform sampler2D screen_texture : hint_screen_texture;
|
||||
uniform float pixel_resolution : hint_range(64.0, 512.0) = 240.0;
|
||||
uniform int color_steps : hint_range(2, 64) = 16;
|
||||
uniform float noise_strength : hint_range(0.0, 1.0) = 0.1;
|
||||
uniform bool enable_dither = true;
|
||||
uniform float dither_strength : hint_range(0.0, 1.0) = 0.3;
|
||||
|
||||
uniform bool enable_glow = true;
|
||||
uniform float glow_strength : hint_range(0.0, 1.0) = 0.4;
|
||||
uniform float glow_spread : hint_range(0.001, 0.01) = 0.005;
|
||||
|
||||
uniform bool enable_vintage = true; // Toggle
|
||||
uniform float vintage_strength : hint_range(0.0, 1.0) = 0.8;
|
||||
|
||||
float random(vec2 co) {
|
||||
return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);
|
||||
}
|
||||
|
||||
float bayer_dither(vec2 pos) {
|
||||
int x = int(mod(pos.x, 4.0));
|
||||
int y = int(mod(pos.y, 4.0));
|
||||
int index = x + y * 4;
|
||||
|
||||
float bayer[16] = float[](
|
||||
0.0, 8.0, 2.0, 10.0,
|
||||
12.0, 4.0, 14.0, 6.0,
|
||||
3.0, 11.0, 1.0, 9.0,
|
||||
15.0, 7.0, 13.0, 5.0
|
||||
);
|
||||
|
||||
return bayer[index] / 16.0;
|
||||
}
|
||||
|
||||
vec3 get_glow(vec2 uv) {
|
||||
vec3 col = vec3(0.0);
|
||||
float total = 0.0;
|
||||
|
||||
for (int x = -1; x <= 1; x++) {
|
||||
for (int y = -1; y <= 1; y++) {
|
||||
vec2 offset = vec2(float(x), float(y)) * glow_spread;
|
||||
col += texture(screen_texture, uv + offset).rgb;
|
||||
total += 1.0;
|
||||
}
|
||||
}
|
||||
return col / total;
|
||||
}
|
||||
|
||||
vec3 apply_black_vintage_edges(vec3 color, vec2 uv) {
|
||||
// Distance from screen center
|
||||
float dist = distance(uv, vec2(0.5));
|
||||
|
||||
// Mask: only affects edges
|
||||
float edge_mask = smoothstep(0.4, 0.8, dist);
|
||||
|
||||
// Blend edges to black
|
||||
color = mix(color, vec3(0.0), edge_mask * vintage_strength);
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 pixel_uv = floor(UV * pixel_resolution) / pixel_resolution;
|
||||
vec3 color = texture(screen_texture, pixel_uv).rgb;
|
||||
|
||||
if (enable_glow) {
|
||||
vec3 blurred = get_glow(UV);
|
||||
color += blurred * glow_strength;
|
||||
}
|
||||
|
||||
float steps = float(color_steps);
|
||||
color = floor(color * steps + 0.5) / steps;
|
||||
|
||||
float noise = (random(UV + TIME) - 0.5) * noise_strength;
|
||||
color += noise;
|
||||
|
||||
if (enable_dither) {
|
||||
float threshold = bayer_dither(FRAGCOORD.xy);
|
||||
color += (dither_strength * (threshold - 0.5));
|
||||
}
|
||||
|
||||
// Black vintage only on edges
|
||||
if (enable_vintage) {
|
||||
color = apply_black_vintage_edges(color, UV);
|
||||
}
|
||||
|
||||
COLOR.rgb = clamp(color, 0.0, 1.0);
|
||||
}
|
||||
1
Assets/Scripts/Shaders/psx.gdshader.uid
Normal file
1
Assets/Scripts/Shaders/psx.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://uo56rpfskail
|
||||
39
Assets/Scripts/UI/crosshair.gd
Normal file
39
Assets/Scripts/UI/crosshair.gd
Normal file
@@ -0,0 +1,39 @@
|
||||
extends CenterContainer
|
||||
@export var dotRadius: float = 1
|
||||
@export var dotColor: Color = Color.WHITE
|
||||
|
||||
var current_radius: float
|
||||
var is_highlighted: bool = false
|
||||
var tween: Tween
|
||||
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
queue_redraw()
|
||||
pass # Replace with function body.
|
||||
|
||||
# This function is called by the Camera script
|
||||
func set_highlight(active: bool) -> void:
|
||||
is_highlighted = active
|
||||
_animate_radius()
|
||||
queue_redraw()
|
||||
|
||||
func _animate_radius():
|
||||
# Kill any existing tween so they don't fight each other
|
||||
if tween and tween.is_running():
|
||||
tween.kill()
|
||||
|
||||
tween = create_tween()
|
||||
|
||||
# Determine target based on state
|
||||
var target = dotRadius * 3 if is_highlighted else dotRadius
|
||||
|
||||
# Transition from current_radius to target over 0.3 seconds
|
||||
tween.tween_property(self, "current_radius", target, 0.1)\
|
||||
.set_trans(Tween.TRANS_SINE)\
|
||||
.set_ease(Tween.EASE_OUT)
|
||||
|
||||
|
||||
func _draw():
|
||||
draw_circle(Vector2(0,0),current_radius,dotColor)
|
||||
1
Assets/Scripts/UI/crosshair.gd.uid
Normal file
1
Assets/Scripts/UI/crosshair.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://chb1dyhl7cyg1
|
||||
13
Assets/Scripts/UI/fade_in.gd
Normal file
13
Assets/Scripts/UI/fade_in.gd
Normal file
@@ -0,0 +1,13 @@
|
||||
extends Node
|
||||
|
||||
@onready var colorRect = $ColorRect
|
||||
@onready var animationPlayer = $AnimationPlayer
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
colorRect.visible = true
|
||||
animationPlayer.play("fade_in")
|
||||
await get_tree().create_timer(5.0).timeout
|
||||
queue_free()
|
||||
|
||||
pass # Replace with function body.
|
||||
1
Assets/Scripts/UI/fade_in.gd.uid
Normal file
1
Assets/Scripts/UI/fade_in.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cs6mhxw52ldo1
|
||||
15
Assets/Scripts/UI/main_menu.gd
Normal file
15
Assets/Scripts/UI/main_menu.gd
Normal file
@@ -0,0 +1,15 @@
|
||||
extends Control
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
|
||||
|
||||
func _on_new_game_button_pressed() -> void:
|
||||
get_tree().change_scene_to_file("res://Scenes/Levels/office.tscn")
|
||||
print("changed")
|
||||
pass # Replace with function body.
|
||||
1
Assets/Scripts/UI/main_menu.gd.uid
Normal file
1
Assets/Scripts/UI/main_menu.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://2sxp2yxkv5k2
|
||||
39
Assets/Scripts/UI/pause_menu.gd
Normal file
39
Assets/Scripts/UI/pause_menu.gd
Normal file
@@ -0,0 +1,39 @@
|
||||
extends Control
|
||||
|
||||
|
||||
var paused = false
|
||||
var showMouse = false
|
||||
|
||||
func _ready() -> void:
|
||||
|
||||
self.visible = paused
|
||||
|
||||
func _input(_event: InputEvent) -> void:
|
||||
if Input.is_action_just_pressed("Pause"):
|
||||
print("paused")
|
||||
_pause_and_unpause()
|
||||
|
||||
func _pause_and_unpause():
|
||||
paused = !paused
|
||||
showMouse = !showMouse
|
||||
get_tree().paused = paused
|
||||
self.visible = paused
|
||||
$MarginContainer/VBoxContainer/CameraSensitivityLabel/HSlider.value = GlobalSettings.cameraSensitivity
|
||||
|
||||
if showMouse:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
else:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
func _on_resume_game_button_pressed() -> void:
|
||||
_pause_and_unpause()
|
||||
|
||||
|
||||
func _on_quit_game_button_pressed() -> void:
|
||||
get_tree().quit()
|
||||
|
||||
|
||||
func _on_h_slider_value_changed(value: float) -> void:
|
||||
GlobalSettings.cameraSensitivity = value
|
||||
print(GlobalSettings.cameraSensitivity)
|
||||
pass # Replace with function body.
|
||||
1
Assets/Scripts/UI/pause_menu.gd.uid
Normal file
1
Assets/Scripts/UI/pause_menu.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cnw8764a6hljr
|
||||
168
Assets/Scripts/UI/terminal/terminal_controls.gd
Normal file
168
Assets/Scripts/UI/terminal/terminal_controls.gd
Normal file
@@ -0,0 +1,168 @@
|
||||
extends Node
|
||||
class_name TerminalControls
|
||||
|
||||
@onready var historyContainer = $MarginContainer/ScrollContainer/VBoxContainer
|
||||
@onready var caret = $MarginContainer/ScrollContainer/VBoxContainer/Label/Caret
|
||||
@onready var blink_timer = $MarginContainer/ScrollContainer/VBoxContainer/Label/CaretTimer
|
||||
@export var terminalLine: Label
|
||||
|
||||
var command: String
|
||||
var directory: String = "~/"
|
||||
var fileSystem: Dictionary = {
|
||||
"documents": {
|
||||
"special": {
|
||||
"notes.txt": "test",
|
||||
"secrets": {
|
||||
"password.txt": 123
|
||||
}
|
||||
}
|
||||
},
|
||||
"bin": {
|
||||
"sh": "binary data",
|
||||
}
|
||||
}
|
||||
|
||||
func _ready() -> void:
|
||||
terminalLine.text = "user@work "+ directory + " "
|
||||
UpdateCaretPos()
|
||||
blink_timer.start()
|
||||
|
||||
# --- Caret Blinking Logic ---
|
||||
func _on_caret_timer_timeout() -> void:
|
||||
caret.visible = !caret.visible
|
||||
|
||||
func reset_blink() -> void:
|
||||
caret.visible = true
|
||||
blink_timer.start() # Resets the countdown
|
||||
|
||||
# --- Input Handling ---
|
||||
func InputChar(input) -> void:
|
||||
if input == null:
|
||||
return
|
||||
command = input
|
||||
terminalLine.text += command
|
||||
UpdateCaretPos()
|
||||
reset_blink()
|
||||
func InputDelChar() -> void:
|
||||
if terminalLine.text.length() > ("user@work " + directory).length() + 1:
|
||||
terminalLine.text = terminalLine.text.left(-1)
|
||||
UpdateCaretPos()
|
||||
reset_blink()
|
||||
|
||||
func EnterCommand() -> void:
|
||||
var fullText = terminalLine.text
|
||||
var userInput = fullText.trim_prefix("user@work " + directory).strip_edges()
|
||||
|
||||
if historyContainer.get_child_count() <22:
|
||||
CreateHistoryEntry(fullText)
|
||||
var parts = userInput.split(" ")
|
||||
|
||||
match parts[0]:
|
||||
"ls":
|
||||
var currentDirData
|
||||
if parts.size() > 1:
|
||||
currentDirData = GetDirAtPath(directory + parts[1])
|
||||
else:
|
||||
currentDirData = GetDirAtPath(directory)
|
||||
if currentDirData is Dictionary:
|
||||
var list = ""
|
||||
for key in currentDirData.keys():
|
||||
list += key + " "
|
||||
CreateHistoryEntry(list)
|
||||
else:
|
||||
CreateHistoryEntry("error: Directory not found")
|
||||
"cd":
|
||||
if parts.size() > 1:
|
||||
var targetPath = parts[1]
|
||||
var newDir = ResolvePath(directory, targetPath)
|
||||
if GetDirAtPath(newDir) != null:
|
||||
directory = newDir
|
||||
else:
|
||||
CreateHistoryEntry("cd: no such directory: " + targetPath)
|
||||
else:
|
||||
directory = "~/"
|
||||
"cat":
|
||||
if parts.size() > 1:
|
||||
RetrieveData(parts[1])
|
||||
else:
|
||||
CreateHistoryEntry("usage: cat [filename]")
|
||||
"clear":
|
||||
for child in historyContainer.get_children():
|
||||
if child != terminalLine:
|
||||
child.queue_free()
|
||||
"":
|
||||
pass
|
||||
_:
|
||||
CreateHistoryEntry("Command not found: " + userInput)
|
||||
|
||||
terminalLine.text = "user@work "+ directory + " "
|
||||
|
||||
# Handle UI scrolling correctly
|
||||
|
||||
var scrollBox = historyContainer.get_parent() as ScrollContainer
|
||||
historyContainer.force_update_transform()
|
||||
await get_tree().process_frame
|
||||
scrollBox.scroll_vertical = int(scrollBox.get_v_scroll_bar().max_value)
|
||||
UpdateCaretPos()
|
||||
|
||||
# --- History and FileSystem Helpers ---
|
||||
func CreateHistoryEntry(content: String) -> void:
|
||||
var label = Label.new()
|
||||
label.text = content
|
||||
label.label_settings = LabelSettings.new()
|
||||
label.label_settings.font_size = 42
|
||||
label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
||||
label.custom_minimum_size = Vector2(1400, 0)
|
||||
|
||||
if terminalLine.text.length() > 200:
|
||||
for child in historyContainer.get_children():
|
||||
if child != terminalLine:
|
||||
child.queue_free()
|
||||
historyContainer.add_child(label)
|
||||
historyContainer.move_child(label, historyContainer.get_child_count() - 2)
|
||||
|
||||
# Limit history to 15 entries + 1 active line
|
||||
if historyContainer.get_child_count() > 22:
|
||||
historyContainer.get_child(0).queue_free()
|
||||
|
||||
func ResolvePath(current: String, target: String) -> String:
|
||||
if target.begins_with("~/"):
|
||||
return target if target.ends_with("/") else target + "/"
|
||||
if target == "..":
|
||||
if current == "~/": return "~/"
|
||||
var parts = current.trim_suffix("/").rsplit("/", true, 1)
|
||||
return parts[0] + "/"
|
||||
var joined = current + target
|
||||
return joined if joined.ends_with("/") else joined + "/"
|
||||
|
||||
func GetDirAtPath(path: String):
|
||||
if path == "~/": return fileSystem
|
||||
var cleanPath = path.trim_prefix("~/").trim_suffix("/")
|
||||
var folders = cleanPath.split("/")
|
||||
var current = fileSystem
|
||||
for folder in folders:
|
||||
if current is Dictionary and current.has(folder) and current[folder] is Dictionary:
|
||||
current = current[folder]
|
||||
else:
|
||||
return null
|
||||
return current if current is Dictionary else null
|
||||
|
||||
func RetrieveData(filename: String):
|
||||
var currentData = GetDirAtPath(directory)
|
||||
if currentData == null:
|
||||
CreateHistoryEntry("Error: Current directory invalid.")
|
||||
return
|
||||
if currentData.has(filename):
|
||||
var content = currentData[filename]
|
||||
if content is Dictionary:
|
||||
CreateHistoryEntry("cat: " + filename + ": is a directory")
|
||||
else:
|
||||
CreateHistoryEntry(str(content))
|
||||
else:
|
||||
CreateHistoryEntry("cat: " + filename + ": no such file")
|
||||
|
||||
func UpdateCaretPos():
|
||||
var last_char_index = terminalLine.text.length() - 1
|
||||
var char_rect = terminalLine.get_character_bounds(max(0, last_char_index))
|
||||
caret.position.x = char_rect.end.x + 1
|
||||
caret.position.y = char_rect.position.y
|
||||
1
Assets/Scripts/UI/terminal/terminal_controls.gd.uid
Normal file
1
Assets/Scripts/UI/terminal/terminal_controls.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ckagscjkf3iiu
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Zincles
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
21
LICENSE.md
Normal file
21
LICENSE.md
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2023 Joshua Najera
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
64
README.md
Normal file
64
README.md
Normal file
@@ -0,0 +1,64 @@
|
||||

|
||||
|
||||
# GLTF2MeshLib
|
||||
|
||||
This plugin allows you to import gltf/glb models as MeshLibrary, which saves a lot of time compared to manual importing.
|
||||
|
||||

|
||||
|
||||
## Usage
|
||||
|
||||
you can simply drag and drop gltf/glb files into the editor, select "`GLTF To MeshLibrary`" in the import settings, and it will automatically import your gltf/glb as a MeshLibrary. This allows you to see instant changes after any modification of the gltf file.
|
||||
|
||||
In my case, I used models made with Blockbench, exported as gltf, and imported into Godot with this plugin, and it seems to work fine as I expected. I am using `Godot 4.3`.
|
||||
|
||||
If you encounter any problems, or if you have any suggestions, please let me know in the Issues.
|
||||
|
||||
## Requirements
|
||||
|
||||
Different from godot's default behavior, you need to make sure models you want to import are in the first level. things in sublevels would be imported as a part of the parent object.
|
||||
|
||||
here's an example:
|
||||

|
||||
|
||||
## Options
|
||||
|
||||
| Option | Description | Default |
|
||||
| -------------------------------- | ----------------------------------------------------------------------- | ------------ |
|
||||
| generate_collision_shape_by_mesh | generate collision shape by its model, rather than "-col" tagged meshs. | false |
|
||||
| generate_preview | whether to generate preview for MeshLibrary. | true |
|
||||
| model_offset | You can adjust model offset via this parameter. | Vector3.ZERO |
|
||||
| sort_by_name | Sort Items in MeshLibrary. Preventing unexpected order. | true |
|
||||
|
||||
### Flags
|
||||
|
||||
Now you can import Items with flags. Currently there're 2 kinds of flags available:
|
||||
|
||||
| Flag | Description |
|
||||
| ----------------------- | -------------------------------------------------------------------------- |
|
||||
| `--collision` or `-col` | whether to import this object as collision shape or not. false by default. |
|
||||
| `--noimp` | whether to import this object or not. false by default. |
|
||||
|
||||
Here's an example:
|
||||
|
||||

|
||||
|
||||
You can configure collision by adding meshes that indicates the collision shape of the item, and add `--collision` flag to the item.
|
||||
|
||||
## Known Issues
|
||||
|
||||
- re-importing GLTF with opened scene in Editor with GridMap node which binds the imported gltf, would raise `"servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp:632 - Parameter "mesh" is null."`.
|
||||
|
||||
- for some reason, the editor might raise annoying "Attempted to call reimport_files() recursively, this is not allowed." error while importing mesh as MeshLibrary.
|
||||
|
||||
Thankfully this issue seems not influencing the game, but it's still annoying.Do you got any solutions? I need you help on this :(
|
||||
|
||||
let me know more problems you encountered in issues.
|
||||
|
||||
## Contributors
|
||||
|
||||
please view the "contributors" page on the right side(if you are reading this via github).
|
||||
|
||||
## License
|
||||
|
||||
License under MIT License.
|
||||
219
Scenes/Levels/office.tscn
Normal file
219
Scenes/Levels/office.tscn
Normal file
@@ -0,0 +1,219 @@
|
||||
[gd_scene load_steps=22 format=3 uid="uid://cqtabc6coc58l"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dmtpstry0o0a3" path="res://Assets/Scripts/Player Controls/player_movement.gd" id="1_48dl1"]
|
||||
[ext_resource type="PackedScene" uid="uid://b2mhoeubwtkuo" path="res://Scenes/UI/fade_in_transition.tscn" id="2_cx0fw"]
|
||||
[ext_resource type="PackedScene" uid="uid://cbpsnsta7u3wl" path="res://Scenes/Special_Effects/PSX_style.tscn" id="2_gba58"]
|
||||
[ext_resource type="Script" uid="uid://55cgjgncpb53" path="res://Assets/Scripts/Player Controls/interact.gd" id="2_vwrhx"]
|
||||
[ext_resource type="PackedScene" uid="uid://b54u8nvjd4p6l" path="res://Scenes/UI/pause_menu.tscn" id="3_cx0fw"]
|
||||
[ext_resource type="Script" uid="uid://chb1dyhl7cyg1" path="res://Assets/Scripts/UI/crosshair.gd" id="3_vwrhx"]
|
||||
[ext_resource type="PackedScene" uid="uid://cmyf6lhbn1x6p" path="res://Scenes/Models/Interior/security_office_model.tscn" id="4_vwrhx"]
|
||||
[ext_resource type="Script" uid="uid://bfsaxhnb0qpuk" path="res://Assets/Scripts/Misc/flickering_light.gd" id="5_nmbs0"]
|
||||
[ext_resource type="Texture2D" uid="uid://c0qenaw8wxlbv" path="res://Assets/MISC_Textures/DustMote.png" id="6_ayt7b"]
|
||||
[ext_resource type="PackedScene" uid="uid://c670wtpi4n22q" path="res://Scenes/UI/terminal.tscn" id="10_gba58"]
|
||||
|
||||
[sub_resource type="Environment" id="Environment_cumm5"]
|
||||
background_mode = 1
|
||||
background_color = Color(0.680932, 0.369129, 0.248985, 1)
|
||||
background_energy_multiplier = 0.04
|
||||
ssr_enabled = true
|
||||
ssao_enabled = true
|
||||
ssil_enabled = true
|
||||
sdfgi_use_occlusion = true
|
||||
glow_normalized = true
|
||||
fog_light_energy = 15.32
|
||||
volumetric_fog_density = 0.1974
|
||||
adjustment_enabled = true
|
||||
adjustment_brightness = 0.75
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_ayt7b"]
|
||||
offsets = PackedFloat32Array(0, 0.0824053, 1)
|
||||
colors = PackedColorArray(0, 0, 0, 1, 0.683742, 0.683742, 0.683742, 1, 1, 1, 1, 0.25098)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_cx0fw"]
|
||||
gradient = SubResource("Gradient_ayt7b")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_vwrhx"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.471387, 0, 0, Vector2(0.99579, 0), 0.232991, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_nmbs0"]
|
||||
curve = SubResource("Curve_vwrhx")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_cx0fw"]
|
||||
emission_shape = 3
|
||||
emission_box_extents = Vector3(1.49, 1.73, 2.42)
|
||||
initial_velocity_min = 1.0
|
||||
initial_velocity_max = 2.0
|
||||
angular_velocity_min = 30.0
|
||||
angular_velocity_max = 60.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
scale_curve = SubResource("CurveTexture_nmbs0")
|
||||
color_ramp = SubResource("GradientTexture1D_cx0fw")
|
||||
turbulence_enabled = true
|
||||
turbulence_noise_scale = 1.85
|
||||
collision_mode = 1
|
||||
collision_friction = 1.0
|
||||
collision_bounce = 0.0
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vwrhx"]
|
||||
transparency = 1
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_texture = ExtResource("6_ayt7b")
|
||||
billboard_mode = 3
|
||||
billboard_keep_scale = true
|
||||
particles_anim_h_frames = 1
|
||||
particles_anim_v_frames = 1
|
||||
particles_anim_loop = false
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_nmbs0"]
|
||||
material = SubResource("StandardMaterial3D_vwrhx")
|
||||
size = Vector2(0.01, 0.01)
|
||||
|
||||
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_vwrhx"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_nmbs0"]
|
||||
size = Vector3(0.0644531, 0.530029, 0.4646)
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_vwrhx"]
|
||||
viewport_path = NodePath("Interactables/PC/Sprite3D/SubViewport")
|
||||
|
||||
[node name="Node3D" type="Node3D"]
|
||||
|
||||
[node name="PlayerController" type="Node3D" parent="."]
|
||||
process_mode = 1
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.370835, 0, 0)
|
||||
script = ExtResource("1_48dl1")
|
||||
psxScene = ExtResource("2_gba58")
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="PlayerController" node_paths=PackedStringArray("terminal")]
|
||||
transform = Transform3D(0.0188834, 0, -0.999822, 0, 1, 0, 0.999822, 0, 0.0188834, -0.0640411, 1.42725, 1.30117)
|
||||
fov = 45.2
|
||||
near = 0.001
|
||||
script = ExtResource("2_vwrhx")
|
||||
terminal = NodePath("../../Interactables/PC/Sprite3D/SubViewport")
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="PlayerController/Camera3D"]
|
||||
layer = 2
|
||||
|
||||
[node name="Control" type="Control" parent="PlayerController/Camera3D/CanvasLayer"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
|
||||
[node name="CrosshairCenter" type="CenterContainer" parent="PlayerController/Camera3D/CanvasLayer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -20.0
|
||||
offset_top = -20.0
|
||||
offset_right = 20.0
|
||||
offset_bottom = 20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("3_vwrhx")
|
||||
|
||||
[node name="PauseMenu" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="Transition" parent="PauseMenu" instance=ExtResource("2_cx0fw")]
|
||||
process_priority = 5
|
||||
layer = 5
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="PauseMenu"]
|
||||
layer = 5
|
||||
|
||||
[node name="PauseMenu" parent="PauseMenu/CanvasLayer" instance=ExtResource("3_cx0fw")]
|
||||
process_mode = 3
|
||||
z_index = 5
|
||||
|
||||
[node name="security office_UwU" parent="." instance=ExtResource("4_vwrhx")]
|
||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, -6.54)
|
||||
|
||||
[node name="Lighting" type="Node3D" parent="."]
|
||||
|
||||
[node name="OmniLight3D" type="OmniLight3D" parent="Lighting"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.894977, 0.0786453, 0.971773)
|
||||
light_color = Color(0.558852, 0.138576, 0.131343, 1)
|
||||
light_energy = 0.048
|
||||
|
||||
[node name="OmniLight3D2" type="OmniLight3D" parent="Lighting"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.982613, 0.0786453, 1.15155)
|
||||
light_color = Color(0.558852, 0.138576, 0.131343, 1)
|
||||
light_energy = 0.048
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="Lighting"]
|
||||
environment = SubResource("Environment_cumm5")
|
||||
|
||||
[node name="SpotLight3D" type="SpotLight3D" parent="Lighting"]
|
||||
transform = Transform3D(0.313684, -0.884661, -0.344931, -0.446955, -0.458073, 0.768376, -0.837755, -0.0868584, -0.539093, 0.388222, 1.32097, 0.177619)
|
||||
light_color = Color(1, 0.733333, 0.690196, 1)
|
||||
light_energy = 0.543
|
||||
shadow_enabled = true
|
||||
|
||||
[node name="OmniLight3D3" type="OmniLight3D" parent="Lighting"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.520964, 3.19324, 0.238268)
|
||||
light_color = Color(0.101961, 0.054902, 0.0431373, 1)
|
||||
light_energy = 2.111
|
||||
light_indirect_energy = 3.59
|
||||
shadow_enabled = true
|
||||
script = ExtResource("5_nmbs0")
|
||||
|
||||
[node name="Timer" type="Timer" parent="Lighting/OmniLight3D3"]
|
||||
wait_time = 0.5
|
||||
autostart = true
|
||||
|
||||
[node name="VFX" type="Node3D" parent="Lighting"]
|
||||
|
||||
[node name="GPUParticles3D" type="GPUParticles3D" parent="Lighting/VFX"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.72499, 0.354899)
|
||||
amount = 800
|
||||
lifetime = 20.0
|
||||
randomness = 1.0
|
||||
process_material = SubResource("ParticleProcessMaterial_cx0fw")
|
||||
draw_pass_1 = SubResource("QuadMesh_nmbs0")
|
||||
|
||||
[node name="GPUParticlesCollisionHeightField3D" type="GPUParticlesCollisionHeightField3D" parent="Lighting/VFX"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0385742, -0.168518, 0.386719)
|
||||
size = Vector3(2.96582, 0.391724, 4.91016)
|
||||
|
||||
[node name="GPUParticlesCollisionHeightField3D2" type="GPUParticlesCollisionHeightField3D" parent="Lighting/VFX"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.794207, 0.898239, 1.10249)
|
||||
size = Vector3(1.29651, 0.0705109, 2.49951)
|
||||
|
||||
[node name="GPUParticlesAttractorSphere3D" type="GPUParticlesAttractorSphere3D" parent="Lighting/VFX"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.447443, 1.25731, 0.393826)
|
||||
strength = 3.0
|
||||
radius = 0.409208
|
||||
|
||||
[node name="GPUParticlesAttractorSphere3D2" type="GPUParticlesAttractorSphere3D" parent="Lighting/VFX"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.569778, 3.12136, 0.370614)
|
||||
strength = 3.0
|
||||
radius = 1.01
|
||||
|
||||
[node name="Interactables" type="Node3D" parent="."]
|
||||
|
||||
[node name="PC" type="StaticBody3D" parent="Interactables"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.521656, 1.06554, 1.25256)
|
||||
physics_material_override = SubResource("PhysicsMaterial_vwrhx")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Interactables/PC"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0478516, 0.229821, 0.0582275)
|
||||
shape = SubResource("BoxShape3D_nmbs0")
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="Interactables/PC"]
|
||||
transform = Transform3D(0.024902493, 0.0022058422, 0, -0.0022058422, 0.024902493, 0, 0, 0, 0.024999999, 0.053893626, 0.2870214, 0.041617036)
|
||||
flip_h = true
|
||||
axis = 0
|
||||
texture = SubResource("ViewportTexture_vwrhx")
|
||||
|
||||
[node name="SubViewport" parent="Interactables/PC/Sprite3D" instance=ExtResource("10_gba58")]
|
||||
|
||||
[connection signal="timeout" from="Lighting/OmniLight3D3/Timer" to="Lighting/OmniLight3D3" method="_on_timer_timeout"]
|
||||
5
Scenes/Models/Interior/security_office_model.tscn
Normal file
5
Scenes/Models/Interior/security_office_model.tscn
Normal file
@@ -0,0 +1,5 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cmyf6lhbn1x6p"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://djt7surq1h8bt" path="res://Assets/Model/Interior/Security_Office/security office.UwU.glb" id="1_o43w0"]
|
||||
|
||||
[node name="security office_UwU" instance=ExtResource("1_o43w0")]
|
||||
26
Scenes/Special_Effects/PSX_style.tscn
Normal file
26
Scenes/Special_Effects/PSX_style.tscn
Normal file
@@ -0,0 +1,26 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cbpsnsta7u3wl"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://uo56rpfskail" path="res://Assets/Scripts/Shaders/psx.gdshader" id="1_54yrn"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_vwrhx"]
|
||||
shader = ExtResource("1_54yrn")
|
||||
shader_parameter/pixel_resolution = 240.0
|
||||
shader_parameter/color_steps = 16
|
||||
shader_parameter/noise_strength = 0.1
|
||||
shader_parameter/enable_dither = true
|
||||
shader_parameter/dither_strength = 0.3
|
||||
shader_parameter/enable_glow = true
|
||||
shader_parameter/glow_strength = 0.4
|
||||
shader_parameter/glow_spread = 0.005
|
||||
shader_parameter/enable_vintage = true
|
||||
shader_parameter/vintage_strength = 0.8
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer"]
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
material = SubResource("ShaderMaterial_vwrhx")
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
30
Scenes/UI/crosshair.tscn
Normal file
30
Scenes/UI/crosshair.tscn
Normal file
@@ -0,0 +1,30 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://bw5wwerqy6gi2"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://chb1dyhl7cyg1" path="res://Assets/Scripts/UI/crosshair.gd" id="1_undt4"]
|
||||
|
||||
[node name="Control" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
mouse_filter = 1
|
||||
|
||||
[node name="CrosshairCenter" type="CenterContainer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -20.0
|
||||
offset_top = -20.0
|
||||
offset_right = 20.0
|
||||
offset_bottom = 20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_undt4")
|
||||
58
Scenes/UI/fade_in_transition.tscn
Normal file
58
Scenes/UI/fade_in_transition.tscn
Normal file
@@ -0,0 +1,58 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://b2mhoeubwtkuo"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cs6mhxw52ldo1" path="res://Assets/Scripts/UI/fade_in.gd" id="1_k5wvs"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_vggx3"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ColorRect:modulate")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_llmbb"]
|
||||
resource_name = "fade_in"
|
||||
length = 3.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ColorRect:modulate")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(-0.4, 3),
|
||||
"transitions": PackedFloat32Array(2.2974, 1),
|
||||
"update": 0,
|
||||
"values": [Color(0, 0, 0, 1), Color(1, 1, 1, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_cumm5"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_vggx3"),
|
||||
&"fade_in": SubResource("Animation_llmbb")
|
||||
}
|
||||
|
||||
[node name="Transition" type="CanvasLayer"]
|
||||
script = ExtResource("1_k5wvs")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
z_index = 5
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_right = 20.0
|
||||
offset_bottom = 20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_cumm5")
|
||||
}
|
||||
35
Scenes/UI/main_menu.tscn
Normal file
35
Scenes/UI/main_menu.tscn
Normal file
@@ -0,0 +1,35 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://dq5ojxx2ytfwv"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://2sxp2yxkv5k2" path="res://Assets/Scripts/UI/main_menu.gd" id="1_28flt"]
|
||||
|
||||
[node name="MainMenu" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_28flt")
|
||||
|
||||
[node name="BoxContainer" type="BoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 13
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -45.5
|
||||
offset_right = 45.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="BoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
|
||||
[node name="NewGameButton" type="Button" parent="BoxContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 125
|
||||
text = "new Game"
|
||||
|
||||
[connection signal="pressed" from="BoxContainer/VBoxContainer/NewGameButton" to="." method="_on_new_game_button_pressed"]
|
||||
57
Scenes/UI/pause_menu.tscn
Normal file
57
Scenes/UI/pause_menu.tscn
Normal file
@@ -0,0 +1,57 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://b54u8nvjd4p6l"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cnw8764a6hljr" path="res://Assets/Scripts/UI/pause_menu.gd" id="1_emv3i"]
|
||||
|
||||
[node name="PauseMenu" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_emv3i")
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -611.0
|
||||
offset_top = -549.0
|
||||
offset_right = 611.0
|
||||
offset_bottom = 549.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
|
||||
[node name="QuitGameButton" type="Button" parent="MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 125
|
||||
text = "Quit"
|
||||
|
||||
[node name="ResumeGameButton" type="Button" parent="MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 125
|
||||
text = "Resume"
|
||||
|
||||
[node name="CameraSensitivityLabel" type="Label" parent="MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Camera Sensitivity"
|
||||
|
||||
[node name="HSlider" type="HSlider" parent="MarginContainer/VBoxContainer/CameraSensitivityLabel"]
|
||||
layout_mode = 2
|
||||
offset_top = -20.0
|
||||
offset_right = 492.0
|
||||
offset_bottom = -4.0
|
||||
max_value = 0.01
|
||||
step = 0.0
|
||||
|
||||
[connection signal="pressed" from="MarginContainer/VBoxContainer/QuitGameButton" to="." method="_on_quit_game_button_pressed"]
|
||||
[connection signal="pressed" from="MarginContainer/VBoxContainer/ResumeGameButton" to="." method="_on_resume_game_button_pressed"]
|
||||
[connection signal="value_changed" from="MarginContainer/VBoxContainer/CameraSensitivityLabel/HSlider" to="." method="_on_h_slider_value_changed"]
|
||||
44
Scenes/UI/terminal.tscn
Normal file
44
Scenes/UI/terminal.tscn
Normal file
@@ -0,0 +1,44 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://c670wtpi4n22q"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ckagscjkf3iiu" path="res://Assets/Scripts/UI/terminal/terminal_controls.gd" id="1_7fm3u"]
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_nmbs0"]
|
||||
font_size = 42
|
||||
|
||||
[node name="SubViewport" type="SubViewport" node_paths=PackedStringArray("terminalLine")]
|
||||
transparent_bg = true
|
||||
size = Vector2i(1830, 1680)
|
||||
script = ExtResource("1_7fm3u")
|
||||
terminalLine = NodePath("MarginContainer/ScrollContainer/VBoxContainer/Label")
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="."]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/ScrollContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||
clip_contents = true
|
||||
custom_minimum_size = Vector2(1800, 0)
|
||||
layout_mode = 2
|
||||
text = "a0ifjaojkfna"
|
||||
label_settings = SubResource("LabelSettings_nmbs0")
|
||||
autowrap_mode = 3
|
||||
|
||||
[node name="Caret" type="ColorRect" parent="MarginContainer/ScrollContainer/VBoxContainer/Label"]
|
||||
layout_mode = 0
|
||||
offset_right = 24.0
|
||||
offset_bottom = 42.0
|
||||
|
||||
[node name="CaretTimer" type="Timer" parent="MarginContainer/ScrollContainer/VBoxContainer/Label"]
|
||||
wait_time = 0.5
|
||||
autostart = true
|
||||
|
||||
[connection signal="timeout" from="MarginContainer/ScrollContainer/VBoxContainer/Label/CaretTimer" to="." method="_on_caret_timer_timeout"]
|
||||
1685
addons/godot-vim/godot-vim.gd
Normal file
1685
addons/godot-vim/godot-vim.gd
Normal file
File diff suppressed because it is too large
Load Diff
1
addons/godot-vim/godot-vim.gd.uid
Normal file
1
addons/godot-vim/godot-vim.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bwy4vfb71sqq5
|
||||
179
addons/godot-vim/icon.svg
Normal file
179
addons/godot-vim/icon.svg
Normal file
@@ -0,0 +1,179 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="409.99237"
|
||||
height="551.82874"
|
||||
version="1.1"
|
||||
id="svg3763"
|
||||
sodipodi:docname="iconsvg.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||
<defs
|
||||
id="defs3767" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="3840"
|
||||
inkscape:window-height="2089"
|
||||
id="namedview3765"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.88187112"
|
||||
inkscape:cx="-391.82984"
|
||||
inkscape:cy="385.67966"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg3763" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="g3845"
|
||||
transform="matrix(4.3859694,0,0,4.3859694,-75.706218,-87.385926)">
|
||||
<g
|
||||
id="g3823"
|
||||
transform="matrix(0.10073078,0,0,0.10073078,12.425923,2.256365)"
|
||||
style="stroke-width:9.92745972">
|
||||
<path
|
||||
id="path3807"
|
||||
d="m 0,0 c 0,0 -0.325,1.994 -0.515,1.976 l -36.182,-3.491 c -2.879,-0.278 -5.115,-2.574 -5.317,-5.459 l -0.994,-14.247 -27.992,-1.997 -1.904,12.912 c -0.424,2.872 -2.932,5.037 -5.835,5.037 h -38.188 c -2.902,0 -5.41,-2.165 -5.834,-5.037 l -1.905,-12.912 -27.992,1.997 -0.994,14.247 c -0.202,2.886 -2.438,5.182 -5.317,5.46 l -36.2,3.49 c -0.187,0.018 -0.324,-1.978 -0.511,-1.978 l -0.049,-7.83 30.658,-4.944 1.004,-14.374 c 0.203,-2.91 2.551,-5.263 5.463,-5.472 l 38.551,-2.75 c 0.146,-0.01 0.29,-0.016 0.434,-0.016 2.897,0 5.401,2.166 5.825,5.038 l 1.959,13.286 h 28.005 l 1.959,-13.286 c 0.423,-2.871 2.93,-5.037 5.831,-5.037 0.142,0 0.284,0.005 0.423,0.015 l 38.556,2.75 c 2.911,0.209 5.26,2.562 5.463,5.472 l 1.003,14.374 30.645,4.966 z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff"
|
||||
transform="matrix(4.162611,0,0,-4.162611,919.24059,771.67186)" />
|
||||
<path
|
||||
id="path3809"
|
||||
transform="matrix(4.162611,0,0,-4.162611,104.69892,525.90697)"
|
||||
d="m 0,0 v -47.514 -6.035 -5.492 c 0.108,-0.001 0.216,-0.005 0.323,-0.015 l 36.196,-3.49 c 1.896,-0.183 3.382,-1.709 3.514,-3.609 l 1.116,-15.978 31.574,-2.253 2.175,14.747 c 0.282,1.912 1.922,3.329 3.856,3.329 h 38.188 c 1.933,0 3.573,-1.417 3.855,-3.329 l 2.175,-14.747 31.575,2.253 1.115,15.978 c 0.133,1.9 1.618,3.425 3.514,3.609 l 36.182,3.49 c 0.107,0.01 0.214,0.014 0.322,0.015 v 4.711 l 0.015,0.005 V 0 c 5.09692,6.4164715 9.92323,13.494208 13.621,19.449 -5.651,9.62 -12.575,18.217 -19.976,26.182 -6.864,-3.455 -13.531,-7.369 -19.828,-11.534 -3.151,3.132 -6.7,5.694 -10.186,8.372 -3.425,2.751 -7.285,4.768 -10.946,7.118 1.09,8.117 1.629,16.108 1.846,24.448 -9.446,4.754 -19.519,7.906 -29.708,10.17 -4.068,-6.837 -7.788,-14.241 -11.028,-21.479 -3.842,0.642 -7.702,0.88 -11.567,0.926 v 0.006 c -0.027,0 -0.052,-0.006 -0.075,-0.006 -0.024,0 -0.049,0.006 -0.073,0.006 V 63.652 C 93.903,63.606 90.046,63.368 86.203,62.726 82.965,69.964 79.247,77.368 75.173,84.205 64.989,81.941 54.915,78.789 45.47,74.035 45.686,65.695 46.225,57.704 47.318,49.587 43.65,47.237 39.795,45.22 36.369,42.469 32.888,39.791 29.333,37.229 26.181,34.097 19.884,38.262 13.219,42.176 6.353,45.631 -1.048,37.666 -7.968,29.069 -13.621,19.449 -9.1783421,12.475308 -4.4130298,5.4661124 0,0 Z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#478cbf" />
|
||||
<path
|
||||
id="path3811"
|
||||
d="m 0,0 -1.121,-16.063 c -0.135,-1.936 -1.675,-3.477 -3.611,-3.616 l -38.555,-2.751 c -0.094,-0.007 -0.188,-0.01 -0.281,-0.01 -1.916,0 -3.569,1.406 -3.852,3.33 l -2.211,14.994 H -81.09 l -2.211,-14.994 c -0.297,-2.018 -2.101,-3.469 -4.133,-3.32 l -38.555,2.751 c -1.936,0.139 -3.476,1.68 -3.611,3.616 L -130.721,0 -163.268,3.138 c 0.015,-3.498 0.06,-7.33 0.06,-8.093 0,-34.374 43.605,-50.896 97.781,-51.086 h 0.066 0.067 c 54.176,0.19 97.766,16.712 97.766,51.086 0,0.777 0.047,4.593 0.063,8.093 z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#478cbf"
|
||||
transform="matrix(4.162611,0,0,-4.162611,784.07144,817.24284)" />
|
||||
<path
|
||||
id="path3813"
|
||||
transform="matrix(4.162611,0,0,-4.162611,389.21484,625.67104)"
|
||||
d="m 0,0 c 0,-12.052 -9.765,-21.815 -21.813,-21.815 -12.042,0 -21.81,9.763 -21.81,21.815 0,12.044 9.768,21.802 21.81,21.802 C -9.765,21.802 0,12.044 0,0"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff" />
|
||||
<path
|
||||
id="path3815"
|
||||
transform="matrix(4.162611,0,0,-4.162611,367.36686,631.05679)"
|
||||
d="m 0,0 c 0,-7.994 -6.479,-14.473 -14.479,-14.473 -7.996,0 -14.479,6.479 -14.479,14.473 0,7.994 6.483,14.479 14.479,14.479 C -6.479,14.479 0,7.994 0,0"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#414042" />
|
||||
<path
|
||||
id="path3817"
|
||||
transform="matrix(4.162611,0,0,-4.162611,511.99336,724.73954)"
|
||||
d="m 0,0 c -3.878,0 -7.021,2.858 -7.021,6.381 v 20.081 c 0,3.52 3.143,6.381 7.021,6.381 3.878,0 7.028,-2.861 7.028,-6.381 V 6.381 C 7.028,2.858 3.878,0 0,0"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff" />
|
||||
<path
|
||||
id="path3819"
|
||||
transform="matrix(4.162611,0,0,-4.162611,634.78706,625.67104)"
|
||||
d="m 0,0 c 0,-12.052 9.765,-21.815 21.815,-21.815 12.041,0 21.808,9.763 21.808,21.815 0,12.044 -9.767,21.802 -21.808,21.802 C 9.765,21.802 0,12.044 0,0"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff" />
|
||||
<path
|
||||
id="path3821"
|
||||
transform="matrix(4.162611,0,0,-4.162611,656.64056,631.05679)"
|
||||
d="m 0,0 c 0,-7.994 6.477,-14.473 14.471,-14.473 8.002,0 14.479,6.479 14.479,14.473 0,7.994 -6.477,14.479 -14.479,14.479 C 6.477,14.479 0,7.994 0,0"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#414042" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="matrix(0.7294074,0,0,0.7294074,-45.912295,80.565241)">
|
||||
<g
|
||||
id="g3699"
|
||||
transform="matrix(1.532388,0,0,1.3939671,-54.912136,-41.792396)">
|
||||
<path
|
||||
id="path3650"
|
||||
d="m 114.65715,353.09353 h 47.80701 l 2.91261,3.20613 v 9.83953 l -2.31001,3.09557 h -5.22261 v 48.86596 l 44.99482,-48.86596 h -7.43218 l -2.61131,-3.09557 v -10.39231 l 2.41044,-2.43224 h 48.40962 l 2.41043,2.65335 v 9.72897 L 136.55196,489.29907 h -12.45393 l -3.60484,-2.291 V 368.79254 h -6.03691 l -2.20956,-2.43224 v -10.39231 z"
|
||||
style="fill:none;stroke:#000000;stroke-width:8.34521198;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3640"
|
||||
d="m 162.97227,358.09475 2.6987,-1.5635 -2.76971,-3.04884 h -48.22135 l -2.45013,2.69704 v 10.20187 l 2.71645,2.9902 1.29608,-2.9902 -1.70443,-1.87621 v -7.19212 l 1.27832,-1.2508 h 46.01979 z"
|
||||
style="fill:#478cbf;fill-opacity:1;stroke:#000000;stroke-width:0.41726059px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 197.06456,355.74729 -1.70266,1.87425 v 6.88137 l 1.49138,1.64168 h 7.87946 v 6.6488 l -52.12379,58.1565 v -64.72321 h 8.66244 l 1.77723,-1.95634 v -6.96346 l -1.64052,-1.39542 h -45.58657 l -1.49138,1.64168 v 7.11394 l 1.51624,1.66904 h 7.92918 v 119.18594 l 1.49138,1.64168 h 9.01043 L 243.50867,363.0938 v -5.47226 l -1.70266,-1.87425 z"
|
||||
id="path3632"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.41726059px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3646"
|
||||
d="m 123.69629,366.13919 v 119.40096 l 1.40609,1.7689 -1.10266,2.31328 -3.1156,-3.41884 V 369.23476 Z"
|
||||
style="fill:#478cbf;fill-opacity:1;stroke:#000000;stroke-width:0.41726059px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3644"
|
||||
d="m 115.90579,366.13919 -0.80348,2.87446 h 5.82523 l 3.21391,-2.87446 z"
|
||||
style="fill:#478cbf;fill-opacity:1;stroke:#000000;stroke-width:0.41726059px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3638"
|
||||
d="m 195.92471,369.36762 1.27833,-2.89248 -1.84647,-1.87621 v -6.41037 l 2.13055,-2.34526 h 44.45738 l 1.70443,2.50161 2.41462,-1.87621 -2.48563,-2.73613 h -47.79524 l -2.37911,2.61887 v 10.28004 l 2.46788,2.56024 m -38.62501,49.36179 -4.64282,12.40054 52.41142,-57.84966 v -6.87942 z"
|
||||
style="fill:#478cbf;fill-opacity:1;stroke:#000000;stroke-width:0.41726059px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3642"
|
||||
d="m 162.86589,357.7369 2.31001,-1.65835 v 10.06064 l -2.66153,2.92974 h -5.1724 v 49.58456 l -4.72044,12.27178 v -64.78608 h 8.6374 l 1.60696,-1.43724 z"
|
||||
style="fill:#478cbf;fill-opacity:1;stroke:#000000;stroke-width:0.41726059px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 197.06456,355.74729 -1.70266,1.87425 v 6.88137 l 1.49138,1.64168 h 7.87946 v 6.6488 l -52.12379,58.1565 v -64.72321 h 8.66244 l 1.77723,-1.95634 v -6.96346 l -1.64052,-1.39542 h -45.58657 l -1.49138,1.64168 v 7.11394 l 1.51624,1.66904 h 7.92918 v 119.18594 l 1.49138,1.64168 h 9.01043 L 243.50867,363.0938 v -5.47226 l -1.70266,-1.87425 z"
|
||||
id="path3622"
|
||||
style="fill:#478cbf;fill-opacity:1;stroke:#000000;stroke-width:0.41726059px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3636"
|
||||
d="m 243.64893,357.78205 2.426,-1.54181 v 9.67203 L 136.04072,489.68148 h -11.68216 l 1.11611,-2.44127 h 8.9483 L 243.5069,363.25432 Z"
|
||||
style="fill:#478cbf;fill-opacity:1;stroke:#000000;stroke-width:0.41726059px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3652"
|
||||
d="m 204.79746,366.30501 -2.46065,2.8192 h -6.42784 l 1.50652,-2.8192 c 0.0502,0 7.38197,0 7.38197,0 z"
|
||||
style="fill:#478cbf;fill-opacity:1;stroke:#000000;stroke-width:0.41726059px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
transform="matrix(0.90138601,0,0,0.99222542,-92.530288,-192.23791)"
|
||||
id="g3673">
|
||||
<path
|
||||
style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path3671"
|
||||
d="m 399.78125,560 a 1.2330102,1.2330102 0 0 0 -0.5625,0.28125 l -5.3125,4.5625 A 1.2330102,1.2330102 0 0 0 393.5625,565.375 L 388.25,580.25 a 1.2330102,1.2330102 0 0 0 0.28125,1.28125 l 4.0625,4.0625 a 1.2330102,1.2330102 0 0 0 0.875,0.34375 H 409.875 a 1.2330102,1.2330102 0 0 0 0.875,-0.34375 l 4.28125,-4.3125 a 1.2330102,1.2330102 0 0 0 0.3125,-0.53125 l 4.5625,-15.65625 a 1.2330102,1.2330102 0 0 0 -0.3125,-1.21875 l -3.53125,-3.53125 A 1.2330102,1.2330102 0 0 0 415.1875,560 h -15.15625 a 1.2330102,1.2330102 0 0 0 -0.25,0 z m -30.0625,41.9375 a 1.2330102,1.2330102 0 0 0 -0.9375,0.90625 l -2.03125,8.0625 a 1.2330102,1.2330102 0 0 0 1.1875,1.53125 h 9.65625 l -23.9375,68.34375 a 1.2330102,1.2330102 0 0 0 1.15625,1.625 h 34.84375 a 1.2330102,1.2330102 0 0 0 1.1875,-0.84375 l 2.28125,-7.34375 a 1.2330102,1.2330102 0 0 0 -1.1875,-1.59375 h -7.875 L 407.75,603.5625 a 1.2330102,1.2330102 0 0 0 -1.15625,-1.625 h -36.625 a 1.2330102,1.2330102 0 0 0 -0.25,0 z m 110.875,0.25 a 1.2330102,1.2330102 0 0 0 -0.6875,0.40625 l -7.25,8.1875 H 461.125 l -7.6875,-7.96875 a 1.2330102,1.2330102 0 0 0 -0.875,-0.375 H 425.03125 A 1.2330102,1.2330102 0 0 0 423.875,603.25 l -2.53125,7.5625 a 1.2330102,1.2330102 0 0 0 1.15625,1.625 h 7.375 l -22.9375,67.59375 a 1.2330102,1.2330102 0 0 0 1.15625,1.625 h 29.3125 a 1.2330102,1.2330102 0 0 0 1.15625,-0.8125 l 2.25,-6.59375 a 1.2330102,1.2330102 0 0 0 -1.15625,-1.625 h -5.125 l 14.625,-46.03125 H 475.625 l -16.6875,53.46875 a 1.2330102,1.2330102 0 0 0 1.1875,1.59375 h 28.28125 a 1.2330102,1.2330102 0 0 0 1.125,-0.75 l 2.53125,-6.0625 a 1.2330102,1.2330102 0 0 0 -1.125,-1.6875 h -5.125 l 14.875,-46.8125 h 25.1875 l -16.9375,53.71875 a 1.2330102,1.2330102 0 0 0 1.1875,1.59375 h 31.0625 a 1.2330102,1.2330102 0 0 0 1.15625,-0.78125 l 2.53125,-6.59375 a 1.2330102,1.2330102 0 0 0 -1.15625,-1.65625 h -6.15625 l 18.71875,-60.78125 a 1.2330102,1.2330102 0 0 0 -0.1875,-1.125 l -5.8125,-7.8125 a 1.2330102,1.2330102 0 0 0 -1,-0.46875 H 527.0625 a 1.2330102,1.2330102 0 0 0 -0.90625,0.375 l -7,7.6875 h -12.25 l -7.25,-7.9375 a 1.2330102,1.2330102 0 0 0 -0.90625,-0.375 h -17.90625 a 1.2330102,1.2330102 0 0 0 -0.25,0 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 400.03125,561.21875 -5.3125,4.5625 -5.3125,14.875 4.0625,4.0625 H 409.875 l 4.28125,-4.3125 4.5625,-15.65625 -3.53125,-3.53125 z m -30.0625,41.9375 -2.03125,8.0625 h 11.375 l -24.5,69.96875 h 34.84375 l 2.28125,-7.34375 h -9.59375 l 24.25,-70.6875 z m 110.875,0.25 L 473.25,612 h -12.625 l -8.0625,-8.34375 h -27.53125 l -2.53125,7.5625 h 9.09375 l -23.5,69.21875 h 29.3125 l 2.25,-6.59375 h -6.8125 L 448.25,625.375 h 29.0625 l -17.1875,55.0625 h 28.28125 l 2.53125,-6.0625 h -6.8125 l 15.65625,-49.25 h 27.78125 l -17.4375,55.3125 h 31.0625 l 2.53125,-6.59375 H 535.875 l 19.21875,-62.375 -5.8125,-7.8125 H 527.0625 l -7.34375,8.0625 h -13.375 l -7.59375,-8.3125 z"
|
||||
id="path3665"
|
||||
style="fill:#478cbf;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
37
addons/godot-vim/icon.svg.import
Normal file
37
addons/godot-vim/icon.svg.import
Normal file
@@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c1ygdmat1ffr4"
|
||||
path="res://.godot/imported/icon.svg-5744b51718b6a64145ec5798797f7631.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/godot-vim/icon.svg"
|
||||
dest_files=["res://.godot/imported/icon.svg-5744b51718b6a64145ec5798797f7631.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
7
addons/godot-vim/plugin.cfg
Normal file
7
addons/godot-vim/plugin.cfg
Normal file
@@ -0,0 +1,7 @@
|
||||
[plugin]
|
||||
|
||||
name="godot-vim"
|
||||
description="VIM bindings for godot4"
|
||||
author="Josh N"
|
||||
version="0.3"
|
||||
script="godot-vim.gd"
|
||||
36
addons/godot-vim/secoffice.glb.import
Normal file
36
addons/godot-vim/secoffice.glb.import
Normal file
@@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://of8gnedlll38"
|
||||
valid=false
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/godot-vim/secoffice.glb"
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
7
default_env.tres
Normal file
7
default_env.tres
Normal file
@@ -0,0 +1,7 @@
|
||||
[gd_resource type="Environment" load_steps=2 format=2]
|
||||
|
||||
[sub_resource type="Sky" id=1]
|
||||
|
||||
[resource]
|
||||
background_mode = 2
|
||||
background_sky = SubResource( 1 )
|
||||
110
export_presets.cfg
Normal file
110
export_presets.cfg
Normal file
@@ -0,0 +1,110 @@
|
||||
[preset.0]
|
||||
|
||||
name="Windows Desktop"
|
||||
platform="Windows Desktop"
|
||||
runnable=true
|
||||
advanced_options=false
|
||||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="../f.exe"
|
||||
patches=PackedStringArray()
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
seed=0
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
script_export_mode=2
|
||||
|
||||
[preset.0.options]
|
||||
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
debug/export_console_wrapper=0
|
||||
binary_format/embed_pck=false
|
||||
texture_format/s3tc_bptc=true
|
||||
texture_format/etc2_astc=false
|
||||
shader_baker/enabled=true
|
||||
binary_format/architecture="x86_64"
|
||||
codesign/enable=false
|
||||
codesign/timestamp=true
|
||||
codesign/timestamp_server_url=""
|
||||
codesign/digest_algorithm=1
|
||||
codesign/description=""
|
||||
codesign/custom_options=PackedStringArray()
|
||||
application/modify_resources=true
|
||||
application/icon=""
|
||||
application/console_wrapper_icon=""
|
||||
application/icon_interpolation=4
|
||||
application/file_version=""
|
||||
application/product_version=""
|
||||
application/company_name=""
|
||||
application/product_name=""
|
||||
application/file_description=""
|
||||
application/copyright=""
|
||||
application/trademarks=""
|
||||
application/export_angle=0
|
||||
application/export_d3d12=0
|
||||
application/d3d12_agility_sdk_multiarch=true
|
||||
ssh_remote_deploy/enabled=false
|
||||
ssh_remote_deploy/host="user@host_ip"
|
||||
ssh_remote_deploy/port="22"
|
||||
ssh_remote_deploy/extra_args_ssh=""
|
||||
ssh_remote_deploy/extra_args_scp=""
|
||||
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
|
||||
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
|
||||
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
|
||||
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
|
||||
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
|
||||
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
|
||||
Start-ScheduledTask -TaskName godot_remote_debug
|
||||
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
|
||||
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
|
||||
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
|
||||
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
|
||||
Remove-Item -Recurse -Force '{temp_dir}'"
|
||||
|
||||
[preset.1]
|
||||
|
||||
name="Linux"
|
||||
platform="Linux"
|
||||
runnable=true
|
||||
advanced_options=false
|
||||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path=""
|
||||
patches=PackedStringArray()
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
seed=0
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
script_export_mode=2
|
||||
|
||||
[preset.1.options]
|
||||
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
debug/export_console_wrapper=1
|
||||
binary_format/embed_pck=false
|
||||
texture_format/s3tc_bptc=true
|
||||
texture_format/etc2_astc=false
|
||||
shader_baker/enabled=false
|
||||
binary_format/architecture="x86_64"
|
||||
ssh_remote_deploy/enabled=false
|
||||
ssh_remote_deploy/host="user@host_ip"
|
||||
ssh_remote_deploy/port="22"
|
||||
ssh_remote_deploy/extra_args_ssh=""
|
||||
ssh_remote_deploy/extra_args_scp=""
|
||||
ssh_remote_deploy/run_script="#!/usr/bin/env bash
|
||||
export DISPLAY=:0
|
||||
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
|
||||
\"{temp_dir}/{exe_name}\" {cmd_args}"
|
||||
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
|
||||
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
|
||||
rm -rf \"{temp_dir}\""
|
||||
47
project.godot
Normal file
47
project.godot
Normal file
@@ -0,0 +1,47 @@
|
||||
; Engine configuration file.
|
||||
; It's best edited using the editor UI and not directly,
|
||||
; since the parameters that go here are not all obvious.
|
||||
;
|
||||
; Format:
|
||||
; [section] ; section goes between []
|
||||
; param=value ; assign values to parameters
|
||||
|
||||
config_version=5
|
||||
|
||||
[application]
|
||||
|
||||
config/name="FNaF Game Show Project"
|
||||
run/main_scene="uid://dq5ojxx2ytfwv"
|
||||
config/features=PackedStringArray("4.5", "Forward Plus")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
[autoload]
|
||||
|
||||
GlobalSettings="*res://Assets/Scripts/Player Controls/global_settings.gd"
|
||||
|
||||
[display]
|
||||
|
||||
window/size/viewport_width=1920
|
||||
window/size/viewport_height=1080
|
||||
|
||||
[editor_plugins]
|
||||
|
||||
enabled=PackedStringArray("res://addons/godot-vim/plugin.cfg")
|
||||
|
||||
[input]
|
||||
|
||||
Pause={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
"PSX Theme toggle"={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":49,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
Interact={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user