Skip to content

Commit

Permalink
[CR] Camp calorie test (CleverRaven#68127)
Browse files Browse the repository at this point in the history
* Camp calorie test

* Pare it down and just access the item's components directly
---------
Co-authored-by: ehughsbaird <44244083+ehughsbaird@users.noreply.github.com>
Co-authored-by: David Seguin <davidseguin@live.ca>
Co-authored-by: Kevin Granade <kevin.granade@gmail.com>
  • Loading branch information
RenechCDDA authored and Maleclypse committed Nov 16, 2023
1 parent c961a1e commit c69dd57
Show file tree
Hide file tree
Showing 3 changed files with 111 additions and 0 deletions.
37 changes: 37 additions & 0 deletions data/mods/TEST_DATA/items.json
Original file line number Diff line number Diff line change
Expand Up @@ -4755,5 +4755,42 @@
"to_hit": -3,
"melee_damage": { "bash": 1 },
"revert_to": "cheese_hard"
},
{
"type": "COMESTIBLE",
"comestible_type": "FOOD",
"id": "test_100_kcal",
"category": "spare_parts",
"symbol": ",",
"color": "light_gray",
"name": { "str": "TEST rock cheese" },
"description": "A perfectly divided 100kcal portion of pure food.",
"price": 0,
"spoils_in": "360 days",
"calories": 100,
"material": [ "stone" ],
"weight": "100 g",
"volume": "250 ml",
"to_hit": -3,
"melee_damage": { "bash": 1 }
},
{
"type": "COMESTIBLE",
"comestible_type": "FOOD",
"id": "test_200_kcal",
"category": "spare_parts",
"symbol": ",",
"color": "light_gray",
"name": { "str": "TEST 200kcal recipe inherited" },
"description": "Two 100kcal portions of pure food smashed together by a rude survivor. Not a sandwich.",
"price": 0,
"spoils_in": "360 days",
"//": "The purpose of this item is to make sure it gives 200kcal when crafted from 100+100, and not the set calories",
"calories": 185,
"material": [ "stone" ],
"weight": "100 g",
"volume": "250 ml",
"to_hit": -3,
"melee_damage": { "bash": 1 }
}
]
12 changes: 12 additions & 0 deletions data/mods/TEST_DATA/recipes.json
Original file line number Diff line number Diff line change
Expand Up @@ -279,5 +279,17 @@
"time": "2 h",
"autolearn": true,
"using": [ [ "tailoring_cotton_patchwork", 6 ] ]
},
{
"result": "test_200_kcal",
"type": "recipe",
"activity_level": "NO_EXERCISE",
"category": "CC_FOOD",
"subcategory": "CSC_FOOD_MEAT",
"skill_used": "cooking",
"difficulty": 0,
"time": "2 s",
"autolearn": true,
"components": [ [ [ "test_100_kcal", 2 ] ] ]
}
]
62 changes: 62 additions & 0 deletions tests/faction_camp_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#include <cstddef>
#include <iosfwd>
#include <utility>
#include <vector>

#include "basecamp.h"
#include "cata_catch.h"
#include "clzones.h"
#include "coordinates.h"
#include "faction.h"
#include "map.h"
#include "map_helpers.h"
#include "overmap.h"
#include "overmapbuffer.h"
#include "player_helpers.h"

static const zone_type_id zone_type_CAMP_FOOD( "CAMP_FOOD" );
static const zone_type_id zone_type_CAMP_STORAGE( "CAMP_STORAGE" );

TEST_CASE( "camp_calorie_counting", "[camp]" )
{
clear_avatar();
clear_map();
map &m = get_map();
const tripoint_abs_ms zone_loc = m.getglobal( tripoint{ 5, 5, 0 } );
mapgen_place_zone( zone_loc.raw(), zone_loc.raw(), zone_type_CAMP_FOOD, your_fac, {},
"food" );
mapgen_place_zone( zone_loc.raw(), zone_loc.raw(), zone_type_CAMP_STORAGE, your_fac, {},
"storage" );
faction *camp_faction = get_player_character().get_faction();
const tripoint_abs_omt this_omt = project_to<coords::omt>( zone_loc );
m.add_camp( this_omt, "faction_camp" );
std::optional<basecamp *> bcp = overmap_buffer.find_camp( this_omt.xy() );
basecamp *test_camp = *bcp;
WHEN( "a base item is added to larder" ) {
camp_faction->food_supply = 0;
item test_100_kcal( "test_100_kcal" );
tripoint_bub_ms zone_local = m.bub_from_abs( zone_loc );
m.i_clear( zone_local.raw() );
m.add_item_or_charges( zone_local, test_100_kcal );
REQUIRE( m.has_items( zone_local ) );
test_camp->distribute_food();
CHECK( camp_faction->food_supply == 100 );
}

WHEN( "an item with inherited components is added to larder" ) {
camp_faction->food_supply = 0;
item test_100_kcal( "test_100_kcal" );
item test_200_kcal( "test_200_kcal" );
item_components made_of;
made_of.add( test_100_kcal );
made_of.add( test_100_kcal );
// Setting the actual components. This will return 185 unless it's actually made up of two 100kcal components!
test_200_kcal.components = made_of;
tripoint_bub_ms zone_local = m.bub_from_abs( zone_loc );
m.i_clear( zone_local.raw() );
m.add_item_or_charges( zone_local, test_200_kcal );
test_camp->distribute_food();
CHECK( camp_faction->food_supply == 200 );
}
}
// TODO: Tests for: Check calorie display at various activity levels, camp crafting works as expected (consumes inputs, returns outputs+byproducts, costs calories)

0 comments on commit c69dd57

Please sign in to comment.