Пример #1
0
    private void OnEnable()
    {
        var gameObjectEntity = GetComponent <GameObjectEntity>();
        var entityManager    = gameObjectEntity.EntityManager;
        var abilityEntity    = gameObjectEntity.Entity;

        // Default components
        entityManager.AddComponentData(abilityEntity, new CharacterAbility());
        entityManager.AddComponentData(abilityEntity, new AbilityControl());

        // Ability components
        var predictedState = new PredictedState
        {
            ammoInClip = settings.clipSize,
            fireRate   = settings.minFireRate
        };

        settings.projectileRegistryId = projectileType.registryId;

        entityManager.AddComponentData(abilityEntity, settings);
        entityManager.AddComponentData(abilityEntity, new LocalState());
        entityManager.AddComponentData(abilityEntity, predictedState);
        entityManager.AddComponentData(abilityEntity, new InterpolatedState());

        // Setup replicated ability
        var replicatedAbility = entityManager.GetComponentObject <ReplicatedAbility>(abilityEntity);

        replicatedAbility.predictedHandlers       = new IPredictedDataHandler[2];
        replicatedAbility.predictedHandlers[0]    = new PredictedEntityHandler <AbilityControl>(entityManager, abilityEntity);
        replicatedAbility.predictedHandlers[1]    = new PredictedEntityHandler <PredictedState>(entityManager, abilityEntity);
        replicatedAbility.interpolatedHandlers    = new IInterpolatedDataHandler[1];
        replicatedAbility.interpolatedHandlers[0] = new InterpolatedEntityHandler <InterpolatedState>(entityManager, abilityEntity);
    }
Пример #2
0
    public override Entity Create(EntityManager entityManager, List <Entity> entities)
    {
        var entity = CreateCharBehavior(entityManager);

        entities.Add(entity);

        // Ability components
        var internalState = new InternalState
        {
            rayQueryId = -1
        };
        var predictedState = new PredictedState
        {
            action     = Action.Idle,
            ammoInClip = settings.clipSize,
            COF        = settings.minCOF,
        };

        entityManager.AddComponentData(entity, settings);
        entityManager.AddComponentData(entity, internalState);
        entityManager.AddComponentData(entity, predictedState);
        entityManager.AddComponentData(entity, new InterpolatedState());

        return(entity);
    }
Пример #3
0
 public static void DecreaseCone(ref PredictedState state, ref Settings settings, float deltaTime)
 {
     // Decrease cone
     if (state.action != Phase.Fire)
     {
         state.COF -= settings.COFData.DecreaseVel * deltaTime;
         if (state.COF < settings.COFData.min)
         {
             state.COF = settings.COFData.min;
         }
     }
 }
Пример #4
0
    public override Entity Create(EntityManager entityManager, List <Entity> entities)
    {
        var entity = CreateCharBehavior(entityManager);

        entities.Add(entity);

        // Ability components
        var predictedState = new PredictedState
        {
            ammoInClip = settings.clipSize,
            fireRate   = settings.minFireRate
        };

        entityManager.AddComponentData(entity, settings);
        entityManager.AddComponentData(entity, new LocalState());
        entityManager.AddComponentData(entity, predictedState);
        entityManager.AddComponentData(entity, new InterpolatedState());
        return(entity);
    }
Пример #5
0
    static public Action GetCommandRequest(ref PredictedState predictedState, ref Settings settings,
                                           ref UserCommand command)
    {
        if (command.reload && predictedState.ammoInClip < settings.clipSize)
        {
            return(Action.Reload);
        }

        var isIdle = predictedState.action == Action.Idle;

        if (isIdle)
        {
            if (command.primaryFire && predictedState.ammoInClip == 0)
            {
                return(Action.Reload);
            }
        }

        return(command.primaryFire ? Action.Fire : Action.Idle);
    }
Пример #6
0
    public static State GetPreferredState(ref PredictedState predictedState, ref Settings settings,
                                          ref UserCommand command)
    {
        if (command.buttons.IsSet(settings.reloadButton) && predictedState.ammoInClip < settings.clipSize)
        {
            return(State.Reload);
        }

        var isIdle = predictedState.action == State.Idle;

        if (isIdle)
        {
            if (command.buttons.IsSet(settings.fireButton) && predictedState.ammoInClip == 0)
            {
                return(State.Reload);
            }
        }

        return(command.buttons.IsSet(settings.fireButton) ? State.Fire : State.Idle);
    }
Пример #7
0
    private void OnEnable()
    {
        var gameObjectEntity = GetComponent <GameObjectEntity>();
        var entityManager    = gameObjectEntity.EntityManager;
        var abilityEntity    = gameObjectEntity.Entity;

        // Default components
        entityManager.AddComponentData(abilityEntity, new CharacterAbility());
        entityManager.AddComponentData(abilityEntity, new AbilityControl());

        // Ability components
        var localState = new LocalState
        {
            rayQueryId = -1
        };
        var predictedState = new PredictedState
        {
            phase      = Phase.Idle,
            ammoInClip = settings.clipSize,
            COF        = settings.minCOF,
        };

        entityManager.AddComponentData(abilityEntity, settings);
        entityManager.AddComponentData(abilityEntity, localState);
        entityManager.AddComponentData(abilityEntity, predictedState);
        entityManager.AddComponentData(abilityEntity, new InterpolatedState());

        // Setup replicated ability
        var replicatedAbility = entityManager.GetComponentObject <ReplicatedAbility>(abilityEntity);

        replicatedAbility.predictedHandlers       = new IPredictedDataHandler[2];
        replicatedAbility.predictedHandlers[0]    = new PredictedEntityHandler <AbilityControl>(entityManager, abilityEntity);
        replicatedAbility.predictedHandlers[1]    = new PredictedEntityHandler <PredictedState>(entityManager, abilityEntity);
        replicatedAbility.interpolatedHandlers    = new IInterpolatedDataHandler[1];
        replicatedAbility.interpolatedHandlers[0] = new InterpolatedEntityHandler <InterpolatedState>(entityManager, abilityEntity);
    }
Пример #8
0
 public bool VerifyPrediction(ref PredictedState state)
 {
     return(true);
 }
Пример #9
0
 public static Phase GetPreferredState(ref PredictedState predictedState, ref Settings settings,
                                       in Ability.EnabledAbility enabledAbility)