From d90f819d684d77ce50eb85dc3329eef2727c58bf Mon Sep 17 00:00:00 2001 From: Ivan Kuzmenko <6745157+rndtrash@users.noreply.github.com> Date: Sat, 18 Mar 2023 20:37:33 +0300 Subject: [PATCH] Interface --- main_scene.tscn | 101 +++++++++++++++++++++++++++++++++++ project.godot | 12 +++++ scripts/GameController.gd | 6 +++ scripts/actors/Party.gd | 1 + scripts/utils/Actor.gd | 9 ++++ textures/grayons.jpg | Bin 0 -> 13940 bytes textures/grayons.jpg.import | 34 ++++++++++++ tileset.tres | 12 +++++ translations/en_us_base.tres | 3 ++ 9 files changed, 178 insertions(+) create mode 100644 main_scene.tscn create mode 100644 scripts/GameController.gd create mode 100644 scripts/actors/Party.gd create mode 100644 scripts/utils/Actor.gd create mode 100644 textures/grayons.jpg create mode 100644 textures/grayons.jpg.import create mode 100644 tileset.tres create mode 100644 translations/en_us_base.tres diff --git a/main_scene.tscn b/main_scene.tscn new file mode 100644 index 0000000..e32333d --- /dev/null +++ b/main_scene.tscn @@ -0,0 +1,101 @@ +[gd_scene load_steps=9 format=3 uid="uid://i801l1q51ty"] + +[ext_resource type="Script" path="res://scripts/GameController.gd" id="1_1it4g"] +[ext_resource type="MeshLibrary" uid="uid://1fphqppfq2sf" path="res://tileset.tres" id="2_6yanm"] +[ext_resource type="Texture2D" uid="uid://co0jbthyi0g22" path="res://textures/grayons.jpg" id="3_7asrf"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_8im05"] + +[sub_resource type="Sky" id="Sky_q8l0m"] +sky_material = SubResource("ProceduralSkyMaterial_8im05") + +[sub_resource type="Environment" id="Environment_01c1r"] +background_mode = 2 +sky = SubResource("Sky_q8l0m") + +[sub_resource type="ViewportTexture" id="ViewportTexture_nwbi4"] +viewport_path = NodePath("SubViewport") + +[sub_resource type="LabelSettings" id="LabelSettings_4j670"] +font_size = 42 + +[node name="Root" type="Node" node_paths=PackedStringArray("PartyCamera")] +script = ExtResource("1_1it4g") +PartyCamera = NodePath("SubViewport/PartyCamera") + +[node name="SubViewport" type="SubViewport" parent="."] +size = Vector2i(320, 320) + +[node name="GridMap" type="GridMap" parent="SubViewport"] +mesh_library = ExtResource("2_6yanm") +data = { +"cells": PackedInt32Array(65535, 65535, 0, 65535, 0, 0, 0, 0, 0, 0, 65535, 0) +} + +[node name="PartyCamera" type="Camera3D" parent="SubViewport"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.405028, 0) +environment = SubResource("Environment_01c1r") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="SubViewport"] +transform = Transform3D(0.810471, -0.450933, 0.373893, 0, 0.638284, 0.769801, -0.585778, -0.623901, 0.517311, 0, 0, 0) + +[node name="TextureRect" type="TextureRect" parent="."] +anchors_preset = 9 +anchor_bottom = 1.0 +offset_right = 651.0 +grow_vertical = 2 +texture = SubResource("ViewportTexture_nwbi4") +stretch_mode = 4 + +[node name="Label" type="Label" parent="."] +anchors_preset = -1 +anchor_left = 0.598 +anchor_top = 0.039 +anchor_right = 0.987 +anchor_bottom = 0.236 +offset_left = 0.103943 +offset_top = -0.272001 +offset_right = -0.0240479 +offset_bottom = 0.071991 +text = "ЗАЛУПА БЕХОЛДЕРА +ОФФЛАЙН" +label_settings = SubResource("LabelSettings_4j670") +horizontal_alignment = 1 +vertical_alignment = 1 +uppercase = true + +[node name="Grayons" type="Sprite2D" parent="."] +position = Vector2(735, 248) +scale = Vector2(0.215054, 0.184039) +texture = ExtResource("3_7asrf") + +[node name="Grayons2" type="Sprite2D" parent="."] +position = Vector2(957, 270) +scale = Vector2(0.12724, 0.210912) +texture = ExtResource("3_7asrf") + +[node name="Grayons3" type="Sprite2D" parent="."] +position = Vector2(735, 451) +scale = Vector2(0.260753, 0.188518) +texture = ExtResource("3_7asrf") + +[node name="Grayons4" type="Sprite2D" parent="."] +position = Vector2(999, 466) +scale = Vector2(0.291667, 0.252239) +texture = ExtResource("3_7asrf") + +[node name="Log" type="TextEdit" parent="."] +anchors_preset = -1 +anchor_top = 0.881 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 650.0 +offset_top = -19.888 +grow_horizontal = 2 +grow_vertical = 0 +size_flags_horizontal = 3 +size_flags_vertical = 10 +text = "Партия поспала, посрала и пожрала. Не обязательно в данном порядке. +Вы услышали шорох." +editable = false +wrap_mode = 1 diff --git a/project.godot b/project.godot index f80c998..35fbb4e 100644 --- a/project.godot +++ b/project.godot @@ -11,6 +11,7 @@ config_version=5 [application] config/name="dungeon-crawler-framework" +run/main_scene="res://main_scene.tscn" config/features=PackedStringArray("4.0", "GL Compatibility") config/icon="res://icon.svg" @@ -18,7 +19,18 @@ config/icon="res://icon.svg" project/assembly_name="dungeon-crawler-framework" +[internationalization] + +locale/translations=PackedStringArray("res://translations/en_us_base.tres") + [rendering] renderer/rendering_method="gl_compatibility" renderer/rendering_method.mobile="gl_compatibility" +textures/default_filters/use_nearest_mipmap_filter=true +textures/default_filters/anisotropic_filtering_level=0 +textures/decals/filter=2 +textures/light_projectors/filter=2 +2d/snap/snap_2d_transforms_to_pixel=true +2d/snap/snap_2d_vertices_to_pixel=true +textures/canvas_textures/default_texture_filter=0 diff --git a/scripts/GameController.gd b/scripts/GameController.gd new file mode 100644 index 0000000..02d75cc --- /dev/null +++ b/scripts/GameController.gd @@ -0,0 +1,6 @@ +extends Node + +@export var PartyCamera : Camera3D + +func _ready(): + pass diff --git a/scripts/actors/Party.gd b/scripts/actors/Party.gd new file mode 100644 index 0000000..e76b0db --- /dev/null +++ b/scripts/actors/Party.gd @@ -0,0 +1 @@ +extends Actor diff --git a/scripts/utils/Actor.gd b/scripts/utils/Actor.gd new file mode 100644 index 0000000..771d455 --- /dev/null +++ b/scripts/utils/Actor.gd @@ -0,0 +1,9 @@ +class_name Actor + +@export var x : int +@export var y : int +@export_range(0, 3) var direction : int +@export var world_object : Node3D + +func update_world() -> void: + pass diff --git a/textures/grayons.jpg b/textures/grayons.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b702d46b1e8aba44daaff44da9f6edf5aea20c93 GIT binary patch literal 13940 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