Inspiration
I’ve always been interested in location-based applications. That hybrid approach of enhancing real life with technology is something that I'm passionate about.
What it does
It's an experience where you need to go around Vancouver finding a set of llamas that are walking around. It's a multiplayer experience so the actions of other users affect the general experience state.
How I built it
The backend is built with C# and uses SignalR to create communication channels with the client—essentially an abstraction over WebSockets. I used NetTopologySuite for geospatial operations, such as checking whether a point lies inside a polygon, get the distance between two points or converting WKT strings into geometries. Combined with ProjNET, I also handled coordinate transformations from degrees (WGS84) to meters on a projected map like Mercator.
The front end was made with Kotlin and jetpack compose, using a mapbox map, signalR client and generativeai package to interact with Gemini.
Challenges we ran into
The limitations of Mapbox ModelLayer, I had some problems with the shadows casted by 3d objects and also had some issues to achieve a smooth movement of the llamas.
Accomplishments that we're proud of
I manage the llamas’ movement paths within a defined polygon boundary. The backend first generates random origin and destination points inside that boundary. To ensure realistic and walkable routes—so that llamas don’t wander into buildings or bodies of water—I use the Mapbox Directions API to create the path between those two points. A bearing is also generated so that the llama always faces the direction it’s walking
Based on each llama’s velocity (in meters per second), I calculate the next position between the current point and the next target point. These position updates are generated every 1.5 seconds (configurable), and the data is streamed to the client. On the frontend, an additional interpolation is applied so that the llama moves smoothly between frames, creating fluid and natural motion.
What we learned
I learned more about geospatial operations, SignalR, Kotlin and jetpack compose
What's next for Who let the llamas out?
- Different personalities
- Location marker for the user
- Broadcast a message to other users
- Create proximity chats with other users
- Ranking system
- Complex behaviors from the Llamas.
Built With
- android-studio
- android-studio-backend:-c#
- c#
- generativeai-gemini
- jetpack-compose
- jetpackcompose
- kotlin
- mapbox-directions-api
- mapbox-directions-api-frontend:-kotlin
- mapbox-map
- nettopologysuite
- projnet
- signalr
- signalr-client
- visual-studio

Log in or sign up for Devpost to join the conversation.