summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2021-03-09 11:51:34 -0500
committerKelly Rauchenberger <fefferburbia@gmail.com>2021-03-09 11:51:34 -0500
commit89fc2da3f08fcd751ca069fde0987d193e59b007 (patch)
tree09d9f8c7fc44a72f3fa7677048a127286ac850a5 /src
parentdd052d68e95f5b2128da272127e165c4a70f3f94 (diff)
downloadtanetane-89fc2da3f08fcd751ca069fde0987d193e59b007.tar.gz
tanetane-89fc2da3f08fcd751ca069fde0987d193e59b007.tar.bz2
tanetane-89fc2da3f08fcd751ca069fde0987d193e59b007.zip
Added "let's switch places!" Claus sprite
He will wander randomly until you get close, and will then run at you. Talking to him or bumping into him does nothing currently. If you move out of his range of interest he will go back to wandering at a walking pace.

#10
Diffstat (limited to 'src')
-rw-r--r--src/behaviour_system.cpp33
-rw-r--r--src/script_system.cpp4
-rw-r--r--src/sprite.h4
3 files changed, 25 insertions, 16 deletions
diff --git a/src/behaviour_system.cpp b/src/behaviour_system.cpp index b68cd6d..f4f7546 100644 --- a/src/behaviour_system.cpp +++ b/src/behaviour_system.cpp
@@ -19,22 +19,27 @@ void BehaviourSystem::tick(double dt) {
19 while (timer_.step()) { 19 while (timer_.step()) {
20 for (int spriteId : game_.getSprites()) { 20 for (int spriteId : game_.getSprites()) {
21 Sprite& sprite = game_.getSprite(spriteId); 21 Sprite& sprite = game_.getSprite(spriteId);
22 if (!sprite.paused && sprite.behaviourType == BehaviourType::Wander) { 22 if (!sprite.paused) {
23 // 75% chance of changing what's happening 23 if (sprite.behaviourType == BehaviourType::Wander) {
24 if (std::bernoulli_distribution(0.75)(game_.getRng())) { 24 // 75% chance of changing what's happening
25 // 50% chance of choosing a direction or stopping 25 if (std::bernoulli_distribution(0.75)(game_.getRng())) {
26 if (std::bernoulli_distribution(0.5)(game_.getRng())) { 26 // 50% chance of choosing a direction or stopping
27 Direction dir; 27 if (std::bernoulli_distribution(0.5)(game_.getRng())) {
28 switch (std::uniform_int_distribution(0,3)(game_.getRng())) { 28 Direction dir;
29 case 0: dir = Direction::left; break; 29 switch (std::uniform_int_distribution(0,3)(game_.getRng())) {
30 case 1: dir = Direction::up; break; 30 case 0: dir = Direction::left; break;
31 case 2: dir = Direction::right; break; 31 case 1: dir = Direction::up; break;
32 default: dir = Direction::down; break; 32 case 2: dir = Direction::right; break;
33 default: dir = Direction::down; break;
34 }
35 game_.getSystem<CharacterSystem>().moveInDirection(spriteId, dir);
36 } else {
37 game_.getSystem<CharacterSystem>().stopDirecting(spriteId);
33 } 38 }
34 game_.getSystem<CharacterSystem>().moveInDirection(spriteId, dir);
35 } else {
36 game_.getSystem<CharacterSystem>().stopDirecting(spriteId);
37 } 39 }
40 } else if (sprite.behaviourType == BehaviourType::Follow) {
41 Sprite& target = game_.getSprite(sprite.followSpriteId);
42 game_.getSystem<CharacterSystem>().moveInDirection(spriteId, directionFacingPoint(target.loc - sprite.loc));
38 } 43 }
39 } 44 }
40 } 45 }
diff --git a/src/script_system.cpp b/src/script_system.cpp index 50ea60a..a50fa7a 100644 --- a/src/script_system.cpp +++ b/src/script_system.cpp
@@ -52,7 +52,8 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) {
52 "enclosureZone", &Sprite::enclosureZone, 52 "enclosureZone", &Sprite::enclosureZone,
53 "movementSpeed", &Sprite::movementSpeed, 53 "movementSpeed", &Sprite::movementSpeed,
54 "solid", &Sprite::solid, 54 "solid", &Sprite::solid,
55 "behaviourType", &Sprite::behaviourType); 55 "behaviourType", &Sprite::behaviourType,
56 "followSpriteId", &Sprite::followSpriteId);
56 57
57 engine_.new_usertype<MessageSystem>( 58 engine_.new_usertype<MessageSystem>(
58 "message", 59 "message",
@@ -242,6 +243,7 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) {
242 loadMapScripts(filename); 243 loadMapScripts(filename);
243 }); 244 });
244 245
246 engine_.set_function("directionFacingPoint", &directionFacingPoint);
245 engine_.set_function("cardinalDirectionFacingPoint", &cardinalDirectionFacingPoint); 247 engine_.set_function("cardinalDirectionFacingPoint", &cardinalDirectionFacingPoint);
246 248
247 engine_.script_file("../res/scripts/common.lua"); 249 engine_.script_file("../res/scripts/common.lua");
diff --git a/src/sprite.h b/src/sprite.h index 2ab306d..10dd3a8 100644 --- a/src/sprite.h +++ b/src/sprite.h
@@ -45,7 +45,8 @@ enum class CharacterMedium {
45enum class BehaviourType { 45enum class BehaviourType {
46 None, 46 None,
47 Wander, 47 Wander,
48 Path 48 Path,
49 Follow
49}; 50};
50 51
51enum class MirrorType { 52enum class MirrorType {
@@ -128,6 +129,7 @@ public:
128 vec2i pathfindingDestination; 129 vec2i pathfindingDestination;
129 bool cardinalDirectionsOnly = false; 130 bool cardinalDirectionsOnly = false;
130 std::deque<PathfindingInstruction> path; 131 std::deque<PathfindingInstruction> path;
132 int followSpriteId = -1;
131 133
132 // Mirror 134 // Mirror
133 MirrorType mirrorType = MirrorType::None; 135 MirrorType mirrorType = MirrorType::None;