- Added support for seat enter and exit events and a test for them - Added support for entering and exiting seat from code - Changed the Id property of ECS objects to non-abstract, requiring it in the constructor, so that the Player class can inherit EcsObjectBase - Added a weird constructor to EcsObjectBase that allows running code to determine the object Id - Added interface for engines that receive entity functions - Exposed the entity submission scheduler and removed it from FullGameFields because it moved from there - Made the Game.Enter event only fire after the first entity submission so the game is fully initialized and the local player exists - Added all seat groups to the dictionary
33 lines
No EOL
1.2 KiB
C#
33 lines
No EOL
1.2 KiB
C#
using RobocraftX.Character;
|
|
using RobocraftX.Character.Movement;
|
|
using Svelto.ECS;
|
|
using TechbloxModdingAPI.Engines;
|
|
|
|
namespace TechbloxModdingAPI.Players
|
|
{
|
|
public class PlayerEventsEngine : IApiEngine, IReactOnSwap<CharacterPilotSeatEntityStruct>
|
|
{
|
|
public void Ready()
|
|
{
|
|
}
|
|
|
|
public EntitiesDB entitiesDB { get; set; }
|
|
public void Dispose()
|
|
{
|
|
}
|
|
|
|
public string Name => "TechbloxModdingAPIPlayerEventsEngine";
|
|
public bool isRemovable => false;
|
|
|
|
public void MovedTo(ref CharacterPilotSeatEntityStruct entityComponent, ExclusiveGroupStruct previousGroup, EGID egid)
|
|
{
|
|
var seatId = entityComponent.pilotSeatEntity.ToEGID(entitiesDB);
|
|
var player = EcsObjectBase.GetInstance(new EGID(egid.entityID, CharacterExclusiveGroups.OnFootGroup),
|
|
e => new Player(e.entityID));
|
|
if (previousGroup == CharacterExclusiveGroups.InPilotSeatGroup)
|
|
player.seatExited.Invoke(this, new PlayerSeatEventArgs { SeatId = seatId});
|
|
else if (egid.groupID == CharacterExclusiveGroups.InPilotSeatGroup)
|
|
player.seatEntered.Invoke(this, new PlayerSeatEventArgs { SeatId = seatId });
|
|
}
|
|
}
|
|
} |