मैंने हाल ही में गहरी श्रेणी पदानुक्रमों से छुटकारा पाने और उन्हें विन्यास योग्य घटकों के साथ बदलने के लिए अपने गेम आर्किटेक्चर को फिर से बनाने का फैसला किया है। मैं जो पहली पदानुक्रम की जगह ले रहा हूं वह आइटम पदानुक्रम है और मैं यह जानना चाहूंगा कि क्या मैं सही रास्ते पर हूं।
पहले, मेरे पास एक पदानुक्रम था जो कुछ इस तरह से था:
Item -> Equipment -> Weapon
-> Armor
-> Accessory
-> SyntehsisItem
-> BattleUseItem -> HealingItem
-> ThrowingItem -> ThrowsAsAttackItem
यह कहने की आवश्यकता नहीं है कि यह गड़बड़ होने लगा था और ये उन वस्तुओं के लिए कोई आसान समाधान नहीं था जिनके लिए कई प्रकारों की आवश्यकता होती है (यानी कुछ उपकरण आइटम संश्लेषण में उपयोग किए जाते हैं, कुछ उपकरण फेंकने योग्य होते हैं, आदि)
मैंने फिर बेस आइटम वर्ग में कार्यक्षमता को रिफ्लेक्टर और जगह देने का प्रयास किया। लेकिन तब मैं यह ध्यान नहीं दे रहा था कि आइटम में अप्रयुक्त / शानदार डेटा था। अब मैं आर्किटेक्चर जैसा एक घटक करने की कोशिश कर रहा हूं, कम से कम मेरी वस्तुओं के लिए मेरे अन्य खेल वर्गों के लिए ऐसा करने का प्रयास करने से पहले।
यहाँ मैं घटक सेटअप के लिए वर्तमान में क्या सोच रहा हूँ:
मेरे पास एक बेस आइटम वर्ग है जिसमें विभिन्न घटकों (यानी एक उपकरण घटक स्लॉट, एक चिकित्सा घटक स्लॉट, आदि) और साथ ही मनमाने ढंग से घटकों के लिए एक नक्शा) के लिए स्लॉट हैं, इसलिए ऐसा कुछ है:
class Item
{
//Basic item properties (name, ID, etc.) excluded
EquipmentComponent* equipmentComponent;
HealingComponent* healingComponent;
SynthesisComponent* synthesisComponent;
ThrowComponent* throwComponent;
boost::unordered_map<std::string, std::pair<bool, ItemComponent*> > AdditionalComponents;
}
सभी आइटम घटक एक बेस ItemComponent वर्ग से वारिस होंगे, और प्रत्येक घटक प्रकार इंजन को यह बताने के लिए जिम्मेदार है कि उस कार्यक्षमता को कैसे लागू किया जाए। यानी हीलिंगकम्पोनेंट युद्ध यांत्रिकी को आइटम को हीलिंग आइटम के रूप में उपभोग करने का तरीका बताता है, जबकि थ्रोकोम्पोनेंट लड़ाई इंजन को बताता है कि आइटम को एक फेंकने योग्य आइटम के रूप में कैसे व्यवहार किया जाए।
मानचित्र का उपयोग उन मनमाने घटकों को संग्रहीत करने के लिए किया जाता है जो कोर आइटम घटक नहीं हैं। मैं यह इंगित करने के लिए एक बूल के साथ जोड़ रहा हूं कि क्या आइटम कंटेनर को ItemComponent का प्रबंधन करना चाहिए या यदि यह किसी बाहरी स्रोत द्वारा प्रबंधित किया जा रहा है।
यहां मेरा विचार यह था कि मैं अपने गेम इंजन द्वारा उपयोग किए जाने वाले मुख्य घटकों को सामने से परिभाषित करता हूं, और मेरा आइटम कारखाना उन घटकों को असाइन करेगा जो आइटम वास्तव में हैं, अन्यथा वे अशक्त हैं। मानचित्र में मनमाने ढंग से घटक होंगे जो आम तौर पर स्क्रिप्टिंग फ़ाइलों द्वारा जोड़े / खपत किए जाएंगे।
मेरा सवाल यह है कि क्या यह एक अच्छा डिज़ाइन है? यदि नहीं, तो इसमें सुधार कैसे किया जा सकता है? मैंने सभी घटकों को मानचित्र में समूहीकृत करने पर विचार किया, लेकिन मुख्य आइटम घटकों के लिए स्ट्रिंग अनुक्रमण का उपयोग करना आवश्यक नहीं था