Giter Club home page Giter Club logo

prairie's Introduction

Prairie

A Game Development Toolkit for Historians

Prairie is a library of scripts for Unity that enables non-programmers to create interactive historical experiences. The goal of Prairie is to allow users to create something engaging to curious minds, while never having to touch a line of code.

Prairie brings three things together: Unity, Twine, and your 3D model.

  • Unity is the software Prairie runs on top of. In Unity, you can drag and drop Prairie components onto your game so that it interactively tells a story, without writing any code.
  • Twine is your tool for creating a narrative. With Twine, you can create create-your-own-adventure stories, in which your character can move from passage to passage down a narrative path. Prairie allows you to easily move your Twine story into your game in Unity.
  • Your 3D model is the stage on which your game will play out. You can create this using your favorite 3D modeling software (such as Blender or Sketchup). If you're just getting started, you can try creating a story with a very basic model in this tutorial.

For tutorials and documentation, see the wiki.

Contributing to Prairie's development

You don't need to write any code to make a game with Prairie, but if you want to help us with the code behind the scenes, we'd love to see your contributions and pull requests! To get started, pull the code to your computer and open the project in Unity.

Directory tips

  • Add files to a folder called Ignored/ if you don't want to commit them to the repo.
  • The Standard Assets folder is ignored.

prairie's People

Contributors

brennan724 avatar cpimhoff avatar donahuec avatar grahamearley avatar mjavaly avatar shoemakerc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

prairie's Issues

Add TwineNode interaction

For activating new current node and deactivating its parent.

Could be used later for presenting the newly activated node's body text

`NextTwineNode` select node from dropdown

So much simpler (and type-safer) than the current "select any GameObject in your hierarchy".


It'd be great to have a generic GUI function like this which draws a checkbox dropdown menu and returns the value selected.

  static Value GUICheckbox(Value[] options)

That way we could reuse this across lots of our components.

Handle multiple interactions on an item gracefully

What happens if you add multiple interactions to an item? Are there multiple prompts?

You can use a TriggerInteraction to do multiple interactions nicely, but that might not be a user's first intuition.

Area Annotations

Currently, there is not much scaffolding or support for area based interactions. This needs to be created.

Player Area Annotations Property

FirstPersonInteractor.areaAnnotationsInRange must be coordinated and set by appropriate area annotations as the player enters and exits their bounding boxes.

Note: Implementing Player.drawToolbar(annotations) is blocked by this task. This can be implemented separately (as in, will be separated into its own Git issue), but relies on FirstPersonInteractor.areaAnnotationsInRange being set.

Prune old Branches

We should start deleting old branches after they've been merged into master.

No need to keep a bunch of these around...

Player Toolbar

This issue is somewhat blocked by issue #67, which will setup Player.areaAnnotationsInRange is populated.

However, we can still implement this, as long as dummy information is sent to Player.drawToolbar(annotations).

Player Toolbar

The player will automatically draw a toolbar with .areaAnnotationsInRange as its contents using drawToolbar(annotations). This function must be implemented.

We also need a good way to activate items in that toolbar...

Make a more complex and "real" demo with the Workhouse model or something similar

This could raise some new issues or give us more ideas on what is good/bad about the Prairie workflow.

It will also give us a more interesting demo to show than the abstract game with spheres and cylinders! ๐ŸŽฎ

(Note: this probably won't be a tutorial itself -- but it would help us see what steps need more documentation).

Make a one-click importer for all annotations

For example, suppose a user has a directory with a bunch of text files with names that match Game Objects. This importer would go through that folder and add each text file to an annotation about the Game Object that matches the name of the text file.

This is pretty brittle (changing names of objects would stop the importer from working). We need to discuss this further and think about how it would work.

Change prompt in FirstPersonInteractor to be blank / Custom GUIs

If the "prompt" variable in FirstPersonInteractor were the empty string "", instead of "Press F to", changing the "prompt" within an interaction script could directly change the GUI box on screen (helpful for when interacting with an object changes the user's options i.e. Tumble, Swivel)

New Array Population Interface in Inspector

The default one is trash. Let's make a better one (where you don't need to specify number of elements) and has simpler add and remove buttons.


It'd be great to have a generic GUI function like this which draws an Array UI Element, and returns the result.

  static class PrairieGUI
      static T[] list<T>(T[] elements) where T : Object

That way we could reuse this array UI element across lots of different of our components.

Add thought/decision-based TwineNode interactions

Right now, there are two main types of TwineNode interactions: area-based (e.g. entering a room), and click-based (e.g. clicking a light switch).

But there's a third type that shows up in some of the Workhouse Twine stories: the player can make a decision (without explicity doing anything in the space) that will change what options are presented to them.

For example, the player could wake up in the morning and decide to be rebellious that day by not doing their chores. This decision will affect their options later on, but the decision isn't made by entering a room or clicking anything.

To implement this, we could add a checkbox (or something similar) to a TwineNode interaction to indicate that it is a decision. Then, in the on-screen TwineNode HUD, we could display some text below the node's body text. The text could list all the possible child nodes and an associated key to press to activate them (i.e. "Press X to rebel by not doing your chores today").

Finalize full abstract walkthrough tutorial(s)

Right now, the basic walkthrough tutorial assumes quite a bit of knowledge about Twine, Unity, and Prairie. We should emphasize that this tutorial is not meant to be the starting point for using Prairie (or, it could be the starting point, as long as it points to smaller tutorials for each concept it uses).

Also, we should re-do the GIFs and perhaps make them into small YouTube videos or GIFv / Gfycat clips. Perhaps a good option is to use Gfycat's Gif Brewery mac app to create GIFs that we can host on Gfycat and embed in the wiki with play/pause/fullscreen controls. (This is feedback from Austin after he looked at the tutorial).

Write wiki article about how to write Twine stories for Prairie

There are some general structure tips for a Twine story to work best in Prairie (i.e. storing "variables" in your states, setting up states that result from clicking on things, etc).

There is also at least one tag that you can use to get some Prairie functionality: prairie_decision (see #91). So we should document this too.

Prompt Sensible Defaults on Addition

From user testing:

The surprise entrance of a Prompt component was confusing to some. Is there some way to make that more obvious? (or to fill in sensible defaults for prompts?)

Expanded Annotation System

Set up annotations to handle all three types of annotations (ignore toolbar of area annotations for now?)

Annotation Summary

Annotation drawing Summary

Annotations must be given a summary field and draw it to screen (if it exists) inside of Annotation.DrawSummary().

Once this is implemented, it should auto-magic-ally be incorporated by FirstPersonInteractor. See #65 for information on the changes made to stub this function.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.