popcar2 / godotos Goto Github PK
View Code? Open in Web Editor NEWA Fake Operating System Interface made in Godot!
License: GNU Affero General Public License v3.0
A Fake Operating System Interface made in Godot!
License: GNU Affero General Public License v3.0
For full funny experience you may add HTML/CSS/JS supporting or create own Fron-ent dev language for more funny experience for users
Hello,
I was curious about the security of this since it interacts directly with the host filesystem.
I found that while I can't find a way to read arbitrary files due to you checking whether a file exists (at least as far as I found), I could still write to arbitrary file locations that don't exist already. This could be a problem if I could write a config file somewhere. In general, this program probably shouldn't be able to write outside of the files directory (at least from user actions).
Hope this helps you squash a security vulnerability!
If you wanted to read more about Directory Traversal exploits, OWASP has a pretty good article: https://owasp.org/www-community/attacks/Path_Traversal
Nothing to describe :)
Just wanna see terminal on this OS
Adding a browser to GodotOS is a long-term goal that might never happen.
This issue is just for tracking interest and giving some context about it, since it's a feature a ton of people requested.
Lecrapouille is porting the gdcef (Godot Chromium Embedded Framework) extension to Godot 4, which means it would be technically possible to run Chromium inside of GodotOS. It currently works but is incomplete and may contain issues.
When gdcef is stable, I may look into adding it to GodotOS. There are some things to consider though:
We could separate GodotOS to a version that includes Chromium and a version that doesn't, but that complicates things. GodotOS was also built in mind to keep things as simple as possible and make it easy to build upon and learn from. Can adding a big extension harm that goal?
Again, this issue is mostly wishful thinking. There aren't any immediate plans to include a browser but I hope this gives some answers before someone inevitably makes an issue asking for it.
All windows receive and handle (keyboard) input when more than one window is opened.
Create an InputEvent manager which register the windows (or other node) that is focused and pass InputEvent to it.
Below is some random copys of similar things form my project, please ignore diff.
extends Node
class_name InputManager
@export var camera:Camera3D
@export var initialObject:Node
var currentObject:Node = initialObject
var allObjects:Array = []
func registerObject(object:Node) -> void: ## Register and switch to the object that needs to receive input events
if !allObjects.has(object):
if getParentObject(object):
getParentObject(object).exit()
object.registerObject.connect(registerObject)
object.removeObject.connect(removeObject)
object.enter()
allObjects.append(object)
currentObject = object
func removeObject(object:Node) -> void: ## If a parent object exists, recursively unregister the object and its child nodes and switch to the parent object
var parentObject := getParentObject(object)
if allObjects.has(object) and parentObject:
object.registerObject.disconnect(registerObject)
object.removeObject.disconnect(removeObject)
allObjects.erase(object)
var childObject := getChildObject(object)
if childObject:
removeObject(childObject)
parentObject.enter()
currentObject = parentObject
object.exit()
func getChildObject(object:Node) -> Node:
if allObjects.size() > 1:
if allObjects.has(object) and allObjects.find(object) < allObjects.size() - 1:
return allObjects[allObjects.find(object) + 1]
return null
func getParentObject(object:Node) -> Node:
if allObjects.size() > 1:
if allObjects.has(object) and allObjects.find(object) > 0:
return allObjects[allObjects.find(object) - 1]
return null
func _ready() -> void:
# Initialize objects
if initialObject:
registerObject(initialObject)
else:
push_warning(self.name, ": Initial object not set")
# Capture mouse pointer
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
# Initialize camera settings
camera.fov = Sett.field_of_view
camera.current = true
func _input(event:InputEvent):
if currentObject:
currentObject.handleInputEvent(event)
func _unhandled_input(event:InputEvent) -> void:
# Press "Back" to pause and release mouse capture.
if Input.is_action_just_pressed("back") or Input.is_action_just_pressed("ui_cancel"):
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
Global.getUIManager().openUI("PauseUI")
Global.pause()
if currentObject:
currentObject.remainingInputEvent(event)
func _process(delta:float) -> void:
if currentObject:
camera.global_transform = currentObject.camera_position.global_transform
currentObject.updateFrame(delta)
func _physics_process(delta:float):
if currentObject:
currentObject.physicsUpdate(delta)
I made new collection of default wallpapers. If you need, you may change format or size, or write me to edit some graphic details.
During the animation of closing the start menu if you click twice quickly enough you can manage to open Godotris.
This could probably be fixed with checking the animation state, but it might be considered a feature.
Hello,
I hope this message finds you well. I apologize if this isn't the appropriate channel for communication, but I couldn't find any other means to contact you directly.
Firstly, I wanted to extend my sincere gratitude for providing your Godot project. It has been immensely helpful for a personal project of mine, particularly as I'm creating a birthday gift for my brother (April 7th).
I must admit, I'm not a professional when it comes to Godot, GitHub, or programming in general. However, I've been exploring your project and I had a question I was hoping you could assist me with.
Is there a way to ensure that specific files, ones I specify, are included with the game when it's downloaded and played on another computer? Specifically, I'm interested in ensuring that any pc who plays the game will have access to certain files. The code I'm referring to (i think) is desktop_file_manager.gd.
Any guidance or assistance you could provide would be immensely appreciated.
Thank you once again for your contribution and for any help you can offer.
Best regards,
Markus
This project needs this issue for the reason of good oportunities of Indie Godot Game developers! Everyone can add own game to your Godot OS on the free or maybe not free licunse(on your choise) and after that others visitors will play that game and testing it!)
About Updates
For new changes and best perfomance fro users you can create updating system for updating GodotOS app like on windows or linux operating systems. It will be much comfortable for non-programmer users!)
Hi. Nice work on GodotOS so far! May I suggest that you add a wordwrap option for long lines of text to wrap around and be visible without scrolling to the right?
The resolution of game windows is currently tied to screen scale. Zooming in causes games to be rendered in a lower resolution, zooming out causes games to be rendered in a higher resolution. This isn't immediately noticeable but can cause fuzziness if you're using a screen scale of 1.25 or higher.
Pictured: Game gets rendered in comically small resolution after increasing the screen scale dramatically.
This technically is working as intended since Viewport resolution is directly tied to its size. Scaling GodotOS up causes everything to be larger without changing the size of Control nodes. That means that you're technically just zooming in the viewport without changing the resolution.
Unfortunately I can't find a way to make resolution separate from the Viewport's size. I've tried increasing the size and scaling it back down but that causes all sorts of weird behavior and lag.
If anyone figures something out, do let me know.
It'd be cool to have a desktop environment that is made with Godot. As pretty as XFCE/GNOME/KDE and as lightweight as IceWM.
It,s must-have classic, that can give more fun
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.