Roguelike
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
energy.h
Go to the documentation of this file.
1 #ifndef ROGUELIKE_COMPONENT_ENERGY_H_
2 #define ROGUELIKE_COMPONENT_ENERGY_H_
3 
4 // Inheritance
6 
7 // External Dependencies
8 #include <cmath>
9 
10 // Internal Dependencies
11 // (none)
12 
13 // Forward Declarations
14 #include "game/base.h"
15 
16 namespace game {
17 namespace component {
18 
19 class Energy : public ComponentBase {
20  typedef ComponentBase super;
21  public:
23  : super(owner),
24  arms_(100.0), legs_(100.0), eyes_(100.0),
25  max_arms_(100.0), max_legs_(100.0), max_eyes_(100.0),
26  regen_arms_( 1.0), regen_legs_( 1.0), regen_eyes_( 1.0),
27  time_carry_( 0.0),
28  last_tick_( 0), next_tick_( 0) {}
29  ~Energy() {}
30 
31  // Getters
32  double arms() const { return arms_; }
33  double legs() const { return legs_; }
34  double eyes() const { return eyes_; }
35  double max_arms() const { return max_arms_; }
36  double max_legs() const { return max_legs_; }
37  double max_eyes() const { return max_eyes_; }
38  double regen_arms() const { return regen_arms_; }
39  double regen_legs() const { return regen_legs_; }
40  double regen_eyes() const { return regen_eyes_; }
41  int last_tick() const { return last_tick_; }
42  int next_tick() const { return next_tick_; }
43 
44  // Setters
45  void set_arms(double arms) { arms_ = arms; }
46  void set_legs(double legs) { legs_ = legs; }
47  void set_eyes(double eyes) { eyes_ = eyes; }
48  void set_max_arms(double max_arms) { max_arms_ = max_arms; }
49  void set_max_legs(double max_legs) { max_legs_ = max_legs; }
50  void set_max_eyes(double max_eyes) { max_eyes_ = max_eyes; }
51  void set_regen_arms(double regen_arms) { regen_arms_ = regen_arms; }
52  void set_regen_legs(double regen_legs) { regen_legs_ = regen_legs; }
53  void set_regen_eyes(double regen_eyes) { regen_eyes_ = regen_eyes; }
54  void set_last_tick(int last_tick) { last_tick_ = last_tick; }
55  void set_next_tick(int next_tick) { next_tick_ = next_tick; }
56 
57  void set_time_carry(double time_carry) { time_carry_ = time_carry; }
58 
59  // Useful stuff
60  double Mean() const { return (arms_ + legs_ + eyes_) / 3.0 ; }
61  void Regen(double time) {
62  arms_ = std::max(0.0, std::min(max_arms_, arms_+regen_arms_*time));
63  legs_ = std::max(0.0, std::min(max_legs_, legs_+regen_legs_*time));
64  eyes_ = std::max(0.0, std::min(max_eyes_, eyes_+regen_eyes_*time));
65  }
66 
67  bool Spend(double arms, double legs, double eyes) {
68  if(arms_ < arms) return false; // not enough arms.
69  if(legs_ < legs) return false; // not enough energ.. uh, legs
70  if(eyes_ < eyes) return false; // YOU REQUIRE ADITIONAL PYLONS, I MEAN, EYES.
71  arms_ -= arms;
72  legs_ -= legs;
73  eyes_ -= eyes;
74  return true;
75  }
76 
77  double PopTimeCarry() { double ret = time_carry_; time_carry_ = 0.0; return ret; }
78 
79  private:
80  double arms_;
81  double legs_;
82  double eyes_;
83 
84  double max_arms_;
85  double max_legs_;
86  double max_eyes_;
87 
88  double regen_arms_;
89  double regen_legs_;
90  double regen_eyes_;
91 
92  int last_tick_;
93  int next_tick_;
94 
95  double time_carry_;
96 };
97 
98 } // namespace component
99 } // namespace game
100 
101 #endif // ROGUELIKE_COMPONENT_VISION_H_
void set_regen_legs(double regen_legs)
Definition: energy.h:52
Definition: gameobject.h:53
double max_arms() const
Definition: energy.h:35
double eyes() const
Definition: energy.h:34
int last_tick() const
Definition: energy.h:41
void set_legs(double legs)
Definition: energy.h:46
double regen_eyes() const
Definition: energy.h:40
~Energy()
Definition: energy.h:29
void set_regen_eyes(double regen_eyes)
Definition: energy.h:53
void set_next_tick(int next_tick)
Definition: energy.h:55
Definition: aim.cc:15
double Mean() const
Definition: energy.h:60
bool Spend(double arms, double legs, double eyes)
Definition: energy.h:67
double arms() const
Definition: energy.h:32
Definition: componentbase.h:19
void set_eyes(double eyes)
Definition: energy.h:47
double max_eyes() const
Definition: energy.h:37
void set_time_carry(double time_carry)
Definition: energy.h:57
int next_tick() const
Definition: energy.h:42
double regen_arms() const
Definition: energy.h:38
void set_regen_arms(double regen_arms)
Definition: energy.h:51
void Regen(double time)
Definition: energy.h:61
Definition: energy.h:19
void set_max_legs(double max_legs)
Definition: energy.h:49
void set_last_tick(int last_tick)
Definition: energy.h:54
void set_arms(double arms)
Definition: energy.h:45
Energy(game::base::GameObject *owner)
Definition: energy.h:22
double legs() const
Definition: energy.h:33
void set_max_eyes(double max_eyes)
Definition: energy.h:50
void set_max_arms(double max_arms)
Definition: energy.h:48
double PopTimeCarry()
Definition: energy.h:77
double regen_legs() const
Definition: energy.h:39
double max_legs() const
Definition: energy.h:36