2021-12-05 17:54:36 +00:00
|
|
|
/*
|
|
|
|
* Darkflame Universe
|
2023-07-06 03:30:52 +00:00
|
|
|
* Copyright 2023
|
2021-12-05 17:54:36 +00:00
|
|
|
*/
|
|
|
|
|
2023-07-06 03:30:52 +00:00
|
|
|
#ifndef __MISSIONOFFERCOMPONENT_H__
|
|
|
|
#define __MISSIONOFFERCOMPONENT_H__
|
|
|
|
#pragma once
|
2021-12-05 17:54:36 +00:00
|
|
|
|
2023-07-06 03:30:52 +00:00
|
|
|
#include <memory>
|
2021-12-05 17:54:36 +00:00
|
|
|
#include <vector>
|
|
|
|
#include <stdint.h>
|
2023-07-06 03:30:52 +00:00
|
|
|
|
|
|
|
#include "dCommonVars.h"
|
|
|
|
#include "Component.h"
|
2023-03-04 07:16:37 +00:00
|
|
|
#include "eReplicaComponentType.h"
|
2021-12-05 17:54:36 +00:00
|
|
|
|
|
|
|
class Entity;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Light wrapper around missions that may be offered by an entity
|
|
|
|
*/
|
|
|
|
struct OfferedMission {
|
2023-07-06 03:30:52 +00:00
|
|
|
OfferedMission(const uint32_t missionId, const bool offersMission, const bool acceptsMission) {
|
|
|
|
this->missionId = missionId;
|
|
|
|
this->offersMission = offersMission;
|
|
|
|
this->acceptsMission = acceptsMission;
|
|
|
|
};
|
2021-12-05 17:54:36 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the ID of the mission
|
|
|
|
* @return the ID of the mission
|
|
|
|
*/
|
2023-07-06 03:30:52 +00:00
|
|
|
uint32_t GetMissionId() const { return missionId; };
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
/**
|
|
|
|
* Returns if this mission is offered by the entity
|
|
|
|
* @return true if this mission is offered by the entity, false otherwise
|
|
|
|
*/
|
2023-07-06 03:30:52 +00:00
|
|
|
bool GetOfferMission() const { return offersMission; };
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
/**
|
|
|
|
* Returns if this mission may be accepted by the entity (currently unused)
|
|
|
|
* @return true if this mission may be accepted by the entity, false otherwise
|
|
|
|
*/
|
2023-07-06 03:30:52 +00:00
|
|
|
bool GetAcceptMission() const { return acceptsMission; };
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
private:
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The ID of the mission
|
|
|
|
*/
|
|
|
|
uint32_t missionId;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Determines if the mission is offered by the entity
|
|
|
|
*/
|
|
|
|
bool offersMission;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Determines if the mission can be accepted by the entity
|
|
|
|
*/
|
|
|
|
bool acceptsMission;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Allows entities to offer missions to other entities, depending on their mission inventory progression.
|
|
|
|
*/
|
|
|
|
class MissionOfferComponent : public Component {
|
|
|
|
public:
|
2023-06-09 08:22:45 +00:00
|
|
|
inline static const eReplicaComponentType ComponentType = eReplicaComponentType::MISSION_OFFER;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2023-07-06 03:30:52 +00:00
|
|
|
MissionOfferComponent(Entity* parent, const int32_t componentId = -1);
|
|
|
|
|
|
|
|
void LoadTemplateData() override;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
/**
|
|
|
|
* Handles the OnUse event triggered by some entity, determines which missions to show based on what they may
|
|
|
|
* hand in now and what they may start based on their mission history.
|
|
|
|
* @param originator the entity that triggered the event
|
|
|
|
*/
|
|
|
|
void OnUse(Entity* originator) override;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
/**
|
|
|
|
* Offers all the missions an entity can accept to said entity
|
|
|
|
* @param entity the entity to offer missions to
|
|
|
|
* @param specifiedMissionId optional mission ID if you wish to offer a specific mission
|
|
|
|
*/
|
|
|
|
void OfferMissions(Entity* entity, uint32_t specifiedMissionId = 0);
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The missions this entity has to offer
|
|
|
|
*/
|
2023-07-06 03:30:52 +00:00
|
|
|
std::vector<std::unique_ptr<OfferedMission>> offeredMissions;
|
|
|
|
|
|
|
|
int32_t m_ComponentId;
|
2021-12-05 17:54:36 +00:00
|
|
|
};
|
|
|
|
|
2023-07-06 03:30:52 +00:00
|
|
|
#endif // __MISSIONOFFERCOMPONENT_H__
|