Compare commits
2 Commits
main
...
c0cac7919a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c0cac7919a | ||
|
|
fbd75b3397 |
@@ -1,10 +1,11 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://b4ot3p50x08po"]
|
||||
[gd_scene load_steps=7 format=3 uid="uid://b4ot3p50x08po"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cuqeg7u667dw6" path="res://Blends/Room/room.gltf" id="1_jjgbg"]
|
||||
[ext_resource type="PackedScene" uid="uid://j06vthscroca" path="res://Scenes/bullet.tscn" id="3_8gbba"]
|
||||
[ext_resource type="PackedScene" uid="uid://bge7npb7b1y6x" path="res://Scenes/revolver.tscn" id="4_jjvhh"]
|
||||
[ext_resource type="Script" uid="uid://dcmqt4341kxem" path="res://Scripts/bullet_stack.gd" id="4_kry3j"]
|
||||
[ext_resource type="PackedScene" uid="uid://bueqdw22nl501" path="res://Scenes/AI.tscn" id="5_kry3j"]
|
||||
[ext_resource type="PackedScene" uid="uid://cbr3e8xsfwyhf" path="res://Scenes/main_game_ui.tscn" id="6_21xkr"]
|
||||
|
||||
[node name="Node3D" type="Node3D"]
|
||||
|
||||
@@ -26,7 +27,7 @@ transform = Transform3D(-0.1, -8.74228e-09, 0, 8.74228e-09, -0.1, 0, 0, 0, 0.1,
|
||||
is_player_revolver = true
|
||||
|
||||
[node name="BulletStack" type="Node3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.09463, 3.35364, -0.941887)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.39969, 3.35364, -0.941887)
|
||||
script = ExtResource("4_kry3j")
|
||||
|
||||
[node name="bullet2" parent="BulletStack" instance=ExtResource("3_8gbba")]
|
||||
@@ -47,10 +48,33 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.126874, -0.00966144, 0.1641
|
||||
[node name="bullet6" parent="BulletStack" instance=ExtResource("3_8gbba")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.300729, -0.0193229, 0.207828)
|
||||
|
||||
[node name="bullet7" parent="BulletStack" instance=ExtResource("3_8gbba")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0812991, -0.0193229, 0.241967)
|
||||
|
||||
[node name="bullet8" parent="BulletStack" instance=ExtResource("3_8gbba")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.000887632, -0.00966144, 0.23783)
|
||||
|
||||
[node name="bullet9" parent="BulletStack" instance=ExtResource("3_8gbba")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.172968, -0.0193229, 0.281501)
|
||||
|
||||
[node name="bullet10" parent="BulletStack" instance=ExtResource("3_8gbba")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.20906, -0.0193229, 0.401988)
|
||||
|
||||
[node name="bullet11" parent="BulletStack" instance=ExtResource("3_8gbba")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.126874, -0.00966144, 0.397851)
|
||||
|
||||
[node name="bullet12" parent="BulletStack" instance=ExtResource("3_8gbba")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.300729, -0.0193229, 0.441522)
|
||||
|
||||
[node name="bullet13" parent="BulletStack" instance=ExtResource("3_8gbba")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.162003, -0.0193229, 0.00827265)
|
||||
|
||||
[node name="person3" parent="." instance=ExtResource("5_kry3j")]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0.0599972, 3.68584, -2.25251)
|
||||
|
||||
[node name="enemy_revolver" parent="." instance=ExtResource("4_jjvhh")]
|
||||
transform = Transform3D(0.1, 0, 0, 0, -0.1, -8.74228e-09, 0, 8.74228e-09, -0.1, 0.354285, 4.2476, -0.496572)
|
||||
transform = Transform3D(0.1, 0, 0, 0, -0.1, -1.50996e-08, 0, 1.50996e-08, -0.1, 0.354285, 4.2476, -0.496572)
|
||||
|
||||
[node name="MainGame" parent="." instance=ExtResource("6_21xkr")]
|
||||
|
||||
[editable path="revolver"]
|
||||
|
||||
36
Scenes/main_game_ui.tscn
Normal file
36
Scenes/main_game_ui.tscn
Normal file
@@ -0,0 +1,36 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cbr3e8xsfwyhf"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://2ktulh0d67v0" path="res://Scripts/player_choice_box.gd" id="1_mx1e2"]
|
||||
|
||||
[node name="MainGame" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -86.5
|
||||
offset_top = -125.08
|
||||
offset_right = 86.5
|
||||
offset_bottom = -94.08
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
script = ExtResource("1_mx1e2")
|
||||
|
||||
[node name="Button" type="Button" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Shoot him
|
||||
"
|
||||
|
||||
[node name="Button2" type="Button" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Shoot me"
|
||||
@@ -5,11 +5,28 @@ var revolver: Node3D
|
||||
func _ready() -> void:
|
||||
revolver = GameManager.get_enemy_revolver()
|
||||
GameManager.state_changed.connect(on_state_changed)
|
||||
|
||||
func on_state_changed():
|
||||
if GameManager.current_state == GameManager.GameState.PLAYER2_GUN_LOAD:
|
||||
make_turn()
|
||||
elif GameManager.current_state == GameManager.GameState.PLAYER2_UNLOAD:
|
||||
unload()
|
||||
func unload():
|
||||
print("Unload")
|
||||
var choices = GameManager.PlayerChoice.values()
|
||||
var choice = choices.pick_random()
|
||||
GameManager.player_phase2_choice = choice
|
||||
print(GameManager.player_phase2_choice)
|
||||
if GameManager.PlayerChoice.SHOOT_SELF == choice:
|
||||
print("I will shoot myself")
|
||||
revolver.rotation_degrees = Vector3(180,180,0)
|
||||
else:
|
||||
print("I will shoot opponent")
|
||||
revolver.rotation_degrees = Vector3(180,0,0)
|
||||
|
||||
revolver.current_round = 0
|
||||
for i in range(0, 6, 1):
|
||||
revolver.shoot()
|
||||
revolver.current_round = i
|
||||
func make_turn():
|
||||
if revolver == null:
|
||||
revolver = GameManager.get_enemy_revolver()
|
||||
|
||||
@@ -34,3 +34,11 @@ func on_target_reached():
|
||||
func _on_static_body_3d_input_event(camera: Node, event: InputEvent, event_position: Vector3, normal: Vector3, shape_idx: int) -> void:
|
||||
if event.is_action_released("left_mouse_click"):
|
||||
GameManager.bullet_selected.emit(self)
|
||||
|
||||
|
||||
func shoot():
|
||||
if is_live:
|
||||
print("Ammo was live")
|
||||
else:
|
||||
print("Ammo not live")
|
||||
pass
|
||||
|
||||
@@ -5,11 +5,16 @@ signal bullet_selected(object)
|
||||
signal state_changed
|
||||
|
||||
enum GameState { PLAYER1_GUN_LOAD, PLAYER2_GUN_LOAD, GUN_ANIMATION, PLAYER1_UNLOAD,PLAYER2_UNLOAD}
|
||||
enum PlayerChoice {SHOOT_SELF, SHOOT_OPPONENT}
|
||||
|
||||
var player_phase2_choice
|
||||
var current_state = GameState.PLAYER1_GUN_LOAD
|
||||
var bullets: Array
|
||||
|
||||
var player1_revolver: Node3D
|
||||
var player2_revolver: Node3D
|
||||
var is_player1_loaded: bool = false
|
||||
var is_player2_loaded: bool = false
|
||||
var bullet_stack: Node3D
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -52,19 +57,37 @@ func check_unloaded_bullets():
|
||||
else:
|
||||
return false
|
||||
|
||||
func check_loaded_bullets(revolver: Node3D):
|
||||
if revolver.can_be_loaded():
|
||||
return true
|
||||
else:
|
||||
return false
|
||||
|
||||
func end_player_turn():
|
||||
if check_unloaded_bullets():
|
||||
if !is_player2_loaded:
|
||||
set_state(GameState.PLAYER2_GUN_LOAD)
|
||||
|
||||
end_turn()
|
||||
|
||||
func end_enemy_turn():
|
||||
if is_player1_loaded == false:
|
||||
print("Player Turn")
|
||||
set_state(GameState.PLAYER1_GUN_LOAD)
|
||||
end_turn()
|
||||
func end_turn():
|
||||
if check_unloaded_bullets():
|
||||
if is_player1_loaded and is_player2_loaded:
|
||||
print("Phase 2")
|
||||
get_phase2_player_start()
|
||||
else:
|
||||
set_state(GameState.PLAYER2_UNLOAD)
|
||||
print("End of Phase 1")
|
||||
func end_enemy_turn():
|
||||
if check_unloaded_bullets():
|
||||
set_state(GameState.PLAYER1_GUN_LOAD)
|
||||
else:
|
||||
set_state(GameState.PLAYER1_UNLOAD)
|
||||
print("End of Phase 1")
|
||||
func get_enemy_revolver() -> Node3D:
|
||||
return player2_revolver
|
||||
|
||||
|
||||
func get_phase2_player_start():
|
||||
var randNumb = randi_range(0,1)
|
||||
if randNumb == 0:
|
||||
set_state(GameState.PLAYER1_UNLOAD)
|
||||
else:
|
||||
set_state(GameState.PLAYER2_UNLOAD)
|
||||
|
||||
11
Scripts/player_choice_box.gd
Normal file
11
Scripts/player_choice_box.gd
Normal file
@@ -0,0 +1,11 @@
|
||||
extends HBoxContainer
|
||||
var start_pos: Vector2
|
||||
|
||||
func _ready() -> void:
|
||||
start_pos = self.position
|
||||
self.position = Vector2(1000.0,1000.0)
|
||||
GameManager.state_changed.connect(on_state_changed)
|
||||
|
||||
func on_state_changed():
|
||||
if GameManager.current_state == GameManager.GameState.PLAYER1_UNLOAD:
|
||||
self.position = start_pos
|
||||
1
Scripts/player_choice_box.gd.uid
Normal file
1
Scripts/player_choice_box.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://2ktulh0d67v0
|
||||
@@ -4,7 +4,7 @@ var bullet_target_pos = Vector3(1.95,0.03,4.612) #2.231
|
||||
|
||||
var loaded_bullets = Array()
|
||||
var max_bullets: int = 6
|
||||
var current_round: int = 1
|
||||
var current_round: int = 0
|
||||
var timer: Timer
|
||||
|
||||
@export var is_player_revolver: bool = false
|
||||
@@ -12,7 +12,7 @@ var timer: Timer
|
||||
|
||||
var is_cylinder_out: bool = false
|
||||
func _ready() -> void:
|
||||
loaded_bullets.resize(max_bullets + 1)
|
||||
loaded_bullets.resize(max_bullets)
|
||||
timer = $Timer
|
||||
if is_player_revolver:
|
||||
GameManager.set_player_revolver(self)
|
||||
@@ -27,6 +27,8 @@ func _process(delta: float) -> void:
|
||||
|
||||
cylinder.rotation_degrees = lerp(cylinder.rotation_degrees,Vector3(30 + current_round*60,90,90), delta / 0.1 )
|
||||
#cylinder.rotation_degrees = Vector3(30 + current_round*60,90,90)
|
||||
|
||||
|
||||
func load_bullet(bullet_object: Node3D):
|
||||
loaded_bullets[current_round] = bullet_object
|
||||
bullet_object.is_loaded = true
|
||||
@@ -39,15 +41,34 @@ func load_bullet(bullet_object: Node3D):
|
||||
#cylinder.rotation.x = 90.0
|
||||
|
||||
func on_load_anim_end():
|
||||
timer.timeout.disconnect(on_load_anim_end)
|
||||
if !can_be_loaded():
|
||||
if is_player_revolver:
|
||||
GameManager.is_player1_loaded = true
|
||||
else:
|
||||
GameManager.is_player2_loaded = true
|
||||
is_cylinder_out = false
|
||||
if is_player_revolver:
|
||||
GameManager.end_player_turn()
|
||||
else:
|
||||
GameManager.end_enemy_turn()
|
||||
timer.timeout.disconnect(on_load_anim_end)
|
||||
|
||||
|
||||
func on_bullet_reached():
|
||||
current_round += 1
|
||||
timer.start()
|
||||
func shoot():
|
||||
loaded_bullets[current_round].shoot()
|
||||
pass
|
||||
|
||||
|
||||
func can_be_loaded():
|
||||
var free: int = 0
|
||||
for bullet in loaded_bullets:
|
||||
if bullet == null:
|
||||
free += 1
|
||||
if free > 0:
|
||||
return true
|
||||
else:
|
||||
return false
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 370 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ds1brgul327l0"
|
||||
path="res://.godot/imported/ANIME-PICTURES.NET_-_435314-1920x1080-senran+kagura-homura+(senran+kagura)-yomi+(senran+kagura)-hikage+(senran+kagura)-mirai+(senran+kagura)-haruka+(senran+kagura).jpeg-8631b2d80db4404b92f69470fd0c2315.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/ANIME-PICTURES.NET_-_435314-1920x1080-senran+kagura-homura+(senran+kagura)-yomi+(senran+kagura)-hikage+(senran+kagura)-mirai+(senran+kagura)-haruka+(senran+kagura).jpeg"
|
||||
dest_files=["res://.godot/imported/ANIME-PICTURES.NET_-_435314-1920x1080-senran+kagura-homura+(senran+kagura)-yomi+(senran+kagura)-hikage+(senran+kagura)-mirai+(senran+kagura)-haruka+(senran+kagura).jpeg-8631b2d80db4404b92f69470fd0c2315.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
|
||||
BIN
addons/bb4b32cd79fb85dfe85f00a17d634a44_bp.avif
Normal file
BIN
addons/bb4b32cd79fb85dfe85f00a17d634a44_bp.avif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
BIN
addons/bb4b32cd79fb85dfe85f00a17d634a44_bp.png
Normal file
BIN
addons/bb4b32cd79fb85dfe85f00a17d634a44_bp.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 352 KiB |
34
addons/bb4b32cd79fb85dfe85f00a17d634a44_bp.png.import
Normal file
34
addons/bb4b32cd79fb85dfe85f00a17d634a44_bp.png.import
Normal file
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bqxwnlrkv6mft"
|
||||
path="res://.godot/imported/bb4b32cd79fb85dfe85f00a17d634a44_bp.png-d1280714b7c0662815de28909bd20fbb.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/bb4b32cd79fb85dfe85f00a17d634a44_bp.png"
|
||||
dest_files=["res://.godot/imported/bb4b32cd79fb85dfe85f00a17d634a44_bp.png-d1280714b7c0662815de28909bd20fbb.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
|
||||
2
addons/cba/.gitignore
vendored
Normal file
2
addons/cba/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
# Personal configuration file
|
||||
config.json
|
||||
21
addons/cba/LICENSE
Normal file
21
addons/cba/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 peachey2k2
|
||||
|
||||
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.
|
||||
26
addons/cba/README.md
Normal file
26
addons/cba/README.md
Normal file
@@ -0,0 +1,26 @@
|
||||
[](https://discord.gg/ZuUWPaSrHa)
|
||||
# Chey's Background Addon
|
||||
A simple plugin to put a background image behind your Godot editor.
|
||||
|
||||

|
||||
|
||||
# Installation
|
||||
You can download it from the [asset library](https://godotengine.org/asset-library/asset/2933), which you can also use within the editor.
|
||||
|
||||
Then enable the plugin from `Project > Project Settings > Plugins`. It will probably freeze for a couple seconds. That's intended.
|
||||
|
||||
|
||||
# Configuration
|
||||
Simply go to `Project > Tools > Backgrounds`. That should open up the configuration window.
|
||||
|
||||
All the configuration is stored in `addons/cba/config.json`.
|
||||
|
||||
> [!NOTE]
|
||||
> Changing the UI color might freeze your editor for a second or two. Don't worry, that's normal. Godot just takes time to refresh all the theming.
|
||||
|
||||

|
||||
|
||||
# Support
|
||||
If you have a problem with the plugin, just come to my Discord server and I'll try to help.
|
||||
|
||||
[](https://discord.gg/ZuUWPaSrHa)
|
||||
0
addons/cba/images/.gdignore
Normal file
0
addons/cba/images/.gdignore
Normal file
BIN
addons/cba/images/default.png
Normal file
BIN
addons/cba/images/default.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 171 B |
BIN
addons/cba/images/icon.png
Normal file
BIN
addons/cba/images/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
7
addons/cba/plugin.cfg
Normal file
7
addons/cba/plugin.cfg
Normal file
@@ -0,0 +1,7 @@
|
||||
[plugin]
|
||||
|
||||
name="Chey's Background Addon"
|
||||
description="An addon that lets you add a background for your editor."
|
||||
author="peachey2k2"
|
||||
version="1.1.6"
|
||||
script="plugin.gd"
|
||||
220
addons/cba/plugin.gd
Normal file
220
addons/cba/plugin.gd
Normal file
@@ -0,0 +1,220 @@
|
||||
@tool
|
||||
extends EditorPlugin
|
||||
|
||||
var base:Control
|
||||
var editor_settings:EditorSettings
|
||||
|
||||
const TOOL = preload("res://addons/cba/tool.tscn")
|
||||
var settings:Dictionary = {}
|
||||
var bg:TextureRect
|
||||
var tool:Window
|
||||
var theme:Theme
|
||||
|
||||
var accent_color:Color
|
||||
|
||||
func _disable_plugin():
|
||||
bg.queue_free()
|
||||
editor_settings.set("interface/theme/custom_theme", "")
|
||||
editor_settings.set("interface/theme/preset", "Default")
|
||||
remove_tool_menu_item("Backgrounds")
|
||||
|
||||
func _enter_tree():
|
||||
#Benchmark.start("init")
|
||||
if not Engine.is_editor_hint(): return
|
||||
|
||||
base = EditorInterface.get_base_control()
|
||||
editor_settings = EditorInterface.get_editor_settings()
|
||||
editor_settings.settings_changed.connect(func():
|
||||
for setting in editor_settings.get_changed_settings():
|
||||
_setting_changed(setting)
|
||||
)
|
||||
bg = TextureRect.new()
|
||||
bg.name = "Editor Background"
|
||||
bg.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
bg.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
|
||||
bg.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||||
base.add_child.call_deferred(bg)
|
||||
# move it to the top of the tree so it's behind all the UI
|
||||
base.move_child.call_deferred(bg, 0)
|
||||
await bg.ready
|
||||
|
||||
theme = preload("res://addons/cba/theme.tres")
|
||||
if editor_settings.get("interface/theme/custom_theme") != "res://addons/cba/theme.tres":
|
||||
editor_settings.set("interface/theme/custom_theme", "res://addons/cba/theme.tres")
|
||||
if editor_settings.get("interface/theme/preset") != "Custom":
|
||||
editor_settings.set("interface/theme/preset", "Custom")
|
||||
|
||||
await base.get_tree().physics_frame
|
||||
load_settings()
|
||||
|
||||
add_tool_menu_item("Backgrounds", func():
|
||||
if is_instance_valid(tool): printerr("There is already a background picker window open."); return
|
||||
tool = TOOL.instantiate()
|
||||
tool.main = self
|
||||
base.add_child(tool)
|
||||
tool.start()
|
||||
tool.popup_centered()
|
||||
)
|
||||
#Benchmark.end("init")
|
||||
|
||||
func change_setting(value:Variant, setting:String, update_ui:bool = false, update_setting:bool = true):
|
||||
var is_prev_ready := is_instance_valid(tool)
|
||||
match setting:
|
||||
"image":
|
||||
var img := load_image(value)
|
||||
if is_prev_ready: tool.preview.texture = img
|
||||
if update_setting: bg.texture = img
|
||||
"stretch":
|
||||
if update_setting: bg.stretch_mode = value
|
||||
if is_prev_ready:
|
||||
tool.preview.stretch_mode = value
|
||||
if update_ui:
|
||||
tool.get_node("VBoxContainer/HBoxContainer/VBoxContainer/stretch mode").select(value)
|
||||
"filter":
|
||||
if update_setting: bg.texture_filter = value
|
||||
if is_prev_ready:
|
||||
tool.preview.texture_filter = value
|
||||
if update_ui:
|
||||
tool.get_node("VBoxContainer/HBoxContainer/VBoxContainer/filter mode").select(value)
|
||||
"ui_color":
|
||||
if is_prev_ready:
|
||||
if update_ui:
|
||||
value = Color(settings["ui_color"])
|
||||
tool.get_node("VBoxContainer/HBoxContainer/VBoxContainer2/ui_color").color = value
|
||||
else:
|
||||
value = tool.get_node("VBoxContainer/HBoxContainer/VBoxContainer2/ui_color").color
|
||||
if not update_ui && update_setting:
|
||||
if value == Color(settings["ui_color"]): return
|
||||
change_theme_color(value)
|
||||
settings["ui_color"] = value.to_html()
|
||||
value = null
|
||||
"bg_modulate":
|
||||
if value is String: value = Color(value)
|
||||
if update_setting: bg.modulate = value
|
||||
if is_prev_ready:
|
||||
tool.preview.modulate = value
|
||||
if update_ui:
|
||||
tool.get_node("VBoxContainer/HBoxContainer/VBoxContainer2/bg_modulate").color = value
|
||||
value = value.to_html()
|
||||
"edit_transparency":
|
||||
if is_prev_ready:
|
||||
if update_ui:
|
||||
value = settings["edit_transparency"]
|
||||
tool.get_node("VBoxContainer/edit_transparency").button_pressed = value
|
||||
else:
|
||||
value = tool.get_node("VBoxContainer/edit_transparency").button_pressed
|
||||
if not update_ui && update_setting:
|
||||
if value == settings["edit_transparency"]: return
|
||||
settings["edit_transparency"] = value
|
||||
change_theme_color(Color(settings["ui_color"]))
|
||||
value = null
|
||||
if value != null: settings[setting] = value
|
||||
|
||||
func load_image(path:String) -> Texture2D:
|
||||
var file := FileAccess.open(path, FileAccess.READ)
|
||||
if file == null: printerr("file not found: ", path); return
|
||||
var image = Image.load_from_file(path)
|
||||
var out = ImageTexture.create_from_image(image)
|
||||
return out
|
||||
|
||||
func load_settings():
|
||||
if FileAccess.file_exists("res://addons/cba/config.json"):
|
||||
var file := FileAccess.open("res://addons/cba/config.json", FileAccess.READ)
|
||||
if file == null:
|
||||
file = FileAccess.open("res://addons/cba/config.json", FileAccess.WRITE_READ)
|
||||
assert(file != null, "Error opening file.")
|
||||
return
|
||||
else:
|
||||
settings = JSON.parse_string(file.get_as_text())
|
||||
file.close()
|
||||
else:
|
||||
var file := FileAccess.open("res://addons/cba/config.json", FileAccess.WRITE)
|
||||
var defaults := {
|
||||
"filter": 0.0,
|
||||
"image": ProjectSettings.globalize_path("res://addons/cba/images/default.png"),
|
||||
"stretch": 1,
|
||||
"ui_color": "00000088",
|
||||
"bg_modulate": "ffffffb0",
|
||||
"edit_transparency": false,
|
||||
}
|
||||
file.store_string(JSON.stringify(defaults, "\t"))
|
||||
settings = defaults
|
||||
file.close()
|
||||
for s in settings.keys():
|
||||
change_setting(settings[s], s, true)
|
||||
|
||||
func save_settings():
|
||||
var file := FileAccess.open("res://addons/cba/config.json", FileAccess.WRITE)
|
||||
file.store_string(JSON.stringify(settings, "\t"))
|
||||
|
||||
func _setting_changed(setting:String):
|
||||
match setting:
|
||||
"interface/theme/accent_color":
|
||||
change_theme_color(Color(settings["ui_color"]))
|
||||
|
||||
func change_theme_color(col:Color):
|
||||
#Benchmark.start("change theme color")
|
||||
|
||||
accent_color = editor_settings.get_setting("interface/theme/accent_color")
|
||||
|
||||
var controls_list = get_all_controls([base])
|
||||
|
||||
var col2 := Color(col, col.a/2.0)
|
||||
var col3 := Color(col, min(col.a/col.v, col.a/4.0))
|
||||
change_color("EditorStyles", "Background", col)
|
||||
change_color("EditorStyles", "BottomPanel", col)
|
||||
change_color("EditorStyles", "BottomPanelDebuggerOverride", col)
|
||||
change_color("EditorStyles", "Content", col)
|
||||
change_color("EditorStyles", "LaunchPadNormal", col)
|
||||
|
||||
change_color("TabContainer", "panel", col)
|
||||
change_color("TabContainer", "tab_selected", col, accent_color)
|
||||
change_color("TabContainer", "tab_unselected", col2)
|
||||
change_color("TabContainer", "tab_hovered", col2)
|
||||
|
||||
change_color("TabBar", "tab_selected", col, accent_color)
|
||||
change_color("TabBar", "tab_unselected", col2)
|
||||
change_color("TabBar", "tab_hovered", col2)
|
||||
|
||||
change_color("TabContainerOdd", "tab_selected", col, accent_color)
|
||||
change_color("TabContainerOdd", "panel", col2)
|
||||
|
||||
# bordered
|
||||
change_color("Button", "normal", col3)
|
||||
change_color("MenuButton", "normal", col3)
|
||||
change_color("OptionButton", "normal", col3)
|
||||
change_color("RichTextLabel", "normal", col3)
|
||||
change_color("LineEdit", "normal", col3)
|
||||
change_color("TextEdit", "normal", col3)
|
||||
change_color("LineEdit", "read_only", col3)
|
||||
change_color("TextEdit", "read_only", col3)
|
||||
change_color("EditorProperty", "child_bg", col3)
|
||||
|
||||
change_color("EditorInspectorCategory", "bg", col2)
|
||||
|
||||
# fix to old values showing up in transparent preview
|
||||
if settings["edit_transparency"]:
|
||||
change_color("LineEdit", "focus", col3)
|
||||
else:
|
||||
change_color("LineEdit", "focus", Color.BLACK)
|
||||
|
||||
# trigger an update
|
||||
theme.get_stylebox("Background", "EditorStyles").emit_changed()
|
||||
|
||||
#Benchmark.end("change theme color")
|
||||
|
||||
func get_all_controls(nodes:Array[Node]) -> Array[Node]:
|
||||
var out:Array[Node] = []
|
||||
for node in nodes:
|
||||
if node is Control: out.append(node)
|
||||
var children := node.get_children() as Array[Node]
|
||||
out += get_all_controls(children)
|
||||
return out
|
||||
|
||||
func change_color(type:String, name:String, col:Color, border = null):
|
||||
var box:StyleBoxFlat = theme.get_stylebox(name, type)
|
||||
box.set_block_signals(true)
|
||||
box.bg_color = col
|
||||
if border != null:
|
||||
box.border_color = border
|
||||
box.set_block_signals(false)
|
||||
1
addons/cba/plugin.gd.uid
Normal file
1
addons/cba/plugin.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dpgybwvyhvqkx
|
||||
359
addons/cba/theme.tres
Normal file
359
addons/cba/theme.tres
Normal file
@@ -0,0 +1,359 @@
|
||||
[gd_resource type="Theme" load_steps=39 format=3 uid="uid://cbdjaabpm8jfk"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6rrxc"]
|
||||
content_margin_left = 6.0
|
||||
content_margin_top = 5.0
|
||||
content_margin_right = 6.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.145098)
|
||||
border_width_left = 1
|
||||
border_width_top = 1
|
||||
border_width_right = 1
|
||||
border_width_bottom = 1
|
||||
border_color = Color(0.47788, 0.47788, 0.47788, 1)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_radius_bottom_right = 3
|
||||
corner_radius_bottom_left = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_4bdji"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_x4bf7"]
|
||||
content_margin_left = 4.0
|
||||
content_margin_top = 4.0
|
||||
content_margin_right = 4.0
|
||||
content_margin_bottom = 4.0
|
||||
bg_color = Color(0, 0, 0, 0.290196)
|
||||
border_color = Color(0.25098, 0.266667, 0.298039, 1)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_radius_bottom_right = 3
|
||||
corner_radius_bottom_left = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qm4uc"]
|
||||
bg_color = Color(0, 0, 0, 0.145098)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_kmfvt"]
|
||||
bg_color = Color(0, 0, 0, 0.580392)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1tn6y"]
|
||||
content_margin_left = 4.0
|
||||
content_margin_top = 6.0
|
||||
content_margin_right = 4.0
|
||||
content_margin_bottom = 4.0
|
||||
bg_color = Color(0, 0, 0, 0.580392)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_radius_bottom_right = 3
|
||||
corner_radius_bottom_left = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mfvec"]
|
||||
content_margin_left = 4.0
|
||||
content_margin_top = 0.0
|
||||
content_margin_right = 4.0
|
||||
content_margin_bottom = 4.0
|
||||
bg_color = Color(0, 0, 0, 0.580392)
|
||||
corner_radius_bottom_right = 3
|
||||
corner_radius_bottom_left = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yxe5q"]
|
||||
bg_color = Color(0.617575, 0.626378, 0.219465, 1)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wrepn"]
|
||||
bg_color = Color(0, 0, 0, 0.580392)
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_4qoyy"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_bae5w"]
|
||||
bg_color = Color(0, 0, 0, 0)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_hqa07"]
|
||||
bg_color = Color(0.71993, 0.58247, 0.18956, 1)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jbgu4"]
|
||||
bg_color = Color(0.87666, 0.482054, 0.185217, 1)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7xbe2"]
|
||||
content_margin_left = 2.0
|
||||
content_margin_top = 0.0
|
||||
content_margin_right = 2.0
|
||||
content_margin_bottom = 0.0
|
||||
bg_color = Color(0, 0, 0, 0.580392)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_radius_bottom_right = 3
|
||||
corner_radius_bottom_left = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_eag6m"]
|
||||
bg_color = Color(0.266667, 0.647059, 0.819608, 0)
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_nn8ly"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yi1o1"]
|
||||
bg_color = Color(0.6, 0.6, 0.6, 0)
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ebp5u"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7l2sj"]
|
||||
bg_color = Color(0, 0, 0, 1)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_cbyhm"]
|
||||
content_margin_left = 6.0
|
||||
content_margin_top = 4.0
|
||||
content_margin_right = 6.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.145098)
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0.113725, 0.133333, 0.160784, 1)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_cjlww"]
|
||||
content_margin_left = 6.0
|
||||
content_margin_top = 4.0
|
||||
content_margin_right = 6.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.145098)
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0.113725, 0.133333, 0.160784, 1)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_xi4cy"]
|
||||
content_margin_left = 6.0
|
||||
content_margin_top = 5.0
|
||||
content_margin_right = 6.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.145098)
|
||||
border_color = Color(0.501961, 0.501961, 0.501961, 1)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_radius_bottom_right = 3
|
||||
corner_radius_bottom_left = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_thgut"]
|
||||
content_margin_left = 6.0
|
||||
content_margin_top = 5.0
|
||||
content_margin_right = 6.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.145098)
|
||||
border_color = Color(0.501961, 0.501961, 0.501961, 1)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_radius_bottom_right = 3
|
||||
corner_radius_bottom_left = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_4rkfj"]
|
||||
content_margin_left = 4.0
|
||||
content_margin_top = 4.0
|
||||
content_margin_right = 4.0
|
||||
content_margin_bottom = 4.0
|
||||
bg_color = Color(0, 0, 0, 0.145098)
|
||||
border_width_left = 1
|
||||
border_width_top = 1
|
||||
border_width_right = 1
|
||||
border_width_bottom = 1
|
||||
border_color = Color(0.301961, 0.301961, 0.301961, 1)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_radius_bottom_right = 3
|
||||
corner_radius_bottom_left = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jlb1y"]
|
||||
content_margin_left = 11.0
|
||||
content_margin_top = 5.0
|
||||
content_margin_right = 11.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.290196)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lvnv7"]
|
||||
content_margin_left = 11.0
|
||||
content_margin_top = 5.0
|
||||
content_margin_right = 11.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.580392)
|
||||
border_width_top = 2
|
||||
border_color = Color(0.44, 0.73, 0.98, 1)
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ve3ye"]
|
||||
content_margin_left = 11.0
|
||||
content_margin_top = 5.0
|
||||
content_margin_right = 11.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.290196)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_kcmrn"]
|
||||
content_margin_left = 4.0
|
||||
content_margin_top = 6.0
|
||||
content_margin_right = 4.0
|
||||
content_margin_bottom = 4.0
|
||||
bg_color = Color(0, 0, 0, 0.580392)
|
||||
border_color = Color(0.900808, 0.647855, 0.245012, 1)
|
||||
corner_radius_bottom_right = 3
|
||||
corner_radius_bottom_left = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_e473q"]
|
||||
content_margin_left = 11.0
|
||||
content_margin_top = 5.0
|
||||
content_margin_right = 11.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.290196)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gir5j"]
|
||||
content_margin_left = 11.0
|
||||
content_margin_top = 5.0
|
||||
content_margin_right = 11.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.580392)
|
||||
border_width_top = 2
|
||||
border_color = Color(0.44, 0.73, 0.98, 1)
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_th0sh"]
|
||||
content_margin_left = 11.0
|
||||
content_margin_top = 5.0
|
||||
content_margin_right = 11.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.290196)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_og5m1"]
|
||||
content_margin_left = 0.0
|
||||
content_margin_top = 0.0
|
||||
content_margin_right = 0.0
|
||||
content_margin_bottom = 0.0
|
||||
bg_color = Color(0, 0, 0, 0)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_prlgo"]
|
||||
content_margin_left = 4.0
|
||||
content_margin_top = 6.0
|
||||
content_margin_right = 4.0
|
||||
content_margin_bottom = 4.0
|
||||
bg_color = Color(0, 0, 0, 0.290196)
|
||||
corner_radius_bottom_right = 3
|
||||
corner_radius_bottom_left = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_4n6md"]
|
||||
content_margin_left = 11.0
|
||||
content_margin_top = 5.0
|
||||
content_margin_right = 11.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.580392)
|
||||
border_width_top = 2
|
||||
border_color = Color(0.44, 0.73, 0.98, 1)
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_4bdji"]
|
||||
bg_color = Color(0, 0, 0, 0.12451)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1gbrb"]
|
||||
content_margin_left = 6.0
|
||||
content_margin_top = 4.0
|
||||
content_margin_right = 6.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.145098)
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0.113725, 0.133333, 0.160784, 1)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gfc5e"]
|
||||
content_margin_left = 6.0
|
||||
content_margin_top = 4.0
|
||||
content_margin_right = 6.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.145098)
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0.113725, 0.133333, 0.160784, 1)
|
||||
corner_radius_top_left = 3
|
||||
corner_radius_top_right = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_c0v5a"]
|
||||
|
||||
[resource]
|
||||
Button/styles/normal = SubResource("StyleBoxFlat_6rrxc")
|
||||
CodeEdit/styles/normal = SubResource("StyleBoxEmpty_4bdji")
|
||||
EditorInspectorCategory/styles/bg = SubResource("StyleBoxFlat_x4bf7")
|
||||
EditorProperty/styles/child_bg = SubResource("StyleBoxFlat_qm4uc")
|
||||
EditorStyles/styles/Background = SubResource("StyleBoxFlat_kmfvt")
|
||||
EditorStyles/styles/BottomPanel = SubResource("StyleBoxFlat_1tn6y")
|
||||
EditorStyles/styles/BottomPanelDebuggerOverride = SubResource("StyleBoxFlat_mfvec")
|
||||
EditorStyles/styles/CanvasItemInfoOverlay = SubResource("StyleBoxFlat_yxe5q")
|
||||
EditorStyles/styles/Content = SubResource("StyleBoxFlat_wrepn")
|
||||
EditorStyles/styles/ContextualToolbar = SubResource("StyleBoxEmpty_4qoyy")
|
||||
EditorStyles/styles/DebuggerPanel = SubResource("StyleBoxFlat_bae5w")
|
||||
EditorStyles/styles/DictionaryAddItem = SubResource("StyleBoxFlat_hqa07")
|
||||
EditorStyles/styles/Focus = SubResource("StyleBoxFlat_jbgu4")
|
||||
EditorStyles/styles/LaunchPadNormal = SubResource("StyleBoxFlat_7xbe2")
|
||||
EditorStyles/styles/MenuPanel = SubResource("StyleBoxFlat_eag6m")
|
||||
EditorStyles/styles/PanelForeground = null
|
||||
EditorStyles/styles/ScriptEditor = SubResource("StyleBoxEmpty_nn8ly")
|
||||
EditorStyles/styles/ScriptEditorPanel = SubResource("StyleBoxFlat_yi1o1")
|
||||
ItemList/styles/panel = SubResource("StyleBoxEmpty_ebp5u")
|
||||
LineEdit/styles/focus = SubResource("StyleBoxFlat_7l2sj")
|
||||
LineEdit/styles/normal = SubResource("StyleBoxFlat_cbyhm")
|
||||
LineEdit/styles/read_only = SubResource("StyleBoxFlat_cjlww")
|
||||
MenuButton/styles/normal = SubResource("StyleBoxFlat_xi4cy")
|
||||
OptionButton/styles/normal = SubResource("StyleBoxFlat_thgut")
|
||||
RichTextLabel/styles/normal = SubResource("StyleBoxFlat_4rkfj")
|
||||
TabBar/styles/tab_hovered = SubResource("StyleBoxFlat_jlb1y")
|
||||
TabBar/styles/tab_selected = SubResource("StyleBoxFlat_lvnv7")
|
||||
TabBar/styles/tab_unselected = SubResource("StyleBoxFlat_ve3ye")
|
||||
TabContainer/styles/panel = SubResource("StyleBoxFlat_kcmrn")
|
||||
TabContainer/styles/tab_hovered = SubResource("StyleBoxFlat_e473q")
|
||||
TabContainer/styles/tab_selected = SubResource("StyleBoxFlat_gir5j")
|
||||
TabContainer/styles/tab_unselected = SubResource("StyleBoxFlat_th0sh")
|
||||
TabContainer/styles/tabbar_background = SubResource("StyleBoxFlat_og5m1")
|
||||
TabContainerOdd/styles/panel = SubResource("StyleBoxFlat_prlgo")
|
||||
TabContainerOdd/styles/tab_selected = SubResource("StyleBoxFlat_4n6md")
|
||||
TextEdit/styles/focus = SubResource("StyleBoxFlat_4bdji")
|
||||
TextEdit/styles/normal = SubResource("StyleBoxFlat_1gbrb")
|
||||
TextEdit/styles/read_only = SubResource("StyleBoxFlat_gfc5e")
|
||||
Tree/styles/panel = SubResource("StyleBoxEmpty_c0v5a")
|
||||
38
addons/cba/tool.gd
Normal file
38
addons/cba/tool.gd
Normal file
@@ -0,0 +1,38 @@
|
||||
@tool
|
||||
extends Window
|
||||
|
||||
var preview:TextureRect
|
||||
|
||||
var main:EditorPlugin
|
||||
|
||||
func start():
|
||||
if not Engine.is_editor_hint(): queue_free(); return
|
||||
$"VBoxContainer/HBoxContainer/VBoxContainer/image picker".pressed.connect(_image_picker)
|
||||
$"VBoxContainer/HBoxContainer/VBoxContainer/stretch mode".item_selected.connect(main.change_setting.bind("stretch"))
|
||||
$"VBoxContainer/HBoxContainer/VBoxContainer/filter mode".item_selected.connect(main.change_setting.bind("filter"))
|
||||
#$HBoxContainer/VBoxContainer2/ui_alpha.value_changed.connect(main.change_setting.bind("ui_alpha")) # too laggy
|
||||
$VBoxContainer/HBoxContainer/VBoxContainer2/ui_color.popup_closed.connect(main.change_setting.bind(null, "ui_color"))
|
||||
$VBoxContainer/HBoxContainer/VBoxContainer2/bg_modulate.color_changed.connect(main.change_setting.bind("bg_modulate"))
|
||||
$VBoxContainer/edit_transparency.toggled.connect(main.change_setting.bind("edit_transparency"))
|
||||
close_requested.connect(close)
|
||||
preview = $VBoxContainer/PanelContainer/TextureRect # thank you onready
|
||||
main.load_settings()
|
||||
|
||||
func _input(event):
|
||||
if event.is_action_pressed("ui_cancel"):
|
||||
close()
|
||||
|
||||
func close():
|
||||
main.save_settings()
|
||||
queue_free()
|
||||
|
||||
func _image_picker():
|
||||
var picker := EditorFileDialog.new()
|
||||
picker.close_requested.connect(queue_free)
|
||||
picker.file_selected.connect(main.change_setting.bind("image"))
|
||||
picker.size = Vector2(700, 500)
|
||||
picker.access = EditorFileDialog.ACCESS_FILESYSTEM
|
||||
picker.file_mode = EditorFileDialog.FILE_MODE_OPEN_FILE
|
||||
picker.filters = ["*.bmp, *.dds, *.exr, *.hdr, *.jpg, *.jpeg, *.png, *.tga, *.svg, *.svgz, *.webp; Supported Images"]
|
||||
add_child(picker)
|
||||
picker.popup_centered()
|
||||
1
addons/cba/tool.gd.uid
Normal file
1
addons/cba/tool.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ca766t2y66e16
|
||||
172
addons/cba/tool.tscn
Normal file
172
addons/cba/tool.tscn
Normal file
@@ -0,0 +1,172 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://cqkxegtagb5ts"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://d08kr32g2gva0" path="res://addons/cba/tool.gd" id="1_yg3st"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_l27jc"]
|
||||
content_margin_left = 6.0
|
||||
content_margin_right = 6.0
|
||||
bg_color = Color(0.423529, 0.266667, 0.215686, 1)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0.691357, 0.691357, 0.691357, 1)
|
||||
shadow_color = Color(0, 0, 0, 0.729412)
|
||||
shadow_size = 2
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_5s6hr"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_p8vlj"]
|
||||
bg_color = Color(0.177332, 0.180983, 0.215343, 1)
|
||||
|
||||
[sub_resource type="Theme" id="Theme_csmr1"]
|
||||
Button/font_sizes/font_size = 14
|
||||
Button/styles/normal = SubResource("StyleBoxFlat_l27jc")
|
||||
ColorPickerButton/styles/normal = SubResource("StyleBoxEmpty_5s6hr")
|
||||
Label/font_sizes/font_size = 14
|
||||
Panel/styles/panel = SubResource("StyleBoxFlat_p8vlj")
|
||||
|
||||
[node name="Tool" type="Window"]
|
||||
title = "Chey's Background Addon"
|
||||
initial_position = 5
|
||||
size = Vector2i(400, 400)
|
||||
min_size = Vector2i(400, 400)
|
||||
max_size = Vector2i(400, 400)
|
||||
script = ExtResource("1_yg3st")
|
||||
|
||||
[node name="Panel" type="Panel" parent="."]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme = SubResource("Theme_csmr1")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
clip_contents = true
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_bottom = 32.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer"]
|
||||
clip_contents = true
|
||||
custom_minimum_size = Vector2(0, 230)
|
||||
layout_mode = 2
|
||||
theme = SubResource("Theme_csmr1")
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="VBoxContainer/PanelContainer"]
|
||||
layout_mode = 2
|
||||
expand_mode = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
theme = SubResource("Theme_csmr1")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 0
|
||||
|
||||
[node name="image picker" type="Button" parent="VBoxContainer/HBoxContainer/VBoxContainer"]
|
||||
custom_minimum_size = Vector2(0, 37)
|
||||
layout_mode = 2
|
||||
size_flags_stretch_ratio = 0.0
|
||||
text = "Pick an image"
|
||||
|
||||
[node name="stretch mode" type="OptionButton" parent="VBoxContainer/HBoxContainer/VBoxContainer"]
|
||||
clip_contents = true
|
||||
custom_minimum_size = Vector2(0, 37)
|
||||
layout_mode = 2
|
||||
size_flags_stretch_ratio = 0.0
|
||||
clip_text = true
|
||||
item_count = 7
|
||||
popup/item_0/text = "Scale"
|
||||
popup/item_0/id = 0
|
||||
popup/item_1/text = "Tile"
|
||||
popup/item_1/id = 1
|
||||
popup/item_2/text = "Keep"
|
||||
popup/item_2/id = 2
|
||||
popup/item_3/text = "Keep Centered"
|
||||
popup/item_3/id = 3
|
||||
popup/item_4/text = "Keep Aspect"
|
||||
popup/item_4/id = 4
|
||||
popup/item_5/text = "Keep Aspect Centered"
|
||||
popup/item_5/id = 5
|
||||
popup/item_6/text = "Keep Aspect Covered"
|
||||
popup/item_6/id = 6
|
||||
|
||||
[node name="filter mode" type="OptionButton" parent="VBoxContainer/HBoxContainer/VBoxContainer"]
|
||||
clip_contents = true
|
||||
custom_minimum_size = Vector2(0, 37)
|
||||
layout_mode = 2
|
||||
size_flags_stretch_ratio = 0.0
|
||||
clip_text = true
|
||||
item_count = 6
|
||||
popup/item_0/text = "Nearest"
|
||||
popup/item_0/id = 0
|
||||
popup/item_1/text = "Linear"
|
||||
popup/item_1/id = 1
|
||||
popup/item_2/text = "Nearest Mipmap"
|
||||
popup/item_2/id = 2
|
||||
popup/item_3/text = "Linear Mipmap"
|
||||
popup/item_3/id = 3
|
||||
popup/item_4/text = "Nearest Mipmap Anisotropic"
|
||||
popup/item_4/id = 4
|
||||
popup/item_5/text = "Linear Mipmap Anisotropic"
|
||||
popup/item_5/id = 5
|
||||
|
||||
[node name="VBoxContainer2" type="VBoxContainer" parent="VBoxContainer/HBoxContainer"]
|
||||
clip_contents = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
theme = SubResource("Theme_csmr1")
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/VBoxContainer2"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 0
|
||||
theme_override_constants/line_spacing = -6
|
||||
text = "UI Color
|
||||
(close picker to change)"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="ui_color" type="ColorPickerButton" parent="VBoxContainer/HBoxContainer/VBoxContainer2"]
|
||||
custom_minimum_size = Vector2(0, 20)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 0
|
||||
size_flags_stretch_ratio = 0.0
|
||||
|
||||
[node name="Label2" type="Label" parent="VBoxContainer/HBoxContainer/VBoxContainer2"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 0
|
||||
text = "Background Modulate"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="bg_modulate" type="ColorPickerButton" parent="VBoxContainer/HBoxContainer/VBoxContainer2"]
|
||||
custom_minimum_size = Vector2(0, 20)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 0
|
||||
size_flags_stretch_ratio = 0.0
|
||||
|
||||
[node name="edit_transparency" type="CheckBox" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 2
|
||||
size_flags_stretch_ratio = 0.38
|
||||
tooltip_text = "For some reason, when editing an inspector field, Godot
|
||||
still displays the previous state of it behind the current one.
|
||||
Also, for some reason, when renaming a node in the scene
|
||||
tab, the rename box opens in a separate window, which
|
||||
ruins the transparency and makes it more gray. So as a hack,
|
||||
this plugin turns text boxes black when editing. If you think
|
||||
the prior is a better alternative, you can switch to that here."
|
||||
text = "Enable textbox transparency on edit (?)"
|
||||
|
||||
[node name="Control" type="Control" parent="VBoxContainer"]
|
||||
clip_contents = true
|
||||
custom_minimum_size = Vector2(0, 40)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 0
|
||||
size_flags_stretch_ratio = 1.21
|
||||
@@ -19,6 +19,10 @@ config/icon="res://icon.svg"
|
||||
|
||||
GameManager="*res://Scripts/game_manager.gd"
|
||||
|
||||
[editor_plugins]
|
||||
|
||||
enabled=PackedStringArray("res://addons/cba/plugin.cfg")
|
||||
|
||||
[input]
|
||||
|
||||
load={
|
||||
|
||||
Reference in New Issue
Block a user