Lots of work on the new atlas generator.

This commit is contained in:
Relintai 2021-07-14 21:11:52 +02:00
parent 526b375f60
commit 74bc71579a
8 changed files with 326 additions and 276 deletions

View File

@ -2142,7 +2142,7 @@ animation = "run"
[sub_resource type="AnimationNodeBlend2" id=8]
[sub_resource type="AnimationNodeBlendTree" id=9]
graph_offset = Vector2( -671, 298.5 )
graph_offset = Vector2( -473, 293 )
nodes/RunScale/node = SubResource( 5 )
nodes/RunScale/position = Vector2( -60, 500 )
nodes/idle/node = SubResource( 6 )
@ -2152,7 +2152,7 @@ nodes/run/node = SubResource( 7 )
nodes/run/position = Vector2( -280, 500 )
nodes/walking/node = SubResource( 8 )
nodes/walking/position = Vector2( 140, 320 )
node_connections = [ "output", 0, "walking", "walking", 0, "idle", "walking", 1, "RunScale", "RunScale", 0, "run" ]
node_connections = [ "output", 0, "walking", "RunScale", 0, "run", "walking", 0, "idle", "walking", 1, "RunScale" ]
[node name="CharacterFrontModel" type="CharacterBones"]
rotation = 0.000121465
@ -2191,7 +2191,7 @@ region_enabled = true
region_rect = Rect2( 27, 57, 14, 6 )
[node name="Torso" type="Sprite" parent="Hip"]
position = Vector2( 0, -2.35694 )
position = Vector2( 0, -2.05287 )
texture = ExtResource( 1 )
offset = Vector2( 0, -5 )
region_enabled = true

View File

@ -1,50 +1,10 @@
[gd_scene load_steps=10 format=2]
[gd_scene load_steps=5 format=2]
[ext_resource path="res://scripts/item_visuals/CharacterAtlasEntry2D.gd" type="Script" id=1]
[ext_resource path="res://characters/naturalist_characteratlas.tres" type="CharacterAtlas" id=1]
[ext_resource path="res://player/CharacterSkeleton2DGD.gd" type="Script" id=2]
[ext_resource path="res://scripts/item_visuals/CharacterAtlas2D.gd" type="Script" id=3]
[ext_resource path="res://characters/char_t1_outline_split.png" type="Texture" id=4]
[ext_resource path="res://characters/CharacterSideModel.tscn" type="PackedScene" id=5]
[ext_resource path="res://characters/CharacterFrontModel.tscn" type="PackedScene" id=6]
[sub_resource type="CharacterAtlasEntry" id=1]
script = ExtResource( 1 )
front_rect = Rect2( 101, 15, 9, 12 )
back_rect = Rect2( 74, 18, 9, 12 )
right_rect = Rect2( 8, 13, 9, 12 )
left_rect = Rect2( 8, 13, 9, 12 )
[sub_resource type="CharacterAtlasEntry" id=2]
script = ExtResource( 1 )
front_rect = Rect2( 102, 2, 7, 8 )
back_rect = Rect2( 75, 5, 7, 8 )
right_rect = Rect2( 9, 0, 7, 8 )
left_rect = Rect2( 9, 0, 7, 8 )
[sub_resource type="CharacterAtlas" id=3]
script = ExtResource( 3 )
comments = "HUMANOID_BONE_HIP = 0,
HUMANOID_BONE_TORSO = 1,
HUMANOID_BONE_LEG_R = 2,
HUMANOID_BONE_FOOT_R = 3,
HUMANOID_BONE_TOE_R = 4,
HUMANOID_BONE_LEG_L = 5,
HUMANOID_BONE_FOOT_L = 6,
HUMANOID_BONE_TOE_L = 7,
HUMANOID_BONE_ARM_R = 8,
#HUMANOID_BONE_SHOULDER_GUARD_R = 0,
HUMANOID_BONE_HAND_R = 9,
HUMANOID_BONE_FINGERS_R = 10,
HUMANOID_BONE_ARM_L = 11,
#HUMANOID_BONE_SHOULDER_GUARD_L = 0,
HUMANOID_BONE_HAND_L = 12,
HUMANOID_BONE_FINGERS_L = 13,
HUMANOID_BONE_HEAD = 14,
HUMANOID_BONE_HEAD_TOP = 15,
HUMANOID_BONES_MAX = 16,"
texture = ExtResource( 4 )
slots = [ null, SubResource( 1 ), null, null, null, null, null, null, null, null, null, null, null, null, SubResource( 2 ), null ]
[node name="Character" type="CharacterSkeleton2D"]
entity_type = 1
attach_point_paths/0_left_hand = NodePath("")
@ -66,27 +26,24 @@ front_animation_tree_path = NodePath("../Character/CharacterFrontModel/Animation
side_node_path = NodePath("CharacterSideModel")
side_animation_player_path = NodePath("../Character/CharacterSideModel/AnimationPlayer")
side_animation_tree_path = NodePath("../Character/CharacterSideModel/AnimationTree")
character_atlas = SubResource( 3 )
character_atlas = ExtResource( 1 )
[node name="CharacterFrontModel" parent="." instance=ExtResource( 6 )]
visible = false
[node name="Torso" parent="CharacterFrontModel/Hip" index="1"]
position = Vector2( 0, -2.03035 )
[node name="leg_r" parent="CharacterFrontModel/Hip/Torso" index="0"]
position = Vector2( -2, 0.999999 )
position = Vector2( 0, -2.29163 )
[node name="CharacterSideModel" parent="." instance=ExtResource( 5 )]
[node name="arm_r" parent="CharacterSideModel" index="0"]
position = Vector2( -3.50004, -24.572 )
position = Vector2( -3.49999, -24.1979 )
[node name="hand_r" parent="CharacterSideModel" index="1"]
position = Vector2( -3.50004, -19.072 )
position = Vector2( -3.49999, -18.6979 )
[node name="Torso" parent="CharacterSideModel/Hip" index="3"]
position = Vector2( 5.27825e-06, -1.95654 )
position = Vector2( 5.07217e-05, -1.58236 )
[editable path="CharacterFrontModel"]
[editable path="CharacterSideModel"]

View File

@ -0,0 +1,43 @@
[gd_resource type="CharacterAtlas" load_steps=6 format=2]
[ext_resource path="res://scripts/item_visuals/CharacterAtlas2D.gd" type="Script" id=1]
[ext_resource path="res://characters/char_t1_outline_split.png" type="Texture" id=2]
[ext_resource path="res://scripts/item_visuals/CharacterAtlasEntry2D.gd" type="Script" id=3]
[sub_resource type="CharacterAtlasEntry" id=1]
script = ExtResource( 3 )
front_rect = Rect2( 101, 15, 9, 12 )
back_rect = Rect2( 74, 18, 9, 12 )
right_rect = Rect2( 8, 13, 9, 12 )
left_rect = Rect2( 8, 13, 9, 12 )
[sub_resource type="CharacterAtlasEntry" id=2]
script = ExtResource( 3 )
front_rect = Rect2( 102, 2, 7, 8 )
back_rect = Rect2( 75, 5, 7, 8 )
right_rect = Rect2( 9, 0, 7, 8 )
left_rect = Rect2( 9, 0, 7, 8 )
[resource]
script = ExtResource( 1 )
comments = "HUMANOID_BONE_HIP = 0,
HUMANOID_BONE_TORSO = 1,
HUMANOID_BONE_LEG_R = 2,
HUMANOID_BONE_FOOT_R = 3,
HUMANOID_BONE_TOE_R = 4,
HUMANOID_BONE_LEG_L = 5,
HUMANOID_BONE_FOOT_L = 6,
HUMANOID_BONE_TOE_L = 7,
HUMANOID_BONE_ARM_R = 8,
#HUMANOID_BONE_SHOULDER_GUARD_R = 0,
HUMANOID_BONE_HAND_R = 9,
HUMANOID_BONE_FINGERS_R = 10,
HUMANOID_BONE_ARM_L = 11,
#HUMANOID_BONE_SHOULDER_GUARD_L = 0,
HUMANOID_BONE_HAND_L = 12,
HUMANOID_BONE_FINGERS_L = 13,
HUMANOID_BONE_HEAD = 14,
HUMANOID_BONE_HEAD_TOP = 15,
HUMANOID_BONES_MAX = 16,"
texture = ExtResource( 2 )
slots = [ null, SubResource( 1 ), null, null, null, null, null, null, null, null, null, null, null, null, SubResource( 2 ), null ]

View File

@ -1,3 +1,4 @@
tool
extends CharacterBones
class_name HumanoidCharacterBones2D
@ -50,7 +51,7 @@ enum HumanoidBones {
export (String, MULTILINE) var help : String
export (Array, NodePath) var bones : Array
var _atlas : CharacterAtlas2D
export(CharacterAtlas) var _atlas : CharacterAtlas
func set_facing(facing : int) -> void:
if _atlas == null:

View File

@ -1,170 +1,105 @@
[gd_scene load_steps=14 format=2]
[gd_scene load_steps=9 format=2]
[ext_resource path="res://characters/NaturalistSheetRenderer.tscn" type="PackedScene" id=1]
[ext_resource path="res://characters/CharacterFrontModel.tscn" type="PackedScene" id=1]
[ext_resource path="res://characters/CharacterSideModel.tscn" type="PackedScene" id=2]
[ext_resource path="res://spritesheet_generator/SheetGen.gd" type="Script" id=3]
[ext_resource path="res://characters/Character.tscn" type="PackedScene" id=4]
[ext_resource path="res://testsave.png" type="Texture" id=4]
[ext_resource path="res://spritesheet_generator/SpriteMover.gd" type="Script" id=5]
[ext_resource path="res://spritesheet_generator/Sprite3Ds.tscn" type="PackedScene" id=6]
[ext_resource path="res://characters/naturalist_characteratlas.tres" type="CharacterAtlas" id=6]
[sub_resource type="ProceduralSky" id=1]
[sub_resource type="Environment" id=2]
background_mode = 2
background_sky = SubResource( 1 )
background_color = Color( 0.364706, 0.364706, 0.364706, 1 )
background_energy = 0.69
ambient_light_color = Color( 1, 1, 1, 1 )
ambient_light_energy = 0.68
ambient_light_sky_contribution = 0.0
[sub_resource type="Environment" id=3]
background_mode = 1
background_energy = 0.57
ambient_light_color = Color( 0.113725, 0.113725, 0.113725, 1 )
ambient_light_energy = 0.68
[sub_resource type="Environment" id=1]
ssao_enabled = true
[sub_resource type="World" id=4]
environment = SubResource( 3 )
[sub_resource type="World" id=2]
environment = SubResource( 1 )
[sub_resource type="Environment" id=5]
background_mode = 1
background_energy = 0.26
ambient_light_color = Color( 0.113725, 0.113725, 0.113725, 1 )
ambient_light_energy = 0.58
ambient_light_sky_contribution = 0.1
tonemap_exposure = 0.36
tonemap_white = 0.47
[sub_resource type="ViewportTexture" id=6]
[node name="TextureAtlasGenerator" type="Node2D"]
script = ExtResource( 3 )
_sprite_size = 40
_sprite_num = 16
_show_atlas = true
save_texture = true
animations = [ "run", "idle", "casting", "rest" ]
instant_preview_path = NodePath("InstantPreview")
sprite_preview_path = NodePath("SpritePreview")
viewport_path = NodePath("Viewport")
[sub_resource type="SpatialMaterial" id=7]
flags_transparent = true
params_billboard_mode = 1
[node name="Node" type="Node"]
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource( 2 )
[node name="player2" parent="." instance=ExtResource( 1 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -34.2601 )
visible = false
input_ray_pickable = false
[node name="player" parent="." instance=ExtResource( 1 )]
visible = false
input_ray_pickable = false
[node name="MicamoChar" parent="." instance=ExtResource( 2 )]
editor/display_folded = true
atlas_preview_path = NodePath("AtlasPreview")
model_front_path = NodePath("Viewport/CharacterFrontModel")
model_front_animation_player_path = NodePath("Viewport/CharacterFrontModel/AnimationPlayer")
model_front_animation_tree_player_path = NodePath("Viewport/CharacterFrontModel/AnimationTree")
model_side_path = NodePath("Viewport/CharacterSideModel")
model_side_animation_player_path = NodePath("Viewport/CharacterSideModel/AnimationPlayer")
model_side_animation_tree_player_path = NodePath("Viewport/CharacterSideModel/AnimationTree")
[node name="Viewport" type="Viewport" parent="."]
size = Vector2( 32, 32 )
size = Vector2( 64, 64 )
own_world = true
world = SubResource( 4 )
world = SubResource( 2 )
transparent_bg = true
handle_input_locally = false
hdr = false
usage = 0
render_target_v_flip = true
render_target_update_mode = 3
script = ExtResource( 3 )
_sprite_size = 32
_sprite_num = 16
_directions = 16
save_texture = true
_atlas_show_sprite_path = NodePath("../Sprite3")
_sprite_path = NodePath("../Sprite3D")
_animation_player_path = NodePath("MicamoChar/AnimationPlayer")
_player_path = NodePath("MicamoChar")
[node name="MicamoChar" parent="Viewport" instance=ExtResource( 4 )]
editor/display_folded = true
[node name="Skeleton" parent="Viewport/MicamoChar" index="0"]
bones/0/bound_children = [ ]
bones/1/bound_children = [ ]
bones/3/bound_children = [ ]
bones/4/bound_children = [ ]
bones/5/bound_children = [ ]
bones/8/bound_children = [ ]
bones/9/bound_children = [ ]
bones/10/bound_children = [ ]
bones/32/bound_children = [ ]
bones/33/bound_children = [ ]
bones/34/bound_children = [ ]
bones/55/bound_children = [ ]
bones/56/bound_children = [ ]
bones/57/bound_children = [ ]
bones/60/bound_children = [ ]
bones/61/bound_children = [ ]
bones/62/bound_children = [ ]
[node name="Camera" type="Camera" parent="Viewport"]
transform = Transform( 0.707107, -0.353553, 0.612372, 0, 0.866025, 0.5, -0.707107, -0.353553, 0.612372, 2.95796, 3.39896, 2.92486 )
environment = SubResource( 5 )
projection = 1
[node name="Camera" type="Camera2D" parent="Viewport"]
position = Vector2( 0, -15.726 )
current = true
size = 2.2
near = 0.01
far = 240.8
[node name="OmniLight" type="OmniLight" parent="Viewport"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 3.05496, 1.55159, 3.33238 )
layers = 3
light_color = Color( 0.952941, 0.929412, 0.807843, 1 )
light_energy = 0.74
light_indirect_energy = 1.27
light_specular = 0.15
omni_range = 6.4
omni_attenuation = 1.1487
[node name="CharacterFrontModel" parent="Viewport" instance=ExtResource( 1 )]
visible = false
_atlas = ExtResource( 6 )
[node name="OmniLight2" type="OmniLight" parent="Viewport"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -1.4893, 3.88558, -2.30035 )
light_color = Color( 0.898039, 0.898039, 0.729412, 1 )
light_energy = 0.58
light_indirect_energy = 2.95
omni_range = 4.3
[node name="Torso" parent="Viewport/CharacterFrontModel/Hip" index="1"]
position = Vector2( 0, -2.289 )
[node name="hand_l" parent="Viewport/CharacterFrontModel/Hip/Torso/arm_l" index="0"]
z_index = 1
[node name="AnimationTree" parent="Viewport/CharacterFrontModel" index="2"]
active = false
[node name="CharacterSideModel" parent="Viewport" instance=ExtResource( 2 )]
rotation = 3.14147
scale = Vector2( 1, -1 )
_atlas = ExtResource( 6 )
[node name="arm_r" parent="Viewport/CharacterSideModel" index="0"]
position = Vector2( -3.50004, -24.6155 )
[node name="hand_r" parent="Viewport/CharacterSideModel" index="1"]
position = Vector2( -3.50004, -19.1155 )
z_index = 1
[node name="Torso" parent="Viewport/CharacterSideModel/Hip" index="3"]
position = Vector2( 0, -2 )
[node name="AnimationTree" parent="Viewport/CharacterSideModel" index="4"]
active = false
[node name="InstantPreview" type="Sprite" parent="."]
[node name="SpritePreview" type="Sprite" parent="."]
[node name="AtlasPreview" type="Sprite" parent="."]
position = Vector2( 603.531, 254.594 )
[node name="Sprite" type="Sprite" parent="."]
position = Vector2( 837.448, 475.588 )
centered = false
flip_v = true
vframes = 16
position = Vector2( 101.579, 162.161 )
texture = ExtResource( 4 )
hframes = 16
vframes = 16
frame = 9
script = ExtResource( 5 )
[node name="Camera" type="Camera" parent="."]
transform = Transform( 0.707107, -0.353553, 0.612372, 0, 0.866026, 0.5, -0.707107, -0.353553, 0.612372, 13.5879, 9.78323, 18.7533 )
projection = 1
[node name="Test" type="Sprite" parent="."]
position = Vector2( -91.0568, 21.4517 )
texture = ExtResource( 4 )
hframes = 16
vframes = 16
[node name="Camera2D" type="Camera2D" parent="."]
current = true
size = 10.0
[node name="Sprite2" type="Sprite" parent="."]
position = Vector2( 179.55, 160.55 )
texture = SubResource( 6 )
flip_v = true
[node name="Sprite3" type="Sprite" parent="."]
position = Vector2( 603.531, 254.594 )
flip_v = true
[node name="Sprite3D" type="Sprite3D" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 8.18889, 0, 14.9987 )
material_override = SubResource( 7 )
cast_shadow = 0
flip_v = true
pixel_size = 0.0156
vframes = 16
hframes = 16
script = ExtResource( 5 )
[node name="Sprite3D2" parent="." instance=ExtResource( 6 )]
visible = false
[editable path="Viewport/MicamoChar"]
[editable path="Viewport/CharacterFrontModel"]
[editable path="Viewport/CharacterSideModel"]

View File

@ -1,129 +1,209 @@
extends Node
# Declare member variables here. Examples:
# var a = 2
# var b = "text"
export (int) var _sprite_size
export (int) var _sprite_num
export (int) var _directions
var _directions : int = 4
export (bool) var _show_atlas = false
export (bool) var save_texture = false
export (NodePath) var _atlas_show_sprite_path
export (NodePath) var _sprite_path
export (NodePath) var _animation_player_path
export (NodePath) var _player_path
export (NodePath) var _animation_tree_player_path
export (bool) var generate : bool = false setget set_generate, get_generate
export (String) var output_file_name : String = "res://testsave.png"
export (Array, String) var animations : Array
export (NodePath) var instant_preview_path
export (NodePath) var sprite_preview_path
export (NodePath) var viewport_path
export (NodePath) var atlas_preview_path
export (NodePath) var model_front_path
export (NodePath) var model_front_animation_player_path
export (NodePath) var model_front_animation_tree_player_path
export (NodePath) var model_side_path
export (NodePath) var model_side_animation_player_path
export (NodePath) var model_side_animation_tree_player_path
var _viewport
var _viewport_texture
var _sprite
var _animation_player
var _time = 0
var _animation_tree_player
var _frame = 0
var _rotcount = 0
var _rotation = 0
var _atlas
var _image_texture
var _running = false
var _atlas_sprite_show_node
var _atlas_texture
var _player
var _instant_preview
var _sprite_preview
var _atlas_preview
var _time = 0
var _frame = 0
var _index = 0
var _direction = 0
var _current_animation_index = 0
var _current_animation_player = null
var _running = false
var _model_front
var _model_front_animation_player
var _model_front_animation_tree_player
var _model_side
var _model_side_animation_player
var _model_side_animation_tree_player
var _texture
# Called when the node enters the scene tree for the first time.
var _first = true
func _ready():
_viewport = get_node(".")
#_viewport.set
_sprite = get_node(_sprite_path)
_atlas_sprite_show_node = get_node(_atlas_show_sprite_path)
_animation_player = get_node(_animation_player_path)
_player = get_node(_player_path)
_animation_tree_player = get_node(_animation_tree_player_path)
_viewport = get_node(viewport_path)
_instant_preview = get_node(instant_preview_path)
_sprite_preview = get_node(sprite_preview_path)
_atlas_preview = get_node(atlas_preview_path)
var img = ImageTexture.new()
img.flags = 0
img.create(_sprite_size, _sprite_size, 5, 0)
_sprite_preview.texture = img
_model_front = get_node(model_front_path)
_model_front_animation_player = get_node(model_front_animation_player_path)
_model_front_animation_tree_player = get_node(model_front_animation_tree_player_path)
if _model_side_animation_tree_player:
_model_front_animation_tree_player.active = false
_model_side = get_node(model_side_path)
_model_side_animation_player = get_node(model_side_animation_player_path)
_model_side_animation_tree_player = get_node(model_side_animation_tree_player_path)
if _model_side_animation_tree_player:
_model_side_animation_tree_player.active = false
_model_front.hide()
_model_side.show()
_viewport_texture = _viewport.get_texture()
_texture = Image.new()
var frame = _viewport.get_texture().get_data()
_texture.create(_sprite_size * _sprite_num, _sprite_size * _directions, false, frame.get_format())
yield(get_tree(), "idle_frame")
yield(get_tree(), "idle_frame")
_texture.create(_sprite_size * _sprite_num, _sprite_size * _directions * animations.size(), false, frame.get_format())
_running = true
#_generated_image = Image.new()
#_generated_image.
#_sprite.set_texture(_viewport_texture)
#_frame_data.clear()
#_generated_image.create_from_data(64, 64, false, Image.FORMAT_RGBA4444, texture.get_data().get_data())
#texture = _viewport.get_texture()
#_sprite.set_texture(texture)
set_process(true)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
#if not _running and Input.is_key_pressed(KEY_K):
# _running = true
if not _running:
return
#todo remove, only to make development easier
if !_viewport:
_ready()
#_viewport.update_worlds()
if _first:
_first = false
setup_direction()
_current_animation_player.play(animations[_current_animation_index])
_current_animation_player.seek(0, true)
return
var frame = _viewport.get_texture().get_data()
_sprite_preview.get_texture().set_data(frame)
#if _frame == 0 and _rotcount == 0:
_texture.blend_rect(frame, frame.get_used_rect(), Vector2((_frame * _sprite_size), (_rotcount * _sprite_size)))
#_time += 0.3
#_animation_player.seek (_time , true )
_frame += 1
if _frame > _sprite_num - 1:
_frame = 0
_rotcount += 1
if not _running:
return
if (_rotcount > _sprite_num - 1):
if _frame >= _sprite_num:
_frame = 0
_index += 1
_direction += 1
if _direction >= _directions:
_direction = 0
_current_animation_index += 1
setup_direction()
if (_index >= _directions * animations.size()):
_running = false
create_atlas()
return
#var m3 = Basis()
#m3 = m3.rotated( Vector3(0,1,0), 0.19625 )
_player.rotate_y((PI*2)/float(_directions))
_animation_player.play("default")
#_rotation = _rotcount * 22.5
#_player.tra
#return
_current_animation_player.play(animations[_current_animation_index])
_current_animation_player.seek(0, true)
return
#0.83
_animation_player.seek(_frame * (_animation_player.current_animation_length / (_sprite_num - 1)), true)
#_animation_tree_player.advance(0.05)
var ur = frame.get_used_rect()
var xx : float = 0
xx = (_sprite_size - ur.size.x) / 2
_texture.blend_rect(frame, ur, Vector2((_frame * _sprite_size) + xx, (_index * _sprite_size)))
_current_animation_player.seek(_frame * (_current_animation_player.current_animation_length / (_sprite_num - 1)), true)
_frame += 1
#enum CharacterFacing
# FACING_FRONT = 0,
# FACING_BACK = 1,
# FACING_RIGHT = 2,
# FACING_LEFT = 3,
func setup_direction():
if _direction == 0:
_current_animation_player = _model_side_animation_player
_model_side.set_facing(2)
_model_side.transform.x.x = -1
_model_side.show()
_model_front.hide()
if _direction == 1:
_current_animation_player = _model_side_animation_player
_model_side.set_facing(3)
_model_side.transform.x.x = 1
_model_side.show()
_model_front.hide()
if _direction == 2:
_current_animation_player = _model_front_animation_player
_model_front.set_facing(0)
_model_side.hide()
_model_front.show()
if _direction == 3:
_current_animation_player = _model_front_animation_player
_model_front.set_facing(1)
_model_side.hide()
_model_front.show()
func create_atlas():
_image_texture = ImageTexture.new()
_image_texture.create_from_image(_texture, 0)
_image_texture.get_data().save_png("res://testsave.png")
_image_texture.get_data().save_png(output_file_name)
if save_texture:
_sprite.set_texture(_image_texture)
_sprite_preview.set_texture(_image_texture)
if _show_atlas:
_atlas_sprite_show_node.set_texture(_image_texture)
_atlas_preview.set_texture(_image_texture)
pass
func set_generate(v : bool) -> void:
if !v:
return
#for easier development
_ready()
_running = true
#set_process(true)
func get_generate() -> bool:
return false

BIN
game/testsave.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

34
game/testsave.png.import Normal file
View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/testsave.png-4896f165f21664f61c0d9c325caba67a.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://testsave.png"
dest_files=[ "res://.import/testsave.png-4896f165f21664f61c0d9c325caba67a.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=1
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=false
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=false
svg/scale=1.0