Ares
Functions

PopupMenu.cxx File Reference

#include "PopupMenu.h"
#include <Unsorted.h>
#include <MouseClass.h>
#include <TechnoClass.h>
#include <WarheadTypeClass.h>
#include <GeneralDefinitions.h>
#include <Surface.h>
#include <Drawing.h>
#include "../Misc/Debug.h"

Functions

 DEFINE_HOOK (4AAD34, DisplayClass_RightMouseButtonUp, 6)
 DEFINE_HOOK (4AB9B0, DisplayClass_LeftMouseButtonUp, 5)
 DEFINE_HOOK (4AAC7D, DisplayClass_MouseEvent, 8)
 DEFINE_HOOK (693263, MouseClass_ReactToClicks_LMBUp, 5)
 DEFINE_HOOK (693388, MouseClass_ReactToClicks_RMBUp, 7)
 DEFINE_HOOK (6D4B42, TacticalClass_DrawStuff, 6)
 DEFINE_HOOK (692FDC, sub_692F30, 8)

Function Documentation

DEFINE_HOOK ( 4AAD34  ,
DisplayClass_RightMouseButtonUp  ,
 
)
{
        enum {Yes = 0, No = 0x4AADA4 } DoNormal = Yes;
        Debug::Log("Right clicking\n");

        if(!PopupMenu::Drawing) {
                DoNormal = No;
                PopupMenu::Drawing = true;
        } else {
                PopupMenu::Drawing = false;
        }
        return DoNormal;
}
DEFINE_HOOK ( 692FDC  ,
sub_692F30  ,
 
)
{
        if(PopupMenu::Drawing && PopupMenu::MenuItem.Height) {
                LEA_STACK(Point2D *, XY, STACK_OFFS(0x30, 0x18));

                Point2D offset = *XY - PopupMenu::PixelCoords;

                PopupMenu::HighlightedItem = -1;
                if(offset.X >= 0 && offset.X <= PopupMenu::MenuBox.Width) {
                        if(offset.Y >= 0 && offset.Y <= PopupMenu::MenuBox.Height) {
                                PopupMenu::HighlightedItem = int(offset.Y / PopupMenu::MenuItem.Height);
                        }
                }

        }
        return 0;
}
DEFINE_HOOK ( 6D4B42  ,
TacticalClass_DrawStuff  ,
 
)
{
        static const wchar_t * MenuItems[] = {L"Deactivate", L"Flash", L"IronCurtain", L"Damage", L"Hunt", L"\0"};

        RectangleStruct pRect;
        const wchar_t **menu = MenuItems;
        int i = 0;
        while(*menu && **menu) {
                pRect = Drawing::GetTextBox(*menu, &PopupMenu::PixelCoords, 3);
                if(pRect.Width > PopupMenu::MenuItem.Width) {
                        PopupMenu::MenuItem = PopupMenu::MenuBox = pRect;
                }
                ++menu;
        }

        if(PopupMenu::Drawing) {
                Point2D TL = PopupMenu::PixelCoords;
                menu = MenuItems;
                int i = 0;
                pRect = PopupMenu::MenuItem;
                pRect.X += TL.X;
                pRect.Y += TL.Y;
                while(*menu && **menu) {
                        DSurface::Hidden_2->FillRect(&pRect, i == PopupMenu::HighlightedItem ? COLOR_RED : COLOR_WHITE);
                        DSurface::Hidden_2->DrawTextA(*menu, &TL, COLOR_BLUE);
                        TL.Y += pRect.Height;
                        pRect.Y += pRect.Height;
                        PopupMenu::MenuBox.Height += pRect.Height;
                        ++menu;
                        ++i;
                }
        }
        return 0;
}
DEFINE_HOOK ( 693388  ,
MouseClass_ReactToClicks_RMBUp  ,
 
)
{
        GET(int, X, EAX);
        GET(int, Y, ECX);
        LEA_STACK(Point2D *, XY, STACK_OFFS(0x24, 0x14));

        LEA_STACK(DWORD *, ptr, STACK_OFFS(0x24, 0x8));
        BYTE a5 = 0;
        BYTE a6 = 0;
        CoordStruct XYZdst = {0,0,0};
        CellStruct XYdst = {0,0};

        Point2D P2D = {X, Y};
        Game::sub_63AB00(P2D);

        *XY = P2D;

        MouseClass::Instance->ProcessClickCoords(XY, &XYdst, &XYZdst, (ObjectClass **)&ptr, &a5, &a6);

        PopupMenu::PixelCoords = P2D;
        PopupMenu::CellCoords = XYdst;

        return 0x69338F;
}
DEFINE_HOOK ( 693263  ,
MouseClass_ReactToClicks_LMBUp  ,
 
)
{
        if(PopupMenu::Drawing) {
                if(PopupMenu::HighlightedItem != -1) {
                        Debug::Log("Clicked #%d\n", PopupMenu::HighlightedItem);
                        if(ObjectClass::CurrentObjects->Count >= 1) {
                                if(TechnoClass *T = generic_cast<TechnoClass *>(ObjectClass::CurrentObjects->Items[0])) {
                                        int n = 45;
                                        switch(PopupMenu::HighlightedItem) {
                                                case 0:
                                                        T->Deactivate();
                                                        break;
                                                case 1:
                                                        T->Flash(90);
                                                        break;
                                                case 2:
                                                        T->IronCurtain(90, T->Owner, false);
                                                        break;
                                                case 3:
                                                        T->ReceiveDamage(&n, 0, WarheadTypeClass::Find("NUKE"), NULL, false, false, NULL);
                                                        break;
                                                case 4:
                                                        T->QueueMission(mission_Hunt, true);
                                                        break;
                                        }
                                }
                        }
                }
                PopupMenu::Drawing = false;
        } else {

                LEA_STACK(CellStruct*, XY, STACK_OFFS(0x24, 0x1C));
                LEA_STACK(CoordStruct*, XYZ, STACK_OFFS(0x24, 0xC));
                LEA_STACK(ObjectClass**, Target, STACK_OFFS(0x24, -0x8));
                eAction A = MouseClass::Instance->DecideAction(XY, *Target, 0);
                MouseClass::Instance->LMBUp(XYZ, XY, *Target, A, 0);
        }

        return 0x693290;
}
DEFINE_HOOK ( 4AAC7D  ,
DisplayClass_MouseEvent  ,
 
)
{
        GET_STACK(Point2D , XY, 0x1C);
        GET_STACK(byte, FakeMouseFlags, 0x34);
        MouseEvent MouseFlags(FakeMouseFlags);

        if(MouseFlags & (MouseEvent::RightUp | MouseEvent::LeftUp)) {
//              PopupMenu::Coords = XY;
        }

        return 0;
}
DEFINE_HOOK ( 4AB9B0  ,
DisplayClass_LeftMouseButtonUp  ,
 
)
{
        enum {Yes = 0, No = 0x4AC2A7 } DoNormal = Yes;
        Debug::Log("Left clicking\n");
        PopupMenu::Drawing = false;
        return DoNormal;
}
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines