/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
package com.replica.replicaisland;

public class SortConstants {
	public static final int BACKGROUND_START = -100;
	public static final int THE_SOURCE_START = -5;
	public static final int FOREGROUND = 0;
	public static final int EFFECT = 5;
	public static final int GENERAL_OBJECT = 10;
	public static final int GENERAL_ENEMY = 15;
	public static final int NPC = 15;
	public static final int PLAYER = 20;
	public static final int FOREGROUND_EFFECT = 30;
	public static final int PROJECTILE = 40;
	public static final int FOREGROUND_OBJECT = 50;
	public static final int OVERLAY = 70;
	public static final int HUD = 100;
	public static final int FADE = 200;
}
