1cfd74d65d832137e20e193c960802afba73b5d38sm/*
23c1e67e433728684b5f228c5d4f3e5b1457bb271sm * Copyright (C) 2010 The Android Open Source Project
3cfd74d65d832137e20e193c960802afba73b5d38sm *
4cfd74d65d832137e20e193c960802afba73b5d38sm * Licensed under the Apache License, Version 2.0 (the "License");
5cfd74d65d832137e20e193c960802afba73b5d38sm * you may not use this file except in compliance with the License.
6cfd74d65d832137e20e193c960802afba73b5d38sm * You may obtain a copy of the License at
7cfd74d65d832137e20e193c960802afba73b5d38sm *
8cfd74d65d832137e20e193c960802afba73b5d38sm *      http://www.apache.org/licenses/LICENSE-2.0
9cfd74d65d832137e20e193c960802afba73b5d38sm *
10cfd74d65d832137e20e193c960802afba73b5d38sm * Unless required by applicable law or agreed to in writing, software
11cfd74d65d832137e20e193c960802afba73b5d38sm * distributed under the License is distributed on an "AS IS" BASIS,
12cfd74d65d832137e20e193c960802afba73b5d38sm * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cfd74d65d832137e20e193c960802afba73b5d38sm * See the License for the specific language governing permissions and
14cfd74d65d832137e20e193c960802afba73b5d38sm * limitations under the License.
15cfd74d65d832137e20e193c960802afba73b5d38sm */
16cfd74d65d832137e20e193c960802afba73b5d38sm
17cfd74d65d832137e20e193c960802afba73b5d38smpackage com.replica.replicaisland;
18cfd74d65d832137e20e193c960802afba73b5d38sm
19cfd74d65d832137e20e193c960802afba73b5d38smimport java.util.ArrayList;
20cfd74d65d832137e20e193c960802afba73b5d38sm
21cfd74d65d832137e20e193c960802afba73b5d38sm/**
22cfd74d65d832137e20e193c960802afba73b5d38sm * The object registry manages a collection of global singleton objects.  However, it differs from
23cfd74d65d832137e20e193c960802afba73b5d38sm * the standard singleton pattern in a few important ways:
24cfd74d65d832137e20e193c960802afba73b5d38sm * - The objects managed by the registry have an undefined lifetime.  They may become invalid at
25cfd74d65d832137e20e193c960802afba73b5d38sm *   any time, and they may not be valid at the beginning of the program.
26cfd74d65d832137e20e193c960802afba73b5d38sm * - The only object that is always guaranteed to be valid is the ObjectRegistry itself.
27cfd74d65d832137e20e193c960802afba73b5d38sm * - There may be more than one ObjectRegistry, and there may be more than one instance of any of
28cfd74d65d832137e20e193c960802afba73b5d38sm *   the systems managed by ObjectRegistry allocated at once.  For example, separate threads may
29cfd74d65d832137e20e193c960802afba73b5d38sm *   maintain their own separate ObjectRegistry instances.
30cfd74d65d832137e20e193c960802afba73b5d38sm */
31cfd74d65d832137e20e193c960802afba73b5d38smpublic class ObjectRegistry extends BaseObject {
32cfd74d65d832137e20e193c960802afba73b5d38sm
33cfd74d65d832137e20e193c960802afba73b5d38sm    public BufferLibrary bufferLibrary;
34cfd74d65d832137e20e193c960802afba73b5d38sm    public CameraSystem cameraSystem;
35cfd74d65d832137e20e193c960802afba73b5d38sm    public ChannelSystem channelSystem;
36cfd74d65d832137e20e193c960802afba73b5d38sm    public CollisionSystem collisionSystem;
37cfd74d65d832137e20e193c960802afba73b5d38sm    public ContextParameters contextParameters;
38cfd74d65d832137e20e193c960802afba73b5d38sm    public CustomToastSystem customToastSystem;
39cfd74d65d832137e20e193c960802afba73b5d38sm    public DebugSystem debugSystem;
40cfd74d65d832137e20e193c960802afba73b5d38sm    public DrawableFactory drawableFactory;
41cfd74d65d832137e20e193c960802afba73b5d38sm    public EventRecorder eventRecorder;
42cfd74d65d832137e20e193c960802afba73b5d38sm    public GameObjectCollisionSystem gameObjectCollisionSystem;
43cfd74d65d832137e20e193c960802afba73b5d38sm    public GameObjectFactory gameObjectFactory;
44cfd74d65d832137e20e193c960802afba73b5d38sm    public GameObjectManager gameObjectManager;
45cfd74d65d832137e20e193c960802afba73b5d38sm    public HitPointPool hitPointPool;
46cfd74d65d832137e20e193c960802afba73b5d38sm    public HotSpotSystem hotSpotSystem;
47cfd74d65d832137e20e193c960802afba73b5d38sm    public HudSystem hudSystem;
489d4cc2572d37983607df38b0f4216ed76ac51814sm	public InputGameInterface inputGameInterface;
49cfd74d65d832137e20e193c960802afba73b5d38sm    public InputSystem inputSystem;
50cfd74d65d832137e20e193c960802afba73b5d38sm    public LevelBuilder levelBuilder;
51cfd74d65d832137e20e193c960802afba73b5d38sm    public LevelSystem levelSystem;
52cfd74d65d832137e20e193c960802afba73b5d38sm    public OpenGLSystem openGLSystem;
53cfd74d65d832137e20e193c960802afba73b5d38sm    public SoundSystem soundSystem;
54cfd74d65d832137e20e193c960802afba73b5d38sm    public TextureLibrary shortTermTextureLibrary;
55cfd74d65d832137e20e193c960802afba73b5d38sm    public TextureLibrary longTermTextureLibrary;
56cfd74d65d832137e20e193c960802afba73b5d38sm    public TimeSystem timeSystem;
57cfd74d65d832137e20e193c960802afba73b5d38sm    public RenderSystem renderSystem;
58cfd74d65d832137e20e193c960802afba73b5d38sm    public VectorPool vectorPool;
59cfd74d65d832137e20e193c960802afba73b5d38sm    public VibrationSystem vibrationSystem;
60cfd74d65d832137e20e193c960802afba73b5d38sm
61cfd74d65d832137e20e193c960802afba73b5d38sm    private ArrayList<BaseObject> mItemsNeedingReset = new ArrayList<BaseObject>();
62cfd74d65d832137e20e193c960802afba73b5d38sm
63cfd74d65d832137e20e193c960802afba73b5d38sm    public ObjectRegistry() {
64cfd74d65d832137e20e193c960802afba73b5d38sm        super();
65cfd74d65d832137e20e193c960802afba73b5d38sm    }
66cfd74d65d832137e20e193c960802afba73b5d38sm
67cfd74d65d832137e20e193c960802afba73b5d38sm    public void registerForReset(BaseObject object) {
68cfd74d65d832137e20e193c960802afba73b5d38sm    	final boolean contained = mItemsNeedingReset.contains(object);
69cfd74d65d832137e20e193c960802afba73b5d38sm    	assert !contained;
70cfd74d65d832137e20e193c960802afba73b5d38sm    	if (!contained) {
71cfd74d65d832137e20e193c960802afba73b5d38sm    		mItemsNeedingReset.add(object);
72cfd74d65d832137e20e193c960802afba73b5d38sm    	}
73cfd74d65d832137e20e193c960802afba73b5d38sm    }
74cfd74d65d832137e20e193c960802afba73b5d38sm
75cfd74d65d832137e20e193c960802afba73b5d38sm    @Override
76cfd74d65d832137e20e193c960802afba73b5d38sm    public void reset() {
77cfd74d65d832137e20e193c960802afba73b5d38sm    	final int count = mItemsNeedingReset.size();
78cfd74d65d832137e20e193c960802afba73b5d38sm    	for (int x = 0; x < count; x++) {
79cfd74d65d832137e20e193c960802afba73b5d38sm    		mItemsNeedingReset.get(x).reset();
80cfd74d65d832137e20e193c960802afba73b5d38sm    	}
81cfd74d65d832137e20e193c960802afba73b5d38sm    }
82cfd74d65d832137e20e193c960802afba73b5d38sm
83cfd74d65d832137e20e193c960802afba73b5d38sm}
84