Skip to content

Commit

Permalink
add ItemRenderer and script for items
Browse files Browse the repository at this point in the history
  • Loading branch information
jube committed Nov 10, 2024
1 parent 26547a3 commit dcd9c16
Show file tree
Hide file tree
Showing 10 changed files with 100 additions and 6 deletions.
30 changes: 30 additions & 0 deletions code/bits/ItemRenderer.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#include "ItemRenderer.h"

#include "Akagoria.h"

namespace akgr {

ItemRenderer::ItemRenderer(Akagoria* game, const WorldResources& resources)
: m_game(game)
{

}

void ItemRenderer::update(gf::Time time, int32_t floor)
{
for (auto& item : m_game->world_state()->items) {
if (item.spot.floor != floor) {
continue;
}



}
}

void ItemRenderer::render_floor(gf::RenderRecorder& recorder, int32_t floor)
{

}

}
25 changes: 25 additions & 0 deletions code/bits/ItemRenderer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#ifndef AKGR_ITEM_RENDERER_H
#define AKGR_ITEM_RENDERER_H

#include "FloorRenderer.h"

namespace akgr {

class Akagoria;
struct WorldResources;

class ItemRenderer : public FloorRenderer {
public:
ItemRenderer(Akagoria* game, const WorldResources& resources);

void update(gf::Time time, int32_t floor) override;
void render_floor(gf::RenderRecorder& recorder, int32_t floor) override;

private:
Akagoria* m_game = nullptr;
};


}

#endif // AKGR_ITEM_RENDERER_H
6 changes: 5 additions & 1 deletion code/bits/ItemState.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#ifndef AKGR_ITEM_STATE_H
#define AKGR_ITEM_STATE_H

#include <string>

#include <gf2/core/TypeTraits.h>

#include "DataReference.h"
Expand All @@ -10,13 +12,15 @@
namespace akgr {

struct ItemState {
std::string name;
DataReference<ItemData> data;
Spot spot;
float rotation = 0.0f;
};

template<typename Archive>
Archive& operator|(Archive& ar, gf::MaybeConst<ItemState, Archive>& state) {
return ar | state.data | state.spot;
return ar | state.name | state.data | state.spot | state.rotation;
}

}
Expand Down
30 changes: 28 additions & 2 deletions code/bits/Script.cc
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ namespace akgr {
return &Script::add_requirement;
case "remove_requirement(_)"_id:
return &Script::remove_requirement;
// case "add_item(_,_)"_id:
// return &Script::addItem;
case "add_item(_,_,_)"_id:
return &Script::add_item;
// case "add_item_to_inventory(_)"_id:
// return &Script::addItemToInventory;
// case "set_character_mood(_,_)"_id:
Expand Down Expand Up @@ -444,6 +444,32 @@ namespace akgr {
agateSlotSetNil(vm, AGATE_RETURN_SLOT);
}

// add_item(item, location)
void Script::add_item(AgateVM* vm)
{
const char *name = agateSlotGetString(vm, 1);
const char *item_id = agateSlotGetString(vm, 2);
const char *location_id = agateSlotGetString(vm, 3);

gf::Log::info("[SCRIPT] World.add_item({}, {}, {})", name, item_id, location_id);

const LocationData* location = data_lexicon_find(data(vm).locations, gf::hash_string(location_id));
assert(location);

ItemState item;
item.name = name;
item.data.id = gf::hash_string(item_id);
item.data.bind_from(data(vm).items);
assert(item.data.check());

item.spot = location->spot;
item.rotation = 0.0f; // TODO

state(vm).items.push_back(std::move(item));

agateSlotSetNil(vm, AGATE_RETURN_SLOT);
}

// start_quest(quest)
void Script::start_quest(AgateVM* vm)
{
Expand Down
2 changes: 2 additions & 0 deletions code/bits/Script.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ namespace akgr {
static void start_dialog(AgateVM* vm);
static void add_dialog_to_character(AgateVM* vm);

static void add_item(AgateVM* vm);

static void start_quest(AgateVM* vm);

private:
Expand Down
2 changes: 2 additions & 0 deletions code/bits/UniverseRenderer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@ namespace akgr {
, m_high_object_renderer(PlaneType::Object, Plane::High, game->world_state(), rich_map_renderer)
, m_hero_renderer(game, resources)
, m_character_renderer(game, resources)
, m_item_renderer(game, resources)
{
m_renderers.add_renderer(&m_ground_renderer);
m_renderers.add_renderer(&m_low_tile_renderer);
m_renderers.add_renderer(&m_low_object_renderer);
m_renderers.add_renderer(&m_high_tile_renderer);
m_renderers.add_renderer(&m_high_object_renderer);
m_renderers.add_renderer(&m_item_renderer);
m_renderers.add_renderer(&m_character_renderer);
m_renderers.add_renderer(&m_hero_renderer);

Expand Down
2 changes: 2 additions & 0 deletions code/bits/UniverseRenderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "CharacterRenderer.h"
#include "FloorRenderer.h"
#include "HeroRenderer.h"
#include "ItemRenderer.h"
#include "MapRenderer.h"

namespace akgr {
Expand All @@ -30,6 +31,7 @@ namespace akgr {

HeroRenderer m_hero_renderer;
CharacterRenderer m_character_renderer;
ItemRenderer m_item_renderer;

FloorRendererContainer m_renderers;
};
Expand Down
2 changes: 1 addition & 1 deletion data/akagoria/scripts/kickoff.agate
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class Kickoff {
W.post_notification("Welcome")
W.start_quest("Intro0")

# W.add_item("GemRuby", "Ruby #1")
W.add_item("GemRuby#1", "GemRuby", "GemRubyLocation#1")
# W.add_item("GemEmerald", "Emerald #1")
# W.add_item_to_inventory("GemEmerald")
# W.add_item_to_inventory("GemRuby")
Expand Down
2 changes: 1 addition & 1 deletion data/akagoria/scripts/world.agate
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class World {
# items
#

static add_item(item, location) foreign
static add_item(name, item, location) foreign
static add_item_to_inventory(item) foreign

#
Expand Down
5 changes: 4 additions & 1 deletion data/raw/akagoria.tmx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.10" tiledversion="1.10.2" orientation="orthogonal" renderorder="right-down" compressionlevel="0" width="2048" height="2048" tilewidth="32" tileheight="32" infinite="0" nextlayerid="15" nextobjectid="304">
<map version="1.10" tiledversion="1.10.2" orientation="orthogonal" renderorder="right-down" compressionlevel="0" width="2048" height="2048" tilewidth="32" tileheight="32" infinite="0" nextlayerid="15" nextobjectid="305">
<tileset firstgid="1" source="tilesets/biomes.tsx"/>
<tileset firstgid="11665" name="sprites-128" tilewidth="128" tileheight="128" tilecount="64" columns="8">
<image source="tilesets/sprites-128.png" width="1024" height="1024"/>
Expand Down Expand Up @@ -214,6 +214,9 @@
<object id="303" name="ShagirLocation" x="11624" y="57140">
<point/>
</object>
<object id="304" name="GemRubyLocation#1" x="11728" y="57220">
<point/>
</object>
</objectgroup>
<layer id="8" name="Ground" width="2048" height="2048">
<properties>
Expand Down

0 comments on commit dcd9c16

Please sign in to comment.