Steve Ruiz Profile picture
Jan 29 18 tweets 5 min read
I think I got it, omg
Compare to current behavior:
Quick refresher on how arrows are *supposed to* work.
When we have an arrow between shapes, that arrow has a start and end point (actual location is based on a normalized "anchor" from when the arrow was last modified, long story)
We fire a ray from the start point through end point.
We expect to have have one intersection from the start shape, and two intersections in the end shape. We pick the intersection closer to the start point.
If the arrow has a decoration (ie an arrowhead) then we move the point back toward the other point by some distance.
Now we can draw our arrow.
Hooray!
To my great shame and frustration, this routine only works if certain conditions are met. Did you catch them?
For example, what if the shapes are overlapping?
Then you get this one.
Doesn't look very good, in part because the arrow is no longer pointing "towards" its anchor, but through it.
The fix for this is to force an arrow of a known distance that points toward the anchor point.
This also works if the shape is overlapping the target point, though not as well.
There's some more to deciding when to change strategies (arrow too short? contain or collide?) but that's the main approach.
Still some work to do 🤔

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Steve Ruiz

Steve Ruiz Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @steveruizok

Jan 28
Let's talk about edge cases in an undo / redo system. Image
In our last thread, we looked at basic change, undo and redo operations.
(p.s. if you like these threads, sponsor me on Github!) github.com/sponsors/steve…
Read 24 tweets
Jan 28
Working on a new Undo / Redo manager that runs on mobx and JSON patches. Here's how it works! 🧵 Image
First off, here's a CodeSandbox. Looks pretty simple but there's a lot going on. I've included my tests! codesandbox.io/s/mobx-undo-re…
In our system, we're tracking changes to a "document". Each time the document changes, we generate a "snapshot" and compare it with our previous snapshot in order to create a "patch" that describes how to get from the current snapshot back to the previous. Image
Read 24 tweets
Jan 27
Implemented click detection all the way up to quadruple clicks. 🤯 Image
It sort of works like this: each time the user clicks, we fire three events—we fire onPointerDown when they start clicking, then onPointerUp _and_ onClick when the they stop clicking.
We also keep track of a clicking state.

This starts in "idle" and can be either "idle", "pendingDoubleClick", "pendingTripleClick", "pendingQuadrupleClick", or "overflow".
Read 12 tweets
Jan 15
path finding + smarter animations
What do I mean by smarter? Let's say each of our blocks has a position in a grid, [x, y]. (It's actually a 3D grid, so [x, y, z], but we can ignore the z for now)
The positions map to the block's index in z/y/x arrays. This means that a block's position can only be an integer like 1 or 2, but never a float like 1.25 or 2.81.

So a position like [0, 0] is fine but [0.5, 0] is not.
Read 8 tweets
Jan 13
adjacency-based outlines
Better to draw outlines between tiles of different types?
nope, slight dark outline on all blocks and hard outlines only on empty adjacent spots
Read 6 tweets
Jan 13
I'm currently experiencing a "where do I put whitespace in my code" crisis. Image
I've usually placed empty lines between pretty much everything except maybe variable definitions, but this makes different methods hard to spot and sometimes makes methods themselves harder to read? Image
But saving empty lines for just separating methods / class fields can lead to some very dense code. Image
Read 5 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(