Scrape Effects (#1139)
* Add props to Surface for impact decal and scrape effects / decals
* Use ContactPoint + SurfaceNormal to pass into AddImpactSound
* Let's add decals and particle effects for impacts but try only doing it if speed > 30 - maybe we configure this per surface?
* Add PhysicsImpact struct and use that to seperate effects for Hard and Soft impacts in Surface description (decals + fx)
* Correctly spawn soft or hard physics impact particles + decals based on squared speed
* Add normal from first valid manifold on contact to friction events to pass to C#
* Enable/Disable physics impacts and scrape events as props for now, pass normal from fiction event to AddFrictionSound and create effects where necessary
* Also grab contact center from first manifold and pass to C#
* Use contact pos for decals + effects, try to base effect frequency on energy volume scale, fix decal placement remove particles on friction effect stop
* Set destroy time to 0.5 (this is a failsafe anyway)
* Don't have particles follow entity, do it ourselves so we can set to actual contact pos
* Set forward for scrape particles to contact normal
* Use method for getting inherited surface values if necessary to avoid repeating same code
* Add Mass and Direction named control points for friction particles. Mass is body mass, direction is body velocity normal. CP0 is already setting position and contact normal
* Lower destroy time for effects
* Reorganize scrape data in surface def, lower default values. Don't fallback to rough by default. If it's a smooth scrape and there's no effects for that - do nothing by default
* Surface is considered smooth by default, can set roughness factor higher for rough surfaces...
* Get material for triangle by index for shape 2 on friction events should fix all friction events against world surfaces having hit surface be "default"
* Store friction hit surface (last) and if we've changed hit surface stop any previous effects and sounds
* Remove unused prop
* Remove unused var
* Make EnableScrapeEffects and EnableImpactEffects internal for now
* Make FrictionEffects a dictionary
* Call PhysicsGameSystem.Shutdown on GameLoop shutdown to ensure vars cleared
* Add an Intensity named control point value (0-1) for scrape particle effects to use