/*
**  Copyright (C) 1996, 1997 Microsoft Corporation. All Rights Reserved.
**
**  File:	treasureSetIGC.cpp
**
**  Author: 
**
**  Description:
**      Implementation of the CtreasureSetIGC class. This file was initially created by
**  the ATL wizard for the core object.
**
**  History:
*/
// treasureSetIGC.cpp : Implementation of CtreasureSetIGC
#include "pch.h"
#include "treasureSetIGC.h"

/////////////////////////////////////////////////////////////////////////////
// CtreasureSetIGC
HRESULT     CtreasureSetIGC::Initialize(ImissionIGC* pMission, Time now, const void* data, int dataSize)
{
    assert (pMission);
    m_pMission = pMission;

    ZRetailAssert (data && (dataSize >= sizeof(DataTreasureSetIGC)));

    int size;
    if (((DataTreasureSetIGC*)data)->nTreasureData == 0)
    {
        assert (dataSize == sizeof(DataTreasureSetIGC));

        const short c_maxDefault = 10;
        m_maxTreasureData = c_maxDefault;
        size = sizeof(DataTreasureSetIGC) +
               c_maxDefault * sizeof(TreasureData);
    }
    else
    {
        m_maxTreasureData = ((DataTreasureSetIGC*)data)->nTreasureData;

        assert (dataSize == int(sizeof(DataTreasureSetIGC) +
                                m_maxTreasureData *
                                sizeof(TreasureData)));

        size = dataSize;
    }
    assert (size >= dataSize);

    m_data = (DataTreasureSetIGC*)(new char [size]);
    memcpy(m_data, data, dataSize);

    m_totalTreasureChance = 0;
    {
        TreasureData*   ptd = m_data->treasureData0();
        for (short i = 0; (i < m_data->nTreasureData); i++)
            m_totalTreasureChance += (ptd + i)->chance;
    }

    pMission->AddTreasureSet(this);

    return S_OK;
}

int         CtreasureSetIGC::Export(void* data) const
{
    int size = sizeof(DataTreasureSetIGC) + sizeof(TreasureData) *
                                            m_data->nTreasureData;

    if (data)
        memcpy(data, m_data, size);

    return size;
}