├── .gitattributes ├── .gitignore ├── LICENSE.md ├── README.md ├── addons └── simple_card_pile_ui │ ├── card_dropzone.gd │ ├── card_pile_ui.gd │ ├── card_pile_ui_debugger.gd │ ├── card_ui.gd │ ├── card_ui.tscn │ ├── card_ui_data.gd │ ├── card_ui_icon.png │ ├── card_ui_icon.png.import │ ├── plugin.cfg │ └── simple_card_pile_ui.gd ├── assets ├── 1x1_#ffffffff.png ├── 1x1_#ffffffff.png.import ├── card_attack.png ├── card_attack.png.import ├── card_back.png ├── card_back.png.import ├── card_big_attack.png ├── card_big_attack.png.import ├── card_block.png ├── card_block.png.import ├── card_clubs_02.png ├── card_clubs_02.png.import ├── card_clubs_03.png ├── card_clubs_03.png.import ├── card_clubs_04.png ├── card_clubs_04.png.import ├── card_clubs_05.png ├── card_clubs_05.png.import ├── card_clubs_06.png ├── card_clubs_06.png.import ├── card_clubs_07.png ├── card_clubs_07.png.import ├── card_clubs_08.png ├── card_clubs_08.png.import ├── card_clubs_09.png ├── card_clubs_09.png.import ├── card_clubs_10.png ├── card_clubs_10.png.import ├── card_clubs_A.png ├── card_clubs_A.png.import ├── card_clubs_J.png ├── card_clubs_J.png.import ├── card_clubs_K.png ├── card_clubs_K.png.import ├── card_clubs_Q.png ├── card_clubs_Q.png.import ├── card_diamonds_02.png ├── card_diamonds_02.png.import ├── card_diamonds_03.png ├── card_diamonds_03.png.import ├── card_diamonds_04.png ├── card_diamonds_04.png.import ├── card_diamonds_05.png ├── card_diamonds_05.png.import ├── card_diamonds_06.png ├── card_diamonds_06.png.import ├── card_diamonds_07.png ├── card_diamonds_07.png.import ├── card_diamonds_08.png ├── card_diamonds_08.png.import ├── card_diamonds_09.png ├── card_diamonds_09.png.import ├── card_diamonds_10.png ├── card_diamonds_10.png.import ├── card_diamonds_A.png ├── card_diamonds_A.png.import ├── card_diamonds_J.png ├── card_diamonds_J.png.import ├── card_diamonds_K.png ├── card_diamonds_K.png.import ├── card_diamonds_Q.png ├── card_diamonds_Q.png.import ├── card_dice.png ├── card_dice.png.import ├── card_empty.png ├── card_empty.png.import ├── card_hearts_02.png ├── card_hearts_02.png.import ├── card_hearts_03.png ├── card_hearts_03.png.import ├── card_hearts_04.png ├── card_hearts_04.png.import ├── card_hearts_05.png ├── card_hearts_05.png.import ├── card_hearts_06.png ├── card_hearts_06.png.import ├── card_hearts_07.png ├── card_hearts_07.png.import ├── card_hearts_08.png ├── card_hearts_08.png.import ├── card_hearts_09.png ├── card_hearts_09.png.import ├── card_hearts_10.png ├── card_hearts_10.png.import ├── card_hearts_A.png ├── card_hearts_A.png.import ├── card_hearts_J.png ├── card_hearts_J.png.import ├── card_hearts_K.png ├── card_hearts_K.png.import ├── card_hearts_Q.png ├── card_hearts_Q.png.import ├── card_joker_black.png ├── card_joker_black.png.import ├── card_joker_red.png ├── card_joker_red.png.import ├── card_shake.png ├── card_shake.png.import ├── card_spades_02.png ├── card_spades_02.png.import ├── card_spades_03.png ├── card_spades_03.png.import ├── card_spades_04.png ├── card_spades_04.png.import ├── card_spades_05.png ├── card_spades_05.png.import ├── card_spades_06.png ├── card_spades_06.png.import ├── card_spades_07.png ├── card_spades_07.png.import ├── card_spades_08.png ├── card_spades_08.png.import ├── card_spades_09.png ├── card_spades_09.png.import ├── card_spades_10.png ├── card_spades_10.png.import ├── card_spades_A.png ├── card_spades_A.png.import ├── card_spades_J.png ├── card_spades_J.png.import ├── card_spades_K.png ├── card_spades_K.png.import ├── card_spades_Q.png ├── card_spades_Q.png.import ├── enemy_bee.png ├── enemy_bee.png.import ├── enemy_crab.png ├── enemy_crab.png.import ├── screenshot.png ├── screenshot.png.import ├── screenshot2.png ├── screenshot2.png.import ├── white-circle.png └── white-circle.png.import ├── example ├── example.gd ├── example.tscn ├── example__card_collection.json ├── example__card_data.gd ├── example__card_database.json ├── example__card_ui.gd ├── example__card_ui.tscn ├── example__dropzone__discard.gd └── example__dropzone__play_by_suit.gd ├── example_2 ├── example.gd ├── example.tscn ├── example__card_collection.json ├── example__card_data.gd ├── example__card_data__attack.gd ├── example__card_data__attack__big_axe.gd ├── example__card_data__block.gd ├── example__card_data__shake.gd ├── example__card_database.json ├── example__card_ui.gd ├── example__card_ui.tscn ├── example__dropzone__enemy.gd ├── example__dropzone__non-attack.gd └── example__dropzone__upgrade.gd ├── icon.svg ├── icon.svg.import └── project.godot /.gitattributes: -------------------------------------------------------------------------------- 1 | # Normalize EOL for all files that Git considers text files. 2 | * text=auto eol=lf 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | # Godot 4+ specific ignores 4 | .godot/ 5 | 6 | # Godot-specific ignores 7 | .import/ 8 | export.cfg 9 | export_presets.cfg 10 | 11 | # Imported translations (automatically generated from CSV files) 12 | *.translation 13 | 14 | # Mono-specific ignores 15 | .mono/ 16 | data_*/ 17 | mono_crash.*.json 18 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Andrew Vickerman 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Simple CardPileUI 2 | 3 | This plugin provides a flexible and customizable card pile user interface for the Godot game engine. It is designed to handle various card-related functionalities including drawing, discarding, and managing different piles. 4 | 5 | ![Screenshot](assets/screenshot.png) 6 | 7 | ![Screenshot2](assets/screenshot2.png) 8 | 9 | ## Table of Contents 10 | 11 | - [Features](#features) 12 | - [Installation](#installation) 13 | - [Getting Started](#getting-started) 14 | - [Concepts](#concepts) 15 | - [Documentation](#documentation) 16 | - [CardPileUI Properties](#card-pile-ui-properties) 17 | - [CardPileUI Methods](#card-pile-ui-methods) 18 | - [CardPileUI Signals](#card-pile-ui-signals) 19 | - [CardDropzone Methods](#card-dropzone-methods) 20 | - [CardDropzone Properties](#card-dropzone-properties) 21 | - [Thanks](#thanks) 22 | - [Changelog](#change-log) 23 | 24 | 25 | 26 | ## Features: 27 | - ⚙️ **Configurable Parameters** : Easily customize the behavior of the card pile UI using exported parameters, such as card speed, maximum hand size, display and more. 28 | - 📂 **Simple JSON Loading**: Load card data from a JSON file to populate the card pile. 29 | - 🗃️ **Intuitive Pile Management**: Manage different card piles, including draw, hand, discard. 30 | - 🎉 **Fun UI Elements**: Card interaction is snappy, responsive, and fun out-of-the box, allowing you to skip the boring setup and get started with your game. 31 | 32 | 33 | ## Installation 34 | 35 | 1. Download latest release 36 | 2. Unpack the addons/simple_card_pile_ui folder into your /addons folder within the Godot project 37 | 3. Enable this addon within the Godot settings: Project > Project Settings > Plugins 38 | 39 | 40 | ## Getting Started 41 | 42 | 1. Create a script extending `CardUIData` that describes any custom properties your card will need. You can utlize inheritance here as needed. 43 | 2. Create a JSON database of your card information ([example](#json-database)). 44 | 3. Create a JSON collection of your cards ([example](#json-collection)). 45 | 4. Create a new scene with root type `CardUI` - this is the object that displays in game. This object must have 2 TextureRect as children named `Frontface` and `Backface`. It will warn you if configured incorrectly. 46 | 5. Add a `CardPileUI` node to your game scene and configure its settings. 47 | 6. Begin building your game with the provided methods and signals. 48 | 49 | 50 | ## Concepts 51 | **Card Pile UI** - this is the manager for all cards in a collection. 52 | 53 | **Card UI Data** - this represents any custom data that your cards use. 54 | 55 | **Card UI** - this is the in-game representation of your card data, this holds and displays **Card UI Data** 56 | 57 | **Card Dropzone** - this is a designated space where if a player drops a card something occurs. It can also stack cards, removing them from the standard draw/hand/discard piles. 58 | 59 | **Draw Pile** - this is a pile containing cards that a player draws from during the game. 60 | 61 | **Hand Pile** - this is a pile containing cards currently held by a player. 62 | 63 | **Discard Pile** - this is a pile containing cards that have been discarded during the game. 64 | 65 | **Card Removal from Game**, this occurs when a card is permanently removed from play 66 | 67 | 68 | ## Documentation 69 | 70 | 71 | ### CardPileUI Properties 72 | 73 | | Type | Name | Default | Description 74 | |-|-|-|- 75 | | *Top Level* |-|-|- 76 | | String | json_card_database_path | null | Specifies the file path for the JSON database containing card information 77 | | String | json_card_collection_path | null | Defines the file path for the JSON file containing the card collection 78 | | PackedScene | extended_card_ui | null | A PackedScene for your extended `CardUI` scene. 79 | | *Pile Positions* |-|-|- 80 | | Vector2 | draw_pile_position | Vector2(20, 460) | Determines the position of the draw pile on the game screen. 81 | | Vector2 | hand_pile_position | Vector2(630, 460) | Determines the position of the hand pile on the game screen. 82 | | Vector2 | discard_pile_position | Vector2(1250, 460) | Determines the position of the discard pile on the game screen. 83 | | *Pile displays* |-|-|- 84 | | int | stack_display_gap | 8 | Sets the gap between displayed cards in a stack. 85 | | int | max_stack_display | 6 | Defines the maximum number of cards displayed in a stack. 86 | | *Cards* |-|-|- 87 | | float | card_speed | 0.1 | Sets the speed at which cards move within the game. 88 | | *Draw Pile* |-|-|- 89 | | bool | click_draw_pile_to_draw | true | Clicking the draw pile will trigger the `draw` method 90 | | bool | cant_draw_at_hand_limit | true | If hand is at max capacity, then the `draw` method is ignored. Otherwise cards that are drawn are immediately discarded 91 | | bool | shuffle_discard_on_empty_draw | true | Enables automatic shuffling of the discard pile into the draw pile when the draw pile is empty. 92 | | CardPileUI.PilesCardLayouts | draw_pile_layout | CardPileUI.PilesCardLayouts.up | Determines which direction the pile stacks 93 | | *Hand Pile* |-|-|- 94 | | bool | hand_enabled | true | Enables or disables the hand pile functionality. 95 | | bool | hand_face_up | true | Determines whether cards in the hand pile are face up or face down. 96 | | int | max_hand_size | 10 | Sets the maximum size of the hand. If exceeded, additional cards are immediately discarded. 97 | | int | max_hand_spread | 700 | Specifies the maximum spread distance of cards in the hand. 98 | | int | card_ui_hover_distance | 30 | Defines the distance at which the card UI responds to hover actions. 99 | | Curve | hand_rotation_curve | null | A curve for hand rotation. This works best as a 2-point line, rising linearly from -Y to +Y. 100 | | Curve | hand_vertical_curve | null | A curve for vertical hand movement. This works best as a 3-point line, easing in/out from 0 to Y to 0 101 | | *Discard Pile* |-|-|- 102 | | bool | discard_face_up | true | Determines whether cards in the discard pile are face up or face down. 103 | | CardPileUI.PilesCardLayouts | discard_pile_layout | CardPileUI.PilesCardLayouts.up | Determines which direction the pile stacks 104 | 105 | 106 | ### CardPileUI Methods 107 | 108 | | Return | Name | Description | 109 | |---------|------------------------------------------|------------------------------------------------------------| 110 | | void | create_card_in_dropzone(nice_name : String, dropzone : CardDropzone) | Creates a new instance of the named card in the given dropzone| 111 | | void | create_card_in_pile(nice_name : String, pile_to_add_to : Piles) | Creates a new instance of the named card in the given pile | 112 | | void | discard_at(index : int) | Perform a typical "discard" action, moving card from the hand to the discard pile| 113 | | void | draw(amount : int = 1) | Perform a typical "draw" action, moving cards from the draw pile to the hand| 114 | | bool | hand_is_at_max_capacity() | Checks if hand is at max_capacity (any more cards added to it will be discarded)| 115 | | CardDropzone | get_card_dropzone(card : CardUI ) | Returns the current dropzone of a given card 116 | | CardUI | get_card_in_pile_at(pile : Piles, index : int) | Returns a piles card at a given index| 117 | | Array[CardUI] | get_cards_in_pile(pile : Piles) | Returns an array of cards from the specified pile| 118 | | int | get_card_pile_size(pile : Piles) | Returns the number of cards in a given pile| 119 | | void | remove_card_from_game(card : CardUI) | Removes the specified card from the game| 120 | | void | reset() | Resets all cards to the collection's initial state | 121 | | void | set_card_dropzone(card : CardUI, dropzone : CardDropzone) | Moves the specified card to the designated CardDropzone| 122 | | void | set_card_pile(card : CardUI, pile : Piles) | Moves the specified card to the designated pile| 123 | | void | sort_hand(sort_func : Callable) | Sort the hand using a custom function| 124 | 125 | 126 | ## CardPileUI Signals 127 | 128 | | Signal | Description | 129 | |-|-| 130 | | draw_pile_updated | Indicates that the draw pile has been updated | 131 | | hand_pile_updated | Indicates that the hand pile has been updated | 132 | | discard_pile_updated | Indicates that the discard pile has been updated | 133 | | card_removed_from_dropzone(dropzone : CardDropzone, card: CardUI) | Signals the removal of a card from the specified CardDropzone| 134 | | card_added_to_dropzone(dropzone : CardDropzone, card: CardUI) | Signals the addition of a card to the specified CardDropzone| 135 | | card_hovered(card: CardUI) | Indicates when a card is being hovered over | 136 | | card_unhovered(card: CardUI) | Indicates when a card is no longer being hovered over | 137 | | card_clicked(card: CardUI) | Signals a click event on a card | 138 | | card_dropped(card: CardUI) | Signals when a clicked card has been dropped | 139 | | card_removed_from_game(card: CardUI) | Signals the removal of a card from the overall game | 140 | 141 | --- 142 | 143 | 144 | ### CardDropzone Properties 145 | | Type | Name | Default | Description 146 | |-|-|-|- 147 | | CardPileUI | card_pile_ui | null |Path to the dropzone's managing CardPileUI node | 148 | | bool | card_ui_face_up | true | Indicates if piled cards should be face up | 149 | | int | stack_display_gap | 8 | Sets the gap between displayed cards in a stack. 150 | | int | max_stack_display | 6 | Defines the maximum number of cards displayed in a stack. 151 | | CardPileUI.PilesCardLayouts | discard_pile_layout | CardPileUI.PilesCardLayouts.up | Determines which direction the pile stacks 152 | 153 | 154 | ### CardDropzone Methods 155 | | Return | Name | Description | 156 | |-|-|- 157 | | bool | can_drop_card(card_ui : CardUI) | This determines if a card can be dropped on this dropzone. Note - this is only automatically checked when dropping a card, not programatically moving one. 158 | | void | card_ui_dropped(card_ui : CardUI) | This triggers when a card has been added or dropped on this dropzone. 159 | | CardUI | get_card_at(index : int) | Returns the card at index 160 | | Array[CardUI] | get_held_cards() | Returns an array of all held cards 161 | | CardUI | get_top_card() | Returns the top card, which is the same thing as the last one in the array 162 | | int | get_total_held_cards() | Returns the total number of cards piled here 163 | | bool | is_holding(card : CardUI) | Returns true if this card is piled here 164 | 165 | 166 | ### Card Database JSON 167 | The Card Database serves as the foundation for all card data in your game. 168 | 169 | Minimally viable card database: 170 | ``` 171 | [ 172 | { 173 | "nice_name": "My Card", 174 | "texture_path": "res://path/to/card_front.png", 175 | "backface_texture_path": "res://path/to/card_back.png", 176 | "resource_script_path": "res://path/to/card_data.gd" 177 | } 178 | ] 179 | ``` 180 | 181 | | Name | Description | 182 | |-|- 183 | | nice_name | A unique name for this card 184 | | texture_path | Filepath to the card's front texture 185 | | backface_texture_path | Filepath to the card's back texture 186 | | resource_script_path | Filepath to the card's resource script. If you don't need any custom functionality, you can point this to `res://addons/simple_card_pile_ui/card_ui_data.gd` 187 | | * | You can add more data as needed 188 | 189 | 190 | 191 | ### Card Collection JSON 192 | This represents the cards that begin in the draw pile. 193 | 194 | Example: 195 | ``` 196 | [ "My Card", "My Card", "My Other Card", "My Other Card" ] 197 | ``` 198 | 199 | ## To Do List 200 | - Add support for multiple hands to use the same card pile 201 | - Add more shuffle methods 202 | - Add more sort methods 203 | - Document new properties/methods into the read me 204 | - Add different icons for dropzones/debugger 205 | - Add different layout options for dropzones 206 | 207 | 208 | ## Thanks to 209 | - https://andrewvickerman.com 210 | - https://www.kenney.nl 211 | - https://linktr.ee/bramwellgames 212 | - https://www.reddit.com/r/godot 213 | 214 | --- 215 | 216 | 217 | 218 | ## Changelog 219 | 220 | ### 1.1.0 (2024-02-02) 221 | - Updates CardUI to work better 222 | 223 | ### 1.0.1 (2024-02-01) 224 | - Removes lerp when clicking a card 225 | - Fixes dropzone top card hover triggering when a card is clicked 226 | - Adds layout directions to piles and dropzones 227 | 228 | ### 1.0.0 (2024-01-31) 229 | - Initial release 230 | -------------------------------------------------------------------------------- /addons/simple_card_pile_ui/card_dropzone.gd: -------------------------------------------------------------------------------- 1 | class_name CardDropzone extends Control 2 | 3 | @export var card_pile_ui : CardPileUI 4 | @export var stack_display_gap := 8 5 | @export var max_stack_display := 6 6 | @export var card_ui_face_up := true 7 | @export var can_drag_top_card := true 8 | @export var held_card_direction := true 9 | @export var layout : CardPileUI.PilesCardLayouts = CardPileUI.PilesCardLayouts.up 10 | 11 | var _held_cards := [] 12 | 13 | func card_ui_dropped(card_ui : CardUI): 14 | if card_pile_ui: 15 | card_pile_ui.set_card_dropzone(card_ui, self) 16 | 17 | func can_drop_card(card_ui : CardUI): 18 | return visible 19 | 20 | func get_top_card(): 21 | if _held_cards.size() > 0: 22 | return _held_cards[_held_cards.size() - 1] 23 | return null 24 | 25 | func get_card_at(index): 26 | if _held_cards.size() > index: 27 | return _held_cards[index] 28 | return null 29 | 30 | func get_total_held_cards(): 31 | return _held_cards.size() 32 | 33 | func is_holding(card_ui): 34 | return _held_cards.find(card_ui) != -1 35 | 36 | func get_held_cards(): 37 | return _held_cards.duplicate() # duplicate to allow the user to mess with the array without messing with this one!!! 38 | 39 | func add_card(card_ui): 40 | _held_cards.push_back(card_ui) 41 | #_update_target_positions() 42 | 43 | func remove_card(card_ui): 44 | _held_cards = _held_cards.filter(func(c): return c != card_ui) 45 | #_update_target_positions() 46 | 47 | func _update_target_positions(): 48 | for i in _held_cards.size(): 49 | var card_ui = _held_cards[i] 50 | var target_pos = position 51 | if layout == CardPileUI.PilesCardLayouts.up: 52 | if i <= max_stack_display: 53 | target_pos.y -= i * stack_display_gap 54 | else: 55 | target_pos.y -= stack_display_gap * max_stack_display 56 | elif layout == CardPileUI.PilesCardLayouts.down: 57 | if i <= max_stack_display: 58 | target_pos.y += i * stack_display_gap 59 | else: 60 | target_pos.y += stack_display_gap * max_stack_display 61 | elif layout == CardPileUI.PilesCardLayouts.right: 62 | if i <= max_stack_display: 63 | target_pos.x += i * stack_display_gap 64 | else: 65 | target_pos.x += stack_display_gap * max_stack_display 66 | elif layout == CardPileUI.PilesCardLayouts.left: 67 | if i <= max_stack_display: 68 | target_pos.x -= i * stack_display_gap 69 | else: 70 | target_pos.x -= stack_display_gap * max_stack_display 71 | if card_ui_face_up: 72 | card_ui.set_direction(Vector2.UP) 73 | else: 74 | card_ui.set_direction(Vector2.DOWN) 75 | if card_ui.is_clicked: 76 | card_ui.z_index = 3000 + i 77 | else: 78 | card_ui.z_index = i 79 | card_ui.move_to_front() # must also do this to account for INVISIBLE INTERACTION ORDER 80 | card_ui.target_position = target_pos 81 | 82 | func _process(_delta): 83 | _update_target_positions() 84 | -------------------------------------------------------------------------------- /addons/simple_card_pile_ui/card_pile_ui.gd: -------------------------------------------------------------------------------- 1 | class_name CardPileUI extends Control 2 | 3 | signal draw_pile_updated 4 | signal hand_pile_updated 5 | signal discard_pile_updated 6 | signal card_removed_from_dropzone(dropzone : CardDropzone, card: CardUI) 7 | signal card_added_to_dropzone(dropzone : CardDropzone, card: CardUI) 8 | signal card_hovered(card: CardUI) 9 | signal card_unhovered(card: CardUI) 10 | signal card_clicked(card: CardUI) 11 | signal card_dropped(card: CardUI) 12 | signal card_removed_from_game(card: CardUI) 13 | 14 | enum Piles { 15 | draw_pile, 16 | hand_pile, 17 | discard_pile 18 | } 19 | 20 | enum PilesCardLayouts { 21 | up, 22 | left, 23 | right, 24 | down 25 | } 26 | 27 | @export_file("*.json") var json_card_database_path : String 28 | @export_file("*.json") var json_card_collection_path : String 29 | @export var extended_card_ui : PackedScene 30 | 31 | @export_group("Pile Positions") 32 | @export var draw_pile_position = Vector2(20, 460) 33 | @export var hand_pile_position = Vector2(630, 460) 34 | @export var discard_pile_position = Vector2(1250, 460) 35 | 36 | @export_group("Pile Displays") 37 | @export var stack_display_gap := 8 38 | @export var max_stack_display := 6 39 | 40 | 41 | @export_group("Cards") 42 | @export var card_return_speed := 0.15 43 | 44 | @export_group("Draw Pile") 45 | @export var click_draw_pile_to_draw := true 46 | @export var cant_draw_at_hand_limit := true 47 | @export var shuffle_discard_on_empty_draw := true 48 | @export var draw_pile_layout := PilesCardLayouts.up 49 | 50 | @export_group("Hand Pile") 51 | @export var hand_enabled := true 52 | @export var hand_face_up := true 53 | @export var max_hand_size := 10 # if any more cards are added to the hand, they are immediately discarded 54 | @export var max_hand_spread := 700 55 | @export var card_ui_hover_distance := 30 56 | @export var drag_when_clicked := true 57 | ## This works best as a 2-point linear rise from -X to +X 58 | @export var hand_rotation_curve : Curve 59 | ## This works best as a 3-point ease in/out from 0 to X to 0 60 | @export var hand_vertical_curve : Curve 61 | #@export var drag_sort_enabled := true this would be nice to have, but based on how dragging works I'm not 100% sure how to handle it, possibly disable mouse input on the card being dragged? 62 | 63 | @export_group("Discard Pile") 64 | @export var discard_face_up := true 65 | @export var discard_pile_layout := PilesCardLayouts.up 66 | 67 | 68 | var card_database := [] # an array of JSON `Card` data 69 | var card_collection := [] # an array of JSON `Card` data 70 | 71 | var _draw_pile := [] # an array of `CardUI`s 72 | var _hand_pile := [] # an array of `CardUI`s 73 | var _discard_pile := [] # an array of `CardUI`s 74 | 75 | 76 | var spread_curve := Curve.new() 77 | 78 | 79 | 80 | # this is really the only way we should move cards between piles 81 | func set_card_pile(card : CardUI, pile : Piles): 82 | _maybe_remove_card_from_any_piles(card) 83 | _maybe_remove_card_from_any_dropzones(card) 84 | if pile == Piles.discard_pile: 85 | _discard_pile.push_back(card) 86 | emit_signal("discard_pile_updated") 87 | if pile == Piles.hand_pile: 88 | _hand_pile.push_back(card) 89 | emit_signal("hand_pile_updated") 90 | if pile == Piles.draw_pile: 91 | _draw_pile.push_back(card) 92 | emit_signal("draw_pile_updated") 93 | reset_target_positions() 94 | 95 | func set_card_dropzone(card : CardUI, dropzone : CardDropzone): 96 | _maybe_remove_card_from_any_piles(card) 97 | _maybe_remove_card_from_any_dropzones(card) 98 | dropzone.add_card(card) 99 | emit_signal("card_added_to_dropzone", dropzone, card) 100 | reset_target_positions() 101 | 102 | func remove_card_from_game(card : CardUI): 103 | _maybe_remove_card_from_any_piles(card) 104 | _maybe_remove_card_from_any_dropzones(card) 105 | emit_signal("card_removed_from_game", card) 106 | card.queue_free() 107 | reset_target_positions() 108 | 109 | func is_hand_enabled(): 110 | return hand_enabled 111 | 112 | func get_cards_in_pile(pile : Piles): 113 | if pile == Piles.discard_pile: 114 | return _discard_pile.duplicate() # duplicating these so the end user can manipulate the returned array without touching the originals (like doing a forEach remove) 115 | elif pile == Piles.hand_pile: 116 | return _hand_pile.duplicate() 117 | elif pile == Piles.draw_pile: 118 | return _draw_pile.duplicate() 119 | return [] 120 | 121 | func get_card_in_pile_at(pile : Piles, index : int): 122 | if pile == Piles.discard_pile and _discard_pile.size() > index: 123 | return _discard_pile[index] 124 | elif pile == Piles.draw_pile and _draw_pile.size() > index: 125 | return _draw_pile[index] 126 | elif pile == Piles.hand_pile and _hand_pile.size() > index: 127 | return _hand_pile[index] 128 | return null 129 | 130 | func get_card_pile_size(pile : Piles): 131 | if pile == Piles.discard_pile: 132 | return _discard_pile.size() 133 | elif pile == Piles.hand_pile: 134 | return _hand_pile.size() 135 | elif pile == Piles.draw_pile: 136 | return _draw_pile.size() 137 | return 0 138 | 139 | 140 | 141 | func _maybe_remove_card_from_any_piles(card : CardUI): 142 | if _hand_pile.find(card) != -1: 143 | _hand_pile.erase(card) 144 | emit_signal("hand_pile_updated") 145 | elif _draw_pile.find(card) != -1: 146 | _draw_pile.erase(card) 147 | emit_signal("draw_pile_updated") 148 | elif _discard_pile.find(card) != -1: 149 | _discard_pile.erase(card) 150 | emit_signal("discard_pile_updated") 151 | 152 | 153 | 154 | func create_card_in_dropzone(nice_name : String, dropzone : CardDropzone): 155 | var card_ui = _create_card_ui(_get_card_data_by_nice_name(nice_name)) 156 | card_ui.position = dropzone.position 157 | set_card_dropzone(card_ui, dropzone) 158 | 159 | func create_card_in_pile(nice_name : String, pile_to_add_to : Piles): 160 | var card_ui = _create_card_ui(_get_card_data_by_nice_name(nice_name)) 161 | if pile_to_add_to == Piles.hand_pile: 162 | card_ui.position = hand_pile_position 163 | if pile_to_add_to == Piles.discard_pile: 164 | card_ui.position = discard_pile_position 165 | if pile_to_add_to == Piles.draw_pile: 166 | card_ui.position = draw_pile_position 167 | set_card_pile(card_ui, pile_to_add_to) 168 | 169 | 170 | func _maybe_remove_card_from_any_dropzones(card : CardUI): 171 | var all_dropzones := [] 172 | _get_dropzones(get_tree().get_root(), "CardDropzone", all_dropzones) 173 | for dropzone in all_dropzones: 174 | if dropzone.is_holding(card): 175 | dropzone.remove_card(card) 176 | emit_signal("card_removed_from_dropzone", dropzone, card) 177 | 178 | func get_card_dropzone(card : CardUI): 179 | var all_dropzones := [] 180 | _get_dropzones(get_tree().get_root(), "CardDropzone", all_dropzones) 181 | for dropzone in all_dropzones: 182 | if dropzone.is_holding(card): 183 | return dropzone 184 | return null 185 | 186 | 187 | func _get_dropzones(node: Node, className : String, result : Array) -> void: 188 | if node is CardDropzone: 189 | result.push_back(node) 190 | for child in node.get_children(): 191 | _get_dropzones(child, className, result) 192 | 193 | 194 | func load_json_path(): 195 | card_database = _load_json_cards_from_path(json_card_database_path) 196 | card_collection = _load_json_cards_from_path(json_card_collection_path) 197 | 198 | func _load_json_cards_from_path(path : String): 199 | var found = [] 200 | if path: 201 | var json_as_text = FileAccess.get_file_as_string(path) 202 | var json_as_dict = JSON.parse_string(json_as_text) 203 | if json_as_dict: 204 | for c in json_as_dict: 205 | found.push_back(c) 206 | return found 207 | 208 | func reset(): 209 | _reset_card_collection() 210 | 211 | func _reset_card_collection(): 212 | for child in get_children(): 213 | _maybe_remove_card_from_any_piles(child) 214 | _maybe_remove_card_from_any_dropzones(child) 215 | remove_card_from_game(child) 216 | for nice_name in card_collection: 217 | var card_data = _get_card_data_by_nice_name(nice_name) 218 | var card_ui = _create_card_ui(card_data) 219 | _draw_pile.push_back(card_ui) 220 | _draw_pile.shuffle() 221 | _set_draw_pile_target_positions(true) 222 | emit_signal("draw_pile_updated") 223 | emit_signal("hand_pile_updated") 224 | emit_signal("discard_pile_updated") 225 | 226 | func _ready(): 227 | size = Vector2.ZERO 228 | spread_curve.add_point(Vector2(0, -1), 0, 0, Curve.TANGENT_LINEAR, Curve.TANGENT_LINEAR) 229 | spread_curve.add_point(Vector2(1, 1), 0, 0, Curve.TANGENT_LINEAR, Curve.TANGENT_LINEAR) 230 | load_json_path() 231 | _reset_card_collection() 232 | reset_target_positions() 233 | 234 | func reset_target_positions(): 235 | _set_draw_pile_target_positions() 236 | _set_hand_pile_target_positions() 237 | _set_discard_pile_target_positions() 238 | 239 | func _set_draw_pile_target_positions(instantly_move = false): 240 | for i in _draw_pile.size(): 241 | var card_ui = _draw_pile[i] 242 | var target_pos = draw_pile_position 243 | if draw_pile_layout == CardPileUI.PilesCardLayouts.up: 244 | if i <= max_stack_display: 245 | target_pos.y -= i * stack_display_gap 246 | else: 247 | target_pos.y -= stack_display_gap * max_stack_display 248 | elif draw_pile_layout == CardPileUI.PilesCardLayouts.down: 249 | if i <= max_stack_display: 250 | target_pos.y += i * stack_display_gap 251 | else: 252 | target_pos.y += stack_display_gap * max_stack_display 253 | elif draw_pile_layout == CardPileUI.PilesCardLayouts.right: 254 | if i <= max_stack_display: 255 | target_pos.x += i * stack_display_gap 256 | else: 257 | target_pos.x += stack_display_gap * max_stack_display 258 | elif draw_pile_layout == CardPileUI.PilesCardLayouts.left: 259 | if i <= max_stack_display: 260 | target_pos.x -= i * stack_display_gap 261 | else: 262 | target_pos.x -= stack_display_gap * max_stack_display 263 | card_ui.z_index = i 264 | card_ui.rotation = 0 265 | card_ui.target_position = target_pos 266 | card_ui.set_direction(Vector2.DOWN) 267 | if instantly_move: 268 | card_ui.position = target_pos 269 | 270 | func _set_hand_pile_target_positions(): 271 | for i in _hand_pile.size(): 272 | var card_ui = _hand_pile[i] 273 | card_ui.move_to_front() 274 | var hand_ratio = 0.5 275 | if _hand_pile.size() > 1: 276 | hand_ratio = float(i) / float(_hand_pile.size() - 1) 277 | var target_pos = hand_pile_position 278 | var card_spacing = max_hand_spread / (_hand_pile.size() + 1) 279 | target_pos.x += (i + 1) * card_spacing - max_hand_spread / 2.0 280 | if hand_vertical_curve: 281 | target_pos.y -= hand_vertical_curve.sample(hand_ratio) 282 | if hand_rotation_curve: 283 | card_ui.rotation = deg_to_rad(hand_rotation_curve.sample(hand_ratio)) 284 | if hand_face_up: 285 | card_ui.set_direction(Vector2.UP) 286 | else: 287 | card_ui.set_direction(Vector2.DOWN) 288 | card_ui.target_position = target_pos 289 | while _hand_pile.size() > max_hand_size: 290 | set_card_pile(_hand_pile[_hand_pile.size() - 1], Piles.discard_pile) 291 | _reset_hand_pile_z_index() 292 | 293 | func _set_discard_pile_target_positions(): 294 | for i in _discard_pile.size(): 295 | var card_ui = _discard_pile[i] 296 | var target_pos = discard_pile_position 297 | if discard_pile_layout == CardPileUI.PilesCardLayouts.up: 298 | if i <= max_stack_display: 299 | target_pos.y -= i * stack_display_gap 300 | else: 301 | target_pos.y -= stack_display_gap * max_stack_display 302 | elif draw_pile_layout == CardPileUI.PilesCardLayouts.down: 303 | if i <= max_stack_display: 304 | target_pos.y += i * stack_display_gap 305 | else: 306 | target_pos.y += stack_display_gap * max_stack_display 307 | elif discard_pile_layout == CardPileUI.PilesCardLayouts.right: 308 | if i <= max_stack_display: 309 | target_pos.x += i * stack_display_gap 310 | else: 311 | target_pos.x += stack_display_gap * max_stack_display 312 | elif discard_pile_layout == CardPileUI.PilesCardLayouts.left: 313 | if i <= max_stack_display: 314 | target_pos.x -= i * stack_display_gap 315 | else: 316 | target_pos.x -= stack_display_gap * max_stack_display 317 | if discard_face_up: 318 | card_ui.set_direction(Vector2.UP) 319 | else: 320 | card_ui.set_direction(Vector2.DOWN) 321 | card_ui.z_index = i 322 | card_ui.rotation = 0 323 | card_ui.target_position = target_pos 324 | 325 | # called by CardUI 326 | func reset_card_ui_z_index(): 327 | for i in _draw_pile.size(): 328 | var card_ui = _draw_pile[i] 329 | card_ui.z_index = i 330 | for i in _discard_pile.size(): 331 | var card_ui = _discard_pile[i] 332 | card_ui.z_index = i 333 | _reset_hand_pile_z_index() 334 | 335 | func _reset_hand_pile_z_index(): 336 | for i in _hand_pile.size(): 337 | var card_ui = _hand_pile[i] 338 | card_ui.z_index = 1000 + i 339 | card_ui.move_to_front() 340 | if card_ui.mouse_is_hovering: 341 | card_ui.z_index = 2000 + i 342 | if card_ui.is_clicked: 343 | card_ui.z_index = 3000 + i 344 | 345 | 346 | func is_card_ui_in_hand(card_ui): 347 | return _hand_pile.filter(func(c): return c == card_ui).size() 348 | 349 | func is_any_card_ui_clicked(): 350 | for card_ui in _hand_pile: 351 | if card_ui.is_clicked: 352 | return true 353 | var all_dropzones := [] 354 | _get_dropzones(get_tree().get_root(), "CardDropzone", all_dropzones) 355 | for dropzone in all_dropzones: 356 | for card in dropzone.get_held_cards(): 357 | if card.is_clicked: 358 | return true 359 | return false 360 | 361 | #public function to try and draw a card 362 | func draw(num_cards := 1): 363 | for i in num_cards: 364 | if _hand_pile.size() >= max_hand_size and cant_draw_at_hand_limit: 365 | continue 366 | if _draw_pile.size(): 367 | set_card_pile(_draw_pile[_draw_pile.size() - 1], Piles.hand_pile) 368 | elif shuffle_discard_on_empty_draw and _discard_pile.size(): 369 | var dupe_discard = _discard_pile.duplicate() 370 | for c in dupe_discard: # you can't remove things from the thing you loop!! 371 | set_card_pile(c, Piles.draw_pile) 372 | _draw_pile.shuffle() 373 | set_card_pile(_draw_pile[_draw_pile.size() - 1], Piles.hand_pile) 374 | reset_target_positions() 375 | 376 | func hand_is_at_max_capacity(): 377 | return _hand_pile.size() >= max_hand_size 378 | 379 | func sort_hand(sort_func): 380 | _hand_pile.sort_custom(sort_func) 381 | reset_target_positions() 382 | 383 | func _create_card_ui(json_data : Dictionary): 384 | var card_ui = extended_card_ui.instantiate() 385 | card_ui.frontface_texture = json_data.texture_path 386 | card_ui.backface_texture = json_data.backface_texture_path 387 | card_ui.return_speed = card_return_speed 388 | card_ui.hover_distance = card_ui_hover_distance 389 | card_ui.drag_when_clicked = drag_when_clicked 390 | 391 | card_ui.card_data = ResourceLoader.load(json_data.resource_script_path).new() 392 | for key in json_data.keys(): 393 | if key != "texture_path" and key != "backface_texture_path" and key != "resource_script_path": 394 | card_ui.card_data[key] = json_data[key] 395 | card_ui.connect("card_hovered", func(c_ui): emit_signal("card_hovered", c_ui)) 396 | card_ui.connect("card_unhovered", func(c_ui): emit_signal("card_unhovered", c_ui)) 397 | card_ui.connect("card_clicked", func(c_ui): emit_signal("card_clicked", c_ui)) 398 | card_ui.connect("card_dropped", func(c_ui): emit_signal("card_dropped", c_ui)) 399 | add_child(card_ui) 400 | return card_ui 401 | 402 | 403 | func _get_card_data_by_nice_name(nice_name : String): 404 | for json_data in card_database: 405 | if json_data.nice_name == nice_name: 406 | return json_data 407 | return null 408 | -------------------------------------------------------------------------------- /addons/simple_card_pile_ui/card_pile_ui_debugger.gd: -------------------------------------------------------------------------------- 1 | class_name CardPileUIDebugger extends RichTextLabel 2 | 3 | @export var card_pile_ui : CardPileUI 4 | 5 | 6 | func _ready(): 7 | text += "Signal Debugger:\n" 8 | card_pile_ui.connect("draw_pile_updated", func(): text += "Draw Pile Updated\n") 9 | card_pile_ui.connect("hand_pile_updated", func(): text += "Hand Pile Updated\n") 10 | card_pile_ui.connect("discard_pile_updated", func(): text += "Discard Pile Updated\n") 11 | card_pile_ui.connect("card_removed_from_dropzone", func(_dropzone, _card): text += "Card Removed From Dropzone\n") 12 | card_pile_ui.connect("card_added_to_dropzone", func(_dropzone, _card): text += "Card Added To Dropzone\n") 13 | card_pile_ui.connect("card_hovered", func(card): text += "%s hovered\n" % card.card_data.nice_name) 14 | card_pile_ui.connect("card_unhovered", func(card): text += "%s unhovered\n" % card.card_data.nice_name) 15 | card_pile_ui.connect("card_clicked", func(card): text += "%s clicked\n" % card.card_data.nice_name) 16 | card_pile_ui.connect("card_dropped", func(card): text += "%s dropped\n" % card.card_data.nice_name) 17 | card_pile_ui.connect("card_removed_from_game", func(card): text += "%s removed from game\n" % card.card_data.nice_name) 18 | -------------------------------------------------------------------------------- /addons/simple_card_pile_ui/card_ui.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | class_name CardUI extends Control 3 | 4 | 5 | signal card_hovered(card: CardUI) 6 | signal card_unhovered(card: CardUI) 7 | signal card_clicked(card: CardUI) 8 | signal card_dropped(card: CardUI) 9 | 10 | 11 | @onready var frontface = $Frontface 12 | @onready var backface = $Backface 13 | 14 | 15 | @export var card_data : CardUIData 16 | 17 | 18 | var frontface_texture : String 19 | var backface_texture : String 20 | var is_clicked := false 21 | var mouse_is_hovering := false 22 | var target_position := Vector2.ZERO 23 | var return_speed := 0.2 24 | var hover_distance := 10 25 | var drag_when_clicked := true 26 | 27 | func get_class(): return "CardUI" 28 | func is_class(name): return name == "CardUI" 29 | 30 | 31 | func set_direction(card_is_facing : Vector2): 32 | backface.visible = card_is_facing == Vector2.DOWN 33 | frontface.visible = card_is_facing == Vector2.UP 34 | 35 | func set_disabled(val : bool): 36 | if val: 37 | mouse_is_hovering = false 38 | is_clicked = false 39 | rotation = 0 40 | var parent = get_parent() 41 | if parent is CardPileUI: 42 | parent.reset_card_ui_z_index() 43 | 44 | func _ready(): 45 | if Engine.is_editor_hint(): 46 | set_disabled(true) 47 | update_configuration_warnings() 48 | return 49 | connect("mouse_entered", _on_mouse_enter) 50 | connect("mouse_exited", _on_mouse_exited) 51 | connect("gui_input", _on_gui_input) 52 | if frontface_texture: 53 | frontface.texture = load(frontface_texture) 54 | backface.texture = load(backface_texture) 55 | custom_minimum_size = frontface.texture.get_size() 56 | pivot_offset = frontface.texture.get_size() / 2 57 | mouse_filter = Control.MOUSE_FILTER_PASS 58 | 59 | 60 | 61 | func _card_can_be_interacted_with(): 62 | var parent = get_parent() 63 | var valid = false 64 | if parent is CardPileUI: 65 | # check for cards in hand 66 | if parent.is_card_ui_in_hand(self): 67 | valid = parent.is_hand_enabled() and not parent.is_any_card_ui_clicked() 68 | # check for cards in dropzone 69 | var dropzone = parent.get_card_dropzone(self) 70 | if dropzone: 71 | valid = dropzone.get_top_card() == self and not parent.is_any_card_ui_clicked() 72 | return valid 73 | 74 | 75 | 76 | func _on_mouse_enter(): 77 | #check if is hovering should be turned on 78 | if _card_can_be_interacted_with(): 79 | mouse_is_hovering = true 80 | target_position.y -= hover_distance 81 | var parent = get_parent() 82 | parent.reset_card_ui_z_index() 83 | emit_signal("card_hovered", self) 84 | 85 | 86 | func _on_mouse_exited(): 87 | if is_clicked: 88 | return 89 | if mouse_is_hovering: 90 | mouse_is_hovering = false 91 | target_position.y += hover_distance 92 | var parent = get_parent() 93 | if parent is CardPileUI: 94 | parent.reset_card_ui_z_index() 95 | emit_signal("card_unhovered", self) 96 | 97 | func _on_gui_input(event): 98 | if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT: 99 | if event.pressed: 100 | var parent = get_parent() 101 | 102 | if _card_can_be_interacted_with(): 103 | is_clicked = true 104 | rotation = 0 105 | parent.reset_card_ui_z_index() 106 | emit_signal("card_clicked", self) 107 | 108 | if parent is CardPileUI and parent.get_card_pile_size(CardPileUI.Piles.draw_pile) > 0 and parent.is_hand_enabled() and parent.get_cards_in_pile(CardPileUI.Piles.draw_pile).find(self) != -1 and not parent.is_any_card_ui_clicked() and parent.click_draw_pile_to_draw: 109 | parent.draw(1) 110 | else: 111 | #event released 112 | if is_clicked: 113 | is_clicked = false 114 | mouse_is_hovering = false 115 | rotation = 0 116 | var parent = get_parent() 117 | if parent is CardPileUI and parent.is_card_ui_in_hand(self): 118 | parent.call_deferred("reset_target_positions") 119 | var all_dropzones := [] 120 | get_dropzones(get_tree().get_root(), "CardDropzone", all_dropzones) 121 | for dropzone in all_dropzones: 122 | if dropzone.get_global_rect().has_point(get_global_mouse_position()): 123 | if dropzone.can_drop_card(self): 124 | dropzone.card_ui_dropped(self) 125 | break 126 | emit_signal("card_dropped", self) 127 | emit_signal("card_unhovered", self) 128 | 129 | 130 | func get_dropzones(node: Node, className : String, result : Array) -> void: 131 | if node is CardDropzone: 132 | result.push_back(node) 133 | for child in node.get_children(): 134 | get_dropzones(child, className, result) 135 | 136 | func _process(_delta): 137 | if is_clicked and drag_when_clicked: 138 | target_position = get_global_mouse_position() - custom_minimum_size * 0.5 139 | if is_clicked: 140 | position = target_position 141 | elif position != target_position: 142 | position = lerp(position, target_position, return_speed) 143 | 144 | if Engine.is_editor_hint() and last_child_count != get_child_count(): 145 | update_configuration_warnings() 146 | last_child_count = get_child_count() 147 | 148 | var last_child_count = 0 149 | 150 | func _get_configuration_warnings(): 151 | if get_child_count() != 2: 152 | return [ "This node must have 2 TextureRect as children, one named `Frontface` and one named `Backface`." ] 153 | for child in get_children(): 154 | if not child is TextureRect or (child.name != "Frontface" and child.name != "Backface"): 155 | return [ "This node must have 2 TextureRect as children, one named `Frontface` and one named `Backface`." ] 156 | return [] 157 | -------------------------------------------------------------------------------- /addons/simple_card_pile_ui/card_ui.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://dnt4pku64ytnl"] 2 | 3 | [ext_resource type="Script" path="res://addons/simple_card_pile_ui/card_ui.gd" id="1_v1sf0"] 4 | 5 | [node name="CardUI" type="Control"] 6 | layout_mode = 3 7 | anchors_preset = 0 8 | script = ExtResource("1_v1sf0") 9 | 10 | [node name="BackFaceTextureRect" type="TextureRect" parent="."] 11 | layout_mode = 0 12 | offset_right = 40.0 13 | offset_bottom = 40.0 14 | 15 | [node name="FrontFaceTextureRect" type="TextureRect" parent="."] 16 | layout_mode = 0 17 | offset_right = 40.0 18 | offset_bottom = 40.0 19 | -------------------------------------------------------------------------------- /addons/simple_card_pile_ui/card_ui_data.gd: -------------------------------------------------------------------------------- 1 | class_name CardUIData extends Resource 2 | 3 | signal card_data_updated 4 | 5 | @export var nice_name : String 6 | -------------------------------------------------------------------------------- /addons/simple_card_pile_ui/card_ui_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/addons/simple_card_pile_ui/card_ui_icon.png -------------------------------------------------------------------------------- /addons/simple_card_pile_ui/card_ui_icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dh2yamaj2pa53" 6 | path="res://.godot/imported/card_ui_icon.png-9b01b3f460b27fe737719056aa1431a0.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/simple_card_pile_ui/card_ui_icon.png" 14 | dest_files=["res://.godot/imported/card_ui_icon.png-9b01b3f460b27fe737719056aa1431a0.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/simple_card_pile_ui/plugin.cfg: -------------------------------------------------------------------------------- 1 | [plugin] 2 | 3 | name="Simple Card Pile UI" 4 | description="This plugin provides a flexible and customizable card pile user interface. It is designed to handle various card-related functionalities, including drawing, discarding, and managing different piles." 5 | author="Andrew Vickerman" 6 | version="1.0.0" 7 | script="simple_card_pile_ui.gd" 8 | -------------------------------------------------------------------------------- /addons/simple_card_pile_ui/simple_card_pile_ui.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | class_name SimpleCardPileUI extends EditorPlugin 3 | 4 | 5 | func _enter_tree(): 6 | add_custom_type("CardPileUI", "Control", preload("card_pile_ui.gd"), preload("card_ui_icon.png")) 7 | add_custom_type("CardUI", "Control", preload("card_ui.gd"), preload("card_ui_icon.png")) 8 | add_custom_type("CardDropzone", "Control", preload("card_dropzone.gd"), preload("card_ui_icon.png")) 9 | add_custom_type("CardPileUIDebugger", "RichTextLabel", preload("card_pile_ui_debugger.gd"), preload("card_ui_icon.png")) 10 | 11 | func _exit_tree(): 12 | remove_custom_type("CardPileUI") 13 | remove_custom_type("CardUI") 14 | remove_custom_type("CardDropzone") 15 | remove_custom_type("CardPileUIDebugger") 16 | -------------------------------------------------------------------------------- /assets/1x1_#ffffffff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/1x1_#ffffffff.png -------------------------------------------------------------------------------- /assets/1x1_#ffffffff.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bpjxsk1mxfl77" 6 | path="res://.godot/imported/1x1_#ffffffff.png-3a5aac1c3762f3193d97fae13fc0c089.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/1x1_#ffffffff.png" 14 | dest_files=["res://.godot/imported/1x1_#ffffffff.png-3a5aac1c3762f3193d97fae13fc0c089.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_attack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_attack.png -------------------------------------------------------------------------------- /assets/card_attack.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://g3plv60jpgat" 6 | path="res://.godot/imported/card_attack.png-cb0f49138611862f8939755a480ba1f8.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_attack.png" 14 | dest_files=["res://.godot/imported/card_attack.png-cb0f49138611862f8939755a480ba1f8.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_back.png -------------------------------------------------------------------------------- /assets/card_back.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ben7qqx34vpkq" 6 | path="res://.godot/imported/card_back.png-0c0960486df04582101fdd48c0179ad0.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_back.png" 14 | dest_files=["res://.godot/imported/card_back.png-0c0960486df04582101fdd48c0179ad0.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_big_attack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_big_attack.png -------------------------------------------------------------------------------- /assets/card_big_attack.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://m8absnv7g1ov" 6 | path="res://.godot/imported/card_big_attack.png-c57fafaac9c74f67b56c45dabc78bc53.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_big_attack.png" 14 | dest_files=["res://.godot/imported/card_big_attack.png-c57fafaac9c74f67b56c45dabc78bc53.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_block.png -------------------------------------------------------------------------------- /assets/card_block.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cyvu066pyl46k" 6 | path="res://.godot/imported/card_block.png-3538422bd7f8aa186a31ecf2179b7a6b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_block.png" 14 | dest_files=["res://.godot/imported/card_block.png-3538422bd7f8aa186a31ecf2179b7a6b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_clubs_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_clubs_02.png -------------------------------------------------------------------------------- /assets/card_clubs_02.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dp7k4aq6freb1" 6 | path="res://.godot/imported/card_clubs_02.png-f7e7912344bdacb42ba54c64f25123c0.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_clubs_02.png" 14 | dest_files=["res://.godot/imported/card_clubs_02.png-f7e7912344bdacb42ba54c64f25123c0.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_clubs_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_clubs_03.png -------------------------------------------------------------------------------- /assets/card_clubs_03.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bsyuykjb3pwi8" 6 | path="res://.godot/imported/card_clubs_03.png-932a095a00a3882412cf8654595ee790.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_clubs_03.png" 14 | dest_files=["res://.godot/imported/card_clubs_03.png-932a095a00a3882412cf8654595ee790.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_clubs_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_clubs_04.png -------------------------------------------------------------------------------- /assets/card_clubs_04.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://brey3bptk8jqp" 6 | path="res://.godot/imported/card_clubs_04.png-23be1f6fcf8f1e3bb5b26fd4a960640b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_clubs_04.png" 14 | dest_files=["res://.godot/imported/card_clubs_04.png-23be1f6fcf8f1e3bb5b26fd4a960640b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_clubs_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_clubs_05.png -------------------------------------------------------------------------------- /assets/card_clubs_05.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dpvawj4br78kw" 6 | path="res://.godot/imported/card_clubs_05.png-d3d0d6e0f41b846bc384230746d0b5fb.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_clubs_05.png" 14 | dest_files=["res://.godot/imported/card_clubs_05.png-d3d0d6e0f41b846bc384230746d0b5fb.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_clubs_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_clubs_06.png -------------------------------------------------------------------------------- /assets/card_clubs_06.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://gp5cb8rlaqfh" 6 | path="res://.godot/imported/card_clubs_06.png-7eebe307d65b9e1199f869a6ea234ac9.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_clubs_06.png" 14 | dest_files=["res://.godot/imported/card_clubs_06.png-7eebe307d65b9e1199f869a6ea234ac9.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_clubs_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_clubs_07.png -------------------------------------------------------------------------------- /assets/card_clubs_07.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cmfpp08onmr3f" 6 | path="res://.godot/imported/card_clubs_07.png-4798cfeb4d0ffff8cbde7dd6e503cf00.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_clubs_07.png" 14 | dest_files=["res://.godot/imported/card_clubs_07.png-4798cfeb4d0ffff8cbde7dd6e503cf00.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_clubs_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_clubs_08.png -------------------------------------------------------------------------------- /assets/card_clubs_08.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cpqrs26sonrd6" 6 | path="res://.godot/imported/card_clubs_08.png-edd102153d094bbae6d2b6b3c1b09c38.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_clubs_08.png" 14 | dest_files=["res://.godot/imported/card_clubs_08.png-edd102153d094bbae6d2b6b3c1b09c38.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_clubs_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_clubs_09.png -------------------------------------------------------------------------------- /assets/card_clubs_09.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c7y401rfqdier" 6 | path="res://.godot/imported/card_clubs_09.png-75d1d017444a383560230339f7ff29a4.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_clubs_09.png" 14 | dest_files=["res://.godot/imported/card_clubs_09.png-75d1d017444a383560230339f7ff29a4.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_clubs_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_clubs_10.png -------------------------------------------------------------------------------- /assets/card_clubs_10.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cpy8t134teu4p" 6 | path="res://.godot/imported/card_clubs_10.png-cf498ce1450d98c5c352313919d4d978.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_clubs_10.png" 14 | dest_files=["res://.godot/imported/card_clubs_10.png-cf498ce1450d98c5c352313919d4d978.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_clubs_A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_clubs_A.png -------------------------------------------------------------------------------- /assets/card_clubs_A.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bnpfq6edp6cmm" 6 | path="res://.godot/imported/card_clubs_A.png-7d68d0e1d1a625a650a45db141755e65.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_clubs_A.png" 14 | dest_files=["res://.godot/imported/card_clubs_A.png-7d68d0e1d1a625a650a45db141755e65.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_clubs_J.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_clubs_J.png -------------------------------------------------------------------------------- /assets/card_clubs_J.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cybxhtuja4i43" 6 | path="res://.godot/imported/card_clubs_J.png-221b9eb66ae593e89a7b9c00b9d169f0.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_clubs_J.png" 14 | dest_files=["res://.godot/imported/card_clubs_J.png-221b9eb66ae593e89a7b9c00b9d169f0.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_clubs_K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_clubs_K.png -------------------------------------------------------------------------------- /assets/card_clubs_K.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b0ew7f3xqqh66" 6 | path="res://.godot/imported/card_clubs_K.png-98c22be449579ed06bc9d47a6450003c.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_clubs_K.png" 14 | dest_files=["res://.godot/imported/card_clubs_K.png-98c22be449579ed06bc9d47a6450003c.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_clubs_Q.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_clubs_Q.png -------------------------------------------------------------------------------- /assets/card_clubs_Q.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://fqo4m6j1iual" 6 | path="res://.godot/imported/card_clubs_Q.png-144620a69444f159e3c40a323d2fbb62.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_clubs_Q.png" 14 | dest_files=["res://.godot/imported/card_clubs_Q.png-144620a69444f159e3c40a323d2fbb62.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_diamonds_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_diamonds_02.png -------------------------------------------------------------------------------- /assets/card_diamonds_02.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bfvuxorhfa1hj" 6 | path="res://.godot/imported/card_diamonds_02.png-67e246de8a0926190abb3ee5959da052.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_diamonds_02.png" 14 | dest_files=["res://.godot/imported/card_diamonds_02.png-67e246de8a0926190abb3ee5959da052.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_diamonds_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_diamonds_03.png -------------------------------------------------------------------------------- /assets/card_diamonds_03.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://di6sepq3ufshl" 6 | path="res://.godot/imported/card_diamonds_03.png-8fcb0dfa798c9b7cc1303c184f7d557e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_diamonds_03.png" 14 | dest_files=["res://.godot/imported/card_diamonds_03.png-8fcb0dfa798c9b7cc1303c184f7d557e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_diamonds_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_diamonds_04.png -------------------------------------------------------------------------------- /assets/card_diamonds_04.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://7hhnfbq3xtlh" 6 | path="res://.godot/imported/card_diamonds_04.png-d60a605de67f4af557d8646040fa258e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_diamonds_04.png" 14 | dest_files=["res://.godot/imported/card_diamonds_04.png-d60a605de67f4af557d8646040fa258e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_diamonds_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_diamonds_05.png -------------------------------------------------------------------------------- /assets/card_diamonds_05.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dhr56ee4vcvvr" 6 | path="res://.godot/imported/card_diamonds_05.png-77e6fa6338a6c1059fcc444bf07652a2.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_diamonds_05.png" 14 | dest_files=["res://.godot/imported/card_diamonds_05.png-77e6fa6338a6c1059fcc444bf07652a2.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_diamonds_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_diamonds_06.png -------------------------------------------------------------------------------- /assets/card_diamonds_06.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c46v3udeblhjy" 6 | path="res://.godot/imported/card_diamonds_06.png-e933108f9d74c2930b1d8464fbab43ed.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_diamonds_06.png" 14 | dest_files=["res://.godot/imported/card_diamonds_06.png-e933108f9d74c2930b1d8464fbab43ed.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_diamonds_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_diamonds_07.png -------------------------------------------------------------------------------- /assets/card_diamonds_07.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://chv2dpkjbxc3v" 6 | path="res://.godot/imported/card_diamonds_07.png-39cb2341a1fb0e3e16e8352d33bdf7f2.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_diamonds_07.png" 14 | dest_files=["res://.godot/imported/card_diamonds_07.png-39cb2341a1fb0e3e16e8352d33bdf7f2.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_diamonds_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_diamonds_08.png -------------------------------------------------------------------------------- /assets/card_diamonds_08.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c0cu5oyjpivad" 6 | path="res://.godot/imported/card_diamonds_08.png-f5b20cafa6c51cec1e14ddda49041ada.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_diamonds_08.png" 14 | dest_files=["res://.godot/imported/card_diamonds_08.png-f5b20cafa6c51cec1e14ddda49041ada.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_diamonds_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_diamonds_09.png -------------------------------------------------------------------------------- /assets/card_diamonds_09.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://db7fs5jl3qmnj" 6 | path="res://.godot/imported/card_diamonds_09.png-e67c2a52005c1764ac42c8eceefb83cd.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_diamonds_09.png" 14 | dest_files=["res://.godot/imported/card_diamonds_09.png-e67c2a52005c1764ac42c8eceefb83cd.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_diamonds_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_diamonds_10.png -------------------------------------------------------------------------------- /assets/card_diamonds_10.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cfabty114gh4o" 6 | path="res://.godot/imported/card_diamonds_10.png-4f0ef1b31e13119a4a946d5e3f2cdf28.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_diamonds_10.png" 14 | dest_files=["res://.godot/imported/card_diamonds_10.png-4f0ef1b31e13119a4a946d5e3f2cdf28.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_diamonds_A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_diamonds_A.png -------------------------------------------------------------------------------- /assets/card_diamonds_A.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b7bqw6bmwwqwt" 6 | path="res://.godot/imported/card_diamonds_A.png-9a79efcd859c3810f1f4f959ea07f3af.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_diamonds_A.png" 14 | dest_files=["res://.godot/imported/card_diamonds_A.png-9a79efcd859c3810f1f4f959ea07f3af.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_diamonds_J.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_diamonds_J.png -------------------------------------------------------------------------------- /assets/card_diamonds_J.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://lf3sksndvnlm" 6 | path="res://.godot/imported/card_diamonds_J.png-cc7a84031088e9aa148fd662ae7c417f.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_diamonds_J.png" 14 | dest_files=["res://.godot/imported/card_diamonds_J.png-cc7a84031088e9aa148fd662ae7c417f.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_diamonds_K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_diamonds_K.png -------------------------------------------------------------------------------- /assets/card_diamonds_K.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cn2btcv7e1n3q" 6 | path="res://.godot/imported/card_diamonds_K.png-372481e1a49c1884eb569b6bbc454b8e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_diamonds_K.png" 14 | dest_files=["res://.godot/imported/card_diamonds_K.png-372481e1a49c1884eb569b6bbc454b8e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_diamonds_Q.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_diamonds_Q.png -------------------------------------------------------------------------------- /assets/card_diamonds_Q.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cvel7y5gltnlf" 6 | path="res://.godot/imported/card_diamonds_Q.png-59d1f1413481036877126768bd685ecd.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_diamonds_Q.png" 14 | dest_files=["res://.godot/imported/card_diamonds_Q.png-59d1f1413481036877126768bd685ecd.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_dice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_dice.png -------------------------------------------------------------------------------- /assets/card_dice.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cq0cx77chfhhh" 6 | path="res://.godot/imported/card_dice.png-d122fe29ed5f0f01586a97c4c40a27a2.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_dice.png" 14 | dest_files=["res://.godot/imported/card_dice.png-d122fe29ed5f0f01586a97c4c40a27a2.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_empty.png -------------------------------------------------------------------------------- /assets/card_empty.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cq38tr3k0do84" 6 | path="res://.godot/imported/card_empty.png-3049baf30ce61330376c19c761e61678.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_empty.png" 14 | dest_files=["res://.godot/imported/card_empty.png-3049baf30ce61330376c19c761e61678.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_hearts_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_hearts_02.png -------------------------------------------------------------------------------- /assets/card_hearts_02.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://geqncfoon11s" 6 | path="res://.godot/imported/card_hearts_02.png-7843f1496800b78cd2603888b184c003.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_hearts_02.png" 14 | dest_files=["res://.godot/imported/card_hearts_02.png-7843f1496800b78cd2603888b184c003.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_hearts_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_hearts_03.png -------------------------------------------------------------------------------- /assets/card_hearts_03.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dtp4bjyp0l2et" 6 | path="res://.godot/imported/card_hearts_03.png-4d7f1e7bb3ba34bfefca812d708841c3.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_hearts_03.png" 14 | dest_files=["res://.godot/imported/card_hearts_03.png-4d7f1e7bb3ba34bfefca812d708841c3.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_hearts_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_hearts_04.png -------------------------------------------------------------------------------- /assets/card_hearts_04.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c1sixwc1p8wrt" 6 | path="res://.godot/imported/card_hearts_04.png-cd4e074db26cc066415d64c02a586d9c.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_hearts_04.png" 14 | dest_files=["res://.godot/imported/card_hearts_04.png-cd4e074db26cc066415d64c02a586d9c.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_hearts_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_hearts_05.png -------------------------------------------------------------------------------- /assets/card_hearts_05.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c7by8kfclgl80" 6 | path="res://.godot/imported/card_hearts_05.png-3b357bb96dc98e0c277ab513e981f928.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_hearts_05.png" 14 | dest_files=["res://.godot/imported/card_hearts_05.png-3b357bb96dc98e0c277ab513e981f928.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_hearts_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_hearts_06.png -------------------------------------------------------------------------------- /assets/card_hearts_06.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://lbofed7ofi7a" 6 | path="res://.godot/imported/card_hearts_06.png-94c2506b380595215a475c334e1da61a.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_hearts_06.png" 14 | dest_files=["res://.godot/imported/card_hearts_06.png-94c2506b380595215a475c334e1da61a.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_hearts_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_hearts_07.png -------------------------------------------------------------------------------- /assets/card_hearts_07.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cyiddpi0k8k3m" 6 | path="res://.godot/imported/card_hearts_07.png-46bc950bd3d640111148fc2f5a32e1d3.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_hearts_07.png" 14 | dest_files=["res://.godot/imported/card_hearts_07.png-46bc950bd3d640111148fc2f5a32e1d3.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_hearts_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_hearts_08.png -------------------------------------------------------------------------------- /assets/card_hearts_08.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://3pixcdd5n4ug" 6 | path="res://.godot/imported/card_hearts_08.png-138c965ec20060348e61c8490fa74760.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_hearts_08.png" 14 | dest_files=["res://.godot/imported/card_hearts_08.png-138c965ec20060348e61c8490fa74760.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_hearts_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_hearts_09.png -------------------------------------------------------------------------------- /assets/card_hearts_09.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cjaxajdln8woc" 6 | path="res://.godot/imported/card_hearts_09.png-71c920f8c67245dfe13486c79c8d4871.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_hearts_09.png" 14 | dest_files=["res://.godot/imported/card_hearts_09.png-71c920f8c67245dfe13486c79c8d4871.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_hearts_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_hearts_10.png -------------------------------------------------------------------------------- /assets/card_hearts_10.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dqbwad67phhcd" 6 | path="res://.godot/imported/card_hearts_10.png-b4b00f9c5e5e678e3e436db22fb8731d.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_hearts_10.png" 14 | dest_files=["res://.godot/imported/card_hearts_10.png-b4b00f9c5e5e678e3e436db22fb8731d.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_hearts_A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_hearts_A.png -------------------------------------------------------------------------------- /assets/card_hearts_A.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bmlkpjefre0of" 6 | path="res://.godot/imported/card_hearts_A.png-42644245f87f4f14cdd3ebe8d47760fe.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_hearts_A.png" 14 | dest_files=["res://.godot/imported/card_hearts_A.png-42644245f87f4f14cdd3ebe8d47760fe.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_hearts_J.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_hearts_J.png -------------------------------------------------------------------------------- /assets/card_hearts_J.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dlak7rd3gjnrk" 6 | path="res://.godot/imported/card_hearts_J.png-c2aca0eaa5bdc05219609269a984c51d.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_hearts_J.png" 14 | dest_files=["res://.godot/imported/card_hearts_J.png-c2aca0eaa5bdc05219609269a984c51d.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_hearts_K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_hearts_K.png -------------------------------------------------------------------------------- /assets/card_hearts_K.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b7tcxyqqgi7px" 6 | path="res://.godot/imported/card_hearts_K.png-4b00682bd6c3f545fb7dbcdbd3cf77b2.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_hearts_K.png" 14 | dest_files=["res://.godot/imported/card_hearts_K.png-4b00682bd6c3f545fb7dbcdbd3cf77b2.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_hearts_Q.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_hearts_Q.png -------------------------------------------------------------------------------- /assets/card_hearts_Q.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ctsvrv8taorh8" 6 | path="res://.godot/imported/card_hearts_Q.png-f69feb6e90d80453ba35e7cb89b799da.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_hearts_Q.png" 14 | dest_files=["res://.godot/imported/card_hearts_Q.png-f69feb6e90d80453ba35e7cb89b799da.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_joker_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_joker_black.png -------------------------------------------------------------------------------- /assets/card_joker_black.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://43b4ohx3sjjq" 6 | path="res://.godot/imported/card_joker_black.png-a35feb0c97ffc25f6fd6435589302c5d.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_joker_black.png" 14 | dest_files=["res://.godot/imported/card_joker_black.png-a35feb0c97ffc25f6fd6435589302c5d.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_joker_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_joker_red.png -------------------------------------------------------------------------------- /assets/card_joker_red.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://vplv17m7ygvk" 6 | path="res://.godot/imported/card_joker_red.png-37fe52b9abd4780adb41d9dcbf9cf0d3.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_joker_red.png" 14 | dest_files=["res://.godot/imported/card_joker_red.png-37fe52b9abd4780adb41d9dcbf9cf0d3.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_shake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_shake.png -------------------------------------------------------------------------------- /assets/card_shake.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cm23e3dq3t4nw" 6 | path="res://.godot/imported/card_shake.png-2819e7acc8dba81871894dff8e33a286.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_shake.png" 14 | dest_files=["res://.godot/imported/card_shake.png-2819e7acc8dba81871894dff8e33a286.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_spades_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_spades_02.png -------------------------------------------------------------------------------- /assets/card_spades_02.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://8a1mahvwl7gd" 6 | path="res://.godot/imported/card_spades_02.png-227d6f63c000c365bacc0e30b10b13d1.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_spades_02.png" 14 | dest_files=["res://.godot/imported/card_spades_02.png-227d6f63c000c365bacc0e30b10b13d1.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_spades_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_spades_03.png -------------------------------------------------------------------------------- /assets/card_spades_03.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dkdcvyxq87wdf" 6 | path="res://.godot/imported/card_spades_03.png-6d204f7d055393a97fa839f071478e4e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_spades_03.png" 14 | dest_files=["res://.godot/imported/card_spades_03.png-6d204f7d055393a97fa839f071478e4e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_spades_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_spades_04.png -------------------------------------------------------------------------------- /assets/card_spades_04.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bxtpeo40s3a1q" 6 | path="res://.godot/imported/card_spades_04.png-cf9740c3af0630ce84ed736da13e3d90.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_spades_04.png" 14 | dest_files=["res://.godot/imported/card_spades_04.png-cf9740c3af0630ce84ed736da13e3d90.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_spades_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_spades_05.png -------------------------------------------------------------------------------- /assets/card_spades_05.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b5i8eiypjnfes" 6 | path="res://.godot/imported/card_spades_05.png-f5dd49a3f3537405a82bd12263f0c939.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_spades_05.png" 14 | dest_files=["res://.godot/imported/card_spades_05.png-f5dd49a3f3537405a82bd12263f0c939.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_spades_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_spades_06.png -------------------------------------------------------------------------------- /assets/card_spades_06.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://d0g18xr85ye7k" 6 | path="res://.godot/imported/card_spades_06.png-4fb18bb7358273dc22316fe7045a9fa9.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_spades_06.png" 14 | dest_files=["res://.godot/imported/card_spades_06.png-4fb18bb7358273dc22316fe7045a9fa9.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_spades_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_spades_07.png -------------------------------------------------------------------------------- /assets/card_spades_07.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c14u0cj7uwxr3" 6 | path="res://.godot/imported/card_spades_07.png-2b79e4f5f1fe8d59ffb2c469aabc3a41.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_spades_07.png" 14 | dest_files=["res://.godot/imported/card_spades_07.png-2b79e4f5f1fe8d59ffb2c469aabc3a41.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_spades_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_spades_08.png -------------------------------------------------------------------------------- /assets/card_spades_08.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dapp141vtr1ed" 6 | path="res://.godot/imported/card_spades_08.png-b7a2d769fde02285cfaa6fa948911462.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_spades_08.png" 14 | dest_files=["res://.godot/imported/card_spades_08.png-b7a2d769fde02285cfaa6fa948911462.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_spades_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_spades_09.png -------------------------------------------------------------------------------- /assets/card_spades_09.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cx6fo1dadk474" 6 | path="res://.godot/imported/card_spades_09.png-872699fb14021d606b382f2ab9f3ec48.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_spades_09.png" 14 | dest_files=["res://.godot/imported/card_spades_09.png-872699fb14021d606b382f2ab9f3ec48.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_spades_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_spades_10.png -------------------------------------------------------------------------------- /assets/card_spades_10.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://brw4qegdveku0" 6 | path="res://.godot/imported/card_spades_10.png-dea7897a535dba98b8c47de1916a4f74.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_spades_10.png" 14 | dest_files=["res://.godot/imported/card_spades_10.png-dea7897a535dba98b8c47de1916a4f74.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_spades_A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_spades_A.png -------------------------------------------------------------------------------- /assets/card_spades_A.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cevijt3lotxgr" 6 | path="res://.godot/imported/card_spades_A.png-f276ff5bc921cdf126bd4588f1898dae.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_spades_A.png" 14 | dest_files=["res://.godot/imported/card_spades_A.png-f276ff5bc921cdf126bd4588f1898dae.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_spades_J.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_spades_J.png -------------------------------------------------------------------------------- /assets/card_spades_J.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://xh8e0ojhffga" 6 | path="res://.godot/imported/card_spades_J.png-f840432ad940c56ce380863d91cc3e96.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_spades_J.png" 14 | dest_files=["res://.godot/imported/card_spades_J.png-f840432ad940c56ce380863d91cc3e96.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_spades_K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_spades_K.png -------------------------------------------------------------------------------- /assets/card_spades_K.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c1sxfx5c3qhpb" 6 | path="res://.godot/imported/card_spades_K.png-9f1a65f03f5118894c92df51489213bd.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_spades_K.png" 14 | dest_files=["res://.godot/imported/card_spades_K.png-9f1a65f03f5118894c92df51489213bd.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/card_spades_Q.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/card_spades_Q.png -------------------------------------------------------------------------------- /assets/card_spades_Q.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cwi8go8begyxn" 6 | path="res://.godot/imported/card_spades_Q.png-9993621d0d1af7fd49dc669c6312c220.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/card_spades_Q.png" 14 | dest_files=["res://.godot/imported/card_spades_Q.png-9993621d0d1af7fd49dc669c6312c220.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/enemy_bee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/enemy_bee.png -------------------------------------------------------------------------------- /assets/enemy_bee.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://3sjbqh1m34dc" 6 | path="res://.godot/imported/enemy_bee.png-b4b2f45334d1fc6aecde862ed56e0e7d.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/enemy_bee.png" 14 | dest_files=["res://.godot/imported/enemy_bee.png-b4b2f45334d1fc6aecde862ed56e0e7d.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/enemy_crab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/enemy_crab.png -------------------------------------------------------------------------------- /assets/enemy_crab.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b0ymf1fwfgbss" 6 | path="res://.godot/imported/enemy_crab.png-3e1c205deb759b509e1b4467dbd96643.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/enemy_crab.png" 14 | dest_files=["res://.godot/imported/enemy_crab.png-3e1c205deb759b509e1b4467dbd96643.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/screenshot.png -------------------------------------------------------------------------------- /assets/screenshot.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://hx6odmeo6kck" 6 | path="res://.godot/imported/screenshot.png-0641788eeab620cdb024093014ee1cbd.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/screenshot.png" 14 | dest_files=["res://.godot/imported/screenshot.png-0641788eeab620cdb024093014ee1cbd.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/screenshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/screenshot2.png -------------------------------------------------------------------------------- /assets/screenshot2.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cuul14yo1ki3y" 6 | path="res://.godot/imported/screenshot2.png-c7b0beb16b74c482d0420c6850ae9e18.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/screenshot2.png" 14 | dest_files=["res://.godot/imported/screenshot2.png-c7b0beb16b74c482d0420c6850ae9e18.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/white-circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insideout-andrew/simple-card-pile-ui/e9f52b0b3485fb83dd8072fe8098e820d5b90236/assets/white-circle.png -------------------------------------------------------------------------------- /assets/white-circle.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bddymiv4rv8kw" 6 | path="res://.godot/imported/white-circle.png-21cb030b7b2f9ee56f41470823aada71.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/white-circle.png" 14 | dest_files=["res://.godot/imported/white-circle.png-21cb030b7b2f9ee56f41470823aada71.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /example/example.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | 4 | @onready var card_pile_ui := $CardPileUI 5 | @onready var dropzones := [ 6 | $CardDropzone_Clubs, 7 | $CardDropzone_Diamonds, 8 | $CardDropzone_Hearts, 9 | $CardDropzone_Spades, 10 | ] 11 | 12 | 13 | func _ready(): 14 | randomize() 15 | 16 | 17 | func _get_rand_joker(): 18 | return "Black Joker" if randi_range(0, 1) else "Red Joker" 19 | 20 | 21 | func _on_draw_button_pressed(): 22 | card_pile_ui.draw(1) 23 | 24 | 25 | func _on_draw_3_button_pressed(): 26 | card_pile_ui.draw(3) 27 | 28 | 29 | func _on_sort_button_pressed(): 30 | card_pile_ui.sort_hand(func(a, b): 31 | if a.card_data.suit == b.card_data.suit: 32 | return a.card_data.value < b.card_data.value 33 | else: 34 | return a.card_data.suit < b.card_data.suit 35 | ) 36 | 37 | 38 | func _on_discard_random_button_pressed(): 39 | var hand_pile_size = card_pile_ui.get_card_pile_size(CardPileUI.Piles.hand_pile) 40 | if hand_pile_size: 41 | var random_card_in_hand = card_pile_ui.get_card_in_pile_at(CardPileUI.Piles.hand_pile, randi() % hand_pile_size) 42 | card_pile_ui.set_card_pile(random_card_in_hand, CardPileUI.Piles.discard_pile) 43 | 44 | 45 | func _on_add_joker_to_hand_button_pressed(): 46 | card_pile_ui.create_card_in_pile(_get_rand_joker(), CardPileUI.Piles.hand_pile) 47 | 48 | 49 | func _on_add_joker_to_discard_button_pressed(): 50 | card_pile_ui.create_card_in_pile(_get_rand_joker(), CardPileUI.Piles.discard_pile) 51 | 52 | 53 | func _on_random_discard_to_hand_button_pressed(): 54 | var discard_pile_size = card_pile_ui.get_card_pile_size(CardPileUI.Piles.discard_pile) 55 | if discard_pile_size: 56 | var random_card_in_discard = card_pile_ui.get_card_in_pile_at(CardPileUI.Piles.discard_pile, randi() % discard_pile_size) 57 | card_pile_ui.set_card_pile(random_card_in_discard, CardPileUI.Piles.hand_pile) 58 | 59 | 60 | func _on_reset_button_pressed(): 61 | card_pile_ui.reset() 62 | 63 | 64 | func _on_discard_hand_button_pressed(): 65 | for card_ui in card_pile_ui.get_cards_in_pile(CardPileUI.Piles.hand_pile): 66 | card_pile_ui.set_card_pile(card_ui, CardPileUI.Piles.discard_pile) 67 | 68 | 69 | func _on_add_joker_to_dropzones_button_pressed(): 70 | for dropzone in dropzones: 71 | card_pile_ui.create_card_in_dropzone(_get_rand_joker(), dropzone) 72 | 73 | 74 | 75 | func _on_move_from_dropzone_to_pile_button_pressed(): 76 | for dropzone in dropzones: 77 | var top_card_in_dropzone = dropzone.get_top_card() 78 | if top_card_in_dropzone: 79 | card_pile_ui.set_card_pile(top_card_in_dropzone, CardPileUI.Piles.discard_pile) 80 | 81 | 82 | func _on_move_club_to_diamonds_pressed(): 83 | var clubs_dropzone = dropzones[0] 84 | var top_card_in_dropzone = clubs_dropzone.get_top_card() 85 | if top_card_in_dropzone: 86 | var diamonds_dropzone = dropzones[1] 87 | card_pile_ui.set_card_dropzone(top_card_in_dropzone, diamonds_dropzone) 88 | 89 | 90 | func _on_remove_rand_card_in_hand_from_game_pressed(): 91 | var hand_pile_size = card_pile_ui.get_card_pile_size(CardPileUI.Piles.hand_pile) 92 | if hand_pile_size: 93 | var random_card_in_hand = card_pile_ui.get_card_in_pile_at(CardPileUI.Piles.hand_pile, randi() % hand_pile_size) 94 | card_pile_ui.remove_card_from_game(random_card_in_hand) 95 | -------------------------------------------------------------------------------- /example/example.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=11 format=3 uid="uid://bayw73ve8ui7r"] 2 | 3 | [ext_resource type="Script" path="res://example/example.gd" id="1_0dn0o"] 4 | [ext_resource type="Script" path="res://addons/simple_card_pile_ui/card_pile_ui_debugger.gd" id="2_7gbt2"] 5 | [ext_resource type="Script" path="res://example/example__dropzone__discard.gd" id="3_7f8qk"] 6 | [ext_resource type="Script" path="res://addons/simple_card_pile_ui/card_pile_ui.gd" id="3_axm7s"] 7 | [ext_resource type="Script" path="res://example/example__dropzone__play_by_suit.gd" id="4_cyr6y"] 8 | [ext_resource type="Texture2D" uid="uid://bpjxsk1mxfl77" path="res://assets/1x1_#ffffffff.png" id="4_eyd4o"] 9 | [ext_resource type="PackedScene" uid="uid://bs2vgjwuarxm5" path="res://example/example__card_ui.tscn" id="6_df1s4"] 10 | 11 | [sub_resource type="Theme" id="Theme_oqbkv"] 12 | Button/font_sizes/font_size = 12 13 | RichTextLabel/font_sizes/normal_font_size = 12 14 | 15 | [sub_resource type="Curve" id="Curve_ayyaa"] 16 | min_value = -15.0 17 | max_value = 15.0 18 | _data = [Vector2(0, -15), 0.0, 30.0, 0, 1, Vector2(1, 15), 30.0, 0.0, 1, 0] 19 | point_count = 2 20 | 21 | [sub_resource type="Curve" id="Curve_afhc1"] 22 | max_value = 50.0 23 | _data = [Vector2(0, 0), 0.0, 60.0, 0, 0, Vector2(0.5, 40), 0.0, 0.0, 0, 0, Vector2(1, 0), -60.0, 0.0, 0, 0] 24 | point_count = 3 25 | 26 | [node name="Example" type="Node2D"] 27 | script = ExtResource("1_0dn0o") 28 | 29 | [node name="Buttons" type="Control" parent="."] 30 | layout_mode = 3 31 | anchors_preset = 0 32 | theme = SubResource("Theme_oqbkv") 33 | 34 | [node name="HBoxContainer" type="GridContainer" parent="Buttons"] 35 | layout_mode = 2 36 | offset_left = 8.0 37 | offset_top = 24.0 38 | offset_right = 452.0 39 | offset_bottom = 265.0 40 | columns = 2 41 | metadata/_edit_group_ = true 42 | 43 | [node name="DrawButton" type="Button" parent="Buttons/HBoxContainer"] 44 | layout_mode = 2 45 | text = "Draw" 46 | 47 | [node name="Draw3Button" type="Button" parent="Buttons/HBoxContainer"] 48 | layout_mode = 2 49 | text = "Draw 3" 50 | 51 | [node name="SortButton" type="Button" parent="Buttons/HBoxContainer"] 52 | layout_mode = 2 53 | text = "Sort Hand" 54 | 55 | [node name="DiscardRandomButton" type="Button" parent="Buttons/HBoxContainer"] 56 | layout_mode = 2 57 | text = "Discard Random" 58 | 59 | [node name="DiscardHandButton" type="Button" parent="Buttons/HBoxContainer"] 60 | layout_mode = 2 61 | text = "Discard Hand" 62 | 63 | [node name="AddJokerToHandButton" type="Button" parent="Buttons/HBoxContainer"] 64 | layout_mode = 2 65 | text = "Add Joker To Hand" 66 | 67 | [node name="AddJokerToDiscardButton" type="Button" parent="Buttons/HBoxContainer"] 68 | layout_mode = 2 69 | text = "Add Joker To Discard" 70 | 71 | [node name="RandomDiscardToHandButton" type="Button" parent="Buttons/HBoxContainer"] 72 | layout_mode = 2 73 | text = "Return Random Discard 74 | To Hand" 75 | 76 | [node name="AddJokerToDropzonesButton" type="Button" parent="Buttons/HBoxContainer"] 77 | layout_mode = 2 78 | text = "Add Joker To Dropzones" 79 | 80 | [node name="MoveFromDropzoneToPileButton" type="Button" parent="Buttons/HBoxContainer"] 81 | layout_mode = 2 82 | text = "Discard Top Card 83 | of all Dropzones" 84 | 85 | [node name="MoveClubToDiamonds" type="Button" parent="Buttons/HBoxContainer"] 86 | layout_mode = 2 87 | text = "Move Top Club Dropzone 88 | to Diamonds" 89 | 90 | [node name="RemoveRandCardInHandFromGame" type="Button" parent="Buttons/HBoxContainer"] 91 | layout_mode = 2 92 | text = "Remove Random Card 93 | In Hand From Game" 94 | 95 | [node name="ResetButton" type="Button" parent="Buttons/HBoxContainer"] 96 | layout_mode = 2 97 | text = "Reset" 98 | 99 | [node name="CardPileUIDebugger" type="RichTextLabel" parent="Buttons" node_paths=PackedStringArray("card_pile_ui")] 100 | layout_mode = 2 101 | offset_left = 8.0 102 | offset_top = 296.0 103 | offset_right = 312.0 104 | offset_bottom = 392.0 105 | scroll_following = true 106 | script = ExtResource("2_7gbt2") 107 | card_pile_ui = NodePath("../../CardPileUI") 108 | 109 | [node name="CardDropzone_Discard" type="Control" parent="." node_paths=PackedStringArray("card_pile_ui")] 110 | layout_mode = 3 111 | anchors_preset = 0 112 | offset_left = 1250.0 113 | offset_top = 460.0 114 | offset_right = 1418.0 115 | offset_bottom = 700.0 116 | script = ExtResource("3_7f8qk") 117 | card_pile_ui = NodePath("../CardPileUI") 118 | can_drag_top_card = false 119 | metadata/_edit_group_ = true 120 | 121 | [node name="TextureRect" type="TextureRect" parent="CardDropzone_Discard"] 122 | modulate = Color(0.137255, 0.137255, 0.137255, 1) 123 | layout_mode = 1 124 | anchors_preset = 15 125 | anchor_right = 1.0 126 | anchor_bottom = 1.0 127 | grow_horizontal = 2 128 | grow_vertical = 2 129 | texture = ExtResource("4_eyd4o") 130 | 131 | [node name="DiscardLabel" type="Label" parent="CardDropzone_Discard"] 132 | layout_mode = 0 133 | offset_left = 2.0 134 | offset_top = -81.0 135 | offset_right = 168.0 136 | offset_bottom = -58.0 137 | text = "Discard" 138 | horizontal_alignment = 1 139 | 140 | [node name="CardDropzone_Diamonds" type="Control" parent="." node_paths=PackedStringArray("card_pile_ui")] 141 | layout_mode = 3 142 | anchors_preset = 0 143 | offset_left = 776.0 144 | offset_top = 108.0 145 | offset_right = 944.0 146 | offset_bottom = 348.0 147 | script = ExtResource("4_cyr6y") 148 | accept_suit = "D" 149 | card_pile_ui = NodePath("../CardPileUI") 150 | metadata/_edit_group_ = true 151 | 152 | [node name="TextureRect" type="TextureRect" parent="CardDropzone_Diamonds"] 153 | modulate = Color(0.137255, 0.137255, 0.137255, 1) 154 | layout_mode = 1 155 | anchors_preset = 15 156 | anchor_right = 1.0 157 | anchor_bottom = 1.0 158 | grow_horizontal = 2 159 | grow_vertical = 2 160 | texture = ExtResource("4_eyd4o") 161 | 162 | [node name="DiamondsLabel" type="Label" parent="CardDropzone_Diamonds"] 163 | layout_mode = 0 164 | offset_top = -80.0 165 | offset_right = 166.0 166 | offset_bottom = -57.0 167 | text = "Diamonds Dropzone" 168 | horizontal_alignment = 1 169 | 170 | [node name="CardDropzone_Hearts" type="Control" parent="." node_paths=PackedStringArray("card_pile_ui")] 171 | layout_mode = 3 172 | anchors_preset = 0 173 | offset_left = 992.0 174 | offset_top = 108.0 175 | offset_right = 1160.0 176 | offset_bottom = 348.0 177 | script = ExtResource("4_cyr6y") 178 | accept_suit = "H" 179 | card_pile_ui = NodePath("../CardPileUI") 180 | metadata/_edit_group_ = true 181 | 182 | [node name="TextureRect" type="TextureRect" parent="CardDropzone_Hearts"] 183 | modulate = Color(0.137255, 0.137255, 0.137255, 1) 184 | layout_mode = 1 185 | anchors_preset = 15 186 | anchor_right = 1.0 187 | anchor_bottom = 1.0 188 | grow_horizontal = 2 189 | grow_vertical = 2 190 | texture = ExtResource("4_eyd4o") 191 | 192 | [node name="HeartsLabel" type="Label" parent="CardDropzone_Hearts"] 193 | layout_mode = 0 194 | offset_left = -1.0 195 | offset_top = -80.0 196 | offset_right = 164.0 197 | offset_bottom = -57.0 198 | text = "Hearts Dropzone" 199 | horizontal_alignment = 1 200 | 201 | [node name="CardDropzone_Clubs" type="Control" parent="." node_paths=PackedStringArray("card_pile_ui")] 202 | layout_mode = 3 203 | anchors_preset = 0 204 | offset_left = 560.0 205 | offset_top = 108.0 206 | offset_right = 728.0 207 | offset_bottom = 348.0 208 | script = ExtResource("4_cyr6y") 209 | accept_suit = "C" 210 | card_pile_ui = NodePath("../CardPileUI") 211 | layout = 1 212 | metadata/_edit_group_ = true 213 | 214 | [node name="TextureRect" type="TextureRect" parent="CardDropzone_Clubs"] 215 | modulate = Color(0.137255, 0.137255, 0.137255, 1) 216 | layout_mode = 1 217 | anchors_preset = 15 218 | anchor_right = 1.0 219 | anchor_bottom = 1.0 220 | grow_horizontal = 2 221 | grow_vertical = 2 222 | texture = ExtResource("4_eyd4o") 223 | 224 | [node name="ClubsLabel" type="Label" parent="CardDropzone_Clubs"] 225 | layout_mode = 0 226 | offset_left = -1.0 227 | offset_top = -81.0 228 | offset_right = 167.0 229 | offset_bottom = -58.0 230 | text = "Clubs Dropzone" 231 | horizontal_alignment = 1 232 | 233 | [node name="CardDropzone_Spades" type="Control" parent="." node_paths=PackedStringArray("card_pile_ui")] 234 | layout_mode = 3 235 | anchors_preset = 0 236 | offset_left = 1208.0 237 | offset_top = 104.0 238 | offset_right = 1376.0 239 | offset_bottom = 344.0 240 | script = ExtResource("4_cyr6y") 241 | accept_suit = "S" 242 | card_pile_ui = NodePath("../CardPileUI") 243 | layout = 2 244 | metadata/_edit_group_ = true 245 | 246 | [node name="TextureRect" type="TextureRect" parent="CardDropzone_Spades"] 247 | modulate = Color(0.137255, 0.137255, 0.137255, 1) 248 | layout_mode = 1 249 | anchors_preset = 15 250 | anchor_right = 1.0 251 | anchor_bottom = 1.0 252 | grow_horizontal = 2 253 | grow_vertical = 2 254 | texture = ExtResource("4_eyd4o") 255 | 256 | [node name="SpadesLabel" type="Label" parent="CardDropzone_Spades"] 257 | layout_mode = 0 258 | offset_left = -2.0 259 | offset_top = -80.0 260 | offset_right = 166.0 261 | offset_bottom = -57.0 262 | text = "Spades Dropzone" 263 | horizontal_alignment = 1 264 | 265 | [node name="CardPileUI" type="Control" parent="."] 266 | layout_mode = 3 267 | anchors_preset = 0 268 | script = ExtResource("3_axm7s") 269 | json_card_database_path = "res://example/example__card_database.json" 270 | json_card_collection_path = "res://example/example__card_collection.json" 271 | extended_card_ui = ExtResource("6_df1s4") 272 | draw_pile_layout = 2 273 | max_hand_size = 7 274 | hand_rotation_curve = SubResource("Curve_ayyaa") 275 | hand_vertical_curve = SubResource("Curve_afhc1") 276 | 277 | [connection signal="pressed" from="Buttons/HBoxContainer/DrawButton" to="." method="_on_draw_button_pressed"] 278 | [connection signal="pressed" from="Buttons/HBoxContainer/Draw3Button" to="." method="_on_draw_3_button_pressed"] 279 | [connection signal="pressed" from="Buttons/HBoxContainer/SortButton" to="." method="_on_sort_button_pressed"] 280 | [connection signal="pressed" from="Buttons/HBoxContainer/DiscardRandomButton" to="." method="_on_discard_random_button_pressed"] 281 | [connection signal="pressed" from="Buttons/HBoxContainer/DiscardHandButton" to="." method="_on_discard_hand_button_pressed"] 282 | [connection signal="pressed" from="Buttons/HBoxContainer/AddJokerToHandButton" to="." method="_on_add_joker_to_hand_button_pressed"] 283 | [connection signal="pressed" from="Buttons/HBoxContainer/AddJokerToDiscardButton" to="." method="_on_add_joker_to_discard_button_pressed"] 284 | [connection signal="pressed" from="Buttons/HBoxContainer/RandomDiscardToHandButton" to="." method="_on_random_discard_to_hand_button_pressed"] 285 | [connection signal="pressed" from="Buttons/HBoxContainer/AddJokerToDropzonesButton" to="." method="_on_add_joker_to_dropzones_button_pressed"] 286 | [connection signal="pressed" from="Buttons/HBoxContainer/MoveFromDropzoneToPileButton" to="." method="_on_move_from_dropzone_to_pile_button_pressed"] 287 | [connection signal="pressed" from="Buttons/HBoxContainer/MoveClubToDiamonds" to="." method="_on_move_club_to_diamonds_pressed"] 288 | [connection signal="pressed" from="Buttons/HBoxContainer/RemoveRandCardInHandFromGame" to="." method="_on_remove_rand_card_in_hand_from_game_pressed"] 289 | [connection signal="pressed" from="Buttons/HBoxContainer/ResetButton" to="." method="_on_reset_button_pressed"] 290 | -------------------------------------------------------------------------------- /example/example__card_collection.json: -------------------------------------------------------------------------------- 1 | [ 2 | "2 of Hearts", 3 | "3 of Hearts", 4 | "4 of Hearts", 5 | "5 of Hearts", 6 | "6 of Hearts", 7 | "7 of Hearts", 8 | "8 of Hearts", 9 | "9 of Hearts", 10 | "10 of Hearts", 11 | "Jack of Hearts", 12 | "Queen of Hearts", 13 | "King of Hearts", 14 | "Ace of Hearts", 15 | "2 of Diamonds", 16 | "3 of Diamonds", 17 | "4 of Diamonds", 18 | "5 of Diamonds", 19 | "6 of Diamonds", 20 | "7 of Diamonds", 21 | "8 of Diamonds", 22 | "9 of Diamonds", 23 | "10 of Diamonds", 24 | "Jack of Diamonds", 25 | "Queen of Diamonds", 26 | "King of Diamonds", 27 | "Ace of Diamonds", 28 | "2 of Clubs", 29 | "3 of Clubs", 30 | "4 of Clubs", 31 | "5 of Clubs", 32 | "6 of Clubs", 33 | "7 of Clubs", 34 | "8 of Clubs", 35 | "9 of Clubs", 36 | "10 of Clubs", 37 | "Jack of Clubs", 38 | "Queen of Clubs", 39 | "King of Clubs", 40 | "Ace of Clubs", 41 | "2 of Spades", 42 | "3 of Spades", 43 | "4 of Spades", 44 | "5 of Spades", 45 | "6 of Spades", 46 | "7 of Spades", 47 | "8 of Spades", 48 | "9 of Spades", 49 | "10 of Spades", 50 | "Jack of Spades", 51 | "Queen of Spades", 52 | "King of Spades", 53 | "Ace of Spades", 54 | ] 55 | -------------------------------------------------------------------------------- /example/example__card_data.gd: -------------------------------------------------------------------------------- 1 | extends CardUIData 2 | 3 | @export var suit : String 4 | @export var value : int 5 | -------------------------------------------------------------------------------- /example/example__card_database.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "nice_name": "Black Joker", 4 | "texture_path": "res://assets/card_joker_black.png", 5 | "backface_texture_path": "res://assets/card_back.png", 6 | "resource_script_path": "res://example/example__card_data.gd", 7 | "value": 0, 8 | "suit": "" 9 | }, 10 | { 11 | "nice_name": "Red Joker", 12 | "texture_path": "res://assets/card_joker_red.png", 13 | "backface_texture_path": "res://assets/card_back.png", 14 | "resource_script_path": "res://example/example__card_data.gd", 15 | "value": 0, 16 | "suit": "" 17 | }, 18 | { 19 | "nice_name": "2 of Hearts", 20 | "texture_path": "res://assets/card_hearts_02.png", 21 | "backface_texture_path": "res://assets/card_back.png", 22 | "resource_script_path": "res://example/example__card_data.gd", 23 | "value": 2, 24 | "suit": "H" 25 | }, 26 | { 27 | "nice_name": "3 of Hearts", 28 | "texture_path": "res://assets/card_hearts_03.png", 29 | "backface_texture_path": "res://assets/card_back.png", 30 | "resource_script_path": "res://example/example__card_data.gd", 31 | "value": 3, 32 | "suit": "H" 33 | }, 34 | { 35 | "nice_name": "4 of Hearts", 36 | "texture_path": "res://assets/card_hearts_04.png", 37 | "backface_texture_path": "res://assets/card_back.png", 38 | "resource_script_path": "res://example/example__card_data.gd", 39 | "value": 4, 40 | "suit": "H" 41 | }, 42 | { 43 | "nice_name": "5 of Hearts", 44 | "texture_path": "res://assets/card_hearts_05.png", 45 | "backface_texture_path": "res://assets/card_back.png", 46 | "resource_script_path": "res://example/example__card_data.gd", 47 | "value": 5, 48 | "suit": "H" 49 | }, 50 | { 51 | "nice_name": "6 of Hearts", 52 | "texture_path": "res://assets/card_hearts_06.png", 53 | "backface_texture_path": "res://assets/card_back.png", 54 | "resource_script_path": "res://example/example__card_data.gd", 55 | "value": 6, 56 | "suit": "H" 57 | }, 58 | { 59 | "nice_name": "7 of Hearts", 60 | "texture_path": "res://assets/card_hearts_07.png", 61 | "backface_texture_path": "res://assets/card_back.png", 62 | "resource_script_path": "res://example/example__card_data.gd", 63 | "value": 7, 64 | "suit": "H" 65 | }, 66 | { 67 | "nice_name": "8 of Hearts", 68 | "texture_path": "res://assets/card_hearts_08.png", 69 | "backface_texture_path": "res://assets/card_back.png", 70 | "resource_script_path": "res://example/example__card_data.gd", 71 | "value": 8, 72 | "suit": "H" 73 | }, 74 | { 75 | "nice_name": "9 of Hearts", 76 | "texture_path": "res://assets/card_hearts_09.png", 77 | "backface_texture_path": "res://assets/card_back.png", 78 | "resource_script_path": "res://example/example__card_data.gd", 79 | "value": 9, 80 | "suit": "H" 81 | }, 82 | { 83 | "nice_name": "10 of Hearts", 84 | "texture_path": "res://assets/card_hearts_10.png", 85 | "backface_texture_path": "res://assets/card_back.png", 86 | "resource_script_path": "res://example/example__card_data.gd", 87 | "value": 10, 88 | "suit": "H" 89 | }, 90 | { 91 | "nice_name": "Jack of Hearts", 92 | "texture_path": "res://assets/card_hearts_J.png", 93 | "backface_texture_path": "res://assets/card_back.png", 94 | "resource_script_path": "res://example/example__card_data.gd", 95 | "value": 11, 96 | "suit": "H" 97 | }, 98 | { 99 | "nice_name": "Queen of Hearts", 100 | "texture_path": "res://assets/card_hearts_Q.png", 101 | "backface_texture_path": "res://assets/card_back.png", 102 | "resource_script_path": "res://example/example__card_data.gd", 103 | "value": 12, 104 | "suit": "H" 105 | }, 106 | { 107 | "nice_name": "King of Hearts", 108 | "texture_path": "res://assets/card_hearts_K.png", 109 | "backface_texture_path": "res://assets/card_back.png", 110 | "resource_script_path": "res://example/example__card_data.gd", 111 | "value": 13, 112 | "suit": "H" 113 | }, 114 | { 115 | "nice_name": "Ace of Hearts", 116 | "texture_path": "res://assets/card_hearts_A.png", 117 | "backface_texture_path": "res://assets/card_back.png", 118 | "resource_script_path": "res://example/example__card_data.gd", 119 | "value": 14, 120 | "suit": "H" 121 | }, 122 | { 123 | "nice_name": "2 of Diamonds", 124 | "texture_path": "res://assets/card_diamonds_02.png", 125 | "backface_texture_path": "res://assets/card_back.png", 126 | "resource_script_path": "res://example/example__card_data.gd", 127 | "value": 2, 128 | "suit": "D" 129 | }, 130 | { 131 | "nice_name": "3 of Diamonds", 132 | "texture_path": "res://assets/card_diamonds_03.png", 133 | "backface_texture_path": "res://assets/card_back.png", 134 | "resource_script_path": "res://example/example__card_data.gd", 135 | "value": 3, 136 | "suit": "D" 137 | }, 138 | { 139 | "nice_name": "4 of Diamonds", 140 | "texture_path": "res://assets/card_diamonds_04.png", 141 | "backface_texture_path": "res://assets/card_back.png", 142 | "resource_script_path": "res://example/example__card_data.gd", 143 | "value": 4, 144 | "suit": "D" 145 | }, 146 | { 147 | "nice_name": "5 of Diamonds", 148 | "texture_path": "res://assets/card_diamonds_05.png", 149 | "backface_texture_path": "res://assets/card_back.png", 150 | "resource_script_path": "res://example/example__card_data.gd", 151 | "value": 5, 152 | "suit": "D" 153 | }, 154 | { 155 | "nice_name": "6 of Diamonds", 156 | "texture_path": "res://assets/card_diamonds_06.png", 157 | "backface_texture_path": "res://assets/card_back.png", 158 | "resource_script_path": "res://example/example__card_data.gd", 159 | "value": 6, 160 | "suit": "D" 161 | }, 162 | { 163 | "nice_name": "7 of Diamonds", 164 | "texture_path": "res://assets/card_diamonds_07.png", 165 | "backface_texture_path": "res://assets/card_back.png", 166 | "resource_script_path": "res://example/example__card_data.gd", 167 | "value": 7, 168 | "suit": "D" 169 | }, 170 | { 171 | "nice_name": "8 of Diamonds", 172 | "texture_path": "res://assets/card_diamonds_08.png", 173 | "backface_texture_path": "res://assets/card_back.png", 174 | "resource_script_path": "res://example/example__card_data.gd", 175 | "value": 8, 176 | "suit": "D" 177 | }, 178 | { 179 | "nice_name": "9 of Diamonds", 180 | "texture_path": "res://assets/card_diamonds_09.png", 181 | "backface_texture_path": "res://assets/card_back.png", 182 | "resource_script_path": "res://example/example__card_data.gd", 183 | "value": 9, 184 | "suit": "D" 185 | }, 186 | { 187 | "nice_name": "10 of Diamonds", 188 | "texture_path": "res://assets/card_diamonds_10.png", 189 | "backface_texture_path": "res://assets/card_back.png", 190 | "resource_script_path": "res://example/example__card_data.gd", 191 | "value": 10, 192 | "suit": "D" 193 | }, 194 | { 195 | "nice_name": "Jack of Diamonds", 196 | "texture_path": "res://assets/card_diamonds_J.png", 197 | "backface_texture_path": "res://assets/card_back.png", 198 | "resource_script_path": "res://example/example__card_data.gd", 199 | "value": 11, 200 | "suit": "D" 201 | }, 202 | { 203 | "nice_name": "Queen of Diamonds", 204 | "texture_path": "res://assets/card_diamonds_Q.png", 205 | "backface_texture_path": "res://assets/card_back.png", 206 | "resource_script_path": "res://example/example__card_data.gd", 207 | "value": 12, 208 | "suit": "D" 209 | }, 210 | { 211 | "nice_name": "King of Diamonds", 212 | "texture_path": "res://assets/card_diamonds_K.png", 213 | "backface_texture_path": "res://assets/card_back.png", 214 | "resource_script_path": "res://example/example__card_data.gd", 215 | "value": 13, 216 | "suit": "D" 217 | }, 218 | { 219 | "nice_name": "Ace of Diamonds", 220 | "texture_path": "res://assets/card_diamonds_A.png", 221 | "backface_texture_path": "res://assets/card_back.png", 222 | "resource_script_path": "res://example/example__card_data.gd", 223 | "value": 14, 224 | "suit": "D" 225 | }, 226 | { 227 | "nice_name": "2 of Clubs", 228 | "texture_path": "res://assets/card_clubs_02.png", 229 | "backface_texture_path": "res://assets/card_back.png", 230 | "resource_script_path": "res://example/example__card_data.gd", 231 | "value": 2, 232 | "suit": "C" 233 | }, 234 | { 235 | "nice_name": "3 of Clubs", 236 | "texture_path": "res://assets/card_clubs_03.png", 237 | "backface_texture_path": "res://assets/card_back.png", 238 | "resource_script_path": "res://example/example__card_data.gd", 239 | "value": 3, 240 | "suit": "C" 241 | }, 242 | { 243 | "nice_name": "4 of Clubs", 244 | "texture_path": "res://assets/card_clubs_04.png", 245 | "backface_texture_path": "res://assets/card_back.png", 246 | "resource_script_path": "res://example/example__card_data.gd", 247 | "value": 4, 248 | "suit": "C" 249 | }, 250 | { 251 | "nice_name": "5 of Clubs", 252 | "texture_path": "res://assets/card_clubs_05.png", 253 | "backface_texture_path": "res://assets/card_back.png", 254 | "resource_script_path": "res://example/example__card_data.gd", 255 | "value": 5, 256 | "suit": "C" 257 | }, 258 | { 259 | "nice_name": "6 of Clubs", 260 | "texture_path": "res://assets/card_clubs_06.png", 261 | "backface_texture_path": "res://assets/card_back.png", 262 | "resource_script_path": "res://example/example__card_data.gd", 263 | "value": 6, 264 | "suit": "C" 265 | }, 266 | { 267 | "nice_name": "7 of Clubs", 268 | "texture_path": "res://assets/card_clubs_07.png", 269 | "backface_texture_path": "res://assets/card_back.png", 270 | "resource_script_path": "res://example/example__card_data.gd", 271 | "value": 7, 272 | "suit": "C" 273 | }, 274 | { 275 | "nice_name": "8 of Clubs", 276 | "texture_path": "res://assets/card_clubs_08.png", 277 | "backface_texture_path": "res://assets/card_back.png", 278 | "resource_script_path": "res://example/example__card_data.gd", 279 | "value": 8, 280 | "suit": "C" 281 | }, 282 | { 283 | "nice_name": "9 of Clubs", 284 | "texture_path": "res://assets/card_clubs_09.png", 285 | "backface_texture_path": "res://assets/card_back.png", 286 | "resource_script_path": "res://example/example__card_data.gd", 287 | "value": 9, 288 | "suit": "C" 289 | }, 290 | { 291 | "nice_name": "10 of Clubs", 292 | "texture_path": "res://assets/card_clubs_10.png", 293 | "backface_texture_path": "res://assets/card_back.png", 294 | "resource_script_path": "res://example/example__card_data.gd", 295 | "value": 10, 296 | "suit": "C" 297 | }, 298 | { 299 | "nice_name": "Jack of Clubs", 300 | "texture_path": "res://assets/card_clubs_J.png", 301 | "backface_texture_path": "res://assets/card_back.png", 302 | "resource_script_path": "res://example/example__card_data.gd", 303 | "value": 11, 304 | "suit": "C" 305 | }, 306 | { 307 | "nice_name": "Queen of Clubs", 308 | "texture_path": "res://assets/card_clubs_Q.png", 309 | "backface_texture_path": "res://assets/card_back.png", 310 | "resource_script_path": "res://example/example__card_data.gd", 311 | "value": 12, 312 | "suit": "C" 313 | }, 314 | { 315 | "nice_name": "King of Clubs", 316 | "texture_path": "res://assets/card_clubs_K.png", 317 | "backface_texture_path": "res://assets/card_back.png", 318 | "resource_script_path": "res://example/example__card_data.gd", 319 | "value": 13, 320 | "suit": "C" 321 | }, 322 | { 323 | "nice_name": "Ace of Clubs", 324 | "texture_path": "res://assets/card_clubs_A.png", 325 | "backface_texture_path": "res://assets/card_back.png", 326 | "resource_script_path": "res://example/example__card_data.gd", 327 | "value": 14, 328 | "suit": "C" 329 | }, 330 | { 331 | "nice_name": "2 of Spades", 332 | "texture_path": "res://assets/card_spades_02.png", 333 | "backface_texture_path": "res://assets/card_back.png", 334 | "resource_script_path": "res://example/example__card_data.gd", 335 | "value": 2, 336 | "suit": "S" 337 | }, 338 | { 339 | "nice_name": "3 of Spades", 340 | "texture_path": "res://assets/card_spades_03.png", 341 | "backface_texture_path": "res://assets/card_back.png", 342 | "resource_script_path": "res://example/example__card_data.gd", 343 | "value": 3, 344 | "suit": "S" 345 | }, 346 | { 347 | "nice_name": "4 of Spades", 348 | "texture_path": "res://assets/card_spades_04.png", 349 | "backface_texture_path": "res://assets/card_back.png", 350 | "resource_script_path": "res://example/example__card_data.gd", 351 | "value": 4, 352 | "suit": "S" 353 | }, 354 | { 355 | "nice_name": "5 of Spades", 356 | "texture_path": "res://assets/card_spades_05.png", 357 | "backface_texture_path": "res://assets/card_back.png", 358 | "resource_script_path": "res://example/example__card_data.gd", 359 | "value": 5, 360 | "suit": "S" 361 | }, 362 | { 363 | "nice_name": "6 of Spades", 364 | "texture_path": "res://assets/card_spades_06.png", 365 | "backface_texture_path": "res://assets/card_back.png", 366 | "resource_script_path": "res://example/example__card_data.gd", 367 | "value": 6, 368 | "suit": "S" 369 | }, 370 | { 371 | "nice_name": "7 of Spades", 372 | "texture_path": "res://assets/card_spades_07.png", 373 | "backface_texture_path": "res://assets/card_back.png", 374 | "resource_script_path": "res://example/example__card_data.gd", 375 | "value": 7, 376 | "suit": "S" 377 | }, 378 | { 379 | "nice_name": "8 of Spades", 380 | "texture_path": "res://assets/card_spades_08.png", 381 | "backface_texture_path": "res://assets/card_back.png", 382 | "resource_script_path": "res://example/example__card_data.gd", 383 | "value": 8, 384 | "suit": "S" 385 | }, 386 | { 387 | "nice_name": "9 of Spades", 388 | "texture_path": "res://assets/card_spades_09.png", 389 | "backface_texture_path": "res://assets/card_back.png", 390 | "resource_script_path": "res://example/example__card_data.gd", 391 | "value": 9, 392 | "suit": "S" 393 | }, 394 | { 395 | "nice_name": "10 of Spades", 396 | "texture_path": "res://assets/card_spades_10.png", 397 | "backface_texture_path": "res://assets/card_back.png", 398 | "resource_script_path": "res://example/example__card_data.gd", 399 | "value": 10, 400 | "suit": "S" 401 | }, 402 | { 403 | "nice_name": "Jack of Spades", 404 | "texture_path": "res://assets/card_spades_J.png", 405 | "backface_texture_path": "res://assets/card_back.png", 406 | "resource_script_path": "res://example/example__card_data.gd", 407 | "value": 11, 408 | "suit": "S" 409 | }, 410 | { 411 | "nice_name": "Queen of Spades", 412 | "texture_path": "res://assets/card_spades_Q.png", 413 | "backface_texture_path": "res://assets/card_back.png", 414 | "resource_script_path": "res://example/example__card_data.gd", 415 | "value": 12, 416 | "suit": "S" 417 | }, 418 | { 419 | "nice_name": "King of Spades", 420 | "texture_path": "res://assets/card_spades_K.png", 421 | "backface_texture_path": "res://assets/card_back.png", 422 | "resource_script_path": "res://example/example__card_data.gd", 423 | "value": 13, 424 | "suit": "S" 425 | }, 426 | { 427 | "nice_name": "Ace of Spades", 428 | "texture_path": "res://assets/card_spades_A.png", 429 | "backface_texture_path": "res://assets/card_back.png", 430 | "resource_script_path": "res://example/example__card_data.gd", 431 | "value": 14, 432 | "suit": "S" 433 | } 434 | ] 435 | -------------------------------------------------------------------------------- /example/example__card_ui.gd: -------------------------------------------------------------------------------- 1 | extends CardUI 2 | 3 | 4 | @onready var label := $Frontface/Label 5 | 6 | 7 | func _ready(): 8 | super() 9 | label.text = card_data.nice_name 10 | 11 | -------------------------------------------------------------------------------- /example/example__card_ui.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=3 uid="uid://bs2vgjwuarxm5"] 2 | 3 | [ext_resource type="Script" path="res://example/example__card_ui.gd" id="1_uohi1"] 4 | [ext_resource type="Texture2D" uid="uid://ben7qqx34vpkq" path="res://assets/card_back.png" id="2_4ri8g"] 5 | [ext_resource type="Texture2D" uid="uid://dp7k4aq6freb1" path="res://assets/card_clubs_02.png" id="3_m3t1w"] 6 | 7 | [node name="ExampleCardUI" type="Control"] 8 | layout_mode = 3 9 | anchors_preset = 0 10 | offset_right = 40.0 11 | offset_bottom = 40.0 12 | script = ExtResource("1_uohi1") 13 | 14 | [node name="Backface" type="TextureRect" parent="."] 15 | layout_mode = 0 16 | offset_right = 40.0 17 | offset_bottom = 40.0 18 | texture = ExtResource("2_4ri8g") 19 | 20 | [node name="Label" type="Label" parent="Backface"] 21 | layout_mode = 0 22 | offset_left = 18.0 23 | offset_top = 219.0 24 | offset_right = 214.0 25 | offset_bottom = 268.0 26 | rotation = -1.57058 27 | theme_override_colors/font_color = Color(0, 0, 0, 1) 28 | theme_override_colors/font_outline_color = Color(1, 1, 1, 1) 29 | theme_override_constants/outline_size = 8 30 | text = "S i m p l e C a r d P i l e U I" 31 | horizontal_alignment = 1 32 | 33 | [node name="Frontface" type="TextureRect" parent="."] 34 | layout_mode = 0 35 | offset_right = 40.0 36 | offset_bottom = 40.0 37 | texture = ExtResource("3_m3t1w") 38 | 39 | [node name="Label" type="Label" parent="Frontface"] 40 | layout_mode = 0 41 | offset_left = 16.0 42 | offset_top = 206.0 43 | offset_right = 149.0 44 | offset_bottom = 229.0 45 | theme_override_colors/font_color = Color(0, 0, 0, 1) 46 | theme_override_colors/font_outline_color = Color(1, 1, 1, 1) 47 | theme_override_constants/outline_size = 8 48 | theme_override_font_sizes/font_size = 14 49 | text = "Nice name" 50 | -------------------------------------------------------------------------------- /example/example__dropzone__discard.gd: -------------------------------------------------------------------------------- 1 | extends CardDropzone 2 | 3 | func card_ui_dropped(card_ui): 4 | card_pile_ui.set_card_pile(card_ui, CardPileUI.Piles.discard_pile) 5 | -------------------------------------------------------------------------------- /example/example__dropzone__play_by_suit.gd: -------------------------------------------------------------------------------- 1 | extends CardDropzone 2 | 3 | @export var accept_suit : String 4 | 5 | func can_drop_card(card_ui : CardUI): 6 | return card_ui.card_data.suit == accept_suit 7 | -------------------------------------------------------------------------------- /example_2/example.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | 4 | @onready var mana_label = $ManaLabel 5 | @onready var card_pile_ui = $CardPileUI 6 | @onready var block_card_dropzone = $BlockCardDropzone 7 | @onready var block_label = $BlockLabel 8 | @onready var panel_container = $PanelContainer 9 | @onready var rich_text_label = $PanelContainer/RichTextLabel 10 | @onready var targeting_line_2d = $TargetingLine2D 11 | 12 | 13 | # seems like these 3 properties would make more sense in as a singleton in a real game? 14 | var starting_mana := 4 15 | var current_hovered_card : CardUI 16 | 17 | var block := 0 : 18 | set(val): 19 | block = val 20 | _update_display() 21 | 22 | var mana := 4 : 23 | set(val): 24 | mana = val 25 | _update_display() 26 | 27 | func _ready(): 28 | card_pile_ui.draw(5) 29 | card_pile_ui.connect("card_hovered", func(card_ui): 30 | rich_text_label.text = card_ui.card_data.format_description() 31 | panel_container.visible = true 32 | current_hovered_card = card_ui 33 | ) 34 | card_pile_ui.connect("card_unhovered", func(_card_ui): 35 | panel_container.visible = false 36 | current_hovered_card = null 37 | ) 38 | card_pile_ui.connect("card_clicked", func(card_ui): 39 | targeting_line_2d.set_point_position(0, card_ui.position + card_ui.size * 0.5) 40 | targeting_line_2d.visible = true 41 | ) 42 | card_pile_ui.connect("card_dropped", func(_card_ui): 43 | targeting_line_2d.visible = false 44 | ) 45 | 46 | func _on_end_turn_button_pressed(): 47 | mana = starting_mana 48 | block = 0 49 | for card in card_pile_ui.get_cards_in_pile(CardPileUI.Piles.hand_pile): 50 | card_pile_ui.set_card_pile(card, CardPileUI.Piles.discard_pile) 51 | card_pile_ui.draw(5) 52 | 53 | func _update_display(): 54 | mana_label.text = "%s" % [ mana ] 55 | block_label.text = "%s" % [ block ] 56 | 57 | func _process(_delta): 58 | if current_hovered_card: 59 | var target_pos = current_hovered_card.position 60 | target_pos.y += 80 61 | target_pos.x += 180 62 | panel_container.position = target_pos 63 | targeting_line_2d.set_point_position(1, get_global_mouse_position()) 64 | -------------------------------------------------------------------------------- /example_2/example.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=15 format=3 uid="uid://bt2x5ecxjo2vu"] 2 | 3 | [ext_resource type="Script" path="res://example_2/example.gd" id="1_xx0ud"] 4 | [ext_resource type="Texture2D" uid="uid://bddymiv4rv8kw" path="res://assets/white-circle.png" id="2_7nbk5"] 5 | [ext_resource type="Script" path="res://example_2/example__dropzone__enemy.gd" id="3_xajcs"] 6 | [ext_resource type="Texture2D" uid="uid://b0ymf1fwfgbss" path="res://assets/enemy_crab.png" id="4_61gq4"] 7 | [ext_resource type="Texture2D" uid="uid://3sjbqh1m34dc" path="res://assets/enemy_bee.png" id="5_hv7g6"] 8 | [ext_resource type="Script" path="res://example_2/example__dropzone__upgrade.gd" id="6_lc55u"] 9 | [ext_resource type="Script" path="res://example_2/example__dropzone__non-attack.gd" id="7_tllj1"] 10 | [ext_resource type="Texture2D" uid="uid://bpjxsk1mxfl77" path="res://assets/1x1_#ffffffff.png" id="8_7o08i"] 11 | [ext_resource type="Script" path="res://addons/simple_card_pile_ui/card_pile_ui.gd" id="9_kjsa2"] 12 | [ext_resource type="PackedScene" uid="uid://dn2ej8wtxey2u" path="res://example_2/example__card_ui.tscn" id="10_nkrx5"] 13 | 14 | [sub_resource type="Curve" id="Curve_noha0"] 15 | min_value = -15.0 16 | max_value = 15.0 17 | _data = [Vector2(0, -15), 0.0, 30.0, 0, 1, Vector2(1, 15), 30.0, 0.0, 1, 0] 18 | point_count = 2 19 | 20 | [sub_resource type="Curve" id="Curve_7lcs2"] 21 | max_value = 40.0 22 | _data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.504464, 35.3344), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] 23 | point_count = 3 24 | 25 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ft1ui"] 26 | content_margin_left = 16.0 27 | content_margin_top = 16.0 28 | content_margin_right = 16.0 29 | content_margin_bottom = 16.0 30 | bg_color = Color(0, 0, 0, 1) 31 | 32 | [sub_resource type="Curve" id="Curve_mm80a"] 33 | _data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] 34 | point_count = 2 35 | 36 | [node name="Example" type="Node2D"] 37 | script = ExtResource("1_xx0ud") 38 | 39 | [node name="TextureRect" type="TextureRect" parent="."] 40 | modulate = Color(1, 1, 0.254902, 1) 41 | offset_left = 1304.0 42 | offset_top = 264.0 43 | offset_right = 1376.0 44 | offset_bottom = 336.0 45 | texture = ExtResource("2_7nbk5") 46 | 47 | [node name="ManaLabel" type="Label" parent="."] 48 | offset_left = 1263.0 49 | offset_top = 273.0 50 | offset_right = 1423.0 51 | offset_bottom = 344.0 52 | theme_override_colors/font_color = Color(0, 0, 0, 1) 53 | theme_override_font_sizes/font_size = 36 54 | text = "4" 55 | horizontal_alignment = 1 56 | 57 | [node name="TextureRect2" type="TextureRect" parent="."] 58 | modulate = Color(0, 1, 1, 1) 59 | offset_left = 1304.0 60 | offset_top = 184.0 61 | offset_right = 1376.0 62 | offset_bottom = 256.0 63 | texture = ExtResource("2_7nbk5") 64 | 65 | [node name="BlockLabel" type="Label" parent="."] 66 | offset_left = 1263.0 67 | offset_top = 192.0 68 | offset_right = 1423.0 69 | offset_bottom = 263.0 70 | theme_override_colors/font_color = Color(0, 0, 0, 1) 71 | theme_override_font_sizes/font_size = 36 72 | text = "0 73 | " 74 | horizontal_alignment = 1 75 | 76 | [node name="EndTurnButton" type="Button" parent="."] 77 | offset_left = 1296.0 78 | offset_top = 368.0 79 | offset_right = 1374.0 80 | offset_bottom = 399.0 81 | text = "End Turn" 82 | 83 | [node name="CrabCardDropzone" type="Control" parent="." node_paths=PackedStringArray("card_pile_ui")] 84 | layout_mode = 3 85 | anchors_preset = 0 86 | offset_left = 816.0 87 | offset_top = 40.0 88 | offset_right = 1008.0 89 | offset_bottom = 304.0 90 | script = ExtResource("3_xajcs") 91 | hp = 75 92 | card_pile_ui = NodePath("../CardPileUI") 93 | 94 | [node name="Crab" type="TextureRect" parent="CrabCardDropzone"] 95 | layout_mode = 0 96 | offset_right = 168.0 97 | offset_bottom = 240.0 98 | texture = ExtResource("4_61gq4") 99 | 100 | [node name="Label" type="Label" parent="CrabCardDropzone"] 101 | layout_mode = 0 102 | offset_left = 136.0 103 | offset_top = 168.0 104 | offset_right = 176.0 105 | offset_bottom = 191.0 106 | text = "30" 107 | horizontal_alignment = 1 108 | 109 | [node name="BeeCardDropzone" type="Control" parent="." node_paths=PackedStringArray("card_pile_ui")] 110 | layout_mode = 3 111 | anchors_preset = 0 112 | offset_left = 384.0 113 | offset_top = 64.0 114 | offset_right = 576.0 115 | offset_bottom = 280.0 116 | script = ExtResource("3_xajcs") 117 | card_pile_ui = NodePath("../CardPileUI") 118 | 119 | [node name="Bee" type="TextureRect" parent="BeeCardDropzone"] 120 | layout_mode = 0 121 | offset_right = 168.0 122 | offset_bottom = 240.0 123 | texture = ExtResource("5_hv7g6") 124 | 125 | [node name="Label" type="Label" parent="BeeCardDropzone"] 126 | layout_mode = 0 127 | offset_left = 104.0 128 | offset_top = 152.0 129 | offset_right = 144.0 130 | offset_bottom = 175.0 131 | text = "30" 132 | horizontal_alignment = 1 133 | 134 | [node name="UpgradeCardDropzone" type="Control" parent="." node_paths=PackedStringArray("card_pile_ui")] 135 | layout_mode = 3 136 | anchors_preset = 0 137 | offset_left = 40.0 138 | offset_top = 64.0 139 | offset_right = 216.0 140 | offset_bottom = 255.0 141 | script = ExtResource("6_lc55u") 142 | card_pile_ui = NodePath("../CardPileUI") 143 | metadata/_edit_group_ = true 144 | 145 | [node name="Label" type="Label" parent="UpgradeCardDropzone"] 146 | layout_mode = 0 147 | offset_right = 170.0 148 | offset_bottom = 183.0 149 | text = "Drop Card to Upgrade 150 | Cost: 1 mana" 151 | horizontal_alignment = 1 152 | vertical_alignment = 1 153 | 154 | [node name="BlockCardDropzone" type="Control" parent="." node_paths=PackedStringArray("card_pile_ui")] 155 | layout_mode = 3 156 | anchors_preset = 0 157 | offset_left = 264.0 158 | offset_right = 1120.0 159 | offset_bottom = 344.0 160 | script = ExtResource("7_tllj1") 161 | card_pile_ui = NodePath("../CardPileUI") 162 | 163 | [node name="TextureRect" type="TextureRect" parent="BlockCardDropzone"] 164 | modulate = Color(1, 1, 1, 0.101961) 165 | layout_mode = 1 166 | anchors_preset = 15 167 | anchor_right = 1.0 168 | anchor_bottom = 1.0 169 | grow_horizontal = 2 170 | grow_vertical = 2 171 | texture = ExtResource("8_7o08i") 172 | 173 | [node name="CardPileUI" type="Control" parent="."] 174 | layout_mode = 3 175 | anchors_preset = 0 176 | script = ExtResource("9_kjsa2") 177 | json_card_database_path = "res://example_2/example__card_database.json" 178 | json_card_collection_path = "res://example_2/example__card_collection.json" 179 | extended_card_ui = ExtResource("10_nkrx5") 180 | click_draw_pile_to_draw = false 181 | drag_when_clicked = false 182 | hand_rotation_curve = SubResource("Curve_noha0") 183 | hand_vertical_curve = SubResource("Curve_7lcs2") 184 | 185 | [node name="PanelContainer" type="PanelContainer" parent="."] 186 | visible = false 187 | z_index = 4000 188 | anchors_preset = 4 189 | anchor_top = 0.5 190 | anchor_bottom = 0.5 191 | offset_top = -44.0 192 | offset_right = 240.0 193 | offset_bottom = 44.0 194 | grow_vertical = 2 195 | mouse_filter = 2 196 | theme_override_styles/panel = SubResource("StyleBoxFlat_ft1ui") 197 | 198 | [node name="RichTextLabel" type="RichTextLabel" parent="PanelContainer"] 199 | layout_mode = 2 200 | mouse_filter = 2 201 | bbcode_enabled = true 202 | text = "Card Description here" 203 | 204 | [node name="TargetingLine2D" type="Line2D" parent="."] 205 | visible = false 206 | z_index = 4000 207 | points = PackedVector2Array(0, 0, 100, 0) 208 | width_curve = SubResource("Curve_mm80a") 209 | 210 | [connection signal="pressed" from="EndTurnButton" to="." method="_on_end_turn_button_pressed"] 211 | -------------------------------------------------------------------------------- /example_2/example__card_collection.json: -------------------------------------------------------------------------------- 1 | [ 2 | "Slice", 3 | "Slice", 4 | "Slice", 5 | "Slice", 6 | "Dice", 7 | "Dice", 8 | "Dice", 9 | "Dice", 10 | "Big Axe", 11 | "Big Axe", 12 | "Dodge", 13 | "Dodge", 14 | "Dodge", 15 | "Dodge", 16 | "Dodge", 17 | "Shake", 18 | ] 19 | -------------------------------------------------------------------------------- /example_2/example__card_data.gd: -------------------------------------------------------------------------------- 1 | class_name ExampleCardUIData extends CardUIData 2 | 3 | @export var type : String 4 | @export var cost : int 5 | @export var description : String 6 | 7 | func upgrade(): 8 | pass 9 | 10 | func format_description(): 11 | return description 12 | -------------------------------------------------------------------------------- /example_2/example__card_data__attack.gd: -------------------------------------------------------------------------------- 1 | class_name ExampleCardUIDataAttack extends ExampleCardUIData 2 | 3 | @export var power : int 4 | 5 | func upgrade(): 6 | power += 2 7 | emit_signal("card_data_updated") 8 | 9 | func format_description(): 10 | return description.replace("{value}", "[color=red]%s[/color]" % power) 11 | -------------------------------------------------------------------------------- /example_2/example__card_data__attack__big_axe.gd: -------------------------------------------------------------------------------- 1 | extends ExampleCardUIDataAttack 2 | 3 | func upgrade(): 4 | power += 8 5 | emit_signal("card_data_updated") 6 | -------------------------------------------------------------------------------- /example_2/example__card_data__block.gd: -------------------------------------------------------------------------------- 1 | extends ExampleCardUIData 2 | 3 | @export var block_amount : int 4 | 5 | func upgrade(): 6 | block_amount += 3 7 | emit_signal("card_data_updated") 8 | 9 | func format_description(): 10 | return description.replace("{value}", "[color=aqua]%s[/color]" % block_amount) 11 | -------------------------------------------------------------------------------- /example_2/example__card_data__shake.gd: -------------------------------------------------------------------------------- 1 | extends ExampleCardUIData 2 | 3 | func handle_power_type(card_pile_ui : CardPileUI, _card : CardUI): 4 | card_pile_ui.get_parent().mana += randi_range(5, 10) 5 | -------------------------------------------------------------------------------- /example_2/example__card_database.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "nice_name": "Slice", 4 | "texture_path": "res://assets/card_attack.png", 5 | "backface_texture_path": "res://assets/card_back.png", 6 | "resource_script_path": "res://example_2/example__card_data__attack.gd", 7 | "type": "Attack", 8 | "power": 1, 9 | "cost": 1, 10 | "description": "Deal {value} damage" 11 | }, 12 | { 13 | "nice_name": "Dice", 14 | "texture_path": "res://assets/card_dice.png", 15 | "backface_texture_path": "res://assets/card_back.png", 16 | "resource_script_path": "res://example_2/example__card_data__attack.gd", 17 | "type": "Attack", 18 | "power": 3, 19 | "cost": 2, 20 | "description": "Deal {value} damage" 21 | }, 22 | { 23 | "nice_name": "Big Axe", 24 | "texture_path": "res://assets/card_big_attack.png", 25 | "backface_texture_path": "res://assets/card_back.png", 26 | "resource_script_path": "res://example_2/example__card_data__attack__big_axe.gd", 27 | "type": "Attack", 28 | "power": 8, 29 | "cost": 3, 30 | "description": "Violently deal {value} damage", 31 | }, 32 | { 33 | "nice_name": "Dodge", 34 | "texture_path": "res://assets/card_block.png", 35 | "backface_texture_path": "res://assets/card_back.png", 36 | "resource_script_path": "res://example_2/example__card_data__block.gd", 37 | "type": "Block", 38 | "block_amount": 3, 39 | "cost": 1, 40 | "description": "Gain {value} block" 41 | }, 42 | { 43 | "nice_name": "Shake", 44 | "texture_path": "res://assets/card_shake.png", 45 | "backface_texture_path": "res://assets/card_back.png", 46 | "resource_script_path": "res://example_2/example__card_data__shake.gd", 47 | "type": "Power", 48 | "cost": 0, 49 | "description": "Gain [wave]a ton[/wave] of mana", 50 | } 51 | ] 52 | -------------------------------------------------------------------------------- /example_2/example__card_ui.gd: -------------------------------------------------------------------------------- 1 | class_name Example2CardUI extends CardUI 2 | 3 | 4 | # these are custom variables they will be set with data from *collection.json 5 | @export var value : int 6 | @export var type : String 7 | @export var cost : int 8 | @export var description : String 9 | 10 | 11 | @onready var cost_label = $Frontface/CostLabel 12 | @onready var power_label = $Frontface/PowerLabel 13 | @onready var name_label = $Frontface/NameLabel 14 | @onready var type_label = $Frontface/TypeLabel 15 | @onready var texture_rect_2 = $Frontface/TextureRect2 16 | 17 | 18 | func _ready(): 19 | super() 20 | card_data.connect("card_data_updated", _update_display) 21 | _update_display() 22 | 23 | func upgrade(): 24 | value += 1 25 | _update_display() 26 | 27 | func _update_display(): 28 | cost_label.text = "%s" % card_data.cost 29 | name_label.text = "%s" % card_data.nice_name 30 | type_label.text = "%s" % card_data.type 31 | if card_data.type == "Attack": 32 | power_label.text = "%s" % card_data.power 33 | texture_rect_2.modulate = Color.WHITE 34 | elif card_data.type == "Block": 35 | power_label.text = "%s" % card_data.block_amount 36 | texture_rect_2.modulate = Color.AQUA 37 | else: 38 | power_label.visible = false 39 | -------------------------------------------------------------------------------- /example_2/example__card_ui.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=5 format=3 uid="uid://dn2ej8wtxey2u"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://ben7qqx34vpkq" path="res://assets/card_back.png" id="2_rb3h5"] 4 | [ext_resource type="Texture2D" uid="uid://g3plv60jpgat" path="res://assets/card_attack.png" id="3_cihxm"] 5 | [ext_resource type="Script" path="res://example_2/example__card_ui.gd" id="3_hpl47"] 6 | [ext_resource type="Texture2D" uid="uid://bddymiv4rv8kw" path="res://assets/white-circle.png" id="4_t0rpj"] 7 | 8 | [node name="CardUI" type="Control"] 9 | layout_mode = 3 10 | anchors_preset = 0 11 | offset_right = 40.0 12 | offset_bottom = 40.0 13 | script = ExtResource("3_hpl47") 14 | 15 | [node name="Backface" type="TextureRect" parent="."] 16 | layout_mode = 0 17 | offset_right = 40.0 18 | offset_bottom = 40.0 19 | texture = ExtResource("2_rb3h5") 20 | 21 | [node name="Label" type="Label" parent="Backface"] 22 | layout_mode = 0 23 | offset_left = 18.0 24 | offset_top = 219.0 25 | offset_right = 214.0 26 | offset_bottom = 268.0 27 | rotation = -1.57058 28 | theme_override_colors/font_color = Color(0, 0, 0, 1) 29 | theme_override_colors/font_outline_color = Color(1, 1, 1, 1) 30 | theme_override_constants/outline_size = 8 31 | text = "S i m p l e C a r d P i l e U I" 32 | horizontal_alignment = 1 33 | 34 | [node name="Frontface" type="TextureRect" parent="."] 35 | layout_mode = 0 36 | offset_right = 40.0 37 | offset_bottom = 40.0 38 | texture = ExtResource("3_cihxm") 39 | 40 | [node name="TextureRect" type="TextureRect" parent="Frontface"] 41 | modulate = Color(1, 0.980392, 0.47451, 1) 42 | layout_mode = 0 43 | offset_left = 117.0 44 | offset_top = 12.0 45 | offset_right = 157.0 46 | offset_bottom = 52.0 47 | texture = ExtResource("4_t0rpj") 48 | 49 | [node name="TextureRect2" type="TextureRect" parent="Frontface"] 50 | layout_mode = 0 51 | offset_left = 17.0 52 | offset_top = 12.0 53 | offset_right = 57.0 54 | offset_bottom = 52.0 55 | texture = ExtResource("4_t0rpj") 56 | 57 | [node name="CostLabel" type="Label" parent="Frontface"] 58 | layout_mode = 0 59 | offset_left = 99.0 60 | offset_top = 15.0 61 | offset_right = 177.0 62 | offset_bottom = 49.0 63 | theme_override_colors/font_color = Color(0, 0, 0, 1) 64 | theme_override_colors/font_outline_color = Color(1, 1, 1, 1) 65 | theme_override_constants/outline_size = 8 66 | theme_override_constants/shadow_outline_size = 200 67 | theme_override_font_sizes/font_size = 24 68 | text = "1" 69 | horizontal_alignment = 1 70 | vertical_alignment = 1 71 | 72 | [node name="PowerLabel" type="Label" parent="Frontface"] 73 | layout_mode = 0 74 | offset_left = -2.0 75 | offset_top = 16.0 76 | offset_right = 76.0 77 | offset_bottom = 50.0 78 | theme_override_colors/font_color = Color(0, 0, 0, 1) 79 | theme_override_colors/font_outline_color = Color(1, 1, 1, 1) 80 | theme_override_constants/outline_size = 8 81 | theme_override_constants/shadow_outline_size = 16 82 | theme_override_font_sizes/font_size = 24 83 | text = "1" 84 | horizontal_alignment = 1 85 | vertical_alignment = 1 86 | 87 | [node name="NameLabel" type="Label" parent="Frontface"] 88 | layout_mode = 0 89 | offset_left = 8.0 90 | offset_top = 176.0 91 | offset_right = 164.0 92 | offset_bottom = 210.0 93 | theme_override_colors/font_color = Color(0, 0, 0, 1) 94 | theme_override_colors/font_outline_color = Color(1, 1, 1, 1) 95 | theme_override_constants/outline_size = 8 96 | theme_override_font_sizes/font_size = 24 97 | text = "Nice Name" 98 | horizontal_alignment = 1 99 | vertical_alignment = 1 100 | 101 | [node name="TypeLabel" type="Label" parent="Frontface"] 102 | layout_mode = 0 103 | offset_left = 7.0 104 | offset_top = 206.0 105 | offset_right = 163.0 106 | offset_bottom = 240.0 107 | theme_override_colors/font_color = Color(0, 0, 0, 1) 108 | theme_override_colors/font_outline_color = Color(1, 1, 1, 1) 109 | theme_override_constants/outline_size = 15 110 | theme_override_constants/shadow_outline_size = 16 111 | theme_override_font_sizes/font_size = 12 112 | text = "Type: Attack" 113 | horizontal_alignment = 1 114 | vertical_alignment = 1 115 | -------------------------------------------------------------------------------- /example_2/example__dropzone__enemy.gd: -------------------------------------------------------------------------------- 1 | extends CardDropzone 2 | 3 | @export var hp := 30 4 | 5 | @onready var label = $Label 6 | 7 | func _ready(): 8 | label.text = "%s" % hp 9 | 10 | func card_ui_dropped(card_ui : CardUI): 11 | if card_pile_ui: 12 | get_parent().mana -= card_ui.card_data.cost 13 | hp -= card_ui.card_data.power 14 | label.text = "%s" % hp 15 | card_pile_ui.set_card_pile(card_ui, CardPileUI.Piles.discard_pile) 16 | 17 | func can_drop_card(card_ui : CardUI): 18 | return card_ui.card_data.type == "Attack" and get_parent().mana >= card_ui.card_data.cost 19 | -------------------------------------------------------------------------------- /example_2/example__dropzone__non-attack.gd: -------------------------------------------------------------------------------- 1 | extends CardDropzone 2 | 3 | func card_ui_dropped(card_ui : CardUI): 4 | if card_pile_ui: 5 | get_parent().mana -= card_ui.card_data.cost 6 | if card_ui.card_data.type == "Block": 7 | get_parent().block += card_ui.card_data.block_amount 8 | if card_ui.card_data.type == "Power": 9 | card_ui.card_data.handle_power_type(card_pile_ui, card_ui) 10 | card_pile_ui.set_card_pile(card_ui, CardPileUI.Piles.discard_pile) 11 | 12 | func can_drop_card(card_ui : CardUI): 13 | var type_matches = card_ui.card_data.type == "Block" or card_ui.card_data.type == "Power" 14 | return type_matches and get_parent().mana >= card_ui.card_data.cost 15 | -------------------------------------------------------------------------------- /example_2/example__dropzone__upgrade.gd: -------------------------------------------------------------------------------- 1 | extends CardDropzone 2 | 3 | func card_ui_dropped(card_ui : CardUI): 4 | if card_pile_ui: 5 | get_parent().mana -= 1 6 | card_ui.card_data.upgrade() 7 | card_pile_ui.set_card_pile(card_ui, CardPileUI.Piles.discard_pile) 8 | 9 | func can_drop_card(_card_ui : CardUI): 10 | return get_parent().mana >= 1 11 | -------------------------------------------------------------------------------- /icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /icon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b4drwadobsu5d" 6 | path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icon.svg" 14 | dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=5 10 | 11 | [application] 12 | 13 | config/name="SimpleCards" 14 | run/main_scene="res://example/example.tscn" 15 | config/features=PackedStringArray("4.2", "Mobile") 16 | config/icon="res://icon.svg" 17 | 18 | [display] 19 | 20 | window/size/viewport_width=1440 21 | window/size/viewport_height=720 22 | window/stretch/mode="viewport" 23 | 24 | [editor_plugins] 25 | 26 | enabled=PackedStringArray("res://addons/simple_card_pile_ui/plugin.cfg") 27 | 28 | [rendering] 29 | 30 | textures/canvas_textures/default_texture_filter=0 31 | renderer/rendering_method="mobile" 32 | --------------------------------------------------------------------------------