Skip to content

Instantly share code, notes, and snippets.

View makoConstruct's full-sized avatar

mako yass makoConstruct

View GitHub Profile
@makoConstruct
makoConstruct / pursuit.cpp
Created January 3, 2019 00:14
pursuit behaviour
float distanceToSlowDown(float initialSpeed, float deceleration){ return sq(initialSpeed)/(2*deceleration); }
float maxDistanceBeforeSlowingWithin(float initialSpeed, float time){ return initialSpeed*time/2; }
bool updateApproacher(float dif, float& currentVelocity, float deceleration, float acceleration, float delta, float error = 1){ //dif is target - position, returns true iff zeroing
float dist = abs(dif);
float sign = dif/dist;
float absvel = currentVelocity*sign;
float acd = acceleration*delta;
float avd = absvel*delta;
float ded = deceleration*delta;
@makoConstruct
makoConstruct / gist:371f7e98d0775917f62a5033dd36014f
Created August 15, 2018 04:28
you want an example of termpose being used. Oh I'll give you an example
faunMode true
debugMode false
devMode true
zoomViewSpanLog 5.75
zoomSpanLogForDialogue 4
unzoomedViewSpanRelZoomedp 2.7
mapViewSpanRelWorldp 1.3
boardViewSpanRelZoomedp 0.5
cameraZoomDur 0.3
ParentBeingBody
hello
'"Oh. Sopra mori. Welcome to the world, little spore. Have you been introduced to the town yet?
>"What's \"Sopra mori\"?
'"Impossible to explain to such a little thing as you, darling little spore. There's so much you have to learn. You'll take some directions to town, wont you?
enter directions
>"Where is it?
enter directions
>"Leave me alone
'"A dangerous attitude. Bad things can happen to you out here alone, you know. If you don't go to town and take root, you could lose ALL of your data.
@makoConstruct
makoConstruct / Approacher2d.cpp
Last active October 25, 2017 04:55
Smoothly accelerates and decelerates to land exactly on target
void updateApproacher(v2& currentPosition, v2& currentVelocity, v2 target, float delta, float acceleration, float deceleration, float maxSpeed){
if(delta == 0) return;
v2 dto = target - currentPosition;
float dtm = dto.magnitude();
float vm = currentVelocity.magnitude();
auto distanceToStop = [&](float initialVelocity, float deceleration){
float deltdec = deceleration*delta;
float numberOfFramesToSlowDown = max(0.0f, floor((initialVelocity - deltdec)/(deltdec)));
return numberOfFramesToSlowDown*delta*(initialVelocity - (deltdec*(numberOfFramesToSlowDown + 1))/2);
};
@makoConstruct
makoConstruct / careful_easing.cpp
Created April 5, 2017 05:53
very smooth, 'smart' (but still pure functions of time) easing animations. Specify target, time to reach target, and initial velocity. Smoothly accelerates and decelerates to get there and stand still exactly on time
float linearAccelerationEaseInOutWithInitialVelocity(float t, float initialVelocity){
if(t >= 1.0){ return 1.0; }
return t*(t*((initialVelocity - 2)*t + (3.0f - 2*initialVelocity)) + initialVelocity);
}
float velocityOfLinearAccelerationEaseInOutFromInitialVelocity(float t, float initialVelocity){
if(t >= 1.0){ return 0.0; }
return t*((3.0f*initialVelocity - 6.0f)*t + (6.0f - 4.0f*initialVelocity)) + initialVelocity;
@makoConstruct
makoConstruct / pointAndConnectionAnimation.cpp
Created March 26, 2017 00:26
only part of the logic for animating rectangular point and line generata as a series of strokes
void FolkBodySpec::prepAnimation(){
//start by identifying clusters
auto groupColorings = fillCopies(itemTrayDimensionX*itemTrayDimensionY, 0);
u8 nextColoring = 1;
vector<Coord> centralNode;
overRegion(itemTrayDimensionX, itemTrayDimensionY, [&](Coord c){
uint ik = itemOffset(c);
if(locatedItems[ik]){
u8 gc;
if(!groupColorings[ik]){
@makoConstruct
makoConstruct / termpose_helpers.cpp
Created March 11, 2017 00:22
it's mindnumbing to go alone, take these
Term const* findTermConst(vector<Term> const& candidates, string const& key){
for(Term const& t : candidates){
if(t.isList() && t.l.l.size() > 1){
Term const& ft = t.l.l[0];
if(ft.isStr() && ft.s.s == key){
return &t;
}
}
}
return nullptr;
@makoConstruct
makoConstruct / astar.cpp
Last active October 31, 2016 05:37
defines a graph and implements A Star pathfinding algo. Depends on a few utility functions and type aliases. It's obvious enough what they mean, so you'd have no trouble swapping them out for whatever you use.
//graph stuff
template<typename T>
struct GraphNode{
vector<GraphNode*> neighbors;
T v;
void unlink(){
for(GraphNode* neigh : neighbors){
removeEl(neigh->neighbors, this);
}
neighbors.clear();
precision mediump float;
attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_uv;
attribute vec2 a_angleUnit;
attribute float a_pixelSize;
attribute float a_innerRadius;
uniform mat4 u_projection;
varying vec4 color;
precision mediump float;
varying vec4 color;
varying vec2 uv;
varying float pixelSize;
varying float innerRadius;
varying vec2 angleUnit;