stackchan-display
Loading...
Searching...
No Matches
Eyes.h
1// NOTE: migrated from https://github.com/botamochi6277/m5stack-avatar/blob/master/src/Eyes.hpp
2#pragma once
3
4#include "FacialDrawable.h"
5
6namespace stackchan::display
7{
8
9 // pure drawing functions
10 void drawStraightEyelid(M5Canvas &canvas, int16_t x, int16_t y, int16_t width,
11 int16_t height, uint16_t color);
12
13 void updateTriangleEyelidPoints(m5::Vector2i &center, m5::Size2i &size, bool is_left,
14 ExpressionWeight &expression_weight,
16
21 class BaseEye : public FacialDrawable
22 {
23 protected:
24 // common state values for eyes
25 bool is_left_;
26 m5::Vector2i gaze_{0, 0};
27 m5::Vector2i iris_position_{0, 0};
28
29 unsigned long milli_sec_ = 0;
30 unsigned long last_saccade_millis_ = 0;
31 uint32_t saccade_interval_ = 1000;
32 m5::Vector2i saccade_noise_ = m5::Vector2i();
33
34 void updateGaze(ExpressionWeight &weight, uint16_t range);
35 void updateSaccade(ExpressionWeight &expression_weight);
36
37 public:
38 using FacialDrawable::FacialDrawable;
39 BaseEye(int16_t x, int16_t y, int16_t width, int16_t height, bool is_left);
40 };
41
42 class Eye : public BaseEye
43 {
44 private:
45 int radius_ = 16;
46
47 public:
48 using BaseEye::BaseEye;
49
50 virtual void draw(M5Canvas &canvas, ExpressionWeight &expression_weight, ColorPalette &palette) override;
51 };
52
53 class EllipseEye : public BaseEye
54 {
55 public:
56 using BaseEye::BaseEye;
57 virtual void draw(M5Canvas &canvas, ExpressionWeight &expression_weight, ColorPalette &palette) override;
58 };
59
60} // namespace stackchan::display
Definition Vector.h:105
Definition Vector.h:9
Base class for Eye, draw nothing.
Definition Eyes.h:22
Definition ColorPalette.h:48
Definition Eyes.h:54
Definition Expression.h:39
Definition Eyes.h:43
Definition FacialDrawable.h:11