Meant to be a playground where people can be creative
Phun is meant to be a playground where people can be creative. It can also be used as an educational tool to learn about physics concepts such as restitution and friction.
Phun was coded in C using OpenGL, GLEW, SDL (for window management), SDL_image (for reading images) and boost, including boost_filesystem.
Everything was coded by Emil Ernerfeldt, including the user interface and physics engine.
NOTE: Phun is free for non-commercial use. Use Phun at your own risk! It comes with no warranty, and it can be quite addictive!
What's New in This Release:
Rendering:
Added support for textured geometries
Added new optional rendering mode for water: software meta surface.
Scene files:
New file format: .phz which is a zip containing the scene, a thumbnail and any used textures.
Velocities for objects and water particles is now saved to the scene files.
Water and groups can now be saved in phunlets
Tools:
New brush tool
New gear tool
New cut tool
Polygon tool: self-intersecting polygons are now handled (e.g. figure-of-eight:s)
Added the ability to choose the chain building blocks (right-click a group of objects with exactly two hinges attached to the world)
When reconnecting a chain to the first geometry in the chain, the chaintool will now create a perfect closed chain with no hinges to the background
New behavior: to move or drag something, first select it and then drag it with most any tool.
Hinge/fixjoint/spring now attaches to selected geometries first (used to always attach the top two entities)
Added the ability to throw things with the move-tool
Added 'snap to axis' functionality when holding down SHIFT for Move and Clone tool.
UI:
Added three levels to the user interface: Simple, Medium and Advanced
Made the camera move smoothly
Added the ability to rotate the camera with an object (reset rotation with "Zoom to scene" or "Default view")
Made Phun more touch-screen friendly (especially when "pen input" is selected)
Added the ability to add text onto boxes
Pens no longer draw anything when moved in paused mode.
Added the ability to select water and move it around, clone it etc.
Added extra cursor icon to indicate which tool is selected
Added support for non-Latin1 8-bit character sets (you'll need to create a new font file and set Font in the translation file).
Added a loading screen
Added a splashscreen
Changed how a hinge is drawn if it is a motor
Added support for pen tablets (including pressure sensitivity when using new brush tool)
Mouse-over object highlighting is now only active if the simulation is paused.
Fixed so that Phun binds ctrl over left_ctrl and right_ctrl (same for alt, shift and meta) in hinge/geom controllers and Keys.bind.
Changed mirror/kill/motor key behavior to only work when the simulation is running
When rotating objects or creating planes you will now get automatic 15∞ snapping when the cursor is close to the origin.
Added the ability to drag-and-drop images and scenes into Phun from explorer (Windows only)
Menus:
Went back to the old GUI with rounder and larger components
The context menu is now always open instead of poping up on right-click
Sliders now round to closest integer or other "simple" number
Added a few predefined materials (and you can create your own if you like - see the "materials" folder)
Dragging the clone button now creates a clone of the selected objects
Added "select alike" button, that selects identical objects (good for finding clones)
Added sliders for gravity strength and direction in options
Added a button to the menu bar to hide all other gui components.
Added the ability to automatically attach tracers to selected geometries
Added option "gearify" to add gears to an object (cog sizes decided in the gear tool options)
Added "transform into box" action alongside the old "transform into circle".
Added a layer filter menu - now specific collision layers can be filtered out from rendering and interaction
Changed the color picking sliders from HSL to HSV. Change back by setting "App.GUI.useHSL = true;" in either console or config.cfg
Added Sim.time to the simulation info box
Reorganized the user interface a lot
Added cvar GUI.tooltips so the user can disable tooltips.
Physics:
Added support for holy polygons (polygons with holes)
Added Constructive Solid Geometry (CSG) - select one of two intersecting objects and in the CSG menu select Cut, Intersect, Subtract or Add.
Added the ability to create "killer" geometries, that removes anything they touch from the simulation.
Replaced Scene.fallLimit with four "killer planes" that removes anything they touch from the simulation. These can be deleted if desired.
Added the ability to link the rotation of an object to the direction of gravity
Increased the number of collision groups to seven.
Physics engine:
Added attraction: a distance dependent forces between geometries in the same collision group
Added the concept of cables - transparent code that makes chains far more robust than before even under large stress. See the old behavior with "Sim.cables = false;"
Greatly improved the stability of towers/stacking
Fixed an energy- and momentum leak caused by interaction between forces (springs, gravity, ...) and constraints (hinges, contacts).
Scripting:
Added a scripting menu in advanced mode where object attributes can be set.
Added onCollide function to geometries - this is a function that is called when two objects collide. It has an event argument e with members e.pos, e.normal, e.other and e.this.
Added closure "Scene.my" that can contain user defined scene specific variables that will be serialized with the scene.
Added two Thyme-meta-functions: Reflection.ExecuteCode and Reflection.ExecuteFile
Added command Scene.Open which opens a scene given a filename.
Added command Scene.SaveAs which saves the current scene to a given file. WARNING: Will overwrite any existing file without asking!
Thyme is now Turing complete through an if-else-clause of the form: (foo ? bar : baz)
Improved the Thyme parser to be able to handle chained infix operators (e.g. "4/2*2") without extra parentheses.
Thyme is now case insensitive
Added Thyme support for hexadecimal and binary numbers (0xf0a1, 0b101011)
Added Thyme support for the operators == and != for lists.
Fixes:
Fixed text input of characters with Alt Gr, i.e. []{}" etc depending on keyboard layout
Changed screenshot format from tga to png.
Fixed a problem with drawing mouse-cursors when in fullscreen mode.
Fixed a problem where thin polygons would get really fouled up distance maps
Fixed copy-and-paste of text and phunlets
Removed the cmd window in Windows
A lot more fixes and tweaks that I've forgotten
Optimization:
Speeded up mirror and uniform-axes scaling of polygons while also saving memory
General speedups, especially for large scenes
Added (very) limited support for multicore; type in "Threading.numThreads = N" (no quotations) in your console or config.cfg, where N is your number of cores. May speed up really huge scenes slightly, but may also slow it down.