]> git.localhorst.tv Git - l2e.git/blob - src/battle/states/SelectItem.cpp
cached some of the battle coordinates
[l2e.git] / src / battle / states / SelectItem.cpp
1 #include "SelectItem.h"
2
3 #include "SelectAttackType.h"
4 #include "SelectTarget.h"
5 #include "../BattleState.h"
6 #include "../../app/Application.h"
7 #include "../../app/Input.h"
8 #include "../../common/Item.h"
9 #include "../../graphics/Frame.h"
10 #include "../../math/Vector.h"
11
12 using app::Application;
13 using app::Input;
14 using common::Item;
15 using math::Vector;
16 using graphics::Frame;
17
18 namespace battle {
19
20 void SelectItem::OnEnterState(SDL_Surface *screen) {
21         OnResize(screen->w, screen->h);
22 }
23
24 void SelectItem::OnExitState(SDL_Surface *screen) {
25
26 }
27
28 void SelectItem::OnResumeState(SDL_Surface *screen) {
29         if (battle->ActiveHero().GetAttackChoice().Selection().HasSelected()) {
30                 battle->ActiveHero().GetAttackChoice().SetType(AttackChoice::ITEM);
31                 battle->ActiveHero().GetAttackChoice().SetItem(battle->ItemMenu().Selected());
32                 Ctrl().PopState();
33         }
34 }
35
36 void SelectItem::OnPauseState(SDL_Surface *screen) {
37
38 }
39
40
41 void SelectItem::OnResize(int width, int height) {
42         const Vector<int> offset = battle->ScreenOffset();
43
44         const Resources &res = battle->Res();
45         const Frame &frame = *res.selectFrame;
46
47         framePosition = offset + frame.BorderSize();
48         frameSize = Vector<int>(
49                         battle->Width() - 2 * frame.BorderWidth(),
50                         res.normalFont->CharHeight() * 13);
51
52         headlinePosition = offset + Vector<int>(
53                         2 * frame.BorderWidth() + res.normalFont->CharWidth(),
54                         2 * frame.BorderHeight());
55
56         menuPosition = offset + Vector<int>(
57                         2 * frame.BorderWidth() + res.normalFont->CharWidth(),
58                         2 * frame.BorderHeight() + 2 * res.normalFont->CharHeight());
59 }
60
61
62 void SelectItem::HandleEvents(const Input &input) {
63         if (input.JustPressed(Input::ACTION_A)) {
64                 if (battle->ItemMenu().SelectedIsEnabled()) {
65                         AttackChoice &ac(battle->ActiveHero().GetAttackChoice());
66                         const Item *item(battle->ItemMenu().Selected());
67                         ac.Selection().Reset();
68                         if (item->GetTargetingMode().TargetsAlly()) {
69                                 ac.Selection().SelectHeroes();
70                         } else {
71                                 ac.Selection().SelectMonsters();
72                         }
73                         if (item->GetTargetingMode().TargetsAll()) {
74                                 ac.SetType(AttackChoice::ITEM);
75                                 ac.SetItem(item);
76                                 battle->NextHero();
77                                 Ctrl().PopState();
78                         } else {
79                                 if (item->GetTargetingMode().TargetsSingle()) {
80                                         ac.Selection().SetSingle();
81                                 } else {
82                                         ac.Selection().SetMultiple();
83                                 }
84                                 Ctrl().PushState(new SelectTarget(battle, parent, &ac.Selection(), battle->Res().itemTargetCursor));
85                         }
86                 }
87         }
88         if (input.JustPressed(Input::ACTION_B)) {
89                 Ctrl().PopState(); // return control to parent
90         }
91         if (input.JustPressed(Input::PAD_UP)) {
92                 battle->ItemMenu().PreviousRow();
93         }
94         if (input.JustPressed(Input::PAD_RIGHT)) {
95                 battle->ItemMenu().NextItem();
96         }
97         if (input.JustPressed(Input::PAD_DOWN)) {
98                 battle->ItemMenu().NextRow();
99         }
100         if (input.JustPressed(Input::PAD_LEFT)) {
101                 battle->ItemMenu().PreviousItem();
102         }
103 }
104
105 void SelectItem::UpdateWorld(Uint32 deltaT) {
106
107 }
108
109 void SelectItem::Render(SDL_Surface *screen) {
110         parent->Render(screen);
111         RenderFrame(screen);
112         RenderHeadline(screen);
113         RenderMenu(screen);
114 }
115
116 void SelectItem::RenderFrame(SDL_Surface *screen) {
117         const Frame &frame = *battle->Res().selectFrame;
118         frame.Draw(screen, framePosition, frameSize.X(), frameSize.Y());
119 }
120
121 void SelectItem::RenderHeadline(SDL_Surface *screen) {
122         const Resources &res = battle->Res();
123         res.normalFont->DrawString(res.itemMenuHeadline, screen, headlinePosition);
124 }
125
126 void SelectItem::RenderMenu(SDL_Surface *screen) {
127         battle->ItemMenu().Draw(screen, menuPosition);
128 }
129
130 }