void UGameplayCueNotify_Static::HandleGameplayCue(AActor* MyTarget, EGameplayCueEvent::Type EventType, FGameplayCueParameters Parameters)
{
	if (MyTarget && !MyTarget->IsPendingKill())
	{
		K2_HandleGameplayCue(MyTarget, EventType, Parameters);

		switch (EventType)
		{
		case EGameplayCueEvent::OnActive:
			OnActive(MyTarget, Parameters);
			break;

		case EGameplayCueEvent::WhileActive:
			WhileActive(MyTarget, Parameters);
			break;

		case EGameplayCueEvent::Executed:
			OnExecute(MyTarget, Parameters);
			break;

		case EGameplayCueEvent::Removed:
			OnRemove(MyTarget, Parameters);
			break;
		};
	}
	else
	{
		ABILITY_LOG(Warning, TEXT("Null Target"));
	}
}
示例#2
0
void IEventChannel::FiredEvents()
{
	ChannelEventFlags val=mFiredEvents;
	mFiredEvents = ChannelEventFlags::None;

	if (MEDUSA_FLAG_HAS(val,ChannelEventFlags::Read))
	{
		OnActive();
		OnRead();
	}
	if (!mIsAlive)
	{
		return;
	}

	if (MEDUSA_FLAG_HAS(val, ChannelEventFlags::Write))
	{
		OnActive();
		OnWrite();
	}

	if (MEDUSA_FLAG_HAS(val, ChannelEventFlags::Timeout))
	{
		OnTimeout();
	}

	if (MEDUSA_FLAG_HAS(val, ChannelEventFlags::Retry))
	{
		OnRetry();
	}

	if (MEDUSA_FLAG_HAS(val, ChannelEventFlags::Fault))
	{
		OnError();
	}
	
	if (MEDUSA_FLAG_HAS(val, ChannelEventFlags::Idle))
	{
		OnIdle();
	}

}
示例#3
0
void BroadcastConsole::Update()
{
  // Check if KB has changed hidden/shown
  static bool prevKbStatus = TheKb::Instance()->IsEnabled();
  bool kbStatus = TheKb::Instance()->IsEnabled();
  if (kbStatus != prevKbStatus)
  {
    std::cout << "Broadcast console: Wait, what? The KB changed status!\n";
    OnActive();
    prevKbStatus = kbStatus;
  }
}
示例#4
0
bool GSRBSmash::OnKeyEvent(const KeyEvent& ke)
{
  if (ke.keyDown && ke.keyType == AMJU_KEY_CHAR && ke.key == 'r')
  {
    // Reset sim
    OnActive();
  }
  else if (ke.keyDown && ke.keyType == AMJU_KEY_CHAR && ke.key == '3')
  {
std::cout << "Adding a box!\n";

    MakeBox3(Vec3f(3.0f, 20.0, 0));
  }

  return true; // handled
}
示例#5
0
/**
 * @brief:  状态机输入
 *
 * @return: < 0 退出事务
 */
int TransactionBase::OnEvent()
{
    FUNC_TRACE(uin_);

    // 取消定时器
    CancelTimeoutTimer();

    int ret = 0;
    TransactionReturn trans_ret = RETURN_EXIT;

    // 2012-06-15
    // 决定在这里加个异常扑捉,虽然不建议在代码中使用异常
    // 但是确实没有想到比异常更合适的办法
    // 因为子类是未知的,子类的实现也是未知的
    // 无法保证每一个实现都是严谨的
    //
    // 不过发生异常时是应该让程序继续呢还是果断退出?
    //
    try
    {
        switch (state_)
        {
            case STATE_AWAKE:
                {
                    trans_ret = OnAwake();
                    break;
                }
            case STATE_ACTIVE:
                {
                    trans_ret = OnActive();
                    break;
                }
            case STATE_TIMEOUT:
                {
                    trans_ret = OnTimeout();
                    break;
                }
            default:
                {
                    TNT_LOG_ERROR(0, uin_, "error state %u", state_);
                }
        }
    }
    catch (std::exception& e)
    {
        TNT_LOG_ERROR(0, uin_, "exception|0X%08X|%u|%u|%u|%s",
                      cmd_, id_, state_, phase_, e.what());

        // 让这个事务退出吧。。。
        trans_ret = RETURN_EXIT;
    }

    switch (trans_ret)
    {
        case RETURN_WAIT:
            {
                if (0 == timeout_timer_id_)
                {
                    //2013-08-19, jamey
                    //进入等待却又忘了设置时间, 还是让其退出吧
                    state_ = STATE_IDLE;

                    TNT_LOG_DEBUG(0, uin(), "no timer trans exit|%u|%u", id(), cmd());
                    TransactionMgrSigleton::get_mutable_instance().FreeTransaction(this);
                }
                else
                {
                    state_ = STATE_ACTIVE;
                }
                break;
            }
        case RETURN_CONTINUE:
            {
                state_ = STATE_ACTIVE;

                return OnEvent();
            }
        case RETURN_EXIT:
            {
                state_ = STATE_IDLE;

                TNT_LOG_DEBUG(0, uin(), "trans exit|%u|%u", id(), cmd());
                TransactionMgrSigleton::get_mutable_instance().FreeTransaction(this);
//                ret = -1;

                break;
            }
    }

    return ret;
}
void AGameplayCueNotify_Actor::HandleGameplayCue(AActor* MyTarget, EGameplayCueEvent::Type EventType, const FGameplayCueParameters& Parameters)
{
    SCOPE_CYCLE_COUNTER(STAT_HandleGameplayCueNotifyActor);

    if (Parameters.MatchedTagName.IsValid() == false)
    {
        ABILITY_LOG(Warning, TEXT("GameplayCue parameter is none for %s"), *GetNameSafe(this));
    }

    // Handle multiple event gating
    {
        if (EventType == EGameplayCueEvent::OnActive && !bAllowMultipleOnActiveEvents && bHasHandledOnActiveEvent)
        {
            return;
        }

        if (EventType == EGameplayCueEvent::WhileActive && !bAllowMultipleWhileActiveEvents && bHasHandledWhileActiveEvent)
        {
            return;
        }

        if (EventType == EGameplayCueEvent::Removed && bHasHandledOnRemoveEvent)
        {
            return;
        }
    }

    // If cvar is enabled, check that the target no longer has the matched tag before doing remove logic. This is a simple way of supporting stacking, such that if an actor has two sources giving him the same GC tag, it will not be removed when the first one is removed.
    if (GameplayCueNotifyTagCheckOnRemove > 0 && EventType == EGameplayCueEvent::Removed)
    {
        if (IGameplayTagAssetInterface* TagInterface = Cast<IGameplayTagAssetInterface>(MyTarget))
        {
            if (TagInterface->HasMatchingGameplayTag(Parameters.MatchedTagName))
            {
                return;
            }
        }
    }

    if (MyTarget && !MyTarget->IsPendingKill())
    {
        K2_HandleGameplayCue(MyTarget, EventType, Parameters);

        // Clear any pending auto-destroy that may have occurred from a previous OnRemove
        SetLifeSpan(0.f);

        switch (EventType)
        {
        case EGameplayCueEvent::OnActive:
            OnActive(MyTarget, Parameters);
            bHasHandledOnActiveEvent = true;
            break;

        case EGameplayCueEvent::WhileActive:
            WhileActive(MyTarget, Parameters);
            bHasHandledWhileActiveEvent = true;
            break;

        case EGameplayCueEvent::Executed:
            OnExecute(MyTarget, Parameters);
            break;

        case EGameplayCueEvent::Removed:
            bHasHandledOnRemoveEvent = true;
            OnRemove(MyTarget, Parameters);

            if (bAutoDestroyOnRemove)
            {
                if (AutoDestroyDelay > 0.f)
                {
                    FTimerDelegate Delegate = FTimerDelegate::CreateUObject(this, &AGameplayCueNotify_Actor::GameplayCueFinishedCallback);
                    GetWorld()->GetTimerManager().SetTimer(FinishTimerHandle, Delegate, AutoDestroyDelay, false);
                }
                else
                {
                    GameplayCueFinishedCallback();
                }
            }
            break;
        };
    }
    else
    {
        ABILITY_LOG(Warning, TEXT("Null Target called for event %d on GameplayCueNotifyActor %s"), (int32)EventType, *GetName() );
        if (EventType == EGameplayCueEvent::Removed)
        {
            // Make sure the removed event is handled so that we don't leak GC notify actors
            GameplayCueFinishedCallback();
        }
    }
}