MCPcopy Create free account
hub / github.com/SolarLune/masterplan / NearestPointTowardDisplayRectCenter

Method NearestPointTowardDisplayRectCenter

card.go:1160–1190  ·  view source on GitHub ↗
(in Vector)

Source from the content-addressed store, hash-verified

1158}
1159
1160func (card *Card) NearestPointTowardDisplayRectCenter(in Vector) Vector {
1161
1162 lines := []collidingLine{
1163 newCollidingLine(card.DisplayRect.X, card.DisplayRect.Y, card.DisplayRect.X+card.DisplayRect.W, card.DisplayRect.Y),
1164 newCollidingLine(card.DisplayRect.X+card.DisplayRect.W, card.DisplayRect.Y, card.DisplayRect.X+card.DisplayRect.W, card.DisplayRect.Y+card.DisplayRect.H),
1165 newCollidingLine(card.DisplayRect.X+card.DisplayRect.W, card.DisplayRect.Y+card.DisplayRect.H, card.DisplayRect.X, card.DisplayRect.Y+card.DisplayRect.H),
1166 newCollidingLine(card.DisplayRect.X, card.DisplayRect.Y+card.DisplayRect.H, card.DisplayRect.X, card.DisplayRect.Y),
1167 }
1168
1169 center := card.Center()
1170
1171 piercingPoint := center.Sub(in).Scale(10000)
1172 dest := in.Add(piercingPoint)
1173
1174 colliding := newCollidingLine(in.X, in.Y, dest.X, dest.Y)
1175
1176 closestPoint := Vector{}
1177 closestPointDist := float32(math.MaxFloat32)
1178
1179 for _, l := range lines {
1180 if point, ok := colliding.IntersectionPointsLine(l); ok {
1181 if dist := in.DistanceSquared(point); dist < closestPointDist {
1182 closestPointDist = dist
1183 closestPoint = point
1184 }
1185 }
1186 }
1187
1188 return closestPoint
1189
1190}
1191
1192func (card *Card) DeadlineState() int {
1193

Callers 2

UpdateMethod · 0.80
DrawMethod · 0.80

Calls 7

CenterMethod · 0.95
newCollidingLineFunction · 0.85
ScaleMethod · 0.80
DistanceSquaredMethod · 0.80
SubMethod · 0.45
AddMethod · 0.45

Tested by

no test coverage detected