add SpriteBuilder class
This commit is contained in:
@@ -5,6 +5,7 @@ set(
|
||||
app/zelda3/screen/inventory.cc
|
||||
app/zelda3/screen/title_screen.cc
|
||||
app/zelda3/sprite/sprite.cc
|
||||
app/zelda3/sprite/sprite_builder.cc
|
||||
app/zelda3/music/tracker.cc
|
||||
app/zelda3/dungeon/room.cc
|
||||
app/zelda3/dungeon/room_object.cc
|
||||
|
||||
65
src/app/zelda3/sprite/sprite_builder.cc
Normal file
65
src/app/zelda3/sprite/sprite_builder.cc
Normal file
@@ -0,0 +1,65 @@
|
||||
#include "sprite_builder.h"
|
||||
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
namespace yaze {
|
||||
namespace app {
|
||||
namespace zelda3 {
|
||||
|
||||
SpriteBuilder SpriteBuilder::Create(const std::string& spriteName) {
|
||||
SpriteBuilder builder;
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
SpriteBuilder& SpriteBuilder::SetProperty(const std::string& propertyName,
|
||||
const std::string& value) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
SpriteBuilder& SpriteBuilder::SetProperty(const std::string& propertyName,
|
||||
int value) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
SpriteBuilder& SpriteBuilder::SetProperty(const std::string& propertyName,
|
||||
bool value) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
SpriteBuilder& SpriteBuilder::AddAction(const SpriteAction& action) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
SpriteBuilder& SpriteBuilder::SetGlobalAction(const SpriteAction& action) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
SpriteBuilder& SpriteBuilder::AddFunction(const SpriteAction& function) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
SpriteBuilder& SpriteBuilder::AddFunction(const std::string& asmCode) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
std::string SpriteBuilder::BuildProperties() const {
|
||||
std::stringstream ss;
|
||||
// Build the properties
|
||||
for (int i = 0; i < 27; ++i) {
|
||||
std::string property = "00";
|
||||
if (!properties[i].empty()) property = properties[i];
|
||||
ss << kSpriteProperties[i] << " = $" << property << std::endl;
|
||||
}
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
std::string SpriteBuilder::Build() const {
|
||||
std::stringstream ss;
|
||||
ss << BuildProperties();
|
||||
return ss.str();
|
||||
}
|
||||
} // namespace zelda3
|
||||
} // namespace app
|
||||
} // namespace yaze
|
||||
79
src/app/zelda3/sprite/sprite_builder.h
Normal file
79
src/app/zelda3/sprite/sprite_builder.h
Normal file
@@ -0,0 +1,79 @@
|
||||
#ifndef YAZE_APP_ZELDA3_SPRITE_SPRITE_BUILDER_H_
|
||||
#define YAZE_APP_ZELDA3_SPRITE_SPRITE_BUILDER_H_
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace yaze {
|
||||
namespace app {
|
||||
namespace zelda3 {
|
||||
|
||||
|
||||
// Array of sprite property names
|
||||
constexpr const char* kSpriteProperties[] = {"!SPRID",
|
||||
"!NbrTiles",
|
||||
"!Harmless",
|
||||
"!HVelocity",
|
||||
"!Health",
|
||||
"!Damage",
|
||||
"!DeathAnimation",
|
||||
"!ImperviousAll",
|
||||
"!SmallShadow",
|
||||
"!Shadow",
|
||||
"!Palette",
|
||||
"!Hitbox",
|
||||
"!Persist",
|
||||
"!Statis",
|
||||
"!CollisionLayer",
|
||||
"!CanFall",
|
||||
"!DeflectArrow",
|
||||
"!WaterSprite",
|
||||
"!Blockable",
|
||||
"!Prize",
|
||||
"!Sound",
|
||||
"!Interaction",
|
||||
"!Statue",
|
||||
"!DeflectProjectiles",
|
||||
"!ImperviousArrow",
|
||||
"!ImpervSwordHammer",
|
||||
"!Boss"};
|
||||
|
||||
class SpriteBuilder {
|
||||
public:
|
||||
// Factory method to create a new sprite
|
||||
static SpriteBuilder Create(const std::string& spriteName);
|
||||
|
||||
// Set sprite properties
|
||||
SpriteBuilder& SetProperty(const std::string& propertyName,
|
||||
const std::string& value);
|
||||
SpriteBuilder& SetProperty(const std::string& propertyName, int value);
|
||||
SpriteBuilder& SetProperty(const std::string& propertyName, bool value);
|
||||
|
||||
// Add an action to the sprite
|
||||
SpriteBuilder& AddAction(const SpriteAction& action);
|
||||
|
||||
// Set global action to the sprite (always runs)
|
||||
SpriteBuilder& SetGlobalAction(const SpriteAction& action);
|
||||
|
||||
// Add a function to be called from anywhere in the sprite code
|
||||
SpriteBuilder& AddFunction(const std::string& asmCode);
|
||||
SpriteBuilder& AddFunction(const SpriteAction& action);
|
||||
|
||||
std::string BuildProperties() const;
|
||||
|
||||
// Build and get the sprite configuration
|
||||
std::string Build() const;
|
||||
|
||||
private:
|
||||
std::string name;
|
||||
std::array<std::string, 27> properties;
|
||||
std::vector<SpriteAction> actions;
|
||||
SpriteAction globalAction;
|
||||
std::vector<SpriteAction> functions;
|
||||
};
|
||||
|
||||
} // namespace zelda3
|
||||
} // namespace app
|
||||
} // namespace yaze
|
||||
|
||||
#endif // YAZE_APP_ZELDA3_SPRITE_SPRITE_BUILDER_H_
|
||||
Reference in New Issue
Block a user