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