‫لذلك إذا اقتربت من أبراجنا ، يمكنني أن أرى أنهم يرسمون مجالات تصحيح الأخطاء ، مما يثبت أنهم
‫يستدعيون وظيفة إطلاق النار ويقومون بذلك كل ثانيتين.
‫الآن ، بالإضافة إلى ذلك ، يستدعيون هذه الوظيفة فقط.
‫إذا كنت في نطاق النار ، إذا عدت إلى هنا ، ستلاحظ أنهم لا يرسمون مجالات تصحيح الأخطاء.
‫لذلك هذا يتضمن فحص المسافة أيضًا.
‫وبمجرد أن أكون قريبًا بما فيه الكفاية ، حسنًا ، ها هم يرسمون مجالات التصحيح هذه.
‫أهلا ومرحبا بكم مرة أخرى.
‫لقد أنشأنا بالفعل وظيفة إطلاق نار ونستخدمها في فئة الخزان لأننا ربطناها
‫برسم خرائط إجراء الحرائق.
‫لكننا نرغب أيضًا في إعادة استخدام هذا مع فئة البرج.
‫الآن ، بدلاً من استخدام مدخلات المستخدم لفئة البرج ، سنستخدم أجهزة ضبط الوقت.
‫سنقوم بإنشاء مؤقت لفئة البرج حتى يتمكن المؤقت من استدعاء وظيفة إطلاق النار.
‫بين الحين والآخر سنقوم بتعيين عدد محدد من الثواني بين المكالمات إلى وظيفة إطلاق النار.
‫لذلك بما أننا نرغب في استدعاء وظيفة إطلاق النار في كثير من الأحيان في فئة البرج ، فنحن بحاجة إلى التحدث عن أجهزة
‫ضبط الوقت الآن.
‫Unreal Engine لديه القدرة على ضبط المؤقتات باستخدام فئة تسمى F Timer Manager.
‫يوجد مدير مؤقت عالمي يدير أجهزة ضبط الوقت في العالم.
‫الآن لدى مدير المؤقت العالمي هذا وظيفة تسمى Set Timer ويأخذ المؤقت المضبوط عددًا من المدخلات
‫مثل مقبض المؤقت.
‫هذا مؤشر لمؤقت محدد يديره مدير المؤقت.
‫يسمح هذا للمدير بالحصول على عدة مؤقتات ويمكننا الوصول إلى معلومات المؤقت لكل واحد باستخدام
‫مقبض المؤقت كنوع من الاسم أو المعرف لهذا المؤقت.
‫هذا كائن من نوع مقبض المؤقت F.
‫لذلك قمنا بإنشاء مقبض مؤقت وقمنا بتمريره إلى وظيفة المؤقت المحدد.
‫يتطلب تعيين المؤقت الآن أيضًا مدخلات أخرى مثل المعدل أو مقدار الوقت الذي يجب أن ننتظره
‫قبل القيام بشيء ما بالفعل.
‫الآن هذا شيء سيكون في وظيفة رد الاتصال الخاصة بنا.
‫نقوم بإنشاء وظيفة ونربط هذه الوظيفة بالمؤقت بحيث يمكن استدعاء وظيفة رد الاتصال
‫بمجرد انقضاء الوقت الكافي ، وتحديدًا معدل المؤقت.
‫لذلك رأينا أننا بحاجة إلى بعض الأشياء لمؤقتنا وسنضع هذه الأشياء في فئة البرج.
‫لذلك دعنا ننتقل إلى Tower H وهنا في ملف Tower H سنضيف بعض المتغيرات الخاصة.
‫لذلك تحت نطاق النار ، سنحتاج إلى مقبض المؤقت الخاص بنا.
‫إذن هذا مقبض مؤقت F ويمكننا ببساطة استدعاء مقبض مؤقت معدل إطلاق النار.
‫ونحتاج أيضًا إلى معدل إطلاق نار يكون عائمًا.
‫سنطلق على معدل إطلاق النار هذا ويمكننا تهيئة هذا إلى نقطتين F.
‫وبهذه الطريقة سيكون لدينا انتظار لمدة ثانيتين قبل أن يتم استدعاء وظيفة رد الاتصال بالفعل.
‫وبالحديث عن وظائف رد الاتصال ، فنحن في الواقع بحاجة إلى واحدة.
‫لذلك سنقوم بعمل وظيفة باطلة ويمكننا أن نطلق عليها فحص حالة الحريق.
‫لذلك لدينا مقبض مؤقت وبمجرد أن نضبط المؤقت ويبدأ في العمل ، لدينا ثانيتان
‫للانتظار قبل أن ينتج عن المؤقت استدعاء وظيفتنا.
‫وأنا أسمي هذا شرط التحقق من الحريق لأنه يمكننا التحقق لمعرفة ما إذا كان يجب أن يكون برجنا قادرًا على استدعاء
‫وظيفة الحريق حتى نتمكن من وضع بعض الشروط التي يمكننا التحقق منها للتأكد من أنه يجب استدعاء الحريق.
‫الآن لدينا وظيفة حالة الحريق المعلنة.
‫نحتاج إلى تعريفه حتى نتمكن من الدخول إلى برج CPP وتحديد الوظيفة هنا.
‫سأضعه تحت بدء التشغيل ، لذا سأعطيه جسمًا وظيفيًا واسم فئة البرج قبل اسم الوظيفة
‫مباشرة.
‫إذن لدينا الآن وظيفة ، لكننا نحتاج بالفعل إلى ضبط المؤقت بحيث يبدأ ذلك الوقت في العمل وسيتم
‫استدعاء الوظيفة في نهاية ذلك الوقت.
‫ويمكننا ضبط المؤقت هنا والبدء باللعب حتى يبدأ تشغيله من بداية اللعبة.
‫لذلك ذكرنا مدير الموقت العالمي ويمكننا الوصول إليه من خلال وظيفة تسمى Get World Timer
‫Manager.
‫احصل الآن على World Timer Manager ، ويعيد كائن F timer manager.
‫ونظرًا لأننا نستخدم هذا النوع ، فسنحتاج إلى تضمين ملف الرأس لـ F timer manager.
‫إذن هنا هو التضمين ، إنه ببساطة مدير جهاز ضبط الوقت h.
‫ويمكننا أيضًا أن نرى بعض الوظائف التي تنتمي إلى هذه الفئة.
‫لذا قم بالتمرير خلال هذه إذا كنت مهتمًا بجميع الوظائف المختلفة التي تنتمي إلى مدير
‫المؤقت F.
‫لذا يمكننا تضمين ملف الرأس هذا هنا في أعلى البرج ، أسفل الآخر مباشرة.
‫والآن بعد أن تم تضمين ملف الرأس هذا ، أصبح بإمكاننا الآن الوصول إلى مدير المؤقت العالمي
‫والوظيفة التي نهتم بها تسمى تعيين المؤقت.
‫احصل الآن على مدير مؤقت عالمي يقوم ببساطة بإرجاع مدير مؤقت F ولا يقوم بإرجاع مؤشر.
‫لذلك سنستخدم النقطة بدلاً من.
‫Arrow ونحن ذاهبون لاستدعاء ضبط الوقت.
‫الآن تعيين عداد الوقت لديه العديد من الإصدارات أو وظيفة الزائد.
‫يوجد الآن مقابل الكود هذا المنبثق الذي يتيح لنا استعراض كل حمل زائد ورؤية الإصدارات المختلفة من
‫هذه الوظيفة.
‫والإصدار الذي أهتم به يأخذ أولاً مقبض مؤقت F وسنستخدم مقبض مؤقت معدل
‫إطلاق النار ، والذي أعلناه في برج H.
‫الآن ستكون المعلمة التالية للحمل الزائد لوظيفتنا الخاصة هي فئة المستخدم ، تمامًا كما هو الحال
‫في محور الربط وعمل الربط.
‫هذا هو الفصل الذي نعمل فيه حيث نربط الدالة ليكون هذا.
‫الآن ستكون وظيفة رد الاتصال التي ستكون لدينا برج فحص حالة الحريق ، تلك الوظيفة
‫التي أنشأناها للتو.
‫الآن نحن بحاجة إلى عنوان المشغل لأن المؤقت المحدد يأخذ عنوان الوظيفة.
‫الآن المعامل التالي هو تعويم للسعر سيكون مقدار الوقت الذي يجب أن يمر قبل استدعاء رد
‫الاتصال الخاص بنا.
‫سيكون هذا هو معدل إطلاق النار لدينا.
‫والمعلمة النهائية هي قيمة منطقية تحدد ما إذا كان يجب تكرار هذا الموقت أم لا.
‫الآن أود استدعاء وظيفة رد الاتصال الخاصة بنا كل ثانيتين ، لذلك أريد أن يعمل هذا المؤقت.
‫لذلك سأقول الحقيقة.
‫إذا مررنا بشكل خاطئ ، فسوف تمر ثانيتان.
‫سيتم استدعاء وظيفتنا وسيكون هذا هو.
‫ولكن نظرًا لأننا قمنا بتعيينها على حلقة ، فسيتم استدعاء وظيفتنا بعد ثانيتين ، وبعد ذلك سيعاد
‫تشغيل المؤقت ، ثم بعد ثانيتين أخريين ، سيتم استدعاء الوظيفة مرة أخرى وستستمر في التكرار
‫حتى تنتهي اللعبة.
‫إذن لدينا الآن وظيفة مرتبطة بالمؤقت الخاص بنا ويتم تعيينها على أن يتم استدعاؤها كل ثانيتين.
‫لذلك قمنا بربط وظيفة بالمؤقت الخاص بنا وسيتم استدعائها كل ثانيتين.
‫لكننا نرغب في نوع من الإثبات أو التأكيد على استدعاء هذه الوظيفة بالفعل.
‫لذا ، بالنسبة للتحدي الذي تواجهه في فئة البرج ، انتقل إلى وظيفة رد الاتصال الجديدة ، وتحقق من حالة الحريق.
‫تأكد من أن الخزان في نطاق النار.
‫ستقوم بفحص المسافة من البرج إلى الخزان.
‫ونعرف كيفية القيام بذلك لأننا نقوم بذلك بالفعل في دالة التجزئة.
‫لذلك قد تحتاج إلى النظر في وظيفة التجزئة ومعرفة كيفية القيام بذلك لتذكير نفسك ، تحقق الآن
‫من تلك المسافة ، وتأكد من أننا في نطاق إطلاق النار ، ثم إذا كنا كذلك ، فاتصل بوظيفة إطلاق النار ، وأوقف
‫الفيديو مؤقتًا ونفذها هذا الآن.
‫تمام.
‫لذا عدت إلى Tower CP وسأقوم بالتمرير لأعلى إلى وظيفة التجزئة لتذكير نفسي كيف حصلت على هذه المسافة
‫وفحصتها لمعرفة ما إذا كانت في نطاق النار.
‫الآن يمكننا ببساطة إعادة استخدام هذا الرمز هنا والتحقق من حالة الحريق.
‫الآن إعادة استخدام الكود ليست فعالة للغاية ، لذلك قد نفكر في إعادة بناء هذا ، ولكن أولاً دعنا نتأكد من أننا
‫نجحنا في العمل حتى نتمكن أولاً من التحقق من مؤشر الخزان الخاص بنا للتأكد من أنه صالح.
‫لذلك سأفعل ذلك هنا وأتحقق من حالة الحريق.
‫سأقول إذا كان الخزان وما إذا كان الخزان صالحًا ، فإن الشيء التالي الذي يمكننا فعله هو الحصول
‫على تلك المسافة ، وهي هذه القيمة المحسوبة هنا باستخدام دالة توزيع المتجهات f.
‫لذلك سوف آخذ ذلك وأضعه هنا في حالة حريق.
‫الآن الشيء التالي الذي نقوم به هو التحقق لمعرفة ما إذا كانت المسافة أقل من أو تساوي نطاق إطلاق النار.
‫هذا ما سنفعله هنا بالأسفل.
‫سنقول ما إذا كانت المسافة أقل من أو تساوي نطاق إطلاق النار ، وإذا كان الأمر كذلك ، فيمكننا ببساطة استدعاء
‫وظيفة إطلاق النار.
‫لذلك سنطلق النار ، وهي بهذه البساطة.
‫لذلك دعونا نمضي قدمًا ونجمع هذا وسنعود إلى المحرر وسأبدأ اللعب وأدخل مجال إطلاق
‫النار.
‫ويمكنني أن أرى أن أبراجنا ترسم مجالات تصحيح الأخطاء عند طرف البرميل حتى نتمكن من رؤية
‫أن وظيفة إطلاق النار هذه يتم استدعاؤها وهي تعمل بنفس الطريقة بالنسبة للبرج كما تفعل مع الخزان.
‫لذلك هذا شيء عظيم.
‫هذا يثبت لنا أن المؤقت الخاص بنا يعمل ويتم استدعاء وظيفة رد الاتصال كل ثانيتين.
‫حسنًا ، لدينا وظيفة إطلاق النار هذه تسمى كل ثانيتين الآن تحت الفحص ، حالة حريق.
‫لدينا هذه الوظيفة حيث نرى ما إذا كنا في النطاق ونقوم بنفس الشيء هنا في
‫دالة التجزئة.
‫لذا فهذه فرصة مثالية لإعادة البناء.
‫يمكننا إنشاء نوع من الوظائف التي ستعيد لنا قيمة منطقية إذا كنا في النطاق مع الخزان.
‫فلماذا لا نمضي قدمًا ونعيد بناء هذا بسرعة في وظيفة إرجاع الثور؟
‫لذلك هنا في البرج H ، لنقم بإنشاء دالة خاصة.
‫سيعود منطقيًا وسنقوله في نطاق النار.
‫الآن هذه لعبة بسيطة وسيكون برجنا في نطاق الدبابة فقط.
‫لذلك هذا ليس غامضًا لأنه لا يوجد شيء آخر يرغب البرج في التحقق منه لمعرفة ما إذا كان
‫في نطاق الآن ، إذا كانت هذه لعبة أكثر تعقيدًا مع أشياء أخرى يرغب البرج في التحقق من المسافة
‫لها ، فربما قم بتسمية هذا بشكل مختلف قليلاً ، ولكن يمكننا ببساطة تسمية هذا
‫في نطاق النار.
‫وما سأفعله هو تنفيذ هذا هنا في البرج.
‫لذلك دعونا نمضي قدمًا وننشئ الجسم الوظيفي.
‫سنحتاج إلى أن برجًا يثبت مسبقًا اسم الوظيفة.
‫وما سنفعله هنا هو نفس التحقق من المسافة.
‫لذلك سنقوم أولاً بالتحقق للتأكد من أن الخزان صالح مع فحص إذا.
‫الآن إذا كان الأمر كذلك ، فيمكننا الحصول على هذه المسافة حتى نتمكن من نسخ هذا الخط وإنشاء عوامة المسافة المحلية الخاصة
‫بنا هنا والتحقق ببساطة من تلك المسافة مقابل نطاق النار حتى نتمكن من تحديد ما إذا كانت المسافة أقل من أو
‫تساوي نطاق النار ، وإذا كان الأمر كذلك ، فيمكننا ببساطة العودة إلى الحقيقة.
‫يمكن لهذه الوظيفة إرجاع القيمة الحقيقية.
‫والآن لدينا دالة يمكننا تسميتها وتعود صوابًا إذا كنا في النطاق.
‫الآن ، بمجرد أن نصل إلى هذا السطر return true هنا في تعليمة if ، ستعود الدالة.
‫سنقفز من الوظيفة.
‫لذلك أي شيء آخر بعد هذا البيان إذا لن يعمل.
‫إذن ما يمكننا فعله هو في نهاية وظيفة نطاق النار ، يمكننا إرجاع خطأ لأننا إذا وصلنا إلى
‫حقيقة العودة ، فلن نصل أبدًا إلى خط الإرجاع الخاطئ بالأسفل هنا.
‫سنخرج ببساطة من الوظيفة مبكرًا.
‫ولكن إذا لم نكن في النطاق ، وإذا فشل فحص المسافة هنا ، فلن نصل أبدًا إلى الإرجاع الصحيح.
‫وسنصل إلى نهاية الدالة ونعيد القيمة false.
‫لذا ستُرجع هذه الدالة صوابًا أو خطأً بناءً على ما إذا كنا في النطاق أم لا ، ويمكننا استخدام هذا
‫بدلاً من استخدام الكود المكرر في الوظيفتين.
‫لذلك هنا في الأعلى ، على سبيل المثال ، نحتاج فقط إلى فحص واحد لمعرفة ما إذا كنا في النطاق قبل أن ندير
‫البرج.
‫لذا ما يمكننا فعله هو أننا نستطيع أن نقول ما إذا كان في نطاق إطلاق النار وإذا عاد هذا صحيحًا ، فنحن في نطاق إطلاق نار حتى نتمكن من استدعاء
‫البرج الدوار.
‫لذلك سنضع ذلك في بيان if.
‫والآن أصبح كل هذا الرمز غير ضروري ، لذا يمكننا ببساطة حذفه.
‫والآن يبدو هذا أنظف كثيرًا مما كان لدينا من قبل.
‫وبعد ذلك يمكننا أن نأتي إلى هنا ونتحقق من حالة الحريق ونفعل الشيء نفسه.
‫بدلاً من كل هذا ، يمكننا ببساطة التحقق مما إذا كان في نطاق إطلاق النار.
‫وإذا كنا كذلك ، فيمكننا ببساطة استدعاء النار.
‫لذا فقد نجحنا الآن في إعادة تشكيل كل هذا الكود في عملية فحص تم إجراؤها في وظيفة نطاق إطلاق
‫النار.
‫لذلك دعونا نمضي قدمًا ونجمع هذا مرة أخرى ونلعب اختباره بسرعة حقيقية فقط للتأكد من أن كل شيء
‫يعمل كما هو متوقع.
‫لذلك سنمضي قدمًا ونضرب اللعب وندخل في نطاق النار.
‫وبالطبع نحن في مرمى النيران وهي تعمل بشكل صحيح.
‫باختصار ، أنشأنا مؤقتًا وكل ثانيتين نسمي وظيفة إطلاق النار في فئة البرج.
‫نحن الآن نتحقق أيضًا لمعرفة ما إذا كان Tank في النطاق.
‫لذلك نحن نستدعي وظيفة إطلاق النار كل ثانيتين فقط إذا كان الخزان في نطاق مسافة إطلاق النار.
‫ورأينا أيضًا أننا كنا نستخدم فحص المسافة في وظيفتين مختلفتين.
‫لذلك قمنا بإعادة تشكيلها في وظيفتها الخاصة ونسميها ببساطة للتحقق مما إذا كنا في النطاق.
‫إذن لدينا الآن وظيفة إطلاق نار تسمى فئة البرج.
‫الشيء التالي الذي يجب فعله هو البدء فعليًا في إنتاج المقذوفات باستخدام وظيفة إطلاق النار لدينا.
‫لذلك سنتحدث عن ذلك في الفيديو التالي.
‫سأراك قريبا.