Implement a custom object with Interaction

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent fcdfc8065b
commit 46b113d3bb
  1. BIN
      C++ProjectTemplate
  2. 3
      assets/maps/map0
  3. 58
      main.cpp
  4. 16
      object.h

Binary file not shown.

@ -69,6 +69,7 @@ OBJECT256.000000;192.000000;8
OBJECT288.000000;192.000000;8
OBJECT224.000000;192.000000;8
OBJECT192.000000;192.000000;7
OBJECT352.000000;192.000000;159
OBJECT192.000000;224.000000;8
OBJECT160.000000;224.000000;8
OBJECT288.000000;224.000000;8
@ -79,9 +80,9 @@ OBJECT256.000000;256.000000;8
OBJECT224.000000;256.000000;8
OBJECT192.000000;256.000000;8
OBJECT160.000000;256.000000;8
OBJECT322.000000;255.000000;0
OBJECT256.000000;288.000000;90
OBJECT128.000000;288.000000;90
OBJECT322.000000;288.000000;0
OBJECT192.000000;320.000000;90
OBJECT96.000000;320.000000;90
OBJECT160.000000;384.000000;90

@ -149,6 +149,8 @@ public:
std::vector<Item*> BATTLE_SPOILS_LIST;
std::wstring BATTLE_SPOILS_MESSAGE;
int OVERWORLD_MENU_SELECTION=0;
std::vector<std::string> INTERACTION_MESSAGES;
bool CLOSE_OVERWORLD_WINDOW=false; //When set to true, should cause the overworld menu to close as well once the dialog box is closed.
bool MOUSE_PRESSED_DOWN=false,MOUSE_DOWN=false,MOUSE_RELEASED=false; //TODO Implement Mouse things.
@ -299,6 +301,10 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
messageBoxLoad=true;
} else {
messageBoxVisible=false;
if (CLOSE_OVERWORLD_WINDOW) {
GAME_STATE=GameState::GAME_WORLD;
}
CLOSE_OVERWORLD_WINDOW=false;
}
} else {
while (messageBoxMarker<messageBoxFinalText.length()) {
@ -322,6 +328,11 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
}
}
if (PlayerCanMove()&&INTERACTION_MESSAGES.size()>0) {
DisplayMessageBox(INTERACTION_MESSAGES.front());
INTERACTION_MESSAGES.erase(INTERACTION_MESSAGES.begin());
}
for (int i=0;i<DAMAGE_NUMBERS.size();i++) {
DamageNumber*numb=DAMAGE_NUMBERS[i];
if (numb->timer>0) {
@ -1031,6 +1042,53 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
OVERWORLD_MENU_SELECTION+=5;
}
}
if (ACTIONKEYPRESSED) {
switch (OVERWORLD_MENU_SELECTION) {
case 0:{//Check is selected.
Object*closest=nullptr;
float closestDist=999999;
for (int i=0;i<OBJECTS.size();i++) {
float dist;
for (int j=0;j<PARTY_MEMBER_COUNT;j++) {
if (OBJECTS[i]==PARTY_MEMBER_OBJ[j]) {
goto next;
}
} //Make sure it's not a party member.
dist = abs(PARTY_MEMBER_OBJ[0]->GetPos().x-OBJECTS[i]->GetPos().x)+abs(PARTY_MEMBER_OBJ[0]->GetPos().y-OBJECTS[i]->GetPos().y);
if (dist<closestDist) {
closestDist=dist;
closest=OBJECTS[i];
}
next:
continue;
}
if (closest!=nullptr) {
//Run the Interaction for this object.
Interaction interaction = closest->Interact();
if (interaction.messages.size()>0) {
INTERACTION_MESSAGES=interaction.messages;
DisplayMessageBox(INTERACTION_MESSAGES.front());
INTERACTION_MESSAGES.erase(INTERACTION_MESSAGES.begin());
} else {
DisplayMessageBox("No problem here.");
}
CLOSE_OVERWORLD_WINDOW=true;
}
}break;
case 1:{//Power is selected.
}break;
case 2:{//Items is selected.
}break;
case 3:{//Equip is selected.
}break;
case 4:{//Status is selected.
}break;
}
}
}break;
case GameState::EDITOR:{
if (IsTextEntryEnabled()) {

@ -5,8 +5,15 @@
#include "animation.h"
#include "defines.h"
#include "layers.h"
#include "item.h"
using namespace olc;
struct Interaction{
std::vector<std::string> messages={};
Item*item=nullptr;
Flag flag=Flag::NONE;
};
class Object{
private:
vd2d scale={1,1};
@ -49,7 +56,8 @@ class Object{
this->temp=temp;
}
virtual Object* CreateType(int id,std::string name,vd2d pos,Animation*spr,vd2d scale={1,1},Pixel color=WHITE,int animationSpd=1,bool temp=false)=0;
virtual bool Interact()=0;
//When the player tries to interact with this object.
virtual Interaction Interact()=0;
void SetScale(vd2d scale) {
this->scale=scale;
if (spr!=nullptr) {
@ -162,11 +170,13 @@ class Object{
class Standard_Obj : public Object{
DynamicObject(Standard_Obj)
bool Interact()override{return false;}
Interaction Interact()override{return {};}
};
class TrashCan_Obj : public Object{
DynamicObject(TrashCan_Obj)
bool Interact()override{return false;}
Interaction Interact()override{
frameIndex=1;
return {{"You dig around the trash can.","Nope! Just looks like good ol' trash."}};}
};
#endif
Loading…
Cancel
Save