m5stack-avatar
Loading...
Searching...
No Matches
Eyes.hpp
Go to the documentation of this file.
1
11#ifndef M5AVATAR_EYES_HPP_
12#define M5AVATAR_EYES_HPP_
13
14#include <BoundingRect.h>
15#include <DrawContext.h>
16#include <Drawable.h>
17
18#include "DrawingUtils.hpp"
19namespace m5avatar {
20
21// pure drawing functions
22void drawStraightEyelid(M5Canvas *canvas, int16_t x, int16_t y, int16_t width,
23 int16_t height, uint16_t color);
24// base class for eyes
25
26class BaseEye : public Drawable {
27 protected:
28 uint16_t height_;
29 uint16_t width_;
30 bool is_left_;
31
32 // caches for drawing
33 ColorPalette *palette_;
34 int16_t center_x_;
35 int16_t center_y_;
36 Gaze gaze_;
37 uint16_t iris_bg_color_;
38 uint16_t skin_color_;
39 int16_t iris_x_;
40 int16_t iris_y_;
41 float open_ratio_;
42 Expression expression_;
43
44 public:
45 BaseEye(bool is_left);
46 BaseEye(uint16_t width, uint16_t height, bool is_left);
47 void update(M5Canvas *canvas, BoundingRect rect, DrawContext *ctx);
48};
49
50class EllipseEye : public BaseEye {
51 public:
52 using BaseEye::BaseEye;
53 void draw(M5Canvas *canvas, BoundingRect rect, DrawContext *ctx);
54};
55
56class ToonEye1 : public BaseEye {
57 protected:
58 void computeEyelidBaseWaypoints(float &medial_x, float &medial_y,
59 float &center_x, float &center_y,
60 float &lateral_x, float &lateral_y,
61 uint16_t eyelid_width, uint16_t eyelid_height,
62 uint16_t eyelid_bottom);
63 void computeEyelashBaseWaypoints(
64 float &tip_x, float &tip_y, float &bottom_x, float &bottom_y,
65 float &medial_x, float &medial_y, uint16_t eye_lash_width,
66 uint16_t eye_lash_height, uint16_t eyelid_lateral_x,
67 uint16_t eyelid_bottom, uint16_t eyelid_width, uint16_t eyelid_height);
68
69 public:
70 using BaseEye::BaseEye;
71
72 void update2(M5Canvas *canvas, BoundingRect rect, DrawContext *ctx);
73 void drawEyelid(M5Canvas *canvas);
74 void drawEyelash(M5Canvas *canvas);
75 void overwriteOpenRatio();
76 void draw(M5Canvas *canvas, BoundingRect rect, DrawContext *ctx);
77};
78
79// sigurenui eye
80class ToonEye2 : public BaseEye {
81 protected:
82 void computeEyelidBaseWaypoints(float &medial_x, float &medial_y,
83 float &center_x, float &center_y,
84 float &lateral_x, float &lateral_y,
85 uint16_t eyelid_width, uint16_t eyelid_height,
86 uint16_t eyelid_bottom);
87 void computeEyelashBaseWaypoints(
88 float &tip_x, float &tip_y, float &bottom_x, float &bottom_y,
89 float &medial_x, float &medial_y, uint16_t eye_lash_width,
90 uint16_t eye_lash_height, uint16_t eyelid_lateral_x,
91 uint16_t eyelid_bottom, uint16_t eyelid_width, uint16_t eyelid_height);
92
93 public:
94 using BaseEye::BaseEye;
95
96 void update2(M5Canvas *canvas, BoundingRect rect, DrawContext *ctx);
97
98 void drawEyelid(M5Canvas *canvas);
99 void drawEyelash(M5Canvas *canvas);
100 void overwriteOpenRatio();
101 void draw(M5Canvas *canvas, BoundingRect rect, DrawContext *ctx);
102};
103
104class PinkDemonEye : public BaseEye {
105 public:
106 using BaseEye::BaseEye;
107 void drawEyelid(M5Canvas *canvas);
108 void overwriteOpenRatio();
109 void draw(M5Canvas *canvas, BoundingRect rect, DrawContext *ctx);
110};
111
112class DoggyEye : public BaseEye {
113 public:
114 using BaseEye::BaseEye;
115 void draw(M5Canvas *canvas, BoundingRect rect, DrawContext *ctx);
116};
117} // namespace m5avatar
118
119#endif
drawing utils including geometry handling
Definition: Eyes.hpp:26
Definition: BoundingRect.h:10
Definition: ColorPalette.h:50
Definition: Eyes.hpp:112
Definition: DrawContext.h:22
Definition: Drawable.h:13
Definition: Eyes.hpp:50
Definition: Gaze.h:9
Definition: Eyes.hpp:104
Definition: Eyes.hpp:56
Definition: Eyes.hpp:80