public PawnControllerInputUseObjectGameAction(Entity pawnController, fix2 objectPosition, GameAction.UseParameters gameActionData) : base(pawnController) { ObjectPosition = objectPosition; GameActionData = gameActionData; }
public PawnControllerInputUseItem(Entity pawnController, int itemIndex, GameAction.UseParameters gameActionData) : base(pawnController) { ItemIndex = itemIndex; GameActionData = gameActionData ?? throw new ArgumentNullException(nameof(gameActionData)); }
public SimPlayerInputUseItem(int itemIndex, GameAction.ParameterData[] useData) { ItemIndex = itemIndex; UseData = GameAction.UseParameters.Create(useData); }
public SimPlayerInputUseItem(int itemIndex, List <GameAction.ParameterData> useData) { ItemIndex = itemIndex; UseData = GameAction.UseParameters.Create(useData.ToArray()); }
public static void RequestExecuteGameAction(ISimGameWorldReadWriteAccessor accessor, Entity actionInstigator, Entity actionEntity, GameAction.UseParameters parameters = null) { RequestExecuteGameAction(accessor, actionInstigator, actionEntity, targets: default, parameters);
public SimPlayerInputUseItem(int itemIndex, GameAction.UseParameters useData) { ItemIndex = itemIndex; UseData = useData; }
public SimPlayerInputUseObjectGameAction(fix2 objectPosition, List <GameAction.ParameterData> useData) { ObjectPosition = objectPosition; UseData = GameAction.UseParameters.Create(useData.ToArray()); }
public SimPlayerInputUseObjectGameAction(fix2 objectPosition, GameAction.ParameterData[] useData) { ObjectPosition = objectPosition; UseData = GameAction.UseParameters.Create(useData); }
public SimPlayerInputUseObjectGameAction(fix2 objectPosition, GameAction.UseParameters useData) { ObjectPosition = objectPosition; UseData = useData; }
public static bool RequestUseItem(ISimGameWorldReadWriteAccessor accessor, Entity actor, Entity item, GameAction.UseParameters parameters = null) { if (!CommonReads.CanUseItem(accessor, actor, item, out ItemUnavailablityReason unavailabilityReason)) { Log.Warning($"Instigator {accessor.GetNameSafe(actor)} cannot use item {accessor.GetNameSafe(item)} because of {unavailabilityReason}"); return(false); } accessor.TryGetComponent(item, out ItemAction itemAction); CommonWrites.RequestExecuteGameAction(accessor, item, itemAction, parameters); // reduce consumable amount if (accessor.GetComponent <StackableFlag>(item)) { CommonWrites.DecrementItem(accessor, item, actor); } // reduce instigator AP if (accessor.TryGetComponent(item, out ItemSettingAPCost itemActionPointCost) && itemActionPointCost.Value != 0) { CommonWrites.ModifyStatFix <ActionPoints>(accessor, actor, -itemActionPointCost.Value); } // Cooldown if (accessor.TryGetComponent(item, out ItemTimeCooldownData itemTimeCooldownData)) { accessor.SetOrAddComponent(item, new ItemCooldownTimeCounter() { Value = itemTimeCooldownData.Value }); } return(true); }
private bool ExecuteGameAction(Entity actionInstigator, Entity actionEntity, NativeArray<Entity> targets, GameAction.UseParameters parameters = null) { if (!TryGetComponent(actionEntity, out GameActionId actionId) || !actionId.IsValid) { Log.Error($"Could not find valid game action id on action {EntityManager.GetNameSafe(actionEntity)}. Action instigator: {EntityManager.GetNameSafe(actionInstigator)}"); return false; } GameAction gameAction = GameActionBank.GetAction(actionId); if (gameAction == null) return false; // error is already logged in 'GetAction' method GameAction.ExecInputs input = new GameAction.ExecInputs(Accessor, CommonReads.GetActionContext(Accessor, actionInstigator, actionEntity, targets), parameters); GameAction.ExecOutput output = new GameAction.ExecOutput() { ResultData = new List<GameAction.ResultDataElement>() }; if (!gameAction.Execute(in input, ref output)) { Log.Info($"Couldn't use {gameAction}."); return false; } // Feedbacks GameAction.ResultData resultData = new GameAction.ResultData() { Count = output.ResultData.Count }; for (int i = 0; i < output.ResultData.Count; i++) { switch (i) { case 0: resultData.DataElement_0 = output.ResultData[0]; break; case 1: resultData.DataElement_1 = output.ResultData[1]; break; case 2: resultData.DataElement_2 = output.ResultData[2]; break; case 3: resultData.DataElement_3 = output.ResultData[3]; break; default: break; } } // copy native array to make sure its persisten var persistentContext = input.Context; if (input.Context.Targets.IsCreated) { persistentContext.Targets = new NativeArray<Entity>(input.Context.Targets.Length, Allocator.Persistent); input.Context.Targets.CopyTo(persistentContext.Targets); } PresentationEvents.GameActionEvents.Push(new GameActionUsedEventData() { GameActionContext = persistentContext, GameActionResult = resultData }); return true; }