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());
 }
Exemplo n.º 5
0
 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;
 }
Exemplo n.º 10
0
    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;
    }