TrinityCore
Scenario.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef Scenario_h__
19#define Scenario_h__
20
21#include "CriteriaHandler.h"
22#include <map>
23#include <unordered_set>
24
25class Map;
26struct ScenarioData;
27struct ScenarioEntry;
29
30namespace WorldPackets
31{
32 namespace Achievement
33 {
34 struct CriteriaProgress;
35 }
36
37 namespace Scenario
38 {
39 struct BonusObjectiveData;
40 class ScenarioState;
41 }
42}
43
45{
50};
51
53{
54 public:
55 Scenario(Map* map, ScenarioData const* scenarioData);
56 ~Scenario();
57
58 void Reset() override;
59 void SetStep(ScenarioStepEntry const* step);
60
61 virtual void CompleteStep(ScenarioStepEntry const* step);
62 virtual void CompleteScenario();
63
64 virtual void OnPlayerEnter(Player* player);
65 virtual void OnPlayerExit(Player* player);
66 virtual void Update(uint32 /*diff*/) { }
67
68 bool IsComplete() const;
69 bool IsCompletedStep(ScenarioStepEntry const* step);
70 void SetStepState(ScenarioStepEntry const* step, ScenarioStepState state) { _stepStates[step] = state; }
71 ScenarioEntry const* GetEntry() const;
72 ScenarioStepState GetStepState(ScenarioStepEntry const* step) const;
73 ScenarioStepEntry const* GetStep() const { return _currentstep; }
74 ScenarioStepEntry const* GetFirstStep() const;
75 ScenarioStepEntry const* GetLastStep() const;
76
77 void SendScenarioState(Player const* player) const;
78 void SendBootPlayer(Player const* player) const;
79
80 protected:
81 Map const* _map;
83
84 void SendCriteriaUpdate(Criteria const* criteria, CriteriaProgress const* progress, Seconds timeElapsed, bool timedCompleted) const override;
85 void SendCriteriaProgressRemoved(uint32 /*criteriaId*/) override { }
86
87 bool CanUpdateCriteriaTree(Criteria const* criteria, CriteriaTree const* tree, Player* referencePlayer) const override;
88 bool CanCompleteCriteriaTree(CriteriaTree const* tree) override;
89 void CompletedCriteriaTree(CriteriaTree const* tree, Player* referencePlayer) override;
90 void AfterCriteriaTreeUpdate(CriteriaTree const* /*tree*/, Player* /*referencePlayer*/) override { }
91
92 void DoForAllPlayers(std::function<void(Player*)> const& worker) const;
93 void SendPacket(WorldPacket const* data) const override;
94
95 void SendAllData(Player const* /*receiver*/) const override { }
96
97 void BuildScenarioStateFor(Player const* player, WorldPackets::Scenario::ScenarioState* scenarioState) const;
98
99 std::vector<WorldPackets::Scenario::BonusObjectiveData> GetBonusObjectivesData() const;
100 std::vector<WorldPackets::Achievement::CriteriaProgress> GetCriteriasProgressFor(Player const* player) const;
101
102 CriteriaList const& GetCriteriaByType(CriteriaType type, uint32 asset) const override;
104
105 private:
108 std::map<ScenarioStepEntry const*, ScenarioStepState> _stepStates;
109};
110
111#endif // Scenario_h__
T GetEntry(std::unordered_map< uint32, T > const &map, CriteriaTreeEntry const *tree)
std::vector< Criteria const * > CriteriaList
CriteriaType
Definition: DBCEnums.h:503
#define TC_GAME_API
Definition: Define.h:123
uint32_t uint32
Definition: Define.h:142
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition: Duration.h:32
std::unordered_set< ObjectGuid > GuidUnorderedSet
Definition: ObjectGuid.h:396
ScenarioStepState
Definition: Scenario.h:45
@ SCENARIO_STEP_IN_PROGRESS
Definition: Scenario.h:48
@ SCENARIO_STEP_INVALID
Definition: Scenario.h:46
@ SCENARIO_STEP_DONE
Definition: Scenario.h:49
@ SCENARIO_STEP_NOT_STARTED
Definition: Scenario.h:47
Achievement
virtual CriteriaList const & GetCriteriaByType(CriteriaType type, uint32 asset) const =0
virtual void Reset()
virtual bool CanUpdateCriteriaTree(Criteria const *criteria, CriteriaTree const *tree, Player *referencePlayer) const
virtual void SendPacket(WorldPacket const *data) const =0
virtual void CompletedCriteriaTree(CriteriaTree const *tree, Player *referencePlayer)=0
virtual bool CanCompleteCriteriaTree(CriteriaTree const *tree)
virtual void SendCriteriaUpdate(Criteria const *criteria, CriteriaProgress const *progress, Seconds timeElapsed, bool timedCompleted) const =0
Definition: Map.h:189
virtual void Update(uint32)
Definition: Scenario.h:66
void SendCriteriaProgressRemoved(uint32) override
Definition: Scenario.h:85
ScenarioData const * _data
Definition: Scenario.h:103
Map const * _map
Definition: Scenario.h:81
std::map< ScenarioStepEntry const *, ScenarioStepState > _stepStates
Definition: Scenario.h:108
void AfterCriteriaTreeUpdate(CriteriaTree const *, Player *) override
Definition: Scenario.h:90
ObjectGuid const _guid
Definition: Scenario.h:106
GuidUnorderedSet _players
Definition: Scenario.h:82
ScenarioStepEntry const * _currentstep
Definition: Scenario.h:107
void SetStepState(ScenarioStepEntry const *step, ScenarioStepState state)
Definition: Scenario.h:70
ScenarioStepEntry const * GetStep() const
Definition: Scenario.h:73
void SendAllData(Player const *) const override
Definition: Scenario.h:95