|
30 | 30 | #include "house.h" |
31 | 31 | #include "techno.h" |
32 | 32 | #include "technotype.h" |
| 33 | +#include "tibsun_globals.h" |
33 | 34 | #include "vinifera_defines.h" |
| 35 | +#include "scenario.h" |
34 | 36 | #include "wwcrc.h" |
35 | 37 | #include "asserthandler.h" |
36 | 38 | #include "debughandler.h" |
@@ -207,6 +209,12 @@ const char *TEventClassExtension::Event_Name(int action) |
207 | 209 | return "Destroyed, Infantry, All..."; |
208 | 210 | case TEVENT_CONSTRUCTION_YARD: |
209 | 211 | return "Construction yard exists"; |
| 212 | + case TEVENT_MISSION_TIMER_LESS_THAN: |
| 213 | + return "Mission Timer Less Than"; |
| 214 | + case TEVENT_MISSION_TIMER_GREATER_THAN: |
| 215 | + return "Mission Timer Greater Than"; |
| 216 | + case TEVENT_MISSION_TIMER_EQUALS: |
| 217 | + return "Mission Timer Equals"; |
210 | 218 | default: |
211 | 219 | return "<invalid>"; |
212 | 220 | } |
@@ -253,6 +261,12 @@ const char *TEventClassExtension::Event_Description(int action) |
253 | 261 | return "Triggers when all infantry of the specified side have been destroyed. Typically used for end of game conditions."; |
254 | 262 | case TEVENT_CONSTRUCTION_YARD: |
255 | 263 | return "Triggers if the specified house has one or more construction yards."; |
| 264 | + case TEVENT_MISSION_TIMER_LESS_THAN: |
| 265 | + return "Triggers when the mission timer drops below the time value specified."; |
| 266 | + case TEVENT_MISSION_TIMER_GREATER_THAN: |
| 267 | + return "Triggers when the mission timer is above the time value specified."; |
| 268 | + case TEVENT_MISSION_TIMER_EQUALS: |
| 269 | + return "Triggers when the mission timer equals time value specified."; |
256 | 270 | default: |
257 | 271 | return "<invalid>"; |
258 | 272 | } |
@@ -331,6 +345,15 @@ bool TEventClassExtension::Satisfied(TEventClass *this_ptr, TEventType event, Ho |
331 | 345 | case TEVENT_INFANTRY_DESTROYED: |
332 | 346 | success = Infantry_Destroyed(this_ptr, event, house, object, td, tripped, source); |
333 | 347 | break; |
| 348 | + case TEVENT_MISSION_TIMER_LESS_THAN: |
| 349 | + success = Mission_Timer_Less_Than(this_ptr, event, house, object, td, tripped, source); |
| 350 | + break; |
| 351 | + case TEVENT_MISSION_TIMER_GREATER_THAN: |
| 352 | + success = Mission_Timer_Greater_Than(this_ptr, event, house, object, td, tripped, source); |
| 353 | + break; |
| 354 | + case TEVENT_MISSION_TIMER_EQUALS: |
| 355 | + success = Mission_Timer_Equal_To(this_ptr, event, house, object, td, tripped, source); |
| 356 | + break; |
334 | 357 |
|
335 | 358 | /** |
336 | 359 | * Unexpected TEventType. |
@@ -682,3 +705,48 @@ bool TEventClassExtension::House_Has_Construction_Yard(TEventClass *this_ptr, TE |
682 | 705 |
|
683 | 706 | return false; |
684 | 707 | } |
| 708 | + |
| 709 | + |
| 710 | +/** |
| 711 | + * Evaluation function for "TEVENT_MISSION_TIMER_LESS_THAN". |
| 712 | + * |
| 713 | + * @author: CCHyper |
| 714 | + */ |
| 715 | +bool TEventClassExtension::Mission_Timer_Less_Than(TEventClass *this_ptr, TEventType event, HouseClass *house, const ObjectClass *object, TDEventClass &td, bool &tripped, TechnoClass *source) |
| 716 | +{ |
| 717 | + if (Scen->MissionTimer.Is_Active() && Scen->MissionTimer <= this_ptr->Data.Value) { |
| 718 | + return true; |
| 719 | + } |
| 720 | + |
| 721 | + return false; |
| 722 | +} |
| 723 | + |
| 724 | + |
| 725 | +/** |
| 726 | + * Evaluation function for "TEVENT_MISSION_TIMER_GREATER_THAN". |
| 727 | + * |
| 728 | + * @author: CCHyper |
| 729 | + */ |
| 730 | +bool TEventClassExtension::Mission_Timer_Greater_Than(TEventClass *this_ptr, TEventType event, HouseClass *house, const ObjectClass *object, TDEventClass &td, bool &tripped, TechnoClass *source) |
| 731 | +{ |
| 732 | + if (Scen->MissionTimer.Is_Active() && Scen->MissionTimer >= this_ptr->Data.Value) { |
| 733 | + return true; |
| 734 | + } |
| 735 | + |
| 736 | + return false; |
| 737 | +} |
| 738 | + |
| 739 | + |
| 740 | +/** |
| 741 | + * Evaluation function for "TEVENT_MISSION_TIMER_EQUALS". |
| 742 | + * |
| 743 | + * @author: CCHyper |
| 744 | + */ |
| 745 | +bool TEventClassExtension::Mission_Timer_Equal_To(TEventClass *this_ptr, TEventType event, HouseClass *house, const ObjectClass *object, TDEventClass &td, bool &tripped, TechnoClass *source) |
| 746 | +{ |
| 747 | + if (Scen->MissionTimer.Is_Active() && Scen->MissionTimer == this_ptr->Data.Value) { |
| 748 | + return true; |
| 749 | + } |
| 750 | + |
| 751 | + return false; |
| 752 | +} |
0 commit comments