mirror of
https://github.com/EasyRPG/Player.git
synced 2026-10-25 15:57:14 +00:00
For enums without a fixed underlying type, casting into them from numbers outside of their enumeration values is undefined behavior. Fixes running tests with UBSan: `runtime error: load of value 4294967295, which is not a valid value for type 'Trigger'`.
613 lines
19 KiB
C++
613 lines
19 KiB
C++
#include "game_character.h"
|
|
#include "game_player.h"
|
|
#include "game_event.h"
|
|
#include "game_vehicle.h"
|
|
#include "doctest.h"
|
|
#include <climits>
|
|
#include <optional>
|
|
|
|
static_assert(Game_Character::GetMaxStopCountForStep(1) == 256, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForStep(2) == 128, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForStep(3) == 64, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForStep(4) == 32, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForStep(5) == 16, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForStep(6) == 8, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForStep(7) == 4, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForStep(8) == 0, "StopCountBroken");
|
|
|
|
static_assert(Game_Character::GetMaxStopCountForTurn(1) == 128, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForTurn(2) == 64, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForTurn(3) == 32, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForTurn(4) == 16, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForTurn(5) == 8, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForTurn(6) == 4, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForTurn(7) == 2, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForTurn(8) == 0, "StopCountBroken");
|
|
|
|
static_assert(Game_Character::GetMaxStopCountForWait(1) == 148, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForWait(2) == 84, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForWait(3) == 52, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForWait(4) == 36, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForWait(5) == 28, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForWait(6) == 24, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForWait(7) == 22, "StopCountBroken");
|
|
static_assert(Game_Character::GetMaxStopCountForWait(8) == 20, "StopCountBroken");
|
|
|
|
// FIXME: Diagonals??
|
|
static_assert(Game_Character::GetDirection90DegreeLeft(Game_Character::Up) == Game_Character::Left, "90DegLeftBroken");
|
|
static_assert(Game_Character::GetDirection90DegreeLeft(Game_Character::Left) == Game_Character::Down, "90DegLeftBroken");
|
|
static_assert(Game_Character::GetDirection90DegreeLeft(Game_Character::Down) == Game_Character::Right, "90DegLeftBroken");
|
|
static_assert(Game_Character::GetDirection90DegreeLeft(Game_Character::Right) == Game_Character::Up, "90DegLeftBroken");
|
|
|
|
// FIXME: Diagonals??
|
|
static_assert(Game_Character::GetDirection90DegreeRight(Game_Character::Up) == Game_Character::Right, "90DegRightBroken");
|
|
static_assert(Game_Character::GetDirection90DegreeRight(Game_Character::Right) == Game_Character::Down, "90DegRightBroken");
|
|
static_assert(Game_Character::GetDirection90DegreeRight(Game_Character::Down) == Game_Character::Left, "90DegRightBroken");
|
|
static_assert(Game_Character::GetDirection90DegreeRight(Game_Character::Left) == Game_Character::Up, "90DegRightBroken");
|
|
|
|
// FIXME: Diagonals??
|
|
static_assert(Game_Character::GetDirection180Degree(Game_Character::Up) == Game_Character::Down, "180DegBroken");
|
|
static_assert(Game_Character::GetDirection180Degree(Game_Character::Right) == Game_Character::Left, "180DegBroken");
|
|
static_assert(Game_Character::GetDirection180Degree(Game_Character::Down) == Game_Character::Up, "180DegBroken");
|
|
static_assert(Game_Character::GetDirection180Degree(Game_Character::Left) == Game_Character::Right, "180DegBroken");
|
|
|
|
|
|
static_assert(Game_Character::GetDxFromDirection(Game_Character::Up) == 0, "DxBroken");
|
|
static_assert(Game_Character::GetDxFromDirection(Game_Character::Left) == -1, "DxBroken");
|
|
static_assert(Game_Character::GetDxFromDirection(Game_Character::Down) == 0, "DxBroken");
|
|
static_assert(Game_Character::GetDxFromDirection(Game_Character::Right) == 1, "DxBroken");
|
|
static_assert(Game_Character::GetDxFromDirection(Game_Character::UpRight) == 1, "DxBroken");
|
|
static_assert(Game_Character::GetDxFromDirection(Game_Character::DownRight) == 1, "DxBroken");
|
|
static_assert(Game_Character::GetDxFromDirection(Game_Character::DownLeft) == -1, "DxBroken");
|
|
static_assert(Game_Character::GetDxFromDirection(Game_Character::UpLeft) == -1, "DxBroken");
|
|
|
|
static_assert(Game_Character::GetDyFromDirection(Game_Character::Up) == -1, "DyBroken");
|
|
static_assert(Game_Character::GetDyFromDirection(Game_Character::Left) == 0, "DyBroken");
|
|
static_assert(Game_Character::GetDyFromDirection(Game_Character::Down) == 1, "DyBroken");
|
|
static_assert(Game_Character::GetDyFromDirection(Game_Character::Right) == 0, "DyBroken");
|
|
static_assert(Game_Character::GetDyFromDirection(Game_Character::UpRight) == -1, "DyBroken");
|
|
static_assert(Game_Character::GetDyFromDirection(Game_Character::DownRight) == 1, "DyBroken");
|
|
static_assert(Game_Character::GetDyFromDirection(Game_Character::DownLeft) == 1, "DyBroken");
|
|
static_assert(Game_Character::GetDyFromDirection(Game_Character::UpLeft) == -1, "DyBroken");
|
|
|
|
static_assert(!Game_Character::IsDirectionFixedAnimationType(lcf::rpg::EventPage::AnimType_non_continuous), "DirFixedBroken");
|
|
static_assert(!Game_Character::IsDirectionFixedAnimationType(lcf::rpg::EventPage::AnimType_continuous), "DirFixedBroken");
|
|
static_assert(Game_Character::IsDirectionFixedAnimationType(lcf::rpg::EventPage::AnimType_fixed_non_continuous), "DirFixedBroken");
|
|
static_assert(Game_Character::IsDirectionFixedAnimationType(lcf::rpg::EventPage::AnimType_fixed_continuous), "DirFixedBroken");
|
|
static_assert(Game_Character::IsDirectionFixedAnimationType(lcf::rpg::EventPage::AnimType_fixed_graphic), "DirFixedBroken");
|
|
static_assert(!Game_Character::IsDirectionFixedAnimationType(lcf::rpg::EventPage::AnimType_spin), "DirFixedBroken");
|
|
static_assert(!Game_Character::IsDirectionFixedAnimationType(lcf::rpg::EventPage::AnimType_step_frame_fix), "DirFixedBroken");
|
|
|
|
TEST_SUITE_BEGIN("Game_Character");
|
|
|
|
static void testInit(Game_Character& ch, int max_stop_count = 0) {
|
|
REQUIRE_EQ(ch.GetX(), 0);
|
|
REQUIRE_EQ(ch.GetY(), 0);
|
|
REQUIRE_EQ(ch.GetMapId(), 0);
|
|
REQUIRE(!ch.IsFacingLocked());
|
|
REQUIRE(!ch.IsOverlapForbidden());
|
|
|
|
// FIXME: Check move route
|
|
REQUIRE_EQ(ch.GetMoveRouteIndex(), 0);
|
|
REQUIRE(!ch.IsMoveRouteOverwritten());
|
|
REQUIRE(!ch.IsMoveRouteFinished());
|
|
REQUIRE_EQ(ch.GetSpriteName(), "");
|
|
REQUIRE(ch.HasTileSprite());
|
|
REQUIRE_EQ(ch.GetSpriteIndex(), 0);
|
|
REQUIRE_EQ(ch.GetAnimFrame(), 1);
|
|
REQUIRE(!ch.IsAnimPaused());
|
|
REQUIRE_EQ(ch.GetFlashColor(), Color());
|
|
REQUIRE_EQ(ch.GetFlashLevel(), 0.0);
|
|
REQUIRE_EQ(ch.GetFlashTimeLeft(), 0);
|
|
REQUIRE_EQ(ch.GetStopCount(), 0);
|
|
REQUIRE_EQ(ch.GetMaxStopCount(), max_stop_count);
|
|
REQUIRE_EQ(ch.IsStopCountActive(), (max_stop_count != 0));
|
|
REQUIRE_EQ(ch.GetAnimCount(), 0);
|
|
REQUIRE(!ch.IsMoving());
|
|
REQUIRE(!ch.IsJumping());
|
|
REQUIRE_EQ(ch.GetBeginJumpX(), 0);
|
|
REQUIRE_EQ(ch.GetBeginJumpY(), 0);
|
|
REQUIRE(!ch.IsFlying());
|
|
REQUIRE(!ch.IsProcessed());
|
|
REQUIRE(!ch.IsPaused());
|
|
REQUIRE(ch.IsActive());
|
|
REQUIRE(ch.IsStopping());
|
|
REQUIRE_EQ(ch.GetJumpHeight(), 0);
|
|
REQUIRE_EQ(ch.GetTileId(), 0);
|
|
REQUIRE_EQ(ch.GetSpriteX(), 0);
|
|
REQUIRE_EQ(ch.GetSpriteY(), 0);
|
|
REQUIRE_EQ(ch.GetRemainingStep(), 0);
|
|
REQUIRE_EQ(ch.GetAnimationType(), Game_Character::AnimType(0));
|
|
// FIXME: Map
|
|
//REQUIRE(ch.IsInPosition(0, 0));
|
|
|
|
REQUIRE_EQ(ch.GetOpacity(), 255);
|
|
REQUIRE_EQ(ch.GetTransparency(), 0);
|
|
// FIXME: MAP
|
|
//REQUIRE(ch.IsVisible());
|
|
REQUIRE(!ch.IsSpriteHidden());
|
|
REQUIRE(ch.IsAnimated());
|
|
REQUIRE(!ch.IsContinuous());
|
|
REQUIRE(!ch.IsSpinning());
|
|
// FIXME: MAP
|
|
// REQUIRE_EQ(ch.GetBushDepth(), 0);
|
|
|
|
}
|
|
|
|
static void testInitVehicle(Game_Vehicle::Type vt) {
|
|
Game_Vehicle ch(vt);
|
|
|
|
testInit(ch);
|
|
|
|
REQUIRE_EQ(ch.GetDirection(), 3);
|
|
REQUIRE_EQ(ch.GetFacing(), 3);
|
|
if (vt == Game_Vehicle::Airship) {
|
|
REQUIRE_EQ(ch.GetMoveSpeed(), 5);
|
|
} else {
|
|
REQUIRE_EQ(ch.GetMoveSpeed(), 4);
|
|
}
|
|
REQUIRE(!ch.GetThrough());
|
|
REQUIRE_EQ(ch.GetLayer(), 1);
|
|
REQUIRE_EQ(ch.GetMoveFrequency(), 2);
|
|
|
|
REQUIRE_EQ(ch.GetVehicleType(), vt);
|
|
REQUIRE(!ch.IsAscending());
|
|
REQUIRE(!ch.IsDescending());
|
|
REQUIRE(!ch.IsAscendingOrDescending());
|
|
REQUIRE_EQ(ch.GetAltitude(), 0);
|
|
// FIXME: Player
|
|
//REQUIRE(!ch.IsInUse());
|
|
//REQUIRE(!ch.IsAboard());
|
|
// FIXME: Map
|
|
//REQUIRE(!ch.CanLand());
|
|
REQUIRE_EQ(ch.GetOrigSpriteName(), "");
|
|
REQUIRE_EQ(ch.GetOrigSpriteIndex(), 0);
|
|
|
|
REQUIRE_EQ(ch.GetMoveRoute(), lcf::rpg::MoveRoute());
|
|
}
|
|
|
|
TEST_CASE("InitVehicle") {
|
|
testInitVehicle(Game_Vehicle::Boat);
|
|
testInitVehicle(Game_Vehicle::Ship);
|
|
testInitVehicle(Game_Vehicle::Airship);
|
|
}
|
|
|
|
TEST_CASE("InitPlayer") {
|
|
Game_Player ch;
|
|
|
|
testInit(ch);
|
|
|
|
REQUIRE_EQ(ch.GetDirection(), 2);
|
|
REQUIRE_EQ(ch.GetFacing(), 2);
|
|
REQUIRE_EQ(ch.GetMoveSpeed(), 4);
|
|
REQUIRE(!ch.GetThrough());
|
|
REQUIRE_EQ(ch.GetVehicleType(), Game_Vehicle::None);
|
|
REQUIRE_EQ(ch.GetLayer(), 1);
|
|
REQUIRE_EQ(ch.GetMoveFrequency(), 2);
|
|
|
|
REQUIRE(!ch.IsPendingTeleport());
|
|
REQUIRE(!ch.InVehicle());
|
|
REQUIRE(!ch.InAirship());
|
|
REQUIRE(!ch.IsAboard());
|
|
REQUIRE(!ch.IsBoardingOrUnboarding());
|
|
REQUIRE_EQ(ch.GetVehicle(), nullptr);
|
|
|
|
REQUIRE(!ch.IsEncounterCalling());
|
|
REQUIRE_EQ(ch.GetTotalEncounterRate(), 0);
|
|
REQUIRE(!ch.IsMenuCalling());
|
|
|
|
REQUIRE(!ch.IsPanActive());
|
|
REQUIRE(!ch.IsPanLocked());
|
|
REQUIRE_EQ(ch.GetPanX(), lcf::rpg::SavePartyLocation::kPanXDefault);
|
|
REQUIRE_EQ(ch.GetPanY(), lcf::rpg::SavePartyLocation::kPanYDefault);
|
|
REQUIRE_EQ(ch.GetTargetPanX(), lcf::rpg::SavePartyLocation::kPanXDefault);
|
|
REQUIRE_EQ(ch.GetTargetPanY(), lcf::rpg::SavePartyLocation::kPanYDefault);
|
|
REQUIRE_EQ(ch.GetPanWait(), 0);
|
|
|
|
REQUIRE(ch.IsMapCompatibleWithSave(0));
|
|
REQUIRE(ch.IsDatabaseCompatibleWithSave(0));
|
|
}
|
|
|
|
TEST_CASE("InitEventNoPage") {
|
|
lcf::rpg::Event event;
|
|
Game_Event ch(0, &event);
|
|
|
|
testInit(ch);
|
|
|
|
REQUIRE_EQ(ch.GetDirection(), 2);
|
|
REQUIRE_EQ(ch.GetFacing(), 2);
|
|
REQUIRE_EQ(ch.GetMoveSpeed(), 4);
|
|
REQUIRE(ch.GetThrough());
|
|
REQUIRE_EQ(ch.GetLayer(), 1);
|
|
REQUIRE_EQ(ch.GetMoveFrequency(), 2);
|
|
|
|
REQUIRE_EQ(ch.GetId(), 0);
|
|
REQUIRE_EQ(ch.GetName(), "");
|
|
|
|
REQUIRE(!ch.IsWaitingForegroundExecution());
|
|
REQUIRE(!ch.WasStartedByDecisionKey());
|
|
REQUIRE_EQ(ch.GetTrigger(), std::nullopt);
|
|
REQUIRE_EQ(ch.GetOriginalMoveRouteIndex(), 0);
|
|
REQUIRE_EQ(ch.GetPage(1), nullptr);
|
|
REQUIRE_EQ(ch.GetActivePage(), nullptr);
|
|
}
|
|
|
|
TEST_CASE("InitEventDefaultPage") {
|
|
lcf::rpg::Event event;
|
|
event.pages.push_back({});
|
|
event.pages.back().move_type = lcf::rpg::EventPage::MoveType_stationary;
|
|
Game_Event ch(0, &event);
|
|
|
|
testInit(ch, 64);
|
|
|
|
REQUIRE_EQ(ch.GetDirection(), 2);
|
|
REQUIRE_EQ(ch.GetFacing(), 2);
|
|
REQUIRE_EQ(ch.GetMoveSpeed(), 3);
|
|
REQUIRE(!ch.GetThrough());
|
|
REQUIRE_EQ(ch.GetLayer(), 0);
|
|
REQUIRE_EQ(ch.GetMoveFrequency(), 3);
|
|
|
|
REQUIRE_EQ(ch.GetId(), 0);
|
|
REQUIRE_EQ(ch.GetName(), "");
|
|
|
|
REQUIRE(!ch.IsWaitingForegroundExecution());
|
|
REQUIRE(!ch.WasStartedByDecisionKey());
|
|
REQUIRE_EQ(ch.GetTrigger(), 0);
|
|
REQUIRE_EQ(ch.GetOriginalMoveRouteIndex(), 0);
|
|
REQUIRE_EQ(ch.GetPage(1), event.pages.data());
|
|
REQUIRE_EQ(ch.GetActivePage(), event.pages.data());
|
|
}
|
|
|
|
static void testBasicSet(Game_Character& ch) {
|
|
ch.SetX(55);
|
|
REQUIRE_EQ(ch.GetX(), 55);
|
|
|
|
ch.SetY(66);
|
|
REQUIRE_EQ(ch.GetY(), 66);
|
|
|
|
// FIXME: Remove this method.
|
|
ch.SetMapId(44);
|
|
REQUIRE_EQ(ch.GetMapId(), 44);
|
|
|
|
ch.SetDirection(Game_Character::UpLeft);
|
|
REQUIRE_EQ(ch.GetDirection(), Game_Character::UpLeft);
|
|
|
|
ch.SetFacing(Game_Character::Up);
|
|
REQUIRE_EQ(ch.GetFacing(), Game_Character::Up);
|
|
|
|
ch.SetFacingLocked(true);
|
|
REQUIRE(ch.IsFacingLocked());
|
|
|
|
ch.SetLayer(2);
|
|
REQUIRE_EQ(ch.GetLayer(), 2);
|
|
|
|
ch.SetMoveSpeed(6);
|
|
REQUIRE_EQ(ch.GetMoveSpeed(), 6);
|
|
|
|
ch.SetMoveFrequency(7);
|
|
REQUIRE_EQ(ch.GetMoveFrequency(), 7);
|
|
|
|
// FIXME: Test move routes
|
|
// Should SetMoveRoute() and SetMoveRouteIndex() be public?
|
|
ch.SetMoveRouteIndex(3);
|
|
REQUIRE_EQ(ch.GetMoveRouteIndex(), 3);
|
|
|
|
ch.SetMoveRouteOverwritten(true);
|
|
REQUIRE(ch.IsMoveRouteOverwritten());
|
|
|
|
ch.SetSpriteGraphic("SPRITE", 8);
|
|
REQUIRE_EQ(ch.GetSpriteName(), "SPRITE");
|
|
REQUIRE_EQ(ch.GetSpriteIndex(), 8);
|
|
REQUIRE(!ch.HasTileSprite());
|
|
|
|
ch.SetAnimFrame(3);
|
|
REQUIRE_EQ(ch.GetAnimFrame(), 3);
|
|
|
|
ch.SetAnimPaused(true);
|
|
REQUIRE(ch.IsAnimPaused());
|
|
|
|
// FIXME: Test flashing
|
|
ch.SetFlashLevel(99);
|
|
REQUIRE_EQ(ch.GetFlashLevel(), 99);
|
|
|
|
ch.SetFlashTimeLeft(99);
|
|
REQUIRE_EQ(ch.GetFlashTimeLeft(), 99);
|
|
|
|
ch.SetThrough(true);
|
|
REQUIRE(ch.GetThrough());
|
|
|
|
//FIXME: Test ResetThrough
|
|
|
|
ch.SetAnimationType(lcf::rpg::EventPage::AnimType_step_frame_fix);
|
|
REQUIRE_EQ(ch.GetAnimationType(), lcf::rpg::EventPage::AnimType_step_frame_fix);
|
|
|
|
ch.SetStopCount(78);
|
|
REQUIRE_EQ(ch.GetStopCount(), 78);
|
|
|
|
ch.SetMaxStopCount(99);
|
|
REQUIRE_EQ(ch.GetMaxStopCount(), 99);
|
|
|
|
// FIXME: Test Stop count IsStopCountActive
|
|
|
|
ch.SetAnimCount(78);
|
|
REQUIRE_EQ(ch.GetAnimCount(), 78);
|
|
|
|
// FIXME: Test anim count basic increment logic
|
|
// FIXME: Test anim count real
|
|
|
|
// FIXME: Test movement sequence
|
|
ch.SetRemainingStep(889);
|
|
REQUIRE_EQ(ch.GetRemainingStep(), 889);
|
|
|
|
ch.SetJumping(true);
|
|
REQUIRE(ch.IsJumping());
|
|
REQUIRE(!ch.IsMoving());
|
|
REQUIRE(!ch.IsStopping());
|
|
|
|
ch.SetBeginJumpX(77);
|
|
REQUIRE_EQ(ch.GetBeginJumpX(), 77);
|
|
|
|
ch.SetBeginJumpY(88);
|
|
REQUIRE_EQ(ch.GetBeginJumpY(), 88);
|
|
|
|
ch.SetFlying(true);
|
|
REQUIRE(ch.IsFlying());
|
|
|
|
// FIXME: Test Clamp
|
|
ch.SetTransparency(3);
|
|
REQUIRE_EQ(ch.GetTransparency(), 3);
|
|
|
|
ch.SetProcessed(true);
|
|
REQUIRE(ch.IsProcessed());
|
|
|
|
ch.SetPaused(true);
|
|
REQUIRE(ch.IsPaused());
|
|
|
|
ch.SetActive(false);
|
|
REQUIRE(!ch.IsActive());
|
|
|
|
ch.SetSpriteHidden(true);
|
|
REQUIRE(ch.IsSpriteHidden());
|
|
|
|
// FIXME: Visible test
|
|
}
|
|
|
|
static void testBasicSetVehicle(Game_Vehicle::Type vt) {
|
|
Game_Vehicle ch(vt);
|
|
|
|
testBasicSet(ch);
|
|
|
|
ch.SetOrigSpriteGraphic("VSPRITE", 9);
|
|
REQUIRE_EQ(ch.GetOrigSpriteName(), "VSPRITE");
|
|
REQUIRE_EQ(ch.GetOrigSpriteIndex(), 9);
|
|
}
|
|
|
|
TEST_CASE("BasicSetVehicle") {
|
|
testBasicSetVehicle(Game_Vehicle::Boat);
|
|
testBasicSetVehicle(Game_Vehicle::Ship);
|
|
testBasicSetVehicle(Game_Vehicle::Airship);
|
|
}
|
|
|
|
TEST_CASE("BasicSetPlayer") {
|
|
Game_Player ch;
|
|
|
|
testBasicSet(ch);
|
|
|
|
ch.SetMenuCalling(true);
|
|
REQUIRE(ch.IsMenuCalling());
|
|
|
|
ch.SetEncounterCalling(true);
|
|
REQUIRE(ch.IsEncounterCalling());
|
|
|
|
ch.SetTotalEncounterRate(100);
|
|
REQUIRE_EQ(ch.GetTotalEncounterRate(), 100);
|
|
|
|
// FIMXE: Test Panning
|
|
|
|
// FIXME: Test save counts
|
|
}
|
|
|
|
TEST_CASE("BasicSetEvent") {
|
|
lcf::rpg::Event event;
|
|
Game_Event ch(0, &event);
|
|
|
|
testBasicSet(ch);
|
|
|
|
ch.SetOriginalMoveRouteIndex(100);
|
|
REQUIRE_EQ(ch.GetOriginalMoveRouteIndex(), 100);
|
|
}
|
|
|
|
TEST_CASE("TransparencyAndOpacity") {
|
|
Game_Player ch;
|
|
|
|
ch.SetTransparency(-1);
|
|
REQUIRE_EQ(ch.GetTransparency(), 0);
|
|
REQUIRE_EQ(ch.GetOpacity(), 255);
|
|
REQUIRE(ch.IsVisible());
|
|
|
|
ch.SetTransparency(0);
|
|
REQUIRE_EQ(ch.GetTransparency(), 0);
|
|
REQUIRE_EQ(ch.GetOpacity(), 255);
|
|
REQUIRE(ch.IsVisible());
|
|
|
|
ch.SetTransparency(1);
|
|
REQUIRE_EQ(ch.GetTransparency(), 1);
|
|
REQUIRE_EQ(ch.GetOpacity(), 223);
|
|
REQUIRE(ch.IsVisible());
|
|
|
|
ch.SetTransparency(2);
|
|
REQUIRE_EQ(ch.GetTransparency(), 2);
|
|
REQUIRE_EQ(ch.GetOpacity(), 191);
|
|
REQUIRE(ch.IsVisible());
|
|
|
|
ch.SetTransparency(3);
|
|
REQUIRE_EQ(ch.GetTransparency(), 3);
|
|
REQUIRE_EQ(ch.GetOpacity(), 159);
|
|
REQUIRE(ch.IsVisible());
|
|
|
|
ch.SetTransparency(4);
|
|
REQUIRE_EQ(ch.GetTransparency(), 4);
|
|
REQUIRE_EQ(ch.GetOpacity(), 127);
|
|
REQUIRE(ch.IsVisible());
|
|
|
|
ch.SetTransparency(5);
|
|
REQUIRE_EQ(ch.GetTransparency(), 5);
|
|
REQUIRE_EQ(ch.GetOpacity(), 95);
|
|
REQUIRE(ch.IsVisible());
|
|
|
|
ch.SetTransparency(6);
|
|
REQUIRE_EQ(ch.GetTransparency(), 6);
|
|
REQUIRE_EQ(ch.GetOpacity(), 63);
|
|
REQUIRE(ch.IsVisible());
|
|
|
|
ch.SetTransparency(7);
|
|
REQUIRE_EQ(ch.GetOpacity(), 31);
|
|
REQUIRE_EQ(ch.GetTransparency(), 7);
|
|
REQUIRE(ch.IsVisible());
|
|
|
|
ch.SetTransparency(8);
|
|
REQUIRE_EQ(ch.GetTransparency(), 7);
|
|
REQUIRE_EQ(ch.GetOpacity(), 31);
|
|
REQUIRE(ch.IsVisible());
|
|
|
|
ch.SetTransparency(9);
|
|
REQUIRE_EQ(ch.GetTransparency(), 7);
|
|
REQUIRE_EQ(ch.GetOpacity(), 31);
|
|
REQUIRE(ch.IsVisible());
|
|
}
|
|
|
|
TEST_CASE("TileVsCharset") {
|
|
Game_Player ch;
|
|
|
|
REQUIRE(ch.HasTileSprite());
|
|
REQUIRE_EQ(ch.GetTileId(), 0);
|
|
REQUIRE_EQ(ch.GetSpriteName(), "");
|
|
REQUIRE_EQ(ch.GetSpriteIndex(), 0);
|
|
|
|
ch.SetSpriteGraphic("x", 2);
|
|
REQUIRE(!ch.HasTileSprite());
|
|
REQUIRE_EQ(ch.GetTileId(), 0);
|
|
REQUIRE_EQ(ch.GetSpriteName(), "x");
|
|
REQUIRE_EQ(ch.GetSpriteIndex(), 2);
|
|
|
|
ch.SetSpriteGraphic("", 3);
|
|
REQUIRE(ch.HasTileSprite());
|
|
REQUIRE_EQ(ch.GetTileId(), 3);
|
|
REQUIRE_EQ(ch.GetSpriteName(), "");
|
|
REQUIRE_EQ(ch.GetSpriteIndex(), 3);
|
|
}
|
|
|
|
TEST_CASE("Animated") {
|
|
Game_Player ch;
|
|
|
|
REQUIRE(!ch.IsAnimPaused());
|
|
|
|
ch.SetAnimationType(lcf::rpg::EventPage::AnimType_non_continuous);
|
|
REQUIRE(ch.IsAnimated());
|
|
REQUIRE(!ch.IsContinuous());
|
|
REQUIRE(!ch.IsSpinning());
|
|
|
|
ch.SetAnimationType(lcf::rpg::EventPage::AnimType_continuous);
|
|
REQUIRE(ch.IsAnimated());
|
|
REQUIRE(ch.IsContinuous());
|
|
REQUIRE(!ch.IsSpinning());
|
|
|
|
ch.SetAnimationType(lcf::rpg::EventPage::AnimType_fixed_non_continuous);
|
|
REQUIRE(ch.IsAnimated());
|
|
REQUIRE(!ch.IsContinuous());
|
|
REQUIRE(!ch.IsSpinning());
|
|
|
|
ch.SetAnimationType(lcf::rpg::EventPage::AnimType_fixed_continuous);
|
|
REQUIRE(ch.IsAnimated());
|
|
REQUIRE(ch.IsContinuous());
|
|
REQUIRE(!ch.IsSpinning());
|
|
|
|
ch.SetAnimationType(lcf::rpg::EventPage::AnimType_fixed_graphic);
|
|
REQUIRE(!ch.IsAnimated());
|
|
REQUIRE(!ch.IsContinuous());
|
|
REQUIRE(!ch.IsSpinning());
|
|
|
|
ch.SetAnimationType(lcf::rpg::EventPage::AnimType_spin);
|
|
REQUIRE(ch.IsAnimated());
|
|
REQUIRE(!ch.IsContinuous());
|
|
REQUIRE(ch.IsSpinning());
|
|
|
|
ch.SetAnimationType(lcf::rpg::EventPage::AnimType_step_frame_fix);
|
|
REQUIRE(!ch.IsAnimated());
|
|
REQUIRE(!ch.IsContinuous());
|
|
REQUIRE(!ch.IsSpinning());
|
|
|
|
ch.SetAnimPaused(true);
|
|
REQUIRE(ch.IsAnimPaused());
|
|
for (int i = 0; i <= static_cast<int>(lcf::rpg::EventPage::AnimType_step_frame_fix); ++i) {
|
|
ch.SetAnimationType(static_cast<lcf::rpg::EventPage::AnimType>(i));
|
|
REQUIRE(!ch.IsAnimated());
|
|
}
|
|
}
|
|
|
|
|
|
static void testVisible(Game_Character& ch) {
|
|
REQUIRE(ch.IsVisible());
|
|
|
|
ch.SetActive(false);
|
|
REQUIRE(!ch.IsVisible());
|
|
ch.SetActive(true);
|
|
REQUIRE(ch.IsVisible());
|
|
|
|
ch.SetSpriteHidden(true);
|
|
REQUIRE(!ch.IsVisible());
|
|
ch.SetSpriteHidden(false);
|
|
REQUIRE(ch.IsVisible());
|
|
}
|
|
|
|
TEST_CASE("VisiblePlayer") {
|
|
Game_Player ch;
|
|
|
|
testVisible(ch);
|
|
|
|
// FIXME: Test aboard
|
|
}
|
|
|
|
TEST_CASE("VisibleVehicle") {
|
|
Game_Vehicle ch(Game_Vehicle::Boat);
|
|
|
|
// FIXME: Requires map loaded
|
|
// testVisible(ch);
|
|
|
|
// FIXME: Test other map
|
|
}
|
|
|
|
TEST_CASE("VisibleEvent") {
|
|
lcf::rpg::Event event;
|
|
Game_Event ch(0, &event);
|
|
|
|
// FIXME: Test pages
|
|
//testVisible(ch);
|
|
|
|
}
|
|
|
|
TEST_CASE("LockFacingVsAnimType") {
|
|
for (int i = 0; i <= static_cast<int>(lcf::rpg::EventPage::AnimType_step_frame_fix); ++i) {
|
|
auto at = static_cast<lcf::rpg::EventPage::AnimType>(i);
|
|
|
|
Game_Player ch;
|
|
ch.SetAnimationType(at);
|
|
|
|
if (Game_Character::IsDirectionFixedAnimationType(at)) {
|
|
REQUIRE(ch.IsFacingLocked());
|
|
ch.SetFacingLocked(false);
|
|
REQUIRE(ch.IsFacingLocked());
|
|
ch.SetFacingLocked(true);
|
|
REQUIRE(ch.IsFacingLocked());
|
|
} else {
|
|
REQUIRE(!ch.IsFacingLocked());
|
|
ch.SetFacingLocked(true);
|
|
REQUIRE(ch.IsFacingLocked());
|
|
ch.SetFacingLocked(false);
|
|
REQUIRE(!ch.IsFacingLocked());
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST_SUITE_END();
|