63 lines
2.5 KiB
GDScript
63 lines
2.5 KiB
GDScript
@tool
|
|
## Abstract base class for card creation factories using the Factory design pattern.
|
|
##
|
|
## CardFactory defines the interface for creating cards in the card framework.
|
|
## Concrete implementations like JsonCardFactory provide specific card creation
|
|
## logic while maintaining consistent behavior across different card types and
|
|
## data sources.
|
|
##
|
|
## Design Pattern: Factory Method
|
|
## This abstract factory allows the card framework to create cards without
|
|
## knowing the specific implementation details. Different factory types can
|
|
## support various data sources (JSON files, databases, hardcoded data, etc.).
|
|
##
|
|
## Key Responsibilities:
|
|
## - Define card creation interface for consistent behavior
|
|
## - Manage card data caching for performance optimization
|
|
## - Provide card size configuration for uniform scaling
|
|
## - Support preloading mechanisms for reduced runtime I/O
|
|
##
|
|
## Subclass Implementation Requirements:
|
|
## - Override create_card() to implement specific card creation logic
|
|
## - Override preload_card_data() to implement data initialization
|
|
## - Use preloaded_cards dictionary for caching when appropriate
|
|
##
|
|
## Usage:
|
|
## [codeblock]
|
|
## class_name MyCardFactory
|
|
## extends CardFactory
|
|
##
|
|
## func create_card(card_name: String, target: CardContainer) -> Card:
|
|
## # Implementation-specific card creation
|
|
## return my_card_instance
|
|
## [/codeblock]
|
|
class_name CardFactory
|
|
extends Node
|
|
|
|
# Core factory data and configuration
|
|
## Dictionary cache for storing preloaded card data to improve performance
|
|
## Key: card identifier (String), Value: card data (typically Dictionary)
|
|
var preloaded_cards = {}
|
|
|
|
## Default size for cards created by this factory
|
|
## Applied to all created cards unless overridden
|
|
var card_size: Vector2
|
|
|
|
|
|
## Virtual method for creating a card instance and adding it to a container.
|
|
## Must be implemented by concrete factory subclasses to provide specific
|
|
## card creation logic based on the factory's data source and requirements.
|
|
## @param card_name: Identifier for the card to create
|
|
## @param target: CardContainer where the created card will be added
|
|
## @returns: Created Card instance or null if creation failed
|
|
func create_card(card_name: String, target: CardContainer) -> Card:
|
|
return null
|
|
|
|
|
|
## Virtual method for preloading card data into the factory's cache.
|
|
## Concrete implementations should override this to load card definitions
|
|
## from their respective data sources (files, databases, etc.) into the
|
|
## preloaded_cards dictionary for faster card creation during gameplay.
|
|
func preload_card_data() -> void:
|
|
pass
|