Tesla (#21124)
* upload all textures
finished easiest part - TeslaGenerator
* Added Tesla energy logic
* add lightning pulse priority
* work
* optimise lightning arc system
* now tesla moving to LightningTarget entity and consume it
* some audio work
add airlock and computers to the LightningTarget
* add nice visual and explosions
add crashing to game
* rsi meta fix
* disabling explosions (crashing server)
I'll get back to that problem later.
* adding important admin logging
* a little bit of cleaning and documentation
* Persistent attempts to fix the server crashing on explosions. Accidental cleaning of everything I see.
* now the tesla incinerates everything it touches except the containment field.
* colliders work
* fix falling tesla on ground after being exploded
* add consume sound, add spawn and collapses sound
* added TeslaGenerator to cargo trading console
* add all tesla part to cargo trading console
* Tesla coils: Turn on and off, get energy from lightning, give energy to the grid.
* tesla coil is ready
* tesla grounding rod is ready
* clean up
* clean up 2
* grounding rods now working without power
* add LightningResistance parameter for LightningTarget Component
* add chaotic teleport
* eletrocution remove?
* deltanedas fix pack
* more fixes
* FIXES
* FIIIXEEES
* The "Grounding Rod" component is removed, and replaced with "LightiningSparking", which is responsible for changing the visuals when hit by lightning. Duplicate code from the coil is removed.
* ops
* fix
* nah, is escaped anyway
* increase tesla collider size
* keron bb
* try fix test?
* fix
* bruh
* check turn off sus comp
* prototype cleaning
* FIIX
* return and fix sus component
* fix tesla eating lightnings, now mini tesla is electrocuted
* commented some issues
* remove linq sorting
fix jumping system
minor fixes
* fix second Linq
* fix tesla colliders! Yeah, it works
* fix componentregistration
* Just retests
* not fix
* FIX TESLA
* fixes
* store targets
* back
* make dictionary of hashsets
* some sloth fixes
* stump
* playtest balance energy generation, return to unpotimized (but working) lightning shoot
* parity
* work on
* some new fix, some new bug (chasingComponent not chasing)
* comment
* fix ChasingWalkSystem
* fix collider tesla problem
* revert old unoptimized shoot lightning
* new fix pack
---------
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2023-12-28 16:11:50 +03:00
using Content.Server.Physics.Components ;
using Robust.Shared.Random ;
using Robust.Shared.Timing ;
using Robust.Shared.Physics.Systems ;
using Robust.Shared.Physics ;
using System.Numerics ;
using Robust.Shared.Physics.Controllers ;
using Robust.Shared.Utility ;
namespace Content.Server.Physics.Controllers ;
/// <summary>
/// A component which makes its entity periodically chaotic jumps arounds
/// </summary>
public sealed class ChaoticJumpSystem : VirtualController
{
[Dependency] private readonly IGameTiming _gameTiming = default ! ;
[Dependency] private readonly SharedTransformSystem _transform = default ! ;
[Dependency] private readonly IRobustRandom _random = default ! ;
[Dependency] private readonly SharedPhysicsSystem _physics = default ! ;
public override void Initialize ( )
{
base . Initialize ( ) ;
SubscribeLocalEvent < ChaoticJumpComponent , MapInitEvent > ( OnMapInit ) ;
}
private void OnMapInit ( Entity < ChaoticJumpComponent > chaotic , ref MapInitEvent args )
{
//So the entity doesn't teleport instantly. For tesla, for example, it's important for it to eat tesla's generator.
chaotic . Comp . NextJumpTime = _gameTiming . CurTime + TimeSpan . FromSeconds ( _random . NextFloat ( chaotic . Comp . JumpMinInterval , chaotic . Comp . JumpMaxInterval ) ) ;
}
public override void UpdateBeforeSolve ( bool prediction , float frameTime )
{
base . UpdateBeforeSolve ( prediction , frameTime ) ;
var query = EntityQueryEnumerator < ChaoticJumpComponent > ( ) ;
while ( query . MoveNext ( out var uid , out var chaotic ) )
{
//Jump
if ( chaotic . NextJumpTime < = _gameTiming . CurTime )
{
Jump ( uid , chaotic ) ;
chaotic . NextJumpTime + = TimeSpan . FromSeconds ( _random . NextFloat ( chaotic . JumpMinInterval , chaotic . JumpMaxInterval ) ) ;
}
}
}
private void Jump ( EntityUid uid , ChaoticJumpComponent component )
{
var transform = Transform ( uid ) ;
var startPos = _transform . GetWorldPosition ( uid ) ;
Vector2 targetPos ;
var direction = _random . NextAngle ( ) ;
var range = _random . NextFloat ( component . RangeMin , component . RangeMax ) ;
var ray = new CollisionRay ( startPos , direction . ToVec ( ) , component . CollisionMask ) ;
var rayCastResults = _physics . IntersectRay ( transform . MapID , ray , range , uid , returnOnFirstHit : false ) . FirstOrNull ( ) ;
if ( rayCastResults ! = null )
{
targetPos = rayCastResults . Value . HitPos ;
targetPos = new Vector2 ( targetPos . X - ( float ) Math . Cos ( direction ) , targetPos . Y - ( float ) Math . Sin ( direction ) ) ; //offset so that the teleport does not take place directly inside the target
}
else
{
targetPos = new Vector2 ( startPos . X + range * ( float ) Math . Cos ( direction ) , startPos . Y + range * ( float ) Math . Sin ( direction ) ) ;
}
Spawn ( component . Effect , transform . Coordinates ) ;
2024-09-29 03:25:21 +03:00
_transform . SetWorldPosition ( uid , targetPos ) ;
Tesla (#21124)
* upload all textures
finished easiest part - TeslaGenerator
* Added Tesla energy logic
* add lightning pulse priority
* work
* optimise lightning arc system
* now tesla moving to LightningTarget entity and consume it
* some audio work
add airlock and computers to the LightningTarget
* add nice visual and explosions
add crashing to game
* rsi meta fix
* disabling explosions (crashing server)
I'll get back to that problem later.
* adding important admin logging
* a little bit of cleaning and documentation
* Persistent attempts to fix the server crashing on explosions. Accidental cleaning of everything I see.
* now the tesla incinerates everything it touches except the containment field.
* colliders work
* fix falling tesla on ground after being exploded
* add consume sound, add spawn and collapses sound
* added TeslaGenerator to cargo trading console
* add all tesla part to cargo trading console
* Tesla coils: Turn on and off, get energy from lightning, give energy to the grid.
* tesla coil is ready
* tesla grounding rod is ready
* clean up
* clean up 2
* grounding rods now working without power
* add LightningResistance parameter for LightningTarget Component
* add chaotic teleport
* eletrocution remove?
* deltanedas fix pack
* more fixes
* FIXES
* FIIIXEEES
* The "Grounding Rod" component is removed, and replaced with "LightiningSparking", which is responsible for changing the visuals when hit by lightning. Duplicate code from the coil is removed.
* ops
* fix
* nah, is escaped anyway
* increase tesla collider size
* keron bb
* try fix test?
* fix
* bruh
* check turn off sus comp
* prototype cleaning
* FIIX
* return and fix sus component
* fix tesla eating lightnings, now mini tesla is electrocuted
* commented some issues
* remove linq sorting
fix jumping system
minor fixes
* fix second Linq
* fix tesla colliders! Yeah, it works
* fix componentregistration
* Just retests
* not fix
* FIX TESLA
* fixes
* store targets
* back
* make dictionary of hashsets
* some sloth fixes
* stump
* playtest balance energy generation, return to unpotimized (but working) lightning shoot
* parity
* work on
* some new fix, some new bug (chasingComponent not chasing)
* comment
* fix ChasingWalkSystem
* fix collider tesla problem
* revert old unoptimized shoot lightning
* new fix pack
---------
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2023-12-28 16:11:50 +03:00
}
}