82 lines
1.4 KiB
C
82 lines
1.4 KiB
C
#pragma once
|
|
|
|
#include <X11/Xlib.h>
|
|
|
|
#define VERSION "v0.1"
|
|
|
|
#define N_KEYBINDS 3
|
|
#define ABS(a) ((a) < 0 ? -(a) : (a))
|
|
#define CLAMP(v, l, h) ((v) < (l) ? (l) : ((v) > (h) ? (h) : (v)))
|
|
|
|
enum state {
|
|
SLEEPING, IDLE,
|
|
N, S, E, W,
|
|
NW, NE, SW, SE,
|
|
DRAGGED,
|
|
HAPPY,
|
|
STATE_LAST
|
|
};
|
|
|
|
struct animation {
|
|
struct frame* frames;
|
|
const char* name;
|
|
int* frame_durations; /* NULL = use FRAME_DURATION */
|
|
int n_frames;
|
|
Bool loop;
|
|
};
|
|
|
|
struct bind {
|
|
KeySym sym;
|
|
unsigned long mask;
|
|
};
|
|
|
|
struct frame {
|
|
Pixmap pix;
|
|
Pixmap mask;
|
|
int duration;
|
|
};
|
|
|
|
struct mouse {
|
|
int x;
|
|
int y;
|
|
};
|
|
|
|
struct pet {
|
|
Window window;
|
|
Bool chasing;
|
|
Bool frozen;
|
|
enum state state;
|
|
int x;
|
|
int y;
|
|
double subpixel_x; /* subpixel x */
|
|
double subpixel_y; /* subpixel y */
|
|
|
|
struct animation* current_animation;
|
|
int current_frame;
|
|
long frame_time;
|
|
|
|
/* random wander state */
|
|
int target_x;
|
|
int target_y;
|
|
long wander_wait; /* time to wait at destination */
|
|
|
|
/* sleep state */
|
|
long frozen_time; /* time spent frozen */
|
|
|
|
/* happy state */
|
|
enum state previous_state; /* state before becoming happy */
|
|
long happy_time; /* time spent happy */
|
|
|
|
/* dragging state */
|
|
Bool dragging;
|
|
int drag_offset_x;
|
|
int drag_offset_y;
|
|
Bool was_chasing; /* was chasing before drag */
|
|
Bool was_frozen; /* was frozen before drag */
|
|
|
|
/* speech bubble */
|
|
const char* speech;
|
|
long speech_time;
|
|
Window bubble_window;
|
|
};
|