From f1ad9d5825249d4b45b54ab4d122cf4cb89b4c02 Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Fri, 8 Mar 2024 20:20:09 -0500 Subject: [PATCH] palette textures! working with palettes will be a breezegit status! --- graphics/player/palettes/default.tex | Bin 0 -> 623 bytes menus/file_select_panel.gd | 2 +- menus/level_select_scholar.gd | 2 +- objects/lore/hills/sg.gd | 2 +- objects/lore/hills/sg_palette_lore.gd | 2 +- objects/player/player.gd | 2 +- objects/player/player.tscn | 5 +-- project.godot | 6 ++++ scripts/palette_texture.gd | 50 ++++++++++++++++++++++++++ scripts/sg_palette.gd | 2 +- 10 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 graphics/player/palettes/default.tex create mode 100644 scripts/palette_texture.gd diff --git a/graphics/player/palettes/default.tex b/graphics/player/palettes/default.tex new file mode 100644 index 0000000000000000000000000000000000000000..7e62095be0d2a9df675e80f0a70f4d260cd70fa9 GIT binary patch literal 623 zcmV-#0+9VuQ$s@n000005C8xT1ONb60ssIgwJ-f(4Fhcw07lzpNC2@W9enXnMhM5# zm|pOA0%PWH>T!NsZ}-K2Mkm(kuy|C>WN#1J&C$zyPDM$cL08{|p^-9>IGVGw0?ya-lQVC)g!%QBq{GWf-iZpDe z2U6Xxt+Z|vCb49tqFr1%-P7}mF<0;(0)iX09TBW*)2~Z?jV#sK2290jDR-D+_q-fB_jo#U*apK?viUt{hiXt?r z=HbB+J4`2+OQ%(;o5sOewTz6ZLoZ;A)R>4Ia$H0PsS*KFsBxho3Za>ZY+;jO44{IM zqB0K>fL1jIp1>|Gtp9I0YXFV6KXe8+*Ye&J)BKS8{lzBWth}&l=hL7=U*6uKy3_}} zH}+!sR2dle5hH?MBHm|{>A@H(M`8dKrL!30iSnFz-KV5yYmvzR-cXA*uqjlO`Y)KI zQmRNSH9p;-YM7}oM void: - var palette = load("res://graphics/player/palettes/%s.png" % Game.current_palette) + var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette) player_sprite.material.set_shader_param("palette", palette) $ShardCount.text = "%02d" % Save.current_file.get_total_shards() Fade.fade_in(Options.transition_speed_secs) diff --git a/objects/lore/hills/sg.gd b/objects/lore/hills/sg.gd index 746f96b..41aa41c 100644 --- a/objects/lore/hills/sg.gd +++ b/objects/lore/hills/sg.gd @@ -2,5 +2,5 @@ extends HBoxContainer func _ready() -> void: - var palette = load("res://graphics/player/palettes/%s.png" % Game.current_palette) + var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette) $Panel/TextureRect.material.set_shader_param("palette", palette) diff --git a/objects/lore/hills/sg_palette_lore.gd b/objects/lore/hills/sg_palette_lore.gd index cd1add3..61fabed 100644 --- a/objects/lore/hills/sg_palette_lore.gd +++ b/objects/lore/hills/sg_palette_lore.gd @@ -1,5 +1,5 @@ extends TextureRect func _ready(): - var palette = load("res://graphics/player/palettes/%s.png" % Game.current_palette) + var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette) material.set_shader_param("palette", palette) diff --git a/objects/player/player.gd b/objects/player/player.gd index 41b2e13..4edd0e1 100644 --- a/objects/player/player.gd +++ b/objects/player/player.gd @@ -70,7 +70,7 @@ onready var hitbox: Area2D = $"%Hitbox" # OVERRIDES # func _ready() -> void: #set palette - var palette = load("res://graphics/player/palettes/%s.png" % Game.current_palette) + var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette) sprite.material.set_shader_param("palette", palette) $"%CFox".material.set_shader_param("palette", palette) $"%DissolveParticles".material.set_shader_param("palette", palette) diff --git a/objects/player/player.tscn b/objects/player/player.tscn index 85edbd5..5ad07be 100644 --- a/objects/player/player.tscn +++ b/objects/player/player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=42 format=2] +[gd_scene load_steps=43 format=2] [ext_resource path="res://objects/player/player.gd" type="Script" id=1] [ext_resource path="res://graphics/player/palettes/default.png" type="Texture" id=2] @@ -11,6 +11,7 @@ [ext_resource path="res://addons/godot_state_charts/compound_state.gd" type="Script" id=9] [ext_resource path="res://addons/godot_state_charts/transition.gd" type="Script" id=10] [ext_resource path="res://addons/godot_state_charts/atomic_state.gd" type="Script" id=11] +[ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=12] [ext_resource path="res://graphics/player/sg.png" type="Texture" id=14] [ext_resource path="res://graphics/particles/dust.png" type="Texture" id=18] [ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=25] @@ -19,7 +20,7 @@ shader = ExtResource( 3 ) shader_param/border_color = Color( 0, 0, 0, 1 ) shader_param/border_corners = true -shader_param/palette = ExtResource( 2 ) +shader_param/palette = ExtResource( 12 ) [sub_resource type="Shader" id=26] code = "// Recolor diff --git a/project.godot b/project.godot index 3639f08..f54d298 100644 --- a/project.godot +++ b/project.godot @@ -34,6 +34,11 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://menus/main_menu.gd" }, { +"base": "ImageTexture", +"class": "PaletteTexture", +"language": "GDScript", +"path": "res://scripts/palette_texture.gd" +}, { "base": "State", "class": "ParallelState", "language": "GDScript", @@ -70,6 +75,7 @@ _global_script_class_icons={ "CompoundState": "res://addons/godot_state_charts/compound_state.svg", "LevelEntry": "", "MainMenu": "", +"PaletteTexture": "", "ParallelState": "res://addons/godot_state_charts/parallel_state.svg", "RadioButtons": "", "State": "res://addons/godot_state_charts/state.svg", diff --git a/scripts/palette_texture.gd b/scripts/palette_texture.gd new file mode 100644 index 0000000..e9348b8 --- /dev/null +++ b/scripts/palette_texture.gd @@ -0,0 +1,50 @@ +tool +class_name PaletteTexture +extends ImageTexture + + +export (Array, Color) var colors := [] setget _set_colors +export var convert_from: Texture = null setget _convert_from + + +var _data := PoolByteArray() + + +func _init() -> void: + colors.resize(16) + colors.fill(Color.white) + _data.resize(16 * 4) + _data.fill(255) + _update_image() + + +func _set_colors(new_array: Array) -> void: + if new_array.size() == 16: + colors = new_array + _update_image() + + +func _update_image() -> void: + for i in colors.size(): + var c: Color = colors[i] + var j: int = i * 4 + _data[j] = c.r8 + _data[j + 1] = c.g8 + _data[j + 2] = c.b8 + _data[j + 3] = c.a8 + + var image := Image.new() + image.create_from_data(4, 4, false, Image.FORMAT_RGBA8, _data) + create_from_image(image, 0) + + +func _convert_from(texture: Texture) -> void: + if texture != null and texture.get_size() == Vector2(4.0, 4.0): + var image := texture.get_data() + image.lock() + for x in 4: + for y in 4: + colors[x + (y * 4)] = image.get_pixel(x, y) + print(colors[x + (y * 4)]) + image.unlock() + _update_image() diff --git a/scripts/sg_palette.gd b/scripts/sg_palette.gd index 3628f2b..f413bc3 100644 --- a/scripts/sg_palette.gd +++ b/scripts/sg_palette.gd @@ -1,5 +1,5 @@ extends Node2D func _ready(): - var palette = load("res://graphics/player/palettes/%s.png" % Game.current_palette) + var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette) material.set_shader_param("palette", palette)