예제 #1
0
void GuideManager::nextStep(int step)
{
    CCLOG("step = %d",step);

    const StepInfo& stepInfo = m_vecStep.at(step);
    
    if (getWait())
    {
        return;
    }
    
    if (isLimit(stepInfo))
    {
        return;
    }
    
    m_guideLayer->removeFromParent();
    getParent()->addChild(m_guideLayer, GUIDE_LAYER_ZORDER);
    
    if (stepInfo.getNextStepId() == END)
    {
        endGuide();
        return;
    }
    else if (stepInfo.getNextStepId() == WAIT)
    {
        setWait(true);
    }
    else if (stepInfo.getNextStepId() == SLEEP)
    {
        getGuideLayer()->sleep();
    }
    else if (stepInfo.getNextStepId() == WAKE)
    {
        getGuideLayer()->wake();
    }
    
    
    // by order
    checkDialog(stepInfo);
    checkRect(stepInfo);
    checkTalk(stepInfo);
    checkHand(stepInfo);
    checkEvent(stepInfo);
    
    setNextStepId(step + 1);
}
예제 #2
0
void deleteElement(int start)
{
    /* Shifts every element to the left starting from
    the index start.*/

    int i;

    if (isLimit(mElements[start])) {
        matrix.dirty = 1;
    }

    for (i = start+1; i < matrix.length; i++) {
        mElements[i-1] = mElements[i];
    }

    matrix.length--;
}
Trade* MarketLimitRule::processRule(OrderBook*& orderBook, Order*& order)
{
	Order* matchedOrder = NULL;
	Trade* trade = NULL;

	std::list<Order> orders;

	if (order->isBuy())
		orders = orderBook->getSellOrders();
	else
		orders = orderBook->getBuyOrders();

	matchedOrder = &orders.front();

	auto it = orders.begin();
	while (matchedOrder->getParticipant() == order->getParticipant())
	{
		if (it->getParticipant() != order->getParticipant() && it->isLimit() && order->isMarket())
		{
			matchedOrder = &*it;
			break;
		}

		it++;
		if (it == orders.end())
			return NULL;
	}

	int size = matchedOrder->getSize();
	double price = matchedOrder->getPrice();

	if (matchedOrder->getSize() > order->getSize())
		size = order->getSize();

	trade = new Trade(*matchedOrder, *order, price, size, orderBook->getTime());

	orderBook->updateOrderSize(order, (order->getSize() - size));
	orderBook->updateOrderSize(matchedOrder, (matchedOrder->getSize() - size));
	
	orderBook->setLastPrice(price);

	matchedOrder = NULL;
	delete matchedOrder;

	return trade;
}