Example #1
0
    /// <summary>
    /// Creates entity and assigns ID.
    /// </summary>
    public static CEntity Create(EType Type, CWorld World, int ID = 0)
    {
        CEntity entity = null;

        switch (Type)
        {
        case EType.UNIT: entity = new CUnit(); break;

        case EType.ITEM_START: entity = new CItemStart(); break;

        case EType.ITEM_DECO: entity = new CItemDeco(); break;

        case EType.ITEM_DESK: entity = new CItemDesk(); break;

        case EType.ITEM_SAFE: entity = new CItemSafe(); break;

        case EType.ITEM_REST: entity = new CItemRest(); break;

        case EType.ITEM_FOOD: entity = new CItemFood(); break;

        case EType.ITEM_DOOR: entity = new CItemDoor(); break;

        case EType.RESUME: entity = new CResume(); break;

        case EType.CONTRACT: entity = new CContract(); break;

        case EType.PICKUP: entity = new CPickup(); break;

        case EType.MISSILE: entity = new CMissile(); break;

        case EType.VOLUME: entity = new CVolume(); break;

        case EType.DECAL: entity = new CDecal(); break;
        }

        if (entity != null)
        {
            _InitNewEntity(entity, World, ID);
        }
        else
        {
            Debug.LogError("Entity Factory couldn't create a " + (int)Type + " is");
        }

        return(entity);
    }
    public void UpdateState(CItem Item)
    {
        if (!mBlueprint)
        {
            mDurability    = Item.mDurability;
            mMaxDurability = Item.mMaxDurability;

            if (Item.mType == CEntity.EType.ITEM_DOOR)
            {
                CItemDoor door = (CItemDoor)Item;
                mDoorPosition = door.mAngle;

                if (mPlayerID == mOwnerID)
                {
                    door.mLocked = mLocked;
                }
                else if (mWorld.IsAllied(mPlayerID, mOwnerID))
                {
                    if (mLocked != door.mLocked)
                    {
                        SetDoorLock(door.mLocked);
                    }
                }
            }
            else if (Item.mType == CEntity.EType.ITEM_START)
            {
                mDoorPosition = ((CItemStart)Item).mDoorPosition;
            }
            else if (Item.mType == CEntity.EType.ITEM_DESK)
            {
                mUserID = ((CItemDesk)Item).mUserID;
                mCompletedPaperStacks = ((CItemDesk)Item).mCompletedStacks.Count;
                mMaxCompletedPapers   = ((CItemDesk)Item).mMaxCompletedPapers;
            }
            else if (Item.mType == CEntity.EType.ITEM_SAFE)
            {
                mValue = ((CItemSafe)Item).mValue;
            }

            // TODO: Update State is only called when the item is visible. We need to update queue tokens every tick.
            UpdateQueueTokens();
        }
    }