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.Comparator; 20cfd74d65d832137e20e193c960802afba73b5d38sm 21cfd74d65d832137e20e193c960802afba73b5d38smimport com.replica.replicaisland.AnimationComponent.PlayerAnimations; 22cfd74d65d832137e20e193c960802afba73b5d38smimport com.replica.replicaisland.CollisionParameters.HitType; 23cfd74d65d832137e20e193c960802afba73b5d38smimport com.replica.replicaisland.EnemyAnimationComponent.EnemyAnimations; 24cfd74d65d832137e20e193c960802afba73b5d38smimport com.replica.replicaisland.GameObject.ActionType; 25cfd74d65d832137e20e193c960802afba73b5d38smimport com.replica.replicaisland.GameObject.Team; 262b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport com.replica.replicaisland.GenericAnimationComponent.Animation; 27cfd74d65d832137e20e193c960802afba73b5d38sm 28cfd74d65d832137e20e193c960802afba73b5d38sm/** A class for generating game objects at runtime. 29cfd74d65d832137e20e193c960802afba73b5d38sm * This should really be replaced with something that is data-driven, but it is hard to do data 30cfd74d65d832137e20e193c960802afba73b5d38sm * parsing quickly at runtime. For the moment this class is full of large functions that just 31cfd74d65d832137e20e193c960802afba73b5d38sm * patch pointers between objects, but in the future those functions should either be 32cfd74d65d832137e20e193c960802afba73b5d38sm * a) generated from data at compile time, or b) described by data at runtime. 33cfd74d65d832137e20e193c960802afba73b5d38sm */ 34cfd74d65d832137e20e193c960802afba73b5d38smpublic class GameObjectFactory extends BaseObject { 359d4cc2572d37983607df38b0f4216ed76ac51814sm private final static int MAX_GAME_OBJECTS = 384; 36cfd74d65d832137e20e193c960802afba73b5d38sm private final static ComponentPoolComparator sComponentPoolComparator = new ComponentPoolComparator(); 37cfd74d65d832137e20e193c960802afba73b5d38sm private FixedSizeArray<FixedSizeArray<BaseObject>> mStaticData; 38cfd74d65d832137e20e193c960802afba73b5d38sm private FixedSizeArray<GameComponentPool> mComponentPools; 39cfd74d65d832137e20e193c960802afba73b5d38sm private GameComponentPool mPoolSearchDummy; 40cfd74d65d832137e20e193c960802afba73b5d38sm private GameObjectPool mGameObjectPool; 41cfd74d65d832137e20e193c960802afba73b5d38sm 42cfd74d65d832137e20e193c960802afba73b5d38sm private float mTightActivationRadius; 43cfd74d65d832137e20e193c960802afba73b5d38sm private float mNormalActivationRadius; 44cfd74d65d832137e20e193c960802afba73b5d38sm private float mWideActivationRadius; 45cfd74d65d832137e20e193c960802afba73b5d38sm private float mAlwaysActive; 46cfd74d65d832137e20e193c960802afba73b5d38sm 47cfd74d65d832137e20e193c960802afba73b5d38sm private final static String sRedButtonChannel = "RED BUTTON"; 48cfd74d65d832137e20e193c960802afba73b5d38sm private final static String sBlueButtonChannel = "BLUE BUTTON"; 49cfd74d65d832137e20e193c960802afba73b5d38sm private final static String sGreenButtonChannel = "GREEN BUTTON"; 50cfd74d65d832137e20e193c960802afba73b5d38sm private final static String sSurprisedNPCChannel = "SURPRISED"; 51cfd74d65d832137e20e193c960802afba73b5d38sm 52cfd74d65d832137e20e193c960802afba73b5d38sm 53cfd74d65d832137e20e193c960802afba73b5d38sm // A list of game objects that can be spawned at runtime. Note that the indicies of these 54cfd74d65d832137e20e193c960802afba73b5d38sm // objects must match the order of the object tileset in the level editor in order for the 55cfd74d65d832137e20e193c960802afba73b5d38sm // level content to make sense. 56cfd74d65d832137e20e193c960802afba73b5d38sm public enum GameObjectType { 57cfd74d65d832137e20e193c960802afba73b5d38sm INVALID(-1), 58cfd74d65d832137e20e193c960802afba73b5d38sm 59cfd74d65d832137e20e193c960802afba73b5d38sm PLAYER (0), 60cfd74d65d832137e20e193c960802afba73b5d38sm 61cfd74d65d832137e20e193c960802afba73b5d38sm // Collectables 62cfd74d65d832137e20e193c960802afba73b5d38sm COIN (1), 63cfd74d65d832137e20e193c960802afba73b5d38sm RUBY (2), 64cfd74d65d832137e20e193c960802afba73b5d38sm DIARY (3), 65cfd74d65d832137e20e193c960802afba73b5d38sm 66cfd74d65d832137e20e193c960802afba73b5d38sm // Characters 67cfd74d65d832137e20e193c960802afba73b5d38sm WANDA (10), 68cfd74d65d832137e20e193c960802afba73b5d38sm KYLE (11), 69cfd74d65d832137e20e193c960802afba73b5d38sm KYLE_DEAD (12), 70cfd74d65d832137e20e193c960802afba73b5d38sm ANDOU_DEAD (13), 71cfd74d65d832137e20e193c960802afba73b5d38sm KABOCHA (26), 72cfd74d65d832137e20e193c960802afba73b5d38sm ROKUDOU_TERMINAL (27), 73cfd74d65d832137e20e193c960802afba73b5d38sm KABOCHA_TERMINAL (28), 74cfd74d65d832137e20e193c960802afba73b5d38sm EVIL_KABOCHA (29), 75cfd74d65d832137e20e193c960802afba73b5d38sm ROKUDOU (30), 76cfd74d65d832137e20e193c960802afba73b5d38sm 77cfd74d65d832137e20e193c960802afba73b5d38sm // AI 78cfd74d65d832137e20e193c960802afba73b5d38sm BROBOT (16), 79cfd74d65d832137e20e193c960802afba73b5d38sm SNAILBOMB (17), 80cfd74d65d832137e20e193c960802afba73b5d38sm SHADOWSLIME (18), 81cfd74d65d832137e20e193c960802afba73b5d38sm MUDMAN (19), 82cfd74d65d832137e20e193c960802afba73b5d38sm SKELETON (20), 83cfd74d65d832137e20e193c960802afba73b5d38sm KARAGUIN (21), 84cfd74d65d832137e20e193c960802afba73b5d38sm PINK_NAMAZU (22), 85cfd74d65d832137e20e193c960802afba73b5d38sm TURRET (23), 86cfd74d65d832137e20e193c960802afba73b5d38sm TURRET_LEFT (24), 87cfd74d65d832137e20e193c960802afba73b5d38sm BAT (6), 88cfd74d65d832137e20e193c960802afba73b5d38sm STING(7), 89cfd74d65d832137e20e193c960802afba73b5d38sm ONION(8), 90cfd74d65d832137e20e193c960802afba73b5d38sm 91cfd74d65d832137e20e193c960802afba73b5d38sm // Objects 92cfd74d65d832137e20e193c960802afba73b5d38sm DOOR_RED (32), 93cfd74d65d832137e20e193c960802afba73b5d38sm DOOR_BLUE (33), 94cfd74d65d832137e20e193c960802afba73b5d38sm DOOR_GREEN (34), 95cfd74d65d832137e20e193c960802afba73b5d38sm BUTTON_RED (35), 96cfd74d65d832137e20e193c960802afba73b5d38sm BUTTON_BLUE (36), 97cfd74d65d832137e20e193c960802afba73b5d38sm BUTTON_GREEN (37), 98cfd74d65d832137e20e193c960802afba73b5d38sm CANNON (38), 99cfd74d65d832137e20e193c960802afba73b5d38sm BROBOT_SPAWNER (39), 100cfd74d65d832137e20e193c960802afba73b5d38sm BROBOT_SPAWNER_LEFT (40), 101cfd74d65d832137e20e193c960802afba73b5d38sm BREAKABLE_BLOCK(41), 102cfd74d65d832137e20e193c960802afba73b5d38sm THE_SOURCE(42), 1032b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm HINT_SIGN(43), 104cfd74d65d832137e20e193c960802afba73b5d38sm 105cfd74d65d832137e20e193c960802afba73b5d38sm // Effects 106cfd74d65d832137e20e193c960802afba73b5d38sm DUST(48), 107cfd74d65d832137e20e193c960802afba73b5d38sm EXPLOSION_SMALL(49), 108cfd74d65d832137e20e193c960802afba73b5d38sm EXPLOSION_LARGE(50), 109cfd74d65d832137e20e193c960802afba73b5d38sm EXPLOSION_GIANT(51), 110cfd74d65d832137e20e193c960802afba73b5d38sm 111cfd74d65d832137e20e193c960802afba73b5d38sm 112cfd74d65d832137e20e193c960802afba73b5d38sm // Special Spawnable 113cfd74d65d832137e20e193c960802afba73b5d38sm DOOR_RED_NONBLOCKING (52), 114cfd74d65d832137e20e193c960802afba73b5d38sm DOOR_BLUE_NONBLOCKING (53), 115cfd74d65d832137e20e193c960802afba73b5d38sm DOOR_GREEN_NONBLOCKING (54), 116cfd74d65d832137e20e193c960802afba73b5d38sm 117cfd74d65d832137e20e193c960802afba73b5d38sm GHOST_NPC(55), 118cfd74d65d832137e20e193c960802afba73b5d38sm 119cfd74d65d832137e20e193c960802afba73b5d38sm CAMERA_BIAS(56), 120cfd74d65d832137e20e193c960802afba73b5d38sm 1219d4cc2572d37983607df38b0f4216ed76ac51814sm FRAMERATE_WATCHER(57), 1229d4cc2572d37983607df38b0f4216ed76ac51814sm INFINITE_SPAWNER(58), 1232b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm CRUSHER_ANDOU(59), 124cfd74d65d832137e20e193c960802afba73b5d38sm 125cfd74d65d832137e20e193c960802afba73b5d38sm 126cfd74d65d832137e20e193c960802afba73b5d38sm // Projectiles 127cfd74d65d832137e20e193c960802afba73b5d38sm ENERGY_BALL(68), 128cfd74d65d832137e20e193c960802afba73b5d38sm CANNON_BALL(65), 129cfd74d65d832137e20e193c960802afba73b5d38sm TURRET_BULLET(66), 130cfd74d65d832137e20e193c960802afba73b5d38sm BROBOT_BULLET(67), 131cfd74d65d832137e20e193c960802afba73b5d38sm BREAKABLE_BLOCK_PIECE(68), 132cfd74d65d832137e20e193c960802afba73b5d38sm BREAKABLE_BLOCK_PIECE_SPAWNER(69), 133cfd74d65d832137e20e193c960802afba73b5d38sm WANDA_SHOT(70), 134cfd74d65d832137e20e193c960802afba73b5d38sm 135cfd74d65d832137e20e193c960802afba73b5d38sm // Special Objects -- Not spawnable normally 1362b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm SMOKE_BIG(-1), 1372b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm SMOKE_SMALL(-1), 1382b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1392b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm CRUSH_FLASH(-1), 1402b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm FLASH(-1), 1412b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 142cfd74d65d832137e20e193c960802afba73b5d38sm PLAYER_JETS(-1), 143cfd74d65d832137e20e193c960802afba73b5d38sm PLAYER_SPARKS(-1), 144cfd74d65d832137e20e193c960802afba73b5d38sm PLAYER_GLOW(-1), 145cfd74d65d832137e20e193c960802afba73b5d38sm ENEMY_SPARKS(-1), 146cfd74d65d832137e20e193c960802afba73b5d38sm GHOST(-1), 147cfd74d65d832137e20e193c960802afba73b5d38sm SMOKE_POOF(-1), 148cfd74d65d832137e20e193c960802afba73b5d38sm GEM_EFFECT(-1), 149cfd74d65d832137e20e193c960802afba73b5d38sm GEM_EFFECT_SPAWNER(-1), 150cfd74d65d832137e20e193c960802afba73b5d38sm 151cfd74d65d832137e20e193c960802afba73b5d38sm 152cfd74d65d832137e20e193c960802afba73b5d38sm // End 153cfd74d65d832137e20e193c960802afba73b5d38sm OBJECT_COUNT(-1); 154cfd74d65d832137e20e193c960802afba73b5d38sm 155cfd74d65d832137e20e193c960802afba73b5d38sm private final int mIndex; 156cfd74d65d832137e20e193c960802afba73b5d38sm GameObjectType(int index) { 157cfd74d65d832137e20e193c960802afba73b5d38sm this.mIndex = index; 158cfd74d65d832137e20e193c960802afba73b5d38sm } 159cfd74d65d832137e20e193c960802afba73b5d38sm 160cfd74d65d832137e20e193c960802afba73b5d38sm public int index() { 161cfd74d65d832137e20e193c960802afba73b5d38sm return mIndex; 162cfd74d65d832137e20e193c960802afba73b5d38sm } 163cfd74d65d832137e20e193c960802afba73b5d38sm 164cfd74d65d832137e20e193c960802afba73b5d38sm // TODO: Is there any better way to do this? 165cfd74d65d832137e20e193c960802afba73b5d38sm public static GameObjectType indexToType(int index) { 166cfd74d65d832137e20e193c960802afba73b5d38sm final GameObjectType[] valuesArray = values(); 167cfd74d65d832137e20e193c960802afba73b5d38sm GameObjectType foundType = INVALID; 168cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < valuesArray.length; x++) { 169cfd74d65d832137e20e193c960802afba73b5d38sm GameObjectType type = valuesArray[x]; 170cfd74d65d832137e20e193c960802afba73b5d38sm if (type.mIndex == index) { 171cfd74d65d832137e20e193c960802afba73b5d38sm foundType = type; 172cfd74d65d832137e20e193c960802afba73b5d38sm break; 173cfd74d65d832137e20e193c960802afba73b5d38sm } 174cfd74d65d832137e20e193c960802afba73b5d38sm } 175cfd74d65d832137e20e193c960802afba73b5d38sm return foundType; 176cfd74d65d832137e20e193c960802afba73b5d38sm } 177cfd74d65d832137e20e193c960802afba73b5d38sm 178cfd74d65d832137e20e193c960802afba73b5d38sm } 179cfd74d65d832137e20e193c960802afba73b5d38sm 180cfd74d65d832137e20e193c960802afba73b5d38sm public GameObjectFactory() { 181cfd74d65d832137e20e193c960802afba73b5d38sm super(); 182cfd74d65d832137e20e193c960802afba73b5d38sm 183cfd74d65d832137e20e193c960802afba73b5d38sm mGameObjectPool = new GameObjectPool(MAX_GAME_OBJECTS); 184cfd74d65d832137e20e193c960802afba73b5d38sm 185cfd74d65d832137e20e193c960802afba73b5d38sm final int objectTypeCount = GameObjectType.OBJECT_COUNT.ordinal(); 186cfd74d65d832137e20e193c960802afba73b5d38sm mStaticData = new FixedSizeArray<FixedSizeArray<BaseObject>>(objectTypeCount); 187cfd74d65d832137e20e193c960802afba73b5d38sm 188cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < objectTypeCount; x++) { 189cfd74d65d832137e20e193c960802afba73b5d38sm mStaticData.add(null); 190cfd74d65d832137e20e193c960802afba73b5d38sm } 191cfd74d65d832137e20e193c960802afba73b5d38sm 192cfd74d65d832137e20e193c960802afba73b5d38sm final ContextParameters context = sSystemRegistry.contextParameters; 193cfd74d65d832137e20e193c960802afba73b5d38sm final float halfHeight2 = (context.gameHeight * 0.5f) * (context.gameHeight * 0.5f); 194cfd74d65d832137e20e193c960802afba73b5d38sm final float halfWidth2 = (context.gameWidth * 0.5f) * (context.gameWidth * 0.5f); 195cfd74d65d832137e20e193c960802afba73b5d38sm final float screenSizeRadius = (float)Math.sqrt(halfHeight2 + halfWidth2); 196cfd74d65d832137e20e193c960802afba73b5d38sm mTightActivationRadius = screenSizeRadius + 128.0f; 197cfd74d65d832137e20e193c960802afba73b5d38sm mNormalActivationRadius = screenSizeRadius * 1.25f; 198cfd74d65d832137e20e193c960802afba73b5d38sm mWideActivationRadius = screenSizeRadius * 2.0f; 199cfd74d65d832137e20e193c960802afba73b5d38sm mAlwaysActive = -1.0f; 200cfd74d65d832137e20e193c960802afba73b5d38sm 201cfd74d65d832137e20e193c960802afba73b5d38sm // TODO: I wish there was a way to do this automatically, but the ClassLoader doesn't seem 202cfd74d65d832137e20e193c960802afba73b5d38sm // to provide access to the currently loaded class list. There's some discussion of walking 203cfd74d65d832137e20e193c960802afba73b5d38sm // the actual class file objects and using forName() to instantiate them, but that sounds 204cfd74d65d832137e20e193c960802afba73b5d38sm // really heavy-weight. For now I'll rely on (sucky) manual enumeration. 205cfd74d65d832137e20e193c960802afba73b5d38sm class ComponentClass { 206cfd74d65d832137e20e193c960802afba73b5d38sm public Class<?> type; 207cfd74d65d832137e20e193c960802afba73b5d38sm public int poolSize; 208cfd74d65d832137e20e193c960802afba73b5d38sm public ComponentClass(Class<?> classType, int size) { 209cfd74d65d832137e20e193c960802afba73b5d38sm type = classType; 210cfd74d65d832137e20e193c960802afba73b5d38sm poolSize = size; 211cfd74d65d832137e20e193c960802afba73b5d38sm } 212cfd74d65d832137e20e193c960802afba73b5d38sm } 213cfd74d65d832137e20e193c960802afba73b5d38sm ComponentClass[] componentTypes = { 214cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(AnimationComponent.class, 1), 215cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(AttackAtDistanceComponent.class, 16), 2169d4cc2572d37983607df38b0f4216ed76ac51814sm new ComponentClass(BackgroundCollisionComponent.class, 192), 217cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(ButtonAnimationComponent.class, 32), 218cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(CameraBiasComponent.class, 8), 2199d4cc2572d37983607df38b0f4216ed76ac51814sm new ComponentClass(ChangeComponentsComponent.class, 256), 2202b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm new ComponentClass(CrusherAndouComponent.class, 1), 221cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(DoorAnimationComponent.class, 256), //! 222cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(DynamicCollisionComponent.class, 256), 2239d4cc2572d37983607df38b0f4216ed76ac51814sm new ComponentClass(EnemyAnimationComponent.class, 256), 224cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(FadeDrawableComponent.class, 32), 225cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(FixedAnimationComponent.class, 8), 2269d4cc2572d37983607df38b0f4216ed76ac51814sm new ComponentClass(FrameRateWatcherComponent.class, 1), 227cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(GenericAnimationComponent.class, 32), 2289d4cc2572d37983607df38b0f4216ed76ac51814sm new ComponentClass(GhostComponent.class, 256), 229cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(GravityComponent.class, 128), 230cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(HitPlayerComponent.class, 256), 231cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(HitReactionComponent.class, 256), 232cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(InventoryComponent.class, 128), 233cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(LauncherComponent.class, 16), 234cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(LaunchProjectileComponent.class, 128), 2359d4cc2572d37983607df38b0f4216ed76ac51814sm new ComponentClass(LifetimeComponent.class, 384), 236cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(MotionBlurComponent.class, 1), 237cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(MovementComponent.class, 128), 238cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(NPCAnimationComponent.class, 8), 239cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(NPCComponent.class, 8), 240cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(OrbitalMagnetComponent.class, 1), 2419d4cc2572d37983607df38b0f4216ed76ac51814sm new ComponentClass(PatrolComponent.class, 256), 242cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(PhysicsComponent.class, 8), 243cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(PlayerComponent.class, 1), 2442b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm new ComponentClass(PlaySingleSoundComponent.class, 128), 245cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(PopOutComponent.class, 32), 2469d4cc2572d37983607df38b0f4216ed76ac51814sm new ComponentClass(RenderComponent.class, 384), 247cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(ScrollerComponent.class, 8), 248cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(SelectDialogComponent.class, 8), 249cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(SimpleCollisionComponent.class, 32), 2509d4cc2572d37983607df38b0f4216ed76ac51814sm new ComponentClass(SimplePhysicsComponent.class, 256), 251cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(SleeperComponent.class, 32), 252cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(SolidSurfaceComponent.class, 16), 2539d4cc2572d37983607df38b0f4216ed76ac51814sm new ComponentClass(SpriteComponent.class, 384), 254cfd74d65d832137e20e193c960802afba73b5d38sm new ComponentClass(TheSourceComponent.class, 1), 255cfd74d65d832137e20e193c960802afba73b5d38sm 256cfd74d65d832137e20e193c960802afba73b5d38sm }; 257cfd74d65d832137e20e193c960802afba73b5d38sm 258cfd74d65d832137e20e193c960802afba73b5d38sm mComponentPools = new FixedSizeArray<GameComponentPool>(componentTypes.length, sComponentPoolComparator); 259cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < componentTypes.length; x++) { 260cfd74d65d832137e20e193c960802afba73b5d38sm ComponentClass component = componentTypes[x]; 261cfd74d65d832137e20e193c960802afba73b5d38sm mComponentPools.add(new GameComponentPool(component.type, component.poolSize)); 262cfd74d65d832137e20e193c960802afba73b5d38sm } 263cfd74d65d832137e20e193c960802afba73b5d38sm mComponentPools.sort(true); 264cfd74d65d832137e20e193c960802afba73b5d38sm 265cfd74d65d832137e20e193c960802afba73b5d38sm mPoolSearchDummy = new GameComponentPool(Object.class, 1); 266cfd74d65d832137e20e193c960802afba73b5d38sm 267cfd74d65d832137e20e193c960802afba73b5d38sm } 268cfd74d65d832137e20e193c960802afba73b5d38sm 269cfd74d65d832137e20e193c960802afba73b5d38sm @Override 270cfd74d65d832137e20e193c960802afba73b5d38sm public void reset() { 271cfd74d65d832137e20e193c960802afba73b5d38sm 272cfd74d65d832137e20e193c960802afba73b5d38sm } 273cfd74d65d832137e20e193c960802afba73b5d38sm 274cfd74d65d832137e20e193c960802afba73b5d38sm protected GameComponentPool getComponentPool(Class<?> componentType) { 275cfd74d65d832137e20e193c960802afba73b5d38sm GameComponentPool pool = null; 276cfd74d65d832137e20e193c960802afba73b5d38sm mPoolSearchDummy.objectClass = componentType; 277cfd74d65d832137e20e193c960802afba73b5d38sm final int index = mComponentPools.find(mPoolSearchDummy, false); 278cfd74d65d832137e20e193c960802afba73b5d38sm if (index != -1) { 279cfd74d65d832137e20e193c960802afba73b5d38sm pool = mComponentPools.get(index); 280cfd74d65d832137e20e193c960802afba73b5d38sm } 281cfd74d65d832137e20e193c960802afba73b5d38sm return pool; 282cfd74d65d832137e20e193c960802afba73b5d38sm } 283cfd74d65d832137e20e193c960802afba73b5d38sm 284cfd74d65d832137e20e193c960802afba73b5d38sm protected GameComponent allocateComponent(Class<?> componentType) { 285cfd74d65d832137e20e193c960802afba73b5d38sm GameComponentPool pool = getComponentPool(componentType); 286cfd74d65d832137e20e193c960802afba73b5d38sm assert pool != null; 287cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent component = null; 288cfd74d65d832137e20e193c960802afba73b5d38sm if (pool != null) { 289cfd74d65d832137e20e193c960802afba73b5d38sm component = pool.allocate(); 290cfd74d65d832137e20e193c960802afba73b5d38sm } 291cfd74d65d832137e20e193c960802afba73b5d38sm return component; 292cfd74d65d832137e20e193c960802afba73b5d38sm } 293cfd74d65d832137e20e193c960802afba73b5d38sm 294cfd74d65d832137e20e193c960802afba73b5d38sm protected void releaseComponent(GameComponent component) { 295cfd74d65d832137e20e193c960802afba73b5d38sm GameComponentPool pool = getComponentPool(component.getClass()); 296cfd74d65d832137e20e193c960802afba73b5d38sm assert pool != null; 297cfd74d65d832137e20e193c960802afba73b5d38sm if (pool != null) { 298cfd74d65d832137e20e193c960802afba73b5d38sm component.reset(); 299cfd74d65d832137e20e193c960802afba73b5d38sm component.shared = false; 300cfd74d65d832137e20e193c960802afba73b5d38sm pool.release(component); 301cfd74d65d832137e20e193c960802afba73b5d38sm } 302cfd74d65d832137e20e193c960802afba73b5d38sm } 303cfd74d65d832137e20e193c960802afba73b5d38sm 3049d4cc2572d37983607df38b0f4216ed76ac51814sm protected boolean componentAvailable(Class<?> componentType, int count) { 3059d4cc2572d37983607df38b0f4216ed76ac51814sm boolean canAllocate = false; 3069d4cc2572d37983607df38b0f4216ed76ac51814sm GameComponentPool pool = getComponentPool(componentType); 3079d4cc2572d37983607df38b0f4216ed76ac51814sm assert pool != null; 3089d4cc2572d37983607df38b0f4216ed76ac51814sm if (pool != null) { 3099d4cc2572d37983607df38b0f4216ed76ac51814sm canAllocate = pool.getAllocatedCount() + count < pool.getSize(); 3109d4cc2572d37983607df38b0f4216ed76ac51814sm } 3119d4cc2572d37983607df38b0f4216ed76ac51814sm return canAllocate; 3129d4cc2572d37983607df38b0f4216ed76ac51814sm } 3139d4cc2572d37983607df38b0f4216ed76ac51814sm 314cfd74d65d832137e20e193c960802afba73b5d38sm public void preloadEffects() { 315cfd74d65d832137e20e193c960802afba73b5d38sm // These textures appear in every level, so they are long-term. 316cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.longTermTextureLibrary; 317cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.dust01); 318cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.dust02); 319cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.dust03); 320cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.dust04); 321cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.dust05); 322cfd74d65d832137e20e193c960802afba73b5d38sm 323cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_energyball01); 324cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_energyball02); 325cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_energyball03); 326cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_energyball04); 327cfd74d65d832137e20e193c960802afba73b5d38sm 328cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_small01); 329cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_small02); 330cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_small03); 331cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_small04); 332cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_small05); 333cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_small06); 334cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_small07); 335cfd74d65d832137e20e193c960802afba73b5d38sm 336cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_big01); 337cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_big02); 338cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_big03); 339cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_big04); 340cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_big05); 341cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_big06); 342cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_big07); 343cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_big08); 344cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_explosion_big09); 345cfd74d65d832137e20e193c960802afba73b5d38sm 346cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_smoke_big01); 347cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_smoke_big02); 348cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_smoke_big03); 349cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_smoke_big04); 350cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_smoke_big05); 351cfd74d65d832137e20e193c960802afba73b5d38sm 352cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_smoke_small01); 353cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_smoke_small02); 354cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_smoke_small03); 355cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_smoke_small04); 356cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_smoke_small05); 357cfd74d65d832137e20e193c960802afba73b5d38sm 358cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_crush_back01); 359cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_crush_back02); 360cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_crush_back03); 361cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_crush_front01); 362cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_crush_front02); 363cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_crush_front03); 364cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_crush_front04); 365cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_crush_front05); 366cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_crush_front06); 367cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_crush_front07); 368cfd74d65d832137e20e193c960802afba73b5d38sm } 369cfd74d65d832137e20e193c960802afba73b5d38sm 370cfd74d65d832137e20e193c960802afba73b5d38sm public void destroy(GameObject object) { 371cfd74d65d832137e20e193c960802afba73b5d38sm object.commitUpdates(); 372cfd74d65d832137e20e193c960802afba73b5d38sm final int componentCount = object.getCount(); 373cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < componentCount; x++) { 374cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent component = (GameComponent)object.get(x); 375cfd74d65d832137e20e193c960802afba73b5d38sm if (!component.shared) { 376cfd74d65d832137e20e193c960802afba73b5d38sm releaseComponent(component); 377cfd74d65d832137e20e193c960802afba73b5d38sm } 378cfd74d65d832137e20e193c960802afba73b5d38sm } 379cfd74d65d832137e20e193c960802afba73b5d38sm object.removeAll(); 380cfd74d65d832137e20e193c960802afba73b5d38sm object.commitUpdates(); 381cfd74d65d832137e20e193c960802afba73b5d38sm mGameObjectPool.release(object); 382cfd74d65d832137e20e193c960802afba73b5d38sm } 383cfd74d65d832137e20e193c960802afba73b5d38sm 384cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawn(GameObjectType type, float x, float y, boolean horzFlip) { 385cfd74d65d832137e20e193c960802afba73b5d38sm GameObject newObject = null; 386cfd74d65d832137e20e193c960802afba73b5d38sm switch(type) { 387cfd74d65d832137e20e193c960802afba73b5d38sm case PLAYER: 388cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnPlayer(x, y); 389cfd74d65d832137e20e193c960802afba73b5d38sm break; 390cfd74d65d832137e20e193c960802afba73b5d38sm case COIN: 391cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnCoin(x, y); 392cfd74d65d832137e20e193c960802afba73b5d38sm break; 393cfd74d65d832137e20e193c960802afba73b5d38sm case RUBY: 394cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnRuby(x, y); 395cfd74d65d832137e20e193c960802afba73b5d38sm break; 396cfd74d65d832137e20e193c960802afba73b5d38sm case DIARY: 397cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnDiary(x, y); 398cfd74d65d832137e20e193c960802afba73b5d38sm break; 399cfd74d65d832137e20e193c960802afba73b5d38sm case WANDA: 400cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemyWanda(x, y, true); 401cfd74d65d832137e20e193c960802afba73b5d38sm break; 402cfd74d65d832137e20e193c960802afba73b5d38sm case KYLE: 403cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemyKyle(x, y, true); 404cfd74d65d832137e20e193c960802afba73b5d38sm break; 405cfd74d65d832137e20e193c960802afba73b5d38sm case KYLE_DEAD: 406cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemyKyleDead(x, y); 407cfd74d65d832137e20e193c960802afba73b5d38sm break; 408cfd74d65d832137e20e193c960802afba73b5d38sm case ANDOU_DEAD: 409cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemyAndouDead(x, y); 410cfd74d65d832137e20e193c960802afba73b5d38sm break; 411cfd74d65d832137e20e193c960802afba73b5d38sm case KABOCHA: 412cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemyKabocha(x, y, true); 413cfd74d65d832137e20e193c960802afba73b5d38sm break; 414cfd74d65d832137e20e193c960802afba73b5d38sm case ROKUDOU_TERMINAL: 415cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnRokudouTerminal(x, y); 416cfd74d65d832137e20e193c960802afba73b5d38sm break; 417cfd74d65d832137e20e193c960802afba73b5d38sm case KABOCHA_TERMINAL: 418cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnKabochaTerminal(x, y); 419cfd74d65d832137e20e193c960802afba73b5d38sm break; 420cfd74d65d832137e20e193c960802afba73b5d38sm case EVIL_KABOCHA: 421cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemyEvilKabocha(x, y, true); 422cfd74d65d832137e20e193c960802afba73b5d38sm break; 423cfd74d65d832137e20e193c960802afba73b5d38sm case ROKUDOU: 424cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemyRokudou(x, y, true); 425cfd74d65d832137e20e193c960802afba73b5d38sm break; 426cfd74d65d832137e20e193c960802afba73b5d38sm case BROBOT: 427cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemyBrobot(x, y, horzFlip); 428cfd74d65d832137e20e193c960802afba73b5d38sm break; 429cfd74d65d832137e20e193c960802afba73b5d38sm case SNAILBOMB: 430cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemySnailBomb(x, y, horzFlip); 431cfd74d65d832137e20e193c960802afba73b5d38sm break; 432cfd74d65d832137e20e193c960802afba73b5d38sm case SHADOWSLIME: 433cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemyShadowSlime(x, y, horzFlip); 434cfd74d65d832137e20e193c960802afba73b5d38sm break; 435cfd74d65d832137e20e193c960802afba73b5d38sm case MUDMAN: 436cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemyMudman(x, y, horzFlip); 437cfd74d65d832137e20e193c960802afba73b5d38sm break; 438cfd74d65d832137e20e193c960802afba73b5d38sm case SKELETON: 439cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemySkeleton(x, y, horzFlip); 440cfd74d65d832137e20e193c960802afba73b5d38sm break; 441cfd74d65d832137e20e193c960802afba73b5d38sm case KARAGUIN: 442cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemyKaraguin(x, y, horzFlip); 443cfd74d65d832137e20e193c960802afba73b5d38sm break; 444cfd74d65d832137e20e193c960802afba73b5d38sm case PINK_NAMAZU: 445cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemyPinkNamazu(x, y, horzFlip); 446cfd74d65d832137e20e193c960802afba73b5d38sm break; 447cfd74d65d832137e20e193c960802afba73b5d38sm case BAT: 448cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemyBat(x, y, horzFlip); 449cfd74d65d832137e20e193c960802afba73b5d38sm break; 450cfd74d65d832137e20e193c960802afba73b5d38sm case STING: 451cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemySting(x, y, horzFlip); 452cfd74d65d832137e20e193c960802afba73b5d38sm break; 453cfd74d65d832137e20e193c960802afba73b5d38sm case ONION: 454cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnemyOnion(x, y, horzFlip); 455cfd74d65d832137e20e193c960802afba73b5d38sm break; 456cfd74d65d832137e20e193c960802afba73b5d38sm case TURRET: 457cfd74d65d832137e20e193c960802afba73b5d38sm case TURRET_LEFT: 458cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnObjectTurret(x, y, (type == GameObjectType.TURRET_LEFT)); 459cfd74d65d832137e20e193c960802afba73b5d38sm break; 460cfd74d65d832137e20e193c960802afba73b5d38sm case DOOR_RED: 461cfd74d65d832137e20e193c960802afba73b5d38sm case DOOR_RED_NONBLOCKING: 462cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnObjectDoor(x, y, GameObjectType.DOOR_RED, (type == GameObjectType.DOOR_RED)); 463cfd74d65d832137e20e193c960802afba73b5d38sm break; 464cfd74d65d832137e20e193c960802afba73b5d38sm case DOOR_BLUE: 465cfd74d65d832137e20e193c960802afba73b5d38sm case DOOR_BLUE_NONBLOCKING: 466cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnObjectDoor(x, y, GameObjectType.DOOR_BLUE, (type == GameObjectType.DOOR_BLUE)); 467cfd74d65d832137e20e193c960802afba73b5d38sm break; 468cfd74d65d832137e20e193c960802afba73b5d38sm case DOOR_GREEN: 469cfd74d65d832137e20e193c960802afba73b5d38sm case DOOR_GREEN_NONBLOCKING: 470cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnObjectDoor(x, y, GameObjectType.DOOR_GREEN, (type == GameObjectType.DOOR_GREEN)); 471cfd74d65d832137e20e193c960802afba73b5d38sm break; 472cfd74d65d832137e20e193c960802afba73b5d38sm case BUTTON_RED: 473cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnObjectButton(x, y, GameObjectType.BUTTON_RED); 474cfd74d65d832137e20e193c960802afba73b5d38sm break; 475cfd74d65d832137e20e193c960802afba73b5d38sm case BUTTON_BLUE: 476cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnObjectButton(x, y, GameObjectType.BUTTON_BLUE); 477cfd74d65d832137e20e193c960802afba73b5d38sm break; 478cfd74d65d832137e20e193c960802afba73b5d38sm case BUTTON_GREEN: 479cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnObjectButton(x, y, GameObjectType.BUTTON_GREEN); 480cfd74d65d832137e20e193c960802afba73b5d38sm break; 481cfd74d65d832137e20e193c960802afba73b5d38sm case CANNON: 482cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnObjectCannon(x, y); 483cfd74d65d832137e20e193c960802afba73b5d38sm break; 484cfd74d65d832137e20e193c960802afba73b5d38sm case BROBOT_SPAWNER: 485cfd74d65d832137e20e193c960802afba73b5d38sm case BROBOT_SPAWNER_LEFT: 486cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnObjectBrobotSpawner(x, y, (type == GameObjectType.BROBOT_SPAWNER_LEFT)); 487cfd74d65d832137e20e193c960802afba73b5d38sm break; 488cfd74d65d832137e20e193c960802afba73b5d38sm case BREAKABLE_BLOCK: 489cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnObjectBreakableBlock(x, y); 490cfd74d65d832137e20e193c960802afba73b5d38sm break; 491cfd74d65d832137e20e193c960802afba73b5d38sm case THE_SOURCE: 492cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnObjectTheSource(x, y); 493cfd74d65d832137e20e193c960802afba73b5d38sm break; 4942b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm case HINT_SIGN: 4952b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm newObject = spawnObjectSign(x, y); 4962b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm break; 497cfd74d65d832137e20e193c960802afba73b5d38sm case DUST: 498cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnDust(x, y, horzFlip); 499cfd74d65d832137e20e193c960802afba73b5d38sm break; 500cfd74d65d832137e20e193c960802afba73b5d38sm case EXPLOSION_SMALL: 501cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEffectExplosionSmall(x, y); 502cfd74d65d832137e20e193c960802afba73b5d38sm break; 503cfd74d65d832137e20e193c960802afba73b5d38sm case EXPLOSION_LARGE: 504cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEffectExplosionLarge(x, y); 505cfd74d65d832137e20e193c960802afba73b5d38sm break; 506cfd74d65d832137e20e193c960802afba73b5d38sm case EXPLOSION_GIANT: 507cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEffectExplosionGiant(x, y); 508cfd74d65d832137e20e193c960802afba73b5d38sm break; 509cfd74d65d832137e20e193c960802afba73b5d38sm case GHOST_NPC: 510cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnGhostNPC(x, y); 511cfd74d65d832137e20e193c960802afba73b5d38sm break; 512cfd74d65d832137e20e193c960802afba73b5d38sm case CAMERA_BIAS: 513cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnCameraBias(x, y); 514cfd74d65d832137e20e193c960802afba73b5d38sm break; 5159d4cc2572d37983607df38b0f4216ed76ac51814sm case FRAMERATE_WATCHER: 5169d4cc2572d37983607df38b0f4216ed76ac51814sm newObject = spawnFrameRateWatcher(x, y); 5179d4cc2572d37983607df38b0f4216ed76ac51814sm break; 5189d4cc2572d37983607df38b0f4216ed76ac51814sm case INFINITE_SPAWNER: 5199d4cc2572d37983607df38b0f4216ed76ac51814sm newObject = spawnObjectInfiniteSpawner(x, y); 5209d4cc2572d37983607df38b0f4216ed76ac51814sm break; 5212b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm case CRUSHER_ANDOU: 5222b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm newObject = spawnObjectCrusherAndou(x,y); 5232b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm break; 524cfd74d65d832137e20e193c960802afba73b5d38sm case SMOKE_BIG: 525cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEffectSmokeBig(x, y); 526cfd74d65d832137e20e193c960802afba73b5d38sm break; 527cfd74d65d832137e20e193c960802afba73b5d38sm case SMOKE_SMALL: 528cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEffectSmokeSmall(x, y); 529cfd74d65d832137e20e193c960802afba73b5d38sm break; 530cfd74d65d832137e20e193c960802afba73b5d38sm case CRUSH_FLASH: 531cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEffectCrushFlash(x, y); 532cfd74d65d832137e20e193c960802afba73b5d38sm break; 533cfd74d65d832137e20e193c960802afba73b5d38sm case FLASH: 534cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEffectFlash(x, y); 535cfd74d65d832137e20e193c960802afba73b5d38sm break; 5369d4cc2572d37983607df38b0f4216ed76ac51814sm 537cfd74d65d832137e20e193c960802afba73b5d38sm case ENERGY_BALL: 538cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnEnergyBall(x, y, horzFlip); 539cfd74d65d832137e20e193c960802afba73b5d38sm break; 540cfd74d65d832137e20e193c960802afba73b5d38sm case CANNON_BALL: 541cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnCannonBall(x, y, horzFlip); 542cfd74d65d832137e20e193c960802afba73b5d38sm break; 543cfd74d65d832137e20e193c960802afba73b5d38sm case TURRET_BULLET: 544cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnTurretBullet(x, y, horzFlip); 545cfd74d65d832137e20e193c960802afba73b5d38sm break; 546cfd74d65d832137e20e193c960802afba73b5d38sm case BROBOT_BULLET: 547cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnBrobotBullet(x, y, horzFlip); 548cfd74d65d832137e20e193c960802afba73b5d38sm break; 549cfd74d65d832137e20e193c960802afba73b5d38sm case BREAKABLE_BLOCK_PIECE: 550cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnBreakableBlockPiece(x, y); 551cfd74d65d832137e20e193c960802afba73b5d38sm break; 552cfd74d65d832137e20e193c960802afba73b5d38sm case BREAKABLE_BLOCK_PIECE_SPAWNER: 553cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnBreakableBlockPieceSpawner(x, y); 554cfd74d65d832137e20e193c960802afba73b5d38sm break; 555cfd74d65d832137e20e193c960802afba73b5d38sm case WANDA_SHOT: 556cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnWandaShot(x, y, horzFlip); 557cfd74d65d832137e20e193c960802afba73b5d38sm break; 558cfd74d65d832137e20e193c960802afba73b5d38sm case SMOKE_POOF: 559cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnSmokePoof(x, y); 560cfd74d65d832137e20e193c960802afba73b5d38sm break; 561cfd74d65d832137e20e193c960802afba73b5d38sm case GEM_EFFECT: 562cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnGemEffect(x, y); 563cfd74d65d832137e20e193c960802afba73b5d38sm break; 564cfd74d65d832137e20e193c960802afba73b5d38sm case GEM_EFFECT_SPAWNER: 565cfd74d65d832137e20e193c960802afba73b5d38sm newObject = spawnGemEffectSpawner(x, y); 566cfd74d65d832137e20e193c960802afba73b5d38sm break; 567cfd74d65d832137e20e193c960802afba73b5d38sm } 568cfd74d65d832137e20e193c960802afba73b5d38sm 569cfd74d65d832137e20e193c960802afba73b5d38sm return newObject; 570cfd74d65d832137e20e193c960802afba73b5d38sm } 571cfd74d65d832137e20e193c960802afba73b5d38sm 572cfd74d65d832137e20e193c960802afba73b5d38sm 573cfd74d65d832137e20e193c960802afba73b5d38sm 574cfd74d65d832137e20e193c960802afba73b5d38sm public void spawnFromWorld(TiledWorld world, int tileWidth, int tileHeight) { 575cfd74d65d832137e20e193c960802afba73b5d38sm // Walk the world and spawn objects based on tile indexes. 576cfd74d65d832137e20e193c960802afba73b5d38sm final float worldHeight = world.getHeight() * tileHeight; 577cfd74d65d832137e20e193c960802afba73b5d38sm GameObjectManager manager = sSystemRegistry.gameObjectManager; 578cfd74d65d832137e20e193c960802afba73b5d38sm if (manager != null) { 579cfd74d65d832137e20e193c960802afba73b5d38sm for (int y = 0; y < world.getHeight(); y++) { 580cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < world.getWidth(); x++) { 581cfd74d65d832137e20e193c960802afba73b5d38sm int index = world.getTile(x, y); 582cfd74d65d832137e20e193c960802afba73b5d38sm if (index != -1) { 583cfd74d65d832137e20e193c960802afba73b5d38sm GameObjectType type = GameObjectType.indexToType(index); 584cfd74d65d832137e20e193c960802afba73b5d38sm if (type != GameObjectType.INVALID) { 585cfd74d65d832137e20e193c960802afba73b5d38sm final float worldX = x * tileWidth; 586cfd74d65d832137e20e193c960802afba73b5d38sm final float worldY = worldHeight - ((y + 1) * tileHeight); 587cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = spawn(type, worldX, worldY, false); 588cfd74d65d832137e20e193c960802afba73b5d38sm if (object != null) { 589cfd74d65d832137e20e193c960802afba73b5d38sm if (object.height < tileHeight) { 590cfd74d65d832137e20e193c960802afba73b5d38sm // make sure small objects are vertically centered in their 591cfd74d65d832137e20e193c960802afba73b5d38sm // tile. 592cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().y += (tileHeight - object.height) / 2.0f; 593cfd74d65d832137e20e193c960802afba73b5d38sm } 594cfd74d65d832137e20e193c960802afba73b5d38sm if (object.width < tileWidth) { 595cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().x += (tileWidth - object.width) / 2.0f; 596cfd74d65d832137e20e193c960802afba73b5d38sm } else if (object.width > tileWidth) { 597cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().x -= (object.width - tileWidth) / 2.0f; 598cfd74d65d832137e20e193c960802afba73b5d38sm } 599cfd74d65d832137e20e193c960802afba73b5d38sm manager.add(object); 600cfd74d65d832137e20e193c960802afba73b5d38sm if (type == GameObjectType.PLAYER) { 601cfd74d65d832137e20e193c960802afba73b5d38sm manager.setPlayer(object); 602cfd74d65d832137e20e193c960802afba73b5d38sm } 603cfd74d65d832137e20e193c960802afba73b5d38sm } 604cfd74d65d832137e20e193c960802afba73b5d38sm } 605cfd74d65d832137e20e193c960802afba73b5d38sm } 606cfd74d65d832137e20e193c960802afba73b5d38sm } 607cfd74d65d832137e20e193c960802afba73b5d38sm } 608cfd74d65d832137e20e193c960802afba73b5d38sm } 609cfd74d65d832137e20e193c960802afba73b5d38sm } 610cfd74d65d832137e20e193c960802afba73b5d38sm 611cfd74d65d832137e20e193c960802afba73b5d38sm 612cfd74d65d832137e20e193c960802afba73b5d38sm private FixedSizeArray<BaseObject> getStaticData(GameObjectType type) { 613cfd74d65d832137e20e193c960802afba73b5d38sm return mStaticData.get(type.ordinal()); 614cfd74d65d832137e20e193c960802afba73b5d38sm } 615cfd74d65d832137e20e193c960802afba73b5d38sm 616cfd74d65d832137e20e193c960802afba73b5d38sm private void setStaticData(GameObjectType type, FixedSizeArray<BaseObject> data) { 617cfd74d65d832137e20e193c960802afba73b5d38sm int index = type.ordinal(); 618cfd74d65d832137e20e193c960802afba73b5d38sm assert mStaticData.get(index) == null; 619cfd74d65d832137e20e193c960802afba73b5d38sm 620cfd74d65d832137e20e193c960802afba73b5d38sm final int staticDataCount = data.getCount(); 621cfd74d65d832137e20e193c960802afba73b5d38sm 622cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < staticDataCount; x++) { 623cfd74d65d832137e20e193c960802afba73b5d38sm BaseObject entry = data.get(x); 624cfd74d65d832137e20e193c960802afba73b5d38sm if (entry instanceof GameComponent) { 625cfd74d65d832137e20e193c960802afba73b5d38sm ((GameComponent) entry).shared = true; 626cfd74d65d832137e20e193c960802afba73b5d38sm } 627cfd74d65d832137e20e193c960802afba73b5d38sm } 628cfd74d65d832137e20e193c960802afba73b5d38sm 629cfd74d65d832137e20e193c960802afba73b5d38sm mStaticData.set(index, data); 630cfd74d65d832137e20e193c960802afba73b5d38sm } 631cfd74d65d832137e20e193c960802afba73b5d38sm 632cfd74d65d832137e20e193c960802afba73b5d38sm private void addStaticData(GameObjectType type, GameObject object, SpriteComponent sprite) { 633cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(type); 634cfd74d65d832137e20e193c960802afba73b5d38sm assert staticData != null; 635cfd74d65d832137e20e193c960802afba73b5d38sm 636cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData != null) { 637cfd74d65d832137e20e193c960802afba73b5d38sm final int staticDataCount = staticData.getCount(); 638cfd74d65d832137e20e193c960802afba73b5d38sm 639cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < staticDataCount; x++) { 640cfd74d65d832137e20e193c960802afba73b5d38sm BaseObject entry = staticData.get(x); 641cfd74d65d832137e20e193c960802afba73b5d38sm if (entry instanceof GameComponent && object != null) { 642cfd74d65d832137e20e193c960802afba73b5d38sm object.add((GameComponent)entry); 643cfd74d65d832137e20e193c960802afba73b5d38sm } else if (entry instanceof SpriteAnimation && sprite != null) { 644cfd74d65d832137e20e193c960802afba73b5d38sm sprite.addAnimation((SpriteAnimation)entry); 645cfd74d65d832137e20e193c960802afba73b5d38sm } 646cfd74d65d832137e20e193c960802afba73b5d38sm } 647cfd74d65d832137e20e193c960802afba73b5d38sm } 648cfd74d65d832137e20e193c960802afba73b5d38sm } 649cfd74d65d832137e20e193c960802afba73b5d38sm 650cfd74d65d832137e20e193c960802afba73b5d38sm public void clearStaticData() { 651cfd74d65d832137e20e193c960802afba73b5d38sm final int typeCount = mStaticData.getCount(); 652cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < typeCount; x++) { 653cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = mStaticData.get(x); 654cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData != null) { 655cfd74d65d832137e20e193c960802afba73b5d38sm final int count = staticData.getCount(); 656cfd74d65d832137e20e193c960802afba73b5d38sm for (int y = 0; y < count; y++) { 657cfd74d65d832137e20e193c960802afba73b5d38sm BaseObject entry = staticData.get(y); 658cfd74d65d832137e20e193c960802afba73b5d38sm if (entry != null) { 659cfd74d65d832137e20e193c960802afba73b5d38sm if (entry instanceof GameComponent) { 660cfd74d65d832137e20e193c960802afba73b5d38sm releaseComponent((GameComponent)entry); 661cfd74d65d832137e20e193c960802afba73b5d38sm } 662cfd74d65d832137e20e193c960802afba73b5d38sm } 663cfd74d65d832137e20e193c960802afba73b5d38sm } 664cfd74d65d832137e20e193c960802afba73b5d38sm staticData.clear(); 665cfd74d65d832137e20e193c960802afba73b5d38sm mStaticData.set(x, null); 666cfd74d65d832137e20e193c960802afba73b5d38sm } 667cfd74d65d832137e20e193c960802afba73b5d38sm } 668cfd74d65d832137e20e193c960802afba73b5d38sm } 669cfd74d65d832137e20e193c960802afba73b5d38sm 670cfd74d65d832137e20e193c960802afba73b5d38sm public void sanityCheckPools() { 671cfd74d65d832137e20e193c960802afba73b5d38sm final int outstandingObjects = mGameObjectPool.getAllocatedCount(); 672cfd74d65d832137e20e193c960802afba73b5d38sm if (outstandingObjects != 0) { 673cfd74d65d832137e20e193c960802afba73b5d38sm DebugLog.d("Sanity Check", "Outstanding game object allocations! (" 674cfd74d65d832137e20e193c960802afba73b5d38sm + outstandingObjects + ")"); 675cfd74d65d832137e20e193c960802afba73b5d38sm assert false; 676cfd74d65d832137e20e193c960802afba73b5d38sm } 677cfd74d65d832137e20e193c960802afba73b5d38sm 678cfd74d65d832137e20e193c960802afba73b5d38sm final int componentPoolCount = mComponentPools.getCount(); 679cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < componentPoolCount; x++) { 680cfd74d65d832137e20e193c960802afba73b5d38sm final int outstandingComponents = mComponentPools.get(x).getAllocatedCount(); 681cfd74d65d832137e20e193c960802afba73b5d38sm 682cfd74d65d832137e20e193c960802afba73b5d38sm if (outstandingComponents != 0) { 683cfd74d65d832137e20e193c960802afba73b5d38sm DebugLog.d("Sanity Check", "Outstanding " 684cfd74d65d832137e20e193c960802afba73b5d38sm + mComponentPools.get(x).objectClass.getSimpleName() 685cfd74d65d832137e20e193c960802afba73b5d38sm + " allocations! (" + outstandingComponents + ")"); 686cfd74d65d832137e20e193c960802afba73b5d38sm //assert false; 687cfd74d65d832137e20e193c960802afba73b5d38sm } 688cfd74d65d832137e20e193c960802afba73b5d38sm } 689cfd74d65d832137e20e193c960802afba73b5d38sm } 690cfd74d65d832137e20e193c960802afba73b5d38sm 691cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnPlayer(float positionX, float positionY) { 692cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 693cfd74d65d832137e20e193c960802afba73b5d38sm 694cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 695cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 696cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mAlwaysActive; 697cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 698cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 699cfd74d65d832137e20e193c960802afba73b5d38sm 700cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.PLAYER); 701cfd74d65d832137e20e193c960802afba73b5d38sm 702cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 703cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 13; 704cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 705cfd74d65d832137e20e193c960802afba73b5d38sm 706cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent gravity = allocateComponent(GravityComponent.class); 707cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 708cfd74d65d832137e20e193c960802afba73b5d38sm PhysicsComponent physics = (PhysicsComponent)allocateComponent(PhysicsComponent.class); 709cfd74d65d832137e20e193c960802afba73b5d38sm 710cfd74d65d832137e20e193c960802afba73b5d38sm physics.setMass(9.1f); // ~90kg w/ earth gravity 711cfd74d65d832137e20e193c960802afba73b5d38sm physics.setDynamicFrictionCoeffecient(0.2f); 712cfd74d65d832137e20e193c960802afba73b5d38sm physics.setStaticFrictionCoeffecient(0.01f); 713cfd74d65d832137e20e193c960802afba73b5d38sm 714cfd74d65d832137e20e193c960802afba73b5d38sm // Animation Data 715cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 716cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 717cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new SphereCollisionVolume(16, 32, 32)); 718cfd74d65d832137e20e193c960802afba73b5d38sm 719cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> pressAndCollectVolume = 720cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(2); 721cfd74d65d832137e20e193c960802afba73b5d38sm AABoxCollisionVolume collectionVolume = new AABoxCollisionVolume(16, 0, 32, 48); 722cfd74d65d832137e20e193c960802afba73b5d38sm collectionVolume.setHitType(HitType.COLLECT); 723cfd74d65d832137e20e193c960802afba73b5d38sm pressAndCollectVolume.add(collectionVolume); 724cfd74d65d832137e20e193c960802afba73b5d38sm AABoxCollisionVolume pressCollisionVolume = new AABoxCollisionVolume(16, 0, 32, 16); 725cfd74d65d832137e20e193c960802afba73b5d38sm pressCollisionVolume.setHitType(HitType.DEPRESS); 726cfd74d65d832137e20e193c960802afba73b5d38sm pressAndCollectVolume.add(pressCollisionVolume); 727cfd74d65d832137e20e193c960802afba73b5d38sm 728cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(PlayerAnimations.IDLE.ordinal(), 1); 729cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_stand), 730cfd74d65d832137e20e193c960802afba73b5d38sm 1.0f, pressAndCollectVolume, basicVulnerabilityVolume)); 731cfd74d65d832137e20e193c960802afba73b5d38sm 732cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation angle = new SpriteAnimation(PlayerAnimations.MOVE.ordinal(), 1); 733cfd74d65d832137e20e193c960802afba73b5d38sm angle.addFrame( 734cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_diag01), 735cfd74d65d832137e20e193c960802afba73b5d38sm 0.0416f, pressAndCollectVolume, basicVulnerabilityVolume)); 736cfd74d65d832137e20e193c960802afba73b5d38sm 737cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation extremeAngle = new SpriteAnimation( 738cfd74d65d832137e20e193c960802afba73b5d38sm PlayerAnimations.MOVE_FAST.ordinal(), 1); 739cfd74d65d832137e20e193c960802afba73b5d38sm extremeAngle.addFrame( 740cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_diagmore01), 741cfd74d65d832137e20e193c960802afba73b5d38sm 0.0416f, pressAndCollectVolume, basicVulnerabilityVolume)); 742cfd74d65d832137e20e193c960802afba73b5d38sm 743cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation up = new SpriteAnimation(PlayerAnimations.BOOST_UP.ordinal(), 2); 744cfd74d65d832137e20e193c960802afba73b5d38sm up.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_flyup02), 745cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), pressAndCollectVolume, basicVulnerabilityVolume)); 746cfd74d65d832137e20e193c960802afba73b5d38sm up.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_flyup03), 747cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), pressAndCollectVolume, basicVulnerabilityVolume)); 748cfd74d65d832137e20e193c960802afba73b5d38sm up.setLoop(true); 749cfd74d65d832137e20e193c960802afba73b5d38sm 750cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation boostAngle = new SpriteAnimation(PlayerAnimations.BOOST_MOVE.ordinal(), 2); 751cfd74d65d832137e20e193c960802afba73b5d38sm boostAngle.addFrame( 752cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_diag02), 753cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), pressAndCollectVolume, basicVulnerabilityVolume)); 754cfd74d65d832137e20e193c960802afba73b5d38sm boostAngle.addFrame( 755cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_diag03), 756cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), pressAndCollectVolume, basicVulnerabilityVolume)); 757cfd74d65d832137e20e193c960802afba73b5d38sm boostAngle.setLoop(true); 758cfd74d65d832137e20e193c960802afba73b5d38sm 759cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation boostExtremeAngle = new SpriteAnimation( 760cfd74d65d832137e20e193c960802afba73b5d38sm PlayerAnimations.BOOST_MOVE_FAST.ordinal(), 2); 761cfd74d65d832137e20e193c960802afba73b5d38sm boostExtremeAngle.addFrame( 762cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_diagmore02), 763cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), pressAndCollectVolume, basicVulnerabilityVolume)); 764cfd74d65d832137e20e193c960802afba73b5d38sm boostExtremeAngle.addFrame( 765cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_diagmore03), 766cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), pressAndCollectVolume, basicVulnerabilityVolume)); 767cfd74d65d832137e20e193c960802afba73b5d38sm boostExtremeAngle.setLoop(true); 768cfd74d65d832137e20e193c960802afba73b5d38sm 769cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> stompAttackVolume = 770cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(3); 771cfd74d65d832137e20e193c960802afba73b5d38sm stompAttackVolume.add(new AABoxCollisionVolume(16, -5.0f, 32, 37, HitType.HIT)); 772cfd74d65d832137e20e193c960802afba73b5d38sm stompAttackVolume.add(pressCollisionVolume); 773cfd74d65d832137e20e193c960802afba73b5d38sm stompAttackVolume.add(collectionVolume); 774cfd74d65d832137e20e193c960802afba73b5d38sm 775cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation stomp = new SpriteAnimation(PlayerAnimations.STOMP.ordinal(), 4); 776cfd74d65d832137e20e193c960802afba73b5d38sm stomp.addFrame( 777cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_stomp01), 778cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), stompAttackVolume, null)); 779cfd74d65d832137e20e193c960802afba73b5d38sm stomp.addFrame( 780cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_stomp02), 781cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), stompAttackVolume, null)); 782cfd74d65d832137e20e193c960802afba73b5d38sm stomp.addFrame( 783cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_stomp03), 784cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), stompAttackVolume, null)); 785cfd74d65d832137e20e193c960802afba73b5d38sm stomp.addFrame( 786cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_stomp04), 787cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), stompAttackVolume, null)); 788cfd74d65d832137e20e193c960802afba73b5d38sm 789cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation hitReactAnim = new SpriteAnimation(PlayerAnimations.HIT_REACT.ordinal(), 1); 790cfd74d65d832137e20e193c960802afba73b5d38sm hitReactAnim.addFrame( 791cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_hit), 792cfd74d65d832137e20e193c960802afba73b5d38sm 0.1f, pressAndCollectVolume, null)); 793cfd74d65d832137e20e193c960802afba73b5d38sm 794cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation deathAnim = new SpriteAnimation(PlayerAnimations.DEATH.ordinal(), 16); 795cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame death1 = 796cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_die01), 797cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null); 798cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame death2 = 799cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_die02), 800cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null); 801cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame(death1); 802cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame(death2); 803cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame(death1); 804cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame(death2); 805cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame( 806cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_explode01), 807cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null)); 808cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame( 809cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_explode02), 810cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null)); 811cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame( 812cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_explode03), 813cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null)); 814cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame( 815cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_explode04), 816cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null)); 817cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame( 818cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_explode05), 819cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 820cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame( 821cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_explode06), 822cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 823cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame( 824cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_explode07), 825cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 826cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame( 827cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_explode08), 828cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 829cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame( 830cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_explode09), 831cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 832cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame( 833cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_explode10), 834cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 835cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame( 836cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_explode11), 837cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 838cfd74d65d832137e20e193c960802afba73b5d38sm deathAnim.addFrame( 839cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_explode12), 840cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 841cfd74d65d832137e20e193c960802afba73b5d38sm 842cfd74d65d832137e20e193c960802afba73b5d38sm 843cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation frozenAnim = new SpriteAnimation(PlayerAnimations.FROZEN.ordinal(), 1); 844cfd74d65d832137e20e193c960802afba73b5d38sm // Frozen has no frames! 845cfd74d65d832137e20e193c960802afba73b5d38sm 846cfd74d65d832137e20e193c960802afba73b5d38sm 847cfd74d65d832137e20e193c960802afba73b5d38sm // Save static data 848cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(gravity); 849cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 850cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(physics); 851cfd74d65d832137e20e193c960802afba73b5d38sm 852cfd74d65d832137e20e193c960802afba73b5d38sm 853cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 854cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(angle); 855cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(extremeAngle); 856cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(up); 857cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(boostAngle); 858cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(boostExtremeAngle); 859cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(stomp); 860cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(hitReactAnim); 861cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(deathAnim); 862cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(frozenAnim); 863cfd74d65d832137e20e193c960802afba73b5d38sm 864cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.PLAYER, staticData); 865cfd74d65d832137e20e193c960802afba73b5d38sm } 866cfd74d65d832137e20e193c960802afba73b5d38sm 867cfd74d65d832137e20e193c960802afba73b5d38sm 868cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 869cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.PLAYER); 870cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision 871cfd74d65d832137e20e193c960802afba73b5d38sm = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 872cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(32, 48); 873cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(16, 0); 874cfd74d65d832137e20e193c960802afba73b5d38sm PlayerComponent player = (PlayerComponent)allocateComponent(PlayerComponent.class); 875cfd74d65d832137e20e193c960802afba73b5d38sm AnimationComponent animation = 876cfd74d65d832137e20e193c960802afba73b5d38sm (AnimationComponent)allocateComponent(AnimationComponent.class); 877cfd74d65d832137e20e193c960802afba73b5d38sm 878cfd74d65d832137e20e193c960802afba73b5d38sm animation.setPlayer(player); 879cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = sSystemRegistry.soundSystem; 880cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 881cfd74d65d832137e20e193c960802afba73b5d38sm animation.setLandThump(sound.load(R.raw.thump)); 882cfd74d65d832137e20e193c960802afba73b5d38sm animation.setRocketSound(sound.load(R.raw.rockets)); 883cfd74d65d832137e20e193c960802afba73b5d38sm animation.setRubySounds(sound.load(R.raw.gem1), sound.load(R.raw.gem2), sound.load(R.raw.gem3)); 884cfd74d65d832137e20e193c960802afba73b5d38sm animation.setExplosionSound(sound.load(R.raw.sound_explode)); 885cfd74d65d832137e20e193c960802afba73b5d38sm } 886cfd74d65d832137e20e193c960802afba73b5d38sm 887cfd74d65d832137e20e193c960802afba73b5d38sm 888cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 889cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 890cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 891cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 892cfd74d65d832137e20e193c960802afba73b5d38sm 893cfd74d65d832137e20e193c960802afba73b5d38sm 894cfd74d65d832137e20e193c960802afba73b5d38sm 895cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision 896cfd74d65d832137e20e193c960802afba73b5d38sm = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 897cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 898cfd74d65d832137e20e193c960802afba73b5d38sm 899cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 900cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setBounceOnHit(true); 901cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setPauseOnAttack(true); 902cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setInvincibleTime(3.0f); 903cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setSpawnOnDealHit(HitType.HIT, GameObjectType.CRUSH_FLASH, false, true); 904cfd74d65d832137e20e193c960802afba73b5d38sm 905cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 906cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setTakeHitSound(HitType.HIT, sound.load(R.raw.deep_clang)); 907cfd74d65d832137e20e193c960802afba73b5d38sm } 908cfd74d65d832137e20e193c960802afba73b5d38sm 909cfd74d65d832137e20e193c960802afba73b5d38sm dynamicCollision.setHitReactionComponent(hitReact); 910cfd74d65d832137e20e193c960802afba73b5d38sm 911cfd74d65d832137e20e193c960802afba73b5d38sm player.setHitReactionComponent(hitReact); 912cfd74d65d832137e20e193c960802afba73b5d38sm 913cfd74d65d832137e20e193c960802afba73b5d38sm InventoryComponent inventory = (InventoryComponent)allocateComponent(InventoryComponent.class); 914cfd74d65d832137e20e193c960802afba73b5d38sm 915cfd74d65d832137e20e193c960802afba73b5d38sm player.setInventory(inventory); 916cfd74d65d832137e20e193c960802afba73b5d38sm animation.setInventory(inventory); 917cfd74d65d832137e20e193c960802afba73b5d38sm 918cfd74d65d832137e20e193c960802afba73b5d38sm ChangeComponentsComponent damageSwap = (ChangeComponentsComponent)allocateComponent(ChangeComponentsComponent.class); 919cfd74d65d832137e20e193c960802afba73b5d38sm animation.setDamageSwap(damageSwap); 920cfd74d65d832137e20e193c960802afba73b5d38sm 921cfd74d65d832137e20e193c960802afba73b5d38sm LaunchProjectileComponent smokeGun 922cfd74d65d832137e20e193c960802afba73b5d38sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 923cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun.setDelayBetweenShots(0.25f); 924cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun.setObjectTypeToSpawn(GameObjectType.SMOKE_BIG); 925cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun.setOffsetX(32); 926cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun.setOffsetY(15); 927cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun.setVelocityX(-150.0f); 928cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun.setVelocityY(100.0f); 929cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun.setThetaError(0.1f); 930cfd74d65d832137e20e193c960802afba73b5d38sm 931cfd74d65d832137e20e193c960802afba73b5d38sm LaunchProjectileComponent smokeGun2 932cfd74d65d832137e20e193c960802afba73b5d38sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 933cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun2.setDelayBetweenShots(0.35f); 934cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun2.setObjectTypeToSpawn(GameObjectType.SMOKE_SMALL); 935cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun2.setOffsetX(16); 936cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun2.setOffsetY(15); 937cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun2.setVelocityX(-150.0f); 938cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun2.setVelocityY(150.0f); 939cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun2.setThetaError(0.1f); 940cfd74d65d832137e20e193c960802afba73b5d38sm 941cfd74d65d832137e20e193c960802afba73b5d38sm damageSwap.addSwapInComponent(smokeGun); 942cfd74d65d832137e20e193c960802afba73b5d38sm damageSwap.addSwapInComponent(smokeGun2); 943cfd74d65d832137e20e193c960802afba73b5d38sm damageSwap.setPingPongBehavior(true); 944cfd74d65d832137e20e193c960802afba73b5d38sm 945cfd74d65d832137e20e193c960802afba73b5d38sm ChangeComponentsComponent invincibleSwap = (ChangeComponentsComponent)allocateComponent(ChangeComponentsComponent.class); 946cfd74d65d832137e20e193c960802afba73b5d38sm invincibleSwap.setPingPongBehavior(true); 947cfd74d65d832137e20e193c960802afba73b5d38sm player.setInvincibleSwap(invincibleSwap); 948cfd74d65d832137e20e193c960802afba73b5d38sm 9492b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.life = PlayerComponent.getDifficultyConstants().getMaxPlayerLife(); 950cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.PLAYER; 951cfd74d65d832137e20e193c960802afba73b5d38sm 952cfd74d65d832137e20e193c960802afba73b5d38sm // Very very basic DDA. Make the game easier if we've died on this level too much. 953cfd74d65d832137e20e193c960802afba73b5d38sm LevelSystem level = sSystemRegistry.levelSystem; 954cfd74d65d832137e20e193c960802afba73b5d38sm if (level != null) { 955cfd74d65d832137e20e193c960802afba73b5d38sm player.adjustDifficulty(object, level.getAttemptsCount()); 956cfd74d65d832137e20e193c960802afba73b5d38sm } 957cfd74d65d832137e20e193c960802afba73b5d38sm 958cfd74d65d832137e20e193c960802afba73b5d38sm 959cfd74d65d832137e20e193c960802afba73b5d38sm object.add(player); 960cfd74d65d832137e20e193c960802afba73b5d38sm object.add(inventory); 961cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 962cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 963cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 964cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 965cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 966cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 967cfd74d65d832137e20e193c960802afba73b5d38sm object.add(damageSwap); 968cfd74d65d832137e20e193c960802afba73b5d38sm object.add(invincibleSwap); 969cfd74d65d832137e20e193c960802afba73b5d38sm 970cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.PLAYER, object, sprite); 971cfd74d65d832137e20e193c960802afba73b5d38sm 972cfd74d65d832137e20e193c960802afba73b5d38sm 973cfd74d65d832137e20e193c960802afba73b5d38sm 974cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(PlayerAnimations.IDLE.ordinal()); 975cfd74d65d832137e20e193c960802afba73b5d38sm 976cfd74d65d832137e20e193c960802afba73b5d38sm 977cfd74d65d832137e20e193c960802afba73b5d38sm // Jets 978cfd74d65d832137e20e193c960802afba73b5d38sm { 979cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> jetStaticData = getStaticData(GameObjectType.PLAYER_JETS); 980cfd74d65d832137e20e193c960802afba73b5d38sm if (jetStaticData == null) { 981cfd74d65d832137e20e193c960802afba73b5d38sm jetStaticData = new FixedSizeArray<BaseObject>(1); 982cfd74d65d832137e20e193c960802afba73b5d38sm 983cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation jetAnim = new SpriteAnimation(0, 2); 984cfd74d65d832137e20e193c960802afba73b5d38sm jetAnim.addFrame( 985cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.jetfire01), 986cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1))); 987cfd74d65d832137e20e193c960802afba73b5d38sm jetAnim.addFrame( 988cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.jetfire02), 989cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1))); 990cfd74d65d832137e20e193c960802afba73b5d38sm jetAnim.setLoop(true); 991cfd74d65d832137e20e193c960802afba73b5d38sm 992cfd74d65d832137e20e193c960802afba73b5d38sm jetStaticData.add(jetAnim); 993cfd74d65d832137e20e193c960802afba73b5d38sm 994cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.PLAYER_JETS, jetStaticData); 995cfd74d65d832137e20e193c960802afba73b5d38sm } 996cfd74d65d832137e20e193c960802afba73b5d38sm 997cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent jetRender = (RenderComponent)allocateComponent(RenderComponent.class); 998cfd74d65d832137e20e193c960802afba73b5d38sm jetRender.setPriority(SortConstants.PLAYER - 1); 999cfd74d65d832137e20e193c960802afba73b5d38sm jetRender.setDrawOffset(0.0f, -16.0f); 1000cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent jetSprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 1001cfd74d65d832137e20e193c960802afba73b5d38sm jetSprite.setSize(64, 64); 1002cfd74d65d832137e20e193c960802afba73b5d38sm jetSprite.setRenderComponent(jetRender); 1003cfd74d65d832137e20e193c960802afba73b5d38sm 1004cfd74d65d832137e20e193c960802afba73b5d38sm object.add(jetRender); 1005cfd74d65d832137e20e193c960802afba73b5d38sm object.add(jetSprite); 1006cfd74d65d832137e20e193c960802afba73b5d38sm 1007cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.PLAYER_JETS, object, jetSprite); 1008cfd74d65d832137e20e193c960802afba73b5d38sm 1009cfd74d65d832137e20e193c960802afba73b5d38sm jetSprite.playAnimation(0); 1010cfd74d65d832137e20e193c960802afba73b5d38sm 1011cfd74d65d832137e20e193c960802afba73b5d38sm animation.setJetSprite(jetSprite); 1012cfd74d65d832137e20e193c960802afba73b5d38sm } 1013cfd74d65d832137e20e193c960802afba73b5d38sm // Sparks 1014cfd74d65d832137e20e193c960802afba73b5d38sm { 1015cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> sparksStaticData = getStaticData(GameObjectType.PLAYER_SPARKS); 1016cfd74d65d832137e20e193c960802afba73b5d38sm 1017cfd74d65d832137e20e193c960802afba73b5d38sm if (sparksStaticData == null) { 1018cfd74d65d832137e20e193c960802afba73b5d38sm sparksStaticData = new FixedSizeArray<BaseObject>(1); 1019cfd74d65d832137e20e193c960802afba73b5d38sm 1020cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation sparksAnim = new SpriteAnimation(0, 3); 1021cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame( 1022cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.spark01), 1023cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1))); 1024cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame( 1025cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.spark02), 1026cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1))); 1027cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame( 1028cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.spark03), 1029cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1))); 1030cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.setLoop(true); 1031cfd74d65d832137e20e193c960802afba73b5d38sm 1032cfd74d65d832137e20e193c960802afba73b5d38sm sparksStaticData.add(sparksAnim); 1033cfd74d65d832137e20e193c960802afba73b5d38sm 1034cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.PLAYER_SPARKS, sparksStaticData); 1035cfd74d65d832137e20e193c960802afba73b5d38sm } 1036cfd74d65d832137e20e193c960802afba73b5d38sm 1037cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent sparksRender = (RenderComponent)allocateComponent(RenderComponent.class); 1038cfd74d65d832137e20e193c960802afba73b5d38sm sparksRender.setPriority(SortConstants.PLAYER + 1); 1039cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sparksSprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 1040cfd74d65d832137e20e193c960802afba73b5d38sm sparksSprite.setSize(64, 64); 1041cfd74d65d832137e20e193c960802afba73b5d38sm sparksSprite.setRenderComponent(sparksRender); 1042cfd74d65d832137e20e193c960802afba73b5d38sm 1043cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sparksRender); 1044cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sparksSprite); 1045cfd74d65d832137e20e193c960802afba73b5d38sm 1046cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.PLAYER_SPARKS, object, sparksSprite); 1047cfd74d65d832137e20e193c960802afba73b5d38sm 1048cfd74d65d832137e20e193c960802afba73b5d38sm sparksSprite.playAnimation(0); 1049cfd74d65d832137e20e193c960802afba73b5d38sm 1050cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSparksSprite(sparksSprite); 1051cfd74d65d832137e20e193c960802afba73b5d38sm } 1052cfd74d65d832137e20e193c960802afba73b5d38sm 1053cfd74d65d832137e20e193c960802afba73b5d38sm // Glow 1054cfd74d65d832137e20e193c960802afba73b5d38sm { 1055cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> glowStaticData = getStaticData(GameObjectType.PLAYER_GLOW); 1056cfd74d65d832137e20e193c960802afba73b5d38sm if (glowStaticData == null) { 1057cfd74d65d832137e20e193c960802afba73b5d38sm glowStaticData = new FixedSizeArray<BaseObject>(1); 1058cfd74d65d832137e20e193c960802afba73b5d38sm 1059cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> glowAttackVolume = 1060cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 1061cfd74d65d832137e20e193c960802afba73b5d38sm glowAttackVolume.add(new SphereCollisionVolume(40, 40, 40, HitType.HIT)); 1062cfd74d65d832137e20e193c960802afba73b5d38sm 1063cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation glowAnim = new SpriteAnimation(0, 3); 1064cfd74d65d832137e20e193c960802afba73b5d38sm glowAnim.addFrame( 1065cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.effect_glow01), 1066cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), glowAttackVolume, null)); 1067cfd74d65d832137e20e193c960802afba73b5d38sm glowAnim.addFrame( 1068cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.effect_glow02), 1069cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), glowAttackVolume, null)); 1070cfd74d65d832137e20e193c960802afba73b5d38sm glowAnim.addFrame( 1071cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.effect_glow03), 1072cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), glowAttackVolume, null)); 1073cfd74d65d832137e20e193c960802afba73b5d38sm glowAnim.setLoop(true); 1074cfd74d65d832137e20e193c960802afba73b5d38sm 1075cfd74d65d832137e20e193c960802afba73b5d38sm glowStaticData.add(glowAnim); 1076cfd74d65d832137e20e193c960802afba73b5d38sm 1077cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.PLAYER_GLOW, glowStaticData); 1078cfd74d65d832137e20e193c960802afba73b5d38sm } 1079cfd74d65d832137e20e193c960802afba73b5d38sm 1080cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent glowRender = (RenderComponent)allocateComponent(RenderComponent.class); 1081cfd74d65d832137e20e193c960802afba73b5d38sm glowRender.setPriority(SortConstants.PLAYER + 1); 1082cfd74d65d832137e20e193c960802afba73b5d38sm glowRender.setDrawOffset(0, -5.0f); 1083cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent glowSprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 1084cfd74d65d832137e20e193c960802afba73b5d38sm glowSprite.setSize(64, 64); 1085cfd74d65d832137e20e193c960802afba73b5d38sm glowSprite.setRenderComponent(glowRender); 1086cfd74d65d832137e20e193c960802afba73b5d38sm 1087cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent glowCollision 1088cfd74d65d832137e20e193c960802afba73b5d38sm = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 1089cfd74d65d832137e20e193c960802afba73b5d38sm glowSprite.setCollisionComponent(glowCollision); 1090cfd74d65d832137e20e193c960802afba73b5d38sm 1091cfd74d65d832137e20e193c960802afba73b5d38sm FadeDrawableComponent glowFade = (FadeDrawableComponent)allocateComponent(FadeDrawableComponent.class); 10922b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final float glowDuration = PlayerComponent.getDifficultyConstants().getGlowDuration(); 1093cfd74d65d832137e20e193c960802afba73b5d38sm glowFade.setupFade(1.0f, 0.0f, 0.15f, 1094cfd74d65d832137e20e193c960802afba73b5d38sm FadeDrawableComponent.LOOP_TYPE_PING_PONG, 1095cfd74d65d832137e20e193c960802afba73b5d38sm FadeDrawableComponent.FADE_EASE, 10962b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm glowDuration - 4.0f); // 4 seconds before the glow ends, start flashing 10972b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm glowFade.setPhaseDuration(glowDuration); 1098cfd74d65d832137e20e193c960802afba73b5d38sm glowFade.setRenderComponent(glowRender); 10992b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 11002b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm // HACK 11012b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm player.setInvincibleFader(glowFade); 1102cfd74d65d832137e20e193c960802afba73b5d38sm 1103cfd74d65d832137e20e193c960802afba73b5d38sm invincibleSwap.addSwapInComponent(glowRender); 1104cfd74d65d832137e20e193c960802afba73b5d38sm invincibleSwap.addSwapInComponent(glowSprite); 1105cfd74d65d832137e20e193c960802afba73b5d38sm invincibleSwap.addSwapInComponent(glowCollision); 1106cfd74d65d832137e20e193c960802afba73b5d38sm invincibleSwap.addSwapInComponent(glowFade); 1107cfd74d65d832137e20e193c960802afba73b5d38sm 1108cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.PLAYER_GLOW, object, glowSprite); 1109cfd74d65d832137e20e193c960802afba73b5d38sm 1110cfd74d65d832137e20e193c960802afba73b5d38sm glowSprite.playAnimation(0); 1111cfd74d65d832137e20e193c960802afba73b5d38sm 1112cfd74d65d832137e20e193c960802afba73b5d38sm } 1113cfd74d65d832137e20e193c960802afba73b5d38sm 1114cfd74d65d832137e20e193c960802afba73b5d38sm CameraSystem camera = sSystemRegistry.cameraSystem; 1115cfd74d65d832137e20e193c960802afba73b5d38sm if (camera != null) { 1116cfd74d65d832137e20e193c960802afba73b5d38sm camera.setTarget(object); 1117cfd74d65d832137e20e193c960802afba73b5d38sm } 1118cfd74d65d832137e20e193c960802afba73b5d38sm 1119cfd74d65d832137e20e193c960802afba73b5d38sm return object; 1120cfd74d65d832137e20e193c960802afba73b5d38sm } 1121cfd74d65d832137e20e193c960802afba73b5d38sm 1122cfd74d65d832137e20e193c960802afba73b5d38sm 1123cfd74d65d832137e20e193c960802afba73b5d38sm // Sparks are used by more than one enemy type, so the setup for them is abstracted. 1124cfd74d65d832137e20e193c960802afba73b5d38sm private void setupEnemySparks() { 1125cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.ENEMY_SPARKS); 1126cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 1127cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(1); 1128cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 1129cfd74d65d832137e20e193c960802afba73b5d38sm 1130cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation sparksAnim = new SpriteAnimation(0, 13); 1131cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame1 = 1132cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.spark01), 1133cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1)); 1134cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame2 = 1135cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.spark02), 1136cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1)); 1137cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame3 = 1138cfd74d65d832137e20e193c960802afba73b5d38sm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.spark03), 1139cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1)); 1140cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame(frame1); 1141cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame(frame2); 1142cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame(frame3); 1143cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame(frame1); 1144cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame(frame2); 1145cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame(frame3); 1146cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame(frame1); 1147cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame(frame2); 1148cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame(frame3); 1149cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame(frame1); 1150cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame(frame2); 1151cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame(frame3); 1152cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.addFrame(new AnimationFrame(null, 3.0f)); 1153cfd74d65d832137e20e193c960802afba73b5d38sm sparksAnim.setLoop(true); 1154cfd74d65d832137e20e193c960802afba73b5d38sm 1155cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(sparksAnim); 1156cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.ENEMY_SPARKS, staticData); 1157cfd74d65d832137e20e193c960802afba73b5d38sm } 1158cfd74d65d832137e20e193c960802afba73b5d38sm 1159cfd74d65d832137e20e193c960802afba73b5d38sm } 1160cfd74d65d832137e20e193c960802afba73b5d38sm 1161cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemyBrobot(float positionX, float positionY, boolean flipHorizontal) { 1162cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 1163cfd74d65d832137e20e193c960802afba73b5d38sm 1164cfd74d65d832137e20e193c960802afba73b5d38sm 1165cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 1166cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 1167cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mNormalActivationRadius; 1168cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 1169cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 1170cfd74d65d832137e20e193c960802afba73b5d38sm 1171cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.BROBOT); 1172cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 1173cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 5; 1174cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 1175cfd74d65d832137e20e193c960802afba73b5d38sm 1176cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent gravity = allocateComponent(GravityComponent.class); 1177cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 1178cfd74d65d832137e20e193c960802afba73b5d38sm SimplePhysicsComponent physics = (SimplePhysicsComponent)allocateComponent(SimplePhysicsComponent.class); 1179cfd74d65d832137e20e193c960802afba73b5d38sm physics.setBounciness(0.4f); 1180cfd74d65d832137e20e193c960802afba73b5d38sm 1181cfd74d65d832137e20e193c960802afba73b5d38sm 1182cfd74d65d832137e20e193c960802afba73b5d38sm // Animations 1183cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 1184cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 1185cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new SphereCollisionVolume(16, 32, 32)); 1186cfd74d65d832137e20e193c960802afba73b5d38sm 1187cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = 1188cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(2); 1189cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(16, 32, 32, HitType.HIT)); 1190cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new AABoxCollisionVolume(16, 0, 32, 16, HitType.DEPRESS)); 1191cfd74d65d832137e20e193c960802afba73b5d38sm 1192cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(EnemyAnimations.IDLE.ordinal(), 4); 1193cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 1194cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_idle01), 1195cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), basicAttackVolume, basicVulnerabilityVolume)); 1196cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 1197cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_idle02), 1198cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 1199cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 1200cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_idle03), 1201cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), basicAttackVolume, basicVulnerabilityVolume)); 1202cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 1203cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_idle02), 1204cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), basicAttackVolume, basicVulnerabilityVolume)); 1205cfd74d65d832137e20e193c960802afba73b5d38sm 1206cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 1207cfd74d65d832137e20e193c960802afba73b5d38sm 1208cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation walk = new SpriteAnimation(EnemyAnimations.MOVE.ordinal(), 3); 1209cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1210cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_walk01), 1211cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 1212cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1213cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_walk02), 1214cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 1215cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1216cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_walk03), 1217cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 1218cfd74d65d832137e20e193c960802afba73b5d38sm walk.setLoop(true); 1219cfd74d65d832137e20e193c960802afba73b5d38sm 1220cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(gravity); 1221cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 1222cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(physics); 1223cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 1224cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(walk); 1225cfd74d65d832137e20e193c960802afba73b5d38sm 1226cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.BROBOT, staticData); 1227cfd74d65d832137e20e193c960802afba73b5d38sm 1228cfd74d65d832137e20e193c960802afba73b5d38sm } 1229cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 1230cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_ENEMY); 1231cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision 1232cfd74d65d832137e20e193c960802afba73b5d38sm = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 1233cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(32, 48); 1234cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(16, 0); 1235cfd74d65d832137e20e193c960802afba73b5d38sm 1236cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 1237cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 1238cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 1239cfd74d65d832137e20e193c960802afba73b5d38sm 1240cfd74d65d832137e20e193c960802afba73b5d38sm EnemyAnimationComponent animation 1241cfd74d65d832137e20e193c960802afba73b5d38sm = (EnemyAnimationComponent)allocateComponent(EnemyAnimationComponent.class); 1242cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 1243cfd74d65d832137e20e193c960802afba73b5d38sm 1244cfd74d65d832137e20e193c960802afba73b5d38sm PatrolComponent patrol = (PatrolComponent)allocateComponent(PatrolComponent.class); 1245cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setMovementSpeed(50.0f, 1000.0f); 1246cfd74d65d832137e20e193c960802afba73b5d38sm 1247cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision 1248cfd74d65d832137e20e193c960802afba73b5d38sm = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 1249cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 1250cfd74d65d832137e20e193c960802afba73b5d38sm 1251cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact 1252cfd74d65d832137e20e193c960802afba73b5d38sm = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 1253cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 1254cfd74d65d832137e20e193c960802afba73b5d38sm 1255cfd74d65d832137e20e193c960802afba73b5d38sm 1256cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 1257cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setObjectToSpawnOnDeath(GameObjectType.EXPLOSION_GIANT); 1258cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setVulnerableToDeathTiles(true); 12592b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm lifetime.setIncrementEventCounter(EventRecorder.COUNTER_ROBOTS_DESTROYED); 1260cfd74d65d832137e20e193c960802afba73b5d38sm 1261cfd74d65d832137e20e193c960802afba73b5d38sm GhostComponent ghost = (GhostComponent)allocateComponent(GhostComponent.class); 1262cfd74d65d832137e20e193c960802afba73b5d38sm ghost.setMovementSpeed(500.0f); 1263cfd74d65d832137e20e193c960802afba73b5d38sm ghost.setAcceleration(1000.0f); 1264cfd74d65d832137e20e193c960802afba73b5d38sm ghost.setJumpImpulse(300.0f); 1265cfd74d65d832137e20e193c960802afba73b5d38sm ghost.setKillOnRelease(true); 1266cfd74d65d832137e20e193c960802afba73b5d38sm ghost.setDelayOnRelease(1.5f); 1267cfd74d65d832137e20e193c960802afba73b5d38sm 1268cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = BaseObject.sSystemRegistry.soundSystem; 1269cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 1270cfd74d65d832137e20e193c960802afba73b5d38sm ghost.setAmbientSound(sound.load(R.raw.sound_possession)); 1271cfd74d65d832137e20e193c960802afba73b5d38sm } 1272cfd74d65d832137e20e193c960802afba73b5d38sm 1273cfd74d65d832137e20e193c960802afba73b5d38sm ChangeComponentsComponent ghostSwap 1274cfd74d65d832137e20e193c960802afba73b5d38sm = (ChangeComponentsComponent)allocateComponent(ChangeComponentsComponent.class); 1275cfd74d65d832137e20e193c960802afba73b5d38sm ghostSwap.addSwapInComponent(ghost); 1276cfd74d65d832137e20e193c960802afba73b5d38sm ghostSwap.addSwapOutComponent(patrol); 1277cfd74d65d832137e20e193c960802afba73b5d38sm 1278cfd74d65d832137e20e193c960802afba73b5d38sm SimplePhysicsComponent ghostPhysics = (SimplePhysicsComponent)allocateComponent(SimplePhysicsComponent.class); 1279cfd74d65d832137e20e193c960802afba73b5d38sm ghostPhysics.setBounciness(0.0f); 1280cfd74d65d832137e20e193c960802afba73b5d38sm 1281cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 1282cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 1283cfd74d65d832137e20e193c960802afba73b5d38sm 1284cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 1285cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 1286cfd74d65d832137e20e193c960802afba73b5d38sm object.add(patrol); 1287cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 1288cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 1289cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 1290cfd74d65d832137e20e193c960802afba73b5d38sm object.add(ghostSwap); 1291cfd74d65d832137e20e193c960802afba73b5d38sm 1292cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 1293cfd74d65d832137e20e193c960802afba73b5d38sm 1294cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 1295cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 1296cfd74d65d832137e20e193c960802afba73b5d38sm } 1297cfd74d65d832137e20e193c960802afba73b5d38sm 1298cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.BROBOT, object, sprite); 1299cfd74d65d832137e20e193c960802afba73b5d38sm 1300cfd74d65d832137e20e193c960802afba73b5d38sm object.commitUpdates(); 1301cfd74d65d832137e20e193c960802afba73b5d38sm 1302cfd74d65d832137e20e193c960802afba73b5d38sm SimplePhysicsComponent normalPhysics = object.findByClass(SimplePhysicsComponent.class); 1303cfd74d65d832137e20e193c960802afba73b5d38sm if (normalPhysics != null) { 1304cfd74d65d832137e20e193c960802afba73b5d38sm ghostSwap.addSwapOutComponent(normalPhysics); 1305cfd74d65d832137e20e193c960802afba73b5d38sm } 1306cfd74d65d832137e20e193c960802afba73b5d38sm 1307cfd74d65d832137e20e193c960802afba73b5d38sm ghostSwap.addSwapInComponent(ghostPhysics); 1308cfd74d65d832137e20e193c960802afba73b5d38sm 1309cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 1310cfd74d65d832137e20e193c960802afba73b5d38sm 1311cfd74d65d832137e20e193c960802afba73b5d38sm // Sparks 1312cfd74d65d832137e20e193c960802afba73b5d38sm setupEnemySparks(); 1313cfd74d65d832137e20e193c960802afba73b5d38sm 1314cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent sparksRender = (RenderComponent)allocateComponent(RenderComponent.class); 1315cfd74d65d832137e20e193c960802afba73b5d38sm sparksRender.setPriority(render.getPriority() + 1); 1316cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sparksSprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 1317cfd74d65d832137e20e193c960802afba73b5d38sm sparksSprite.setSize(64, 64); 1318cfd74d65d832137e20e193c960802afba73b5d38sm sparksSprite.setRenderComponent(sparksRender); 1319cfd74d65d832137e20e193c960802afba73b5d38sm 1320cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.ENEMY_SPARKS, object, sparksSprite); 1321cfd74d65d832137e20e193c960802afba73b5d38sm 1322cfd74d65d832137e20e193c960802afba73b5d38sm sparksSprite.playAnimation(0); 1323cfd74d65d832137e20e193c960802afba73b5d38sm 1324cfd74d65d832137e20e193c960802afba73b5d38sm ghostSwap.addSwapInComponent(sparksSprite); 1325cfd74d65d832137e20e193c960802afba73b5d38sm ghostSwap.addSwapInComponent(sparksRender); 1326cfd74d65d832137e20e193c960802afba73b5d38sm 1327cfd74d65d832137e20e193c960802afba73b5d38sm 1328cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setPossessionComponent(ghostSwap); 1329cfd74d65d832137e20e193c960802afba73b5d38sm 1330cfd74d65d832137e20e193c960802afba73b5d38sm return object; 1331cfd74d65d832137e20e193c960802afba73b5d38sm } 1332cfd74d65d832137e20e193c960802afba73b5d38sm 1333cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemySnailBomb(float positionX, float positionY, boolean flipHorizontal) { 1334cfd74d65d832137e20e193c960802afba73b5d38sm 1335cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 1336cfd74d65d832137e20e193c960802afba73b5d38sm 1337cfd74d65d832137e20e193c960802afba73b5d38sm 1338cfd74d65d832137e20e193c960802afba73b5d38sm // Make sure related textures are loaded. 1339cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.snail_bomb); 1340cfd74d65d832137e20e193c960802afba73b5d38sm 1341cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 1342cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 1343cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mNormalActivationRadius; 1344cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 1345cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 1346cfd74d65d832137e20e193c960802afba73b5d38sm 1347cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.SNAILBOMB); 1348cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 1349cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 6; 1350cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 1351cfd74d65d832137e20e193c960802afba73b5d38sm 1352cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent gravity = allocateComponent(GravityComponent.class); 1353cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 1354cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent physics = allocateComponent(SimplePhysicsComponent.class); 1355cfd74d65d832137e20e193c960802afba73b5d38sm 1356cfd74d65d832137e20e193c960802afba73b5d38sm // Animations 1357cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 1358cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 1359cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new AABoxCollisionVolume(12, 5, 42, 27, HitType.HIT)); 1360cfd74d65d832137e20e193c960802afba73b5d38sm 1361cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = 1362cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 1363cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new AABoxCollisionVolume(12, 5, 42, 27, HitType.HIT)); 1364cfd74d65d832137e20e193c960802afba73b5d38sm 1365cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(EnemyAnimations.IDLE.ordinal(), 1); 1366cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 1367cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.snailbomb_stand), 1368cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), basicAttackVolume, basicVulnerabilityVolume)); 1369cfd74d65d832137e20e193c960802afba73b5d38sm 1370cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation walk = new SpriteAnimation(EnemyAnimations.MOVE.ordinal(), 5); 1371cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1372cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.snailbomb_stand), 1373cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), basicAttackVolume, basicVulnerabilityVolume)); 1374cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1375cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.snailbomb_walk01), 1376cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), basicAttackVolume, basicVulnerabilityVolume)); 1377cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1378cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.snailbomb_walk02), 1379cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 6), basicAttackVolume, basicVulnerabilityVolume)); 1380cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1381cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.snailbomb_walk01), 1382cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), basicAttackVolume, basicVulnerabilityVolume)); 1383cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1384cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.snailbomb_stand), 1385cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), basicAttackVolume, basicVulnerabilityVolume)); 1386cfd74d65d832137e20e193c960802afba73b5d38sm walk.setLoop(true); 1387cfd74d65d832137e20e193c960802afba73b5d38sm 1388cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation attack = new SpriteAnimation(EnemyAnimations.ATTACK.ordinal(), 2); 1389cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 1390cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.snailbomb_shoot01), 1391cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), basicAttackVolume, basicVulnerabilityVolume)); 1392cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 1393cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.snailbomb_shoot02), 1394cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), basicAttackVolume, basicVulnerabilityVolume)); 1395cfd74d65d832137e20e193c960802afba73b5d38sm 1396cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(gravity); 1397cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 1398cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(physics); 1399cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 1400cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(walk); 1401cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(attack); 1402cfd74d65d832137e20e193c960802afba73b5d38sm 1403cfd74d65d832137e20e193c960802afba73b5d38sm 1404cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.SNAILBOMB, staticData); 1405cfd74d65d832137e20e193c960802afba73b5d38sm } 1406cfd74d65d832137e20e193c960802afba73b5d38sm 1407cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 1408cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_ENEMY); 1409cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision 1410cfd74d65d832137e20e193c960802afba73b5d38sm = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 1411cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(32, 48); 1412cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(16, 5); 1413cfd74d65d832137e20e193c960802afba73b5d38sm 1414cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 1415cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 1416cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 1417cfd74d65d832137e20e193c960802afba73b5d38sm 1418cfd74d65d832137e20e193c960802afba73b5d38sm EnemyAnimationComponent animation 1419cfd74d65d832137e20e193c960802afba73b5d38sm = (EnemyAnimationComponent)allocateComponent(EnemyAnimationComponent.class); 1420cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 1421cfd74d65d832137e20e193c960802afba73b5d38sm 1422cfd74d65d832137e20e193c960802afba73b5d38sm PatrolComponent patrol = (PatrolComponent)allocateComponent(PatrolComponent.class); 1423cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setMovementSpeed(20.0f, 1000.0f); 1424cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setupAttack(300, 1.0f, 4.0f, true); 1425cfd74d65d832137e20e193c960802afba73b5d38sm 1426cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision 1427cfd74d65d832137e20e193c960802afba73b5d38sm = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 1428cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 1429cfd74d65d832137e20e193c960802afba73b5d38sm 1430cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact 1431cfd74d65d832137e20e193c960802afba73b5d38sm = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 1432cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 1433cfd74d65d832137e20e193c960802afba73b5d38sm 1434cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 1435cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setVulnerableToDeathTiles(true); 1436cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setObjectToSpawnOnDeath(GameObjectType.SMOKE_POOF); 1437cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = BaseObject.sSystemRegistry.soundSystem; 1438cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 1439cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setDeathSound(sound.load(R.raw.sound_stomp)); 1440cfd74d65d832137e20e193c960802afba73b5d38sm } 1441cfd74d65d832137e20e193c960802afba73b5d38sm 1442cfd74d65d832137e20e193c960802afba73b5d38sm LaunchProjectileComponent gun 1443cfd74d65d832137e20e193c960802afba73b5d38sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 1444cfd74d65d832137e20e193c960802afba73b5d38sm gun.setSetsPerActivation(1); 1445cfd74d65d832137e20e193c960802afba73b5d38sm gun.setShotsPerSet(3); 1446cfd74d65d832137e20e193c960802afba73b5d38sm gun.setDelayBeforeFirstSet(1.0f); 1447cfd74d65d832137e20e193c960802afba73b5d38sm gun.setDelayBetweenShots(0.25f); 1448cfd74d65d832137e20e193c960802afba73b5d38sm gun.setObjectTypeToSpawn(GameObjectType.CANNON_BALL); 1449cfd74d65d832137e20e193c960802afba73b5d38sm gun.setOffsetX(55); 1450cfd74d65d832137e20e193c960802afba73b5d38sm gun.setOffsetY(21); 1451cfd74d65d832137e20e193c960802afba73b5d38sm gun.setRequiredAction(GameObject.ActionType.ATTACK); 1452cfd74d65d832137e20e193c960802afba73b5d38sm gun.setVelocityX(100.0f); 1453cfd74d65d832137e20e193c960802afba73b5d38sm 1454cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 1455cfd74d65d832137e20e193c960802afba73b5d38sm 1456cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 1457cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 1458cfd74d65d832137e20e193c960802afba73b5d38sm } 1459cfd74d65d832137e20e193c960802afba73b5d38sm 1460cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 1461cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 1462cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 1463cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 1464cfd74d65d832137e20e193c960802afba73b5d38sm object.add(patrol); 1465cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 1466cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 1467cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 1468cfd74d65d832137e20e193c960802afba73b5d38sm object.add(gun); 1469cfd74d65d832137e20e193c960802afba73b5d38sm 1470cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.SNAILBOMB, object, sprite); 1471cfd74d65d832137e20e193c960802afba73b5d38sm 1472cfd74d65d832137e20e193c960802afba73b5d38sm final SpriteAnimation attack = sprite.findAnimation(EnemyAnimations.ATTACK.ordinal()); 1473cfd74d65d832137e20e193c960802afba73b5d38sm if (attack != null) { 1474cfd74d65d832137e20e193c960802afba73b5d38sm gun.setDelayBeforeFirstSet(attack.getLength()); 1475cfd74d65d832137e20e193c960802afba73b5d38sm } 1476cfd74d65d832137e20e193c960802afba73b5d38sm 1477cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 1478cfd74d65d832137e20e193c960802afba73b5d38sm 1479cfd74d65d832137e20e193c960802afba73b5d38sm return object; 1480cfd74d65d832137e20e193c960802afba73b5d38sm } 1481cfd74d65d832137e20e193c960802afba73b5d38sm 1482cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemyShadowSlime(float positionX, float positionY, boolean flipHorizontal) { 1483cfd74d65d832137e20e193c960802afba73b5d38sm 1484cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 1485cfd74d65d832137e20e193c960802afba73b5d38sm 1486cfd74d65d832137e20e193c960802afba73b5d38sm 1487cfd74d65d832137e20e193c960802afba73b5d38sm // Make sure related textures are loaded. 1488cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball01); 1489cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball02); 1490cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball03); 1491cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball04); 1492cfd74d65d832137e20e193c960802afba73b5d38sm 1493cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 1494cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 1495cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 1496cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 1497cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 1498cfd74d65d832137e20e193c960802afba73b5d38sm 1499cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.SHADOWSLIME); 1500cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 1501cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 5; 1502cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 1503cfd74d65d832137e20e193c960802afba73b5d38sm 1504cfd74d65d832137e20e193c960802afba73b5d38sm PopOutComponent popOut = (PopOutComponent)allocateComponent(PopOutComponent.class); 15052b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm // edit: these guys turned out to be really annoying, so I'm changing the values 15062b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm // here to force them to always be out. 15072b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm popOut.setAppearDistance(2000); 15082b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm popOut.setHideDistance(4000); 1509cfd74d65d832137e20e193c960802afba73b5d38sm 1510cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = new FixedSizeArray<CollisionVolume>(1); 1511cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new SphereCollisionVolume(16, 32, 32)); 1512cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.get(0).setHitType(HitType.HIT); 1513cfd74d65d832137e20e193c960802afba73b5d38sm 1514cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = new FixedSizeArray<CollisionVolume>(1); 1515cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(16, 32, 32, HitType.HIT)); 1516cfd74d65d832137e20e193c960802afba73b5d38sm 1517cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(EnemyAnimations.IDLE.ordinal(), 2); 1518cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame idle1 = new AnimationFrame( 1519cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_idle01), 1520cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), basicAttackVolume, basicVulnerabilityVolume); 1521cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame idle2 = new AnimationFrame( 1522cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_idle02), 1523cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), basicAttackVolume, basicVulnerabilityVolume); 1524cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(idle1); 1525cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(idle2); 1526cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 1527cfd74d65d832137e20e193c960802afba73b5d38sm 1528cfd74d65d832137e20e193c960802afba73b5d38sm 1529cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation appear = new SpriteAnimation(EnemyAnimations.APPEAR.ordinal(), 6); 1530cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame appear1 = new AnimationFrame( 1531cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_activate01), 1532cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), basicAttackVolume, basicVulnerabilityVolume); 1533cfd74d65d832137e20e193c960802afba73b5d38sm 1534cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame appear2 = new AnimationFrame( 1535cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_activate02), 1536cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), basicAttackVolume, basicVulnerabilityVolume); 1537cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame appear3 = new AnimationFrame( 1538cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_activate03), 1539cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume); 1540cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame appear4 = new AnimationFrame( 1541cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_activate04), 1542cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume); 1543cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame appear5 = new AnimationFrame( 1544cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_activate05), 1545cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), basicAttackVolume, basicVulnerabilityVolume); 1546cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame appear6 = new AnimationFrame( 1547cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_activate06), 1548cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume); 1549cfd74d65d832137e20e193c960802afba73b5d38sm 1550cfd74d65d832137e20e193c960802afba73b5d38sm appear.addFrame(appear1); 1551cfd74d65d832137e20e193c960802afba73b5d38sm appear.addFrame(appear2); 1552cfd74d65d832137e20e193c960802afba73b5d38sm appear.addFrame(appear3); 1553cfd74d65d832137e20e193c960802afba73b5d38sm appear.addFrame(appear4); 1554cfd74d65d832137e20e193c960802afba73b5d38sm appear.addFrame(appear5); 1555cfd74d65d832137e20e193c960802afba73b5d38sm appear.addFrame(appear6); 1556cfd74d65d832137e20e193c960802afba73b5d38sm 1557cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation hidden = new SpriteAnimation(EnemyAnimations.HIDDEN.ordinal(), 6); 1558cfd74d65d832137e20e193c960802afba73b5d38sm hidden.addFrame(appear6); 1559cfd74d65d832137e20e193c960802afba73b5d38sm hidden.addFrame(appear5); 1560cfd74d65d832137e20e193c960802afba73b5d38sm hidden.addFrame(appear4); 1561cfd74d65d832137e20e193c960802afba73b5d38sm hidden.addFrame(appear3); 1562cfd74d65d832137e20e193c960802afba73b5d38sm hidden.addFrame(appear2); 1563cfd74d65d832137e20e193c960802afba73b5d38sm hidden.addFrame(appear1); 1564cfd74d65d832137e20e193c960802afba73b5d38sm /*hidden.addFrame(new AnimationFrame( 1565cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_stand), 1566cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), basicAttackVolume, basicVulnerabilityVolume));*/ 1567cfd74d65d832137e20e193c960802afba73b5d38sm 1568cfd74d65d832137e20e193c960802afba73b5d38sm 1569cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation attack = new SpriteAnimation(EnemyAnimations.ATTACK.ordinal(), 10); 1570cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame attack1 = new AnimationFrame( 1571cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_attack01), 1572cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), basicAttackVolume, basicVulnerabilityVolume); 1573cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame attack2 = new AnimationFrame( 1574cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_attack02), 1575cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), basicAttackVolume, basicVulnerabilityVolume); 1576cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame attack3 = new AnimationFrame( 1577cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_attack03), 1578cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), basicAttackVolume, basicVulnerabilityVolume); 1579cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame attack4 = new AnimationFrame( 1580cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_attack04), 1581cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 6), basicAttackVolume, basicVulnerabilityVolume); 1582cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame attackFlash = new AnimationFrame( 1583cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_flash), 1584cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume); 1585cfd74d65d832137e20e193c960802afba73b5d38sm 1586cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame attack5 = new AnimationFrame( 1587cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_attack03), 1588cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), basicAttackVolume, basicVulnerabilityVolume); 1589cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame attack6 = new AnimationFrame( 1590cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_attack02), 1591cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), basicAttackVolume, basicVulnerabilityVolume); 1592cfd74d65d832137e20e193c960802afba73b5d38sm 1593cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame attack7 = new AnimationFrame( 1594cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_shadowslime_attack04), 1595cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume); 1596cfd74d65d832137e20e193c960802afba73b5d38sm 1597cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(attack1); 1598cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(attack2); 1599cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(attack3); 1600cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(attack4); 1601cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(attackFlash); 1602cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(attack7); 1603cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(attackFlash); 1604cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(attack5); 1605cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(attack6); 1606cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(attack1); 1607cfd74d65d832137e20e193c960802afba73b5d38sm 1608cfd74d65d832137e20e193c960802afba73b5d38sm popOut.setupAttack(200, 2.0f, attack.getLength()); 1609cfd74d65d832137e20e193c960802afba73b5d38sm 1610cfd74d65d832137e20e193c960802afba73b5d38sm 1611cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(popOut); 1612cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 1613cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(hidden); 1614cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(appear); 1615cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(attack); 1616cfd74d65d832137e20e193c960802afba73b5d38sm 1617cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.SHADOWSLIME, staticData); 1618cfd74d65d832137e20e193c960802afba73b5d38sm } 1619cfd74d65d832137e20e193c960802afba73b5d38sm 1620cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 1621cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_ENEMY); 1622cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision 1623cfd74d65d832137e20e193c960802afba73b5d38sm = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 1624cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(32, 48); 1625cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(16, 5); 1626cfd74d65d832137e20e193c960802afba73b5d38sm 1627cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 1628cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 1629cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 1630cfd74d65d832137e20e193c960802afba73b5d38sm 1631cfd74d65d832137e20e193c960802afba73b5d38sm 1632cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 1633cfd74d65d832137e20e193c960802afba73b5d38sm 1634cfd74d65d832137e20e193c960802afba73b5d38sm EnemyAnimationComponent animation 1635cfd74d65d832137e20e193c960802afba73b5d38sm = (EnemyAnimationComponent)allocateComponent(EnemyAnimationComponent.class); 1636cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 1637cfd74d65d832137e20e193c960802afba73b5d38sm animation.setFacePlayer(true); 1638cfd74d65d832137e20e193c960802afba73b5d38sm 1639cfd74d65d832137e20e193c960802afba73b5d38sm 1640cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision 1641cfd74d65d832137e20e193c960802afba73b5d38sm = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 1642cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 1643cfd74d65d832137e20e193c960802afba73b5d38sm 1644cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact 1645cfd74d65d832137e20e193c960802afba73b5d38sm = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 1646cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 1647cfd74d65d832137e20e193c960802afba73b5d38sm 1648cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 1649cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setObjectToSpawnOnDeath(GameObjectType.SMOKE_POOF); 1650cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = BaseObject.sSystemRegistry.soundSystem; 1651cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 1652cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setDeathSound(sound.load(R.raw.sound_stomp)); 1653cfd74d65d832137e20e193c960802afba73b5d38sm } 1654cfd74d65d832137e20e193c960802afba73b5d38sm 1655cfd74d65d832137e20e193c960802afba73b5d38sm LaunchProjectileComponent gun 1656cfd74d65d832137e20e193c960802afba73b5d38sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 1657cfd74d65d832137e20e193c960802afba73b5d38sm 1658cfd74d65d832137e20e193c960802afba73b5d38sm 1659cfd74d65d832137e20e193c960802afba73b5d38sm gun.setShotsPerSet(1); 1660cfd74d65d832137e20e193c960802afba73b5d38sm gun.setSetsPerActivation(1); 1661cfd74d65d832137e20e193c960802afba73b5d38sm gun.setObjectTypeToSpawn(GameObjectType.ENERGY_BALL); 1662cfd74d65d832137e20e193c960802afba73b5d38sm gun.setOffsetX(44); 1663cfd74d65d832137e20e193c960802afba73b5d38sm gun.setOffsetY(22); 1664cfd74d65d832137e20e193c960802afba73b5d38sm gun.setRequiredAction(GameObject.ActionType.ATTACK); 1665cfd74d65d832137e20e193c960802afba73b5d38sm gun.setVelocityX(30.0f); 1666cfd74d65d832137e20e193c960802afba73b5d38sm 1667cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 1668cfd74d65d832137e20e193c960802afba73b5d38sm 1669cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 1670cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 1671cfd74d65d832137e20e193c960802afba73b5d38sm } 1672cfd74d65d832137e20e193c960802afba73b5d38sm 1673cfd74d65d832137e20e193c960802afba73b5d38sm // Hack. Adjusting position lets us avoid giving this character gravity, physics, and 1674cfd74d65d832137e20e193c960802afba73b5d38sm // collision. 1675cfd74d65d832137e20e193c960802afba73b5d38sm 1676cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().y -= 5; 1677cfd74d65d832137e20e193c960802afba73b5d38sm 1678cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 1679cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 1680cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 1681cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 1682cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 1683cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 1684cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 1685cfd74d65d832137e20e193c960802afba73b5d38sm object.add(gun); 1686cfd74d65d832137e20e193c960802afba73b5d38sm 1687cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.SHADOWSLIME, object, sprite); 1688cfd74d65d832137e20e193c960802afba73b5d38sm 1689cfd74d65d832137e20e193c960802afba73b5d38sm final SpriteAnimation attack = sprite.findAnimation(EnemyAnimations.ATTACK.ordinal()); 1690cfd74d65d832137e20e193c960802afba73b5d38sm final SpriteAnimation appear = sprite.findAnimation(EnemyAnimations.APPEAR.ordinal()); 1691cfd74d65d832137e20e193c960802afba73b5d38sm if (attack != null && appear != null) { 1692cfd74d65d832137e20e193c960802afba73b5d38sm gun.setDelayBeforeFirstSet(attack.getLength() / 2.0f); 1693cfd74d65d832137e20e193c960802afba73b5d38sm } else { 1694cfd74d65d832137e20e193c960802afba73b5d38sm gun.setDelayBeforeFirstSet(Utils.framesToTime(24, 12)); 1695cfd74d65d832137e20e193c960802afba73b5d38sm } 1696cfd74d65d832137e20e193c960802afba73b5d38sm 1697cfd74d65d832137e20e193c960802afba73b5d38sm return object; 1698cfd74d65d832137e20e193c960802afba73b5d38sm } 1699cfd74d65d832137e20e193c960802afba73b5d38sm 1700cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemyMudman(float positionX, float positionY, boolean flipHorizontal) { 1701cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 1702cfd74d65d832137e20e193c960802afba73b5d38sm 1703cfd74d65d832137e20e193c960802afba73b5d38sm 1704cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 1705cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 1706cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mNormalActivationRadius; 1707cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 128; 1708cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 128; 1709cfd74d65d832137e20e193c960802afba73b5d38sm 1710cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.MUDMAN); 1711cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 1712cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 7; 1713cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 1714cfd74d65d832137e20e193c960802afba73b5d38sm 1715cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent gravity = allocateComponent(GravityComponent.class); 1716cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 1717cfd74d65d832137e20e193c960802afba73b5d38sm 1718cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent physics = allocateComponent(SimplePhysicsComponent.class); 1719cfd74d65d832137e20e193c960802afba73b5d38sm 1720cfd74d65d832137e20e193c960802afba73b5d38sm SolidSurfaceComponent solidSurface 1721cfd74d65d832137e20e193c960802afba73b5d38sm = (SolidSurfaceComponent)allocateComponent(SolidSurfaceComponent.class); 1722cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.inititalize(4); 1723cfd74d65d832137e20e193c960802afba73b5d38sm // house shape: 1724cfd74d65d832137e20e193c960802afba73b5d38sm // / \ 1/ \2 1725cfd74d65d832137e20e193c960802afba73b5d38sm // | | 3| |4 1726cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1Start = new Vector2(32, 64); 1727cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1End = new Vector2(64, 96); 1728cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1Normal = new Vector2(-0.707f, 0.707f); 1729cfd74d65d832137e20e193c960802afba73b5d38sm surface1Normal.normalize(); 1730cfd74d65d832137e20e193c960802afba73b5d38sm 1731cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2Start = new Vector2(64, 96); 1732cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2End = new Vector2(75, 64); 1733cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2Normal = new Vector2(0.9456f, 0.3250f); 1734cfd74d65d832137e20e193c960802afba73b5d38sm surface2Normal.normalize(); 1735cfd74d65d832137e20e193c960802afba73b5d38sm 1736cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3Start = new Vector2(32, 0); 1737cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3End = new Vector2(32, 64); 1738cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3Normal = new Vector2(-1, 0); 1739cfd74d65d832137e20e193c960802afba73b5d38sm 1740cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface4Start = new Vector2(75, 0); 1741cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface4End = new Vector2(75, 64); 1742cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface4Normal = new Vector2(1, 0); 1743cfd74d65d832137e20e193c960802afba73b5d38sm 1744cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface1Start, surface1End, surface1Normal); 1745cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface2Start, surface2End, surface2Normal); 1746cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface3Start, surface3End, surface3Normal); 1747cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface4Start, surface4End, surface4Normal); 1748cfd74d65d832137e20e193c960802afba73b5d38sm 1749cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(EnemyAnimations.IDLE.ordinal(), 4); 1750cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 1751cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_stand), 1752cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 12), null, null)); 1753cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame idle1 = new AnimationFrame( 1754cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_idle01), 1755cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null); 1756cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame idle2 = new AnimationFrame( 1757cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_idle01), 1758cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 7), null, null); 1759cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(idle1); 1760cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(idle2); 1761cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(idle1); 1762cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 1763cfd74d65d832137e20e193c960802afba73b5d38sm 1764cfd74d65d832137e20e193c960802afba73b5d38sm 1765cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation walk = new SpriteAnimation(EnemyAnimations.MOVE.ordinal(), 6); 1766cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1767cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_walk01), 1768cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 4), null, null)); 1769cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1770cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_walk02), 1771cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 4), null, null)); 1772cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1773cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_walk03), 1774cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 5), null, null)); 1775cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1776cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_walk04), 1777cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 4), null, null)); 1778cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1779cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_walk05), 1780cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 4), null, null)); 1781cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1782cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_walk06), 1783cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 5), null, null)); 1784cfd74d65d832137e20e193c960802afba73b5d38sm walk.setLoop(true); 1785cfd74d65d832137e20e193c960802afba73b5d38sm 1786cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> crushAttackVolume = 1787cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 1788cfd74d65d832137e20e193c960802afba73b5d38sm crushAttackVolume.add(new AABoxCollisionVolume(64, 0, 64, 96, HitType.HIT)); 1789cfd74d65d832137e20e193c960802afba73b5d38sm 1790cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation attack = new SpriteAnimation(EnemyAnimations.ATTACK.ordinal(), 8); 1791cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 1792cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_stand), 1793cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 1794cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 1795cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_attack01), 1796cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 1797cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 1798cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_attack02), 1799cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 1800cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 1801cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_attack03), 1802cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 1803cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 1804cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_attack04), 1805cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), crushAttackVolume, null)); 1806cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 1807cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_attack05), 1808cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), crushAttackVolume, null)); 1809cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 1810cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_attack06), 1811cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 8), crushAttackVolume, null)); 1812cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 1813cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_mud_attack07), 1814cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 5), null, null)); 1815cfd74d65d832137e20e193c960802afba73b5d38sm 1816cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(gravity); 1817cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 1818cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(physics); 1819cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(solidSurface); 1820cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 1821cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(walk); 1822cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(attack); 1823cfd74d65d832137e20e193c960802afba73b5d38sm 1824cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.MUDMAN, staticData); 1825cfd74d65d832137e20e193c960802afba73b5d38sm } 1826cfd74d65d832137e20e193c960802afba73b5d38sm 1827cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 1828cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_ENEMY); 1829cfd74d65d832137e20e193c960802afba73b5d38sm 1830cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 1831cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(80, 90); 1832cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(32, 5); 1833cfd74d65d832137e20e193c960802afba73b5d38sm 1834cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 1835cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 1836cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 1837cfd74d65d832137e20e193c960802afba73b5d38sm 1838cfd74d65d832137e20e193c960802afba73b5d38sm 1839cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 1840cfd74d65d832137e20e193c960802afba73b5d38sm 1841cfd74d65d832137e20e193c960802afba73b5d38sm EnemyAnimationComponent animation = (EnemyAnimationComponent)allocateComponent(EnemyAnimationComponent.class); 1842cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 1843cfd74d65d832137e20e193c960802afba73b5d38sm 1844cfd74d65d832137e20e193c960802afba73b5d38sm PatrolComponent patrol = (PatrolComponent)allocateComponent(PatrolComponent.class); 1845cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setMovementSpeed(20.0f, 400.0f); 1846cfd74d65d832137e20e193c960802afba73b5d38sm 1847cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 1848cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 1849cfd74d65d832137e20e193c960802afba73b5d38sm 1850cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 1851cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 1852cfd74d65d832137e20e193c960802afba73b5d38sm 1853cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 1854cfd74d65d832137e20e193c960802afba73b5d38sm 1855cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 1856cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 1857cfd74d65d832137e20e193c960802afba73b5d38sm 1858cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 1859cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 1860cfd74d65d832137e20e193c960802afba73b5d38sm } 1861cfd74d65d832137e20e193c960802afba73b5d38sm 1862cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 1863cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 1864cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 1865cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 1866cfd74d65d832137e20e193c960802afba73b5d38sm object.add(patrol); 1867cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 1868cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 1869cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 1870cfd74d65d832137e20e193c960802afba73b5d38sm 1871cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.MUDMAN, object, sprite); 1872cfd74d65d832137e20e193c960802afba73b5d38sm 1873cfd74d65d832137e20e193c960802afba73b5d38sm final SpriteAnimation attack = sprite.findAnimation(EnemyAnimations.ATTACK.ordinal()); 1874cfd74d65d832137e20e193c960802afba73b5d38sm if (attack != null) { 1875cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setupAttack(70.0f, attack.getLength(), 0.0f, true); 1876cfd74d65d832137e20e193c960802afba73b5d38sm } 1877cfd74d65d832137e20e193c960802afba73b5d38sm 1878cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 1879cfd74d65d832137e20e193c960802afba73b5d38sm 1880cfd74d65d832137e20e193c960802afba73b5d38sm return object; 1881cfd74d65d832137e20e193c960802afba73b5d38sm } 1882cfd74d65d832137e20e193c960802afba73b5d38sm 1883cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemySkeleton(float positionX, float positionY, boolean flipHorizontal) { 1884cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 1885cfd74d65d832137e20e193c960802afba73b5d38sm 1886cfd74d65d832137e20e193c960802afba73b5d38sm 1887cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 1888cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 1889cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mNormalActivationRadius; 1890cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 1891cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 1892cfd74d65d832137e20e193c960802afba73b5d38sm 1893cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.SKELETON); 1894cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 1895cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 7; 1896cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 1897cfd74d65d832137e20e193c960802afba73b5d38sm 1898cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent gravity = allocateComponent(GravityComponent.class); 1899cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 1900cfd74d65d832137e20e193c960802afba73b5d38sm 1901cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent physics = allocateComponent(SimplePhysicsComponent.class); 1902cfd74d65d832137e20e193c960802afba73b5d38sm 1903cfd74d65d832137e20e193c960802afba73b5d38sm SolidSurfaceComponent solidSurface = (SolidSurfaceComponent)allocateComponent(SolidSurfaceComponent.class); 1904cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.inititalize(4); 1905cfd74d65d832137e20e193c960802afba73b5d38sm 1906cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1Start = new Vector2(25, 0); 1907cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1End = new Vector2(25, 64); 1908cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1Normal = new Vector2(-1, 0); 1909cfd74d65d832137e20e193c960802afba73b5d38sm 1910cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2Start = new Vector2(40, 0); 1911cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2End = new Vector2(40, 64); 1912cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2Normal = new Vector2(1, 0); 1913cfd74d65d832137e20e193c960802afba73b5d38sm 1914cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface1Start, surface1End, surface1Normal); 1915cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface2Start, surface2End, surface2Normal); 1916cfd74d65d832137e20e193c960802afba73b5d38sm 1917cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 1918cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 1919cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new SphereCollisionVolume(16, 32, 32)); 1920cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.get(0).setHitType(HitType.HIT); 1921cfd74d65d832137e20e193c960802afba73b5d38sm 1922cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = 1923cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 1924cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(16, 48, 32, HitType.HIT)); 1925cfd74d65d832137e20e193c960802afba73b5d38sm 1926cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(EnemyAnimations.IDLE.ordinal(), 1); 1927cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 1928cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_skeleton_stand), 1929cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 1930cfd74d65d832137e20e193c960802afba73b5d38sm 1931cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation walk = new SpriteAnimation(EnemyAnimations.MOVE.ordinal(), 6); 1932cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1933cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_skeleton_walk01), 1934cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume)); 1935cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1936cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_skeleton_walk02), 1937cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 4), null, basicVulnerabilityVolume)); 1938cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1939cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_skeleton_walk03), 1940cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume)); 1941cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1942cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_skeleton_walk04), 1943cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume)); 1944cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1945cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_skeleton_walk05), 1946cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 4), null, basicVulnerabilityVolume)); 1947cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 1948cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_skeleton_walk03), 1949cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume)); 1950cfd74d65d832137e20e193c960802afba73b5d38sm 1951cfd74d65d832137e20e193c960802afba73b5d38sm walk.setLoop(true); 1952cfd74d65d832137e20e193c960802afba73b5d38sm 1953cfd74d65d832137e20e193c960802afba73b5d38sm 1954cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation attack = new SpriteAnimation(EnemyAnimations.ATTACK.ordinal(), 3); 1955cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 1956cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_skeleton_attack01), 1957cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 5), null, basicVulnerabilityVolume)); 1958cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 1959cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_skeleton_attack03), 1960cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 1961cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 1962cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_skeleton_attack04), 1963cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 1964cfd74d65d832137e20e193c960802afba73b5d38sm 1965cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(gravity); 1966cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 1967cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(physics); 1968cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(solidSurface); 1969cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 1970cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(walk); 1971cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(attack); 1972cfd74d65d832137e20e193c960802afba73b5d38sm 1973cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.SKELETON, staticData); 1974cfd74d65d832137e20e193c960802afba73b5d38sm } 1975cfd74d65d832137e20e193c960802afba73b5d38sm 1976cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 1977cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_ENEMY); 1978cfd74d65d832137e20e193c960802afba73b5d38sm 1979cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 1980cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(32, 48); 1981cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(16, 5); 1982cfd74d65d832137e20e193c960802afba73b5d38sm 1983cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 1984cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 1985cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 1986cfd74d65d832137e20e193c960802afba73b5d38sm 1987cfd74d65d832137e20e193c960802afba73b5d38sm EnemyAnimationComponent animation = (EnemyAnimationComponent)allocateComponent(EnemyAnimationComponent.class); 1988cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 1989cfd74d65d832137e20e193c960802afba73b5d38sm 1990cfd74d65d832137e20e193c960802afba73b5d38sm PatrolComponent patrol = (PatrolComponent)allocateComponent(PatrolComponent.class); 1991cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setMovementSpeed(20.0f, 1000.0f); 1992cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setTurnToFacePlayer(true); 1993cfd74d65d832137e20e193c960802afba73b5d38sm 1994cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 1995cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 1996cfd74d65d832137e20e193c960802afba73b5d38sm 1997cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 1998cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 1999cfd74d65d832137e20e193c960802afba73b5d38sm 2000cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 2001cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setVulnerableToDeathTiles(true); 2002cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setObjectToSpawnOnDeath(GameObjectType.SMOKE_POOF); 2003cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = BaseObject.sSystemRegistry.soundSystem; 2004cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 2005cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setDeathSound(sound.load(R.raw.sound_stomp)); 2006cfd74d65d832137e20e193c960802afba73b5d38sm } 2007cfd74d65d832137e20e193c960802afba73b5d38sm 2008cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 2009cfd74d65d832137e20e193c960802afba73b5d38sm 2010cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 2011cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 2012cfd74d65d832137e20e193c960802afba73b5d38sm } 2013cfd74d65d832137e20e193c960802afba73b5d38sm 2014cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 2015cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 2016cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 2017cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 2018cfd74d65d832137e20e193c960802afba73b5d38sm object.add(patrol); 2019cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 2020cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 2021cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 2022cfd74d65d832137e20e193c960802afba73b5d38sm 2023cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.SKELETON, object, sprite); 2024cfd74d65d832137e20e193c960802afba73b5d38sm 2025cfd74d65d832137e20e193c960802afba73b5d38sm final SpriteAnimation attack = sprite.findAnimation(EnemyAnimations.ATTACK.ordinal()); 2026cfd74d65d832137e20e193c960802afba73b5d38sm if (attack != null) { 2027cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setupAttack(75.0f, attack.getLength(), 2.0f, true); 2028cfd74d65d832137e20e193c960802afba73b5d38sm } 2029cfd74d65d832137e20e193c960802afba73b5d38sm 2030cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 2031cfd74d65d832137e20e193c960802afba73b5d38sm 2032cfd74d65d832137e20e193c960802afba73b5d38sm return object; 2033cfd74d65d832137e20e193c960802afba73b5d38sm } 2034cfd74d65d832137e20e193c960802afba73b5d38sm 2035cfd74d65d832137e20e193c960802afba73b5d38sm 2036cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemyKaraguin(float positionX, float positionY, boolean flipHorizontal) { 2037cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 2038cfd74d65d832137e20e193c960802afba73b5d38sm 2039cfd74d65d832137e20e193c960802afba73b5d38sm 2040cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 2041cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 2042cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mNormalActivationRadius; 2043cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 32; 2044cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 2045cfd74d65d832137e20e193c960802afba73b5d38sm 2046cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.KARAGUIN); 2047cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 2048cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 2049cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 2050cfd74d65d832137e20e193c960802afba73b5d38sm 2051cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 2052cfd74d65d832137e20e193c960802afba73b5d38sm 2053cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 2054cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 2055cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new SphereCollisionVolume(8, 16, 16)); 2056cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.get(0).setHitType(HitType.HIT); 2057cfd74d65d832137e20e193c960802afba73b5d38sm 2058cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = 2059cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 2060cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(8, 16, 16, HitType.HIT)); 2061cfd74d65d832137e20e193c960802afba73b5d38sm 2062cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 3); 2063cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 2064cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_karaguin01), 2065cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 2066cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 2067cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_karaguin02), 2068cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 2069cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 2070cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_karaguin03), 2071cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 2072cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 2073cfd74d65d832137e20e193c960802afba73b5d38sm 2074cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 2075cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 2076cfd74d65d832137e20e193c960802afba73b5d38sm 2077cfd74d65d832137e20e193c960802afba73b5d38sm 2078cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.KARAGUIN, staticData); 2079cfd74d65d832137e20e193c960802afba73b5d38sm } 2080cfd74d65d832137e20e193c960802afba73b5d38sm 2081cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 2082cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_ENEMY); 2083cfd74d65d832137e20e193c960802afba73b5d38sm 2084cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 2085cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 2086cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 2087cfd74d65d832137e20e193c960802afba73b5d38sm 2088cfd74d65d832137e20e193c960802afba73b5d38sm PatrolComponent patrol = (PatrolComponent)allocateComponent(PatrolComponent.class); 2089cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setMovementSpeed(50.0f, 1000.0f); 2090cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setTurnToFacePlayer(false); 2091cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setFlying(true); 2092cfd74d65d832137e20e193c960802afba73b5d38sm 2093cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 2094cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 2095cfd74d65d832137e20e193c960802afba73b5d38sm 2096cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 2097cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 2098cfd74d65d832137e20e193c960802afba73b5d38sm 2099cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 2100cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setObjectToSpawnOnDeath(GameObjectType.SMOKE_POOF); 2101cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = BaseObject.sSystemRegistry.soundSystem; 2102cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 2103cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setDeathSound(sound.load(R.raw.sound_stomp)); 2104cfd74d65d832137e20e193c960802afba73b5d38sm } 2105cfd74d65d832137e20e193c960802afba73b5d38sm 2106cfd74d65d832137e20e193c960802afba73b5d38sm EnemyAnimationComponent animation = (EnemyAnimationComponent)allocateComponent(EnemyAnimationComponent.class); 2107cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 2108cfd74d65d832137e20e193c960802afba73b5d38sm 2109cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 2110cfd74d65d832137e20e193c960802afba73b5d38sm 2111cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 2112cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 2113cfd74d65d832137e20e193c960802afba73b5d38sm } 2114cfd74d65d832137e20e193c960802afba73b5d38sm // HACK. These guys originally moved on their own, so let's keep them that way. 2115cfd74d65d832137e20e193c960802afba73b5d38sm object.getVelocity().x = 50.0f * object.facingDirection.x; 2116cfd74d65d832137e20e193c960802afba73b5d38sm object.getTargetVelocity().x = 50.0f * object.facingDirection.x; 2117cfd74d65d832137e20e193c960802afba73b5d38sm 2118cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 2119cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 2120cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 2121cfd74d65d832137e20e193c960802afba73b5d38sm object.add(patrol); 2122cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 2123cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 2124cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 2125cfd74d65d832137e20e193c960802afba73b5d38sm 2126cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.KARAGUIN, object, sprite); 2127cfd74d65d832137e20e193c960802afba73b5d38sm 2128cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 2129cfd74d65d832137e20e193c960802afba73b5d38sm 2130cfd74d65d832137e20e193c960802afba73b5d38sm return object; 2131cfd74d65d832137e20e193c960802afba73b5d38sm } 2132cfd74d65d832137e20e193c960802afba73b5d38sm 2133cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemyPinkNamazu(float positionX, float positionY, boolean flipHorizontal) { 2134cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 2135cfd74d65d832137e20e193c960802afba73b5d38sm 2136cfd74d65d832137e20e193c960802afba73b5d38sm 2137cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 2138cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 2139cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 2140cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 128; 2141cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 128; 2142cfd74d65d832137e20e193c960802afba73b5d38sm 2143cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.PINK_NAMAZU); 2144cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 2145cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 7; 2146cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 2147cfd74d65d832137e20e193c960802afba73b5d38sm 2148cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent gravity = allocateComponent(GravityComponent.class); 2149cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 2150cfd74d65d832137e20e193c960802afba73b5d38sm 2151cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent physics = allocateComponent(SimplePhysicsComponent.class); 2152cfd74d65d832137e20e193c960802afba73b5d38sm 2153cfd74d65d832137e20e193c960802afba73b5d38sm SolidSurfaceComponent solidSurface 2154cfd74d65d832137e20e193c960802afba73b5d38sm = (SolidSurfaceComponent)allocateComponent(SolidSurfaceComponent.class); 2155cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.inititalize(5); 2156cfd74d65d832137e20e193c960802afba73b5d38sm // circle shape: 2157cfd74d65d832137e20e193c960802afba73b5d38sm // __ __3 2158cfd74d65d832137e20e193c960802afba73b5d38sm // / \ 2/ \4 2159cfd74d65d832137e20e193c960802afba73b5d38sm // | | 1| |5 2160cfd74d65d832137e20e193c960802afba73b5d38sm /* 2161cfd74d65d832137e20e193c960802afba73b5d38sm 0:12,6:22,52:0.98058067569092,-0.19611613513818 2162cfd74d65d832137e20e193c960802afba73b5d38sm 0:22,52:50,75:-0.62580046626293,0.77998318983495 2163cfd74d65d832137e20e193c960802afba73b5d38sm 0:50,75:81,75:0,1 2164cfd74d65d832137e20e193c960802afba73b5d38sm 0:81,75:104,49:0.74038072228541,0.67218776102228 2165cfd74d65d832137e20e193c960802afba73b5d38sm 0:104,49:104,6:-0.99997086544204,-0.00763336538505 2166cfd74d65d832137e20e193c960802afba73b5d38sm */ 2167cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1Start = new Vector2(12, 3); 2168cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1End = new Vector2(22, 52); 2169cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1Normal = new Vector2(-0.98058067569092f, -0.19611613513818f); 2170cfd74d65d832137e20e193c960802afba73b5d38sm surface1Normal.normalize(); 2171cfd74d65d832137e20e193c960802afba73b5d38sm 2172cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2Start = new Vector2(22, 52); 2173cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2End = new Vector2(50, 75); 2174cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2Normal = new Vector2(-0.62580046626293f, 0.77998318983495f); 2175cfd74d65d832137e20e193c960802afba73b5d38sm surface2Normal.normalize(); 2176cfd74d65d832137e20e193c960802afba73b5d38sm 2177cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3Start = new Vector2(50, 75); 2178cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3End = new Vector2(81, 75); 2179cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3Normal = new Vector2(0, 1); 2180cfd74d65d832137e20e193c960802afba73b5d38sm 2181cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface4Start = new Vector2(81, 75); 2182cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface4End = new Vector2(104,49); 2183cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface4Normal = new Vector2(0.74038072228541f, 0.67218776102228f); 2184cfd74d65d832137e20e193c960802afba73b5d38sm 2185cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface5Start = new Vector2(104,49); 2186cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface5End = new Vector2(104, 3); 2187cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface5Normal = new Vector2(1.0f, 0.0f); 2188cfd74d65d832137e20e193c960802afba73b5d38sm 2189cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface1Start, surface1End, surface1Normal); 2190cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface2Start, surface2End, surface2Normal); 2191cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface3Start, surface3End, surface3Normal); 2192cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface4Start, surface4End, surface4Normal); 2193cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface5Start, surface5End, surface5Normal); 2194cfd74d65d832137e20e193c960802afba73b5d38sm 2195cfd74d65d832137e20e193c960802afba73b5d38sm 2196cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(GenericAnimationComponent.Animation.IDLE, 4); 2197cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 2198cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_pinkdude_stand), 2199cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 8), null, null)); 2200cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame idle1 = new AnimationFrame( 2201cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_pinkdude_sleep01), 2202cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, null); 2203cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame idle2 = new AnimationFrame( 2204cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_pinkdude_sleep02), 2205cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 8), null, null); 2206cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(idle1); 2207cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(idle2); 2208cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(idle1); 2209cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 2210cfd74d65d832137e20e193c960802afba73b5d38sm 2211cfd74d65d832137e20e193c960802afba73b5d38sm 2212cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation wake = new SpriteAnimation(GenericAnimationComponent.Animation.MOVE, 4); 2213cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame wake1 = new AnimationFrame( 2214cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_pinkdude_eyeopen), 2215cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, null); 2216cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame wake2 = new AnimationFrame( 2217cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_pinkdude_stand), 2218cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, null); 2219cfd74d65d832137e20e193c960802afba73b5d38sm wake.addFrame(wake1); 2220cfd74d65d832137e20e193c960802afba73b5d38sm wake.addFrame(wake2); 2221cfd74d65d832137e20e193c960802afba73b5d38sm wake.addFrame(wake1); 2222cfd74d65d832137e20e193c960802afba73b5d38sm wake.addFrame(wake2); 2223cfd74d65d832137e20e193c960802afba73b5d38sm 2224cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> crushAttackVolume = 2225cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 2226cfd74d65d832137e20e193c960802afba73b5d38sm crushAttackVolume.add(new AABoxCollisionVolume(32, 0, 64, 32, HitType.HIT)); 2227cfd74d65d832137e20e193c960802afba73b5d38sm 2228cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation attack = new SpriteAnimation(GenericAnimationComponent.Animation.ATTACK, 1); 2229cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 2230cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_pinkdude_jump), 2231cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), crushAttackVolume, null)); 2232cfd74d65d832137e20e193c960802afba73b5d38sm 2233cfd74d65d832137e20e193c960802afba73b5d38sm 2234cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(gravity); 2235cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 2236cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(physics); 2237cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(solidSurface); 2238cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 2239cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(wake); 2240cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(attack); 2241cfd74d65d832137e20e193c960802afba73b5d38sm 2242cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.PINK_NAMAZU, staticData); 2243cfd74d65d832137e20e193c960802afba73b5d38sm } 2244cfd74d65d832137e20e193c960802afba73b5d38sm 2245cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 2246cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_ENEMY); 2247cfd74d65d832137e20e193c960802afba73b5d38sm 2248cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 2249cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(100, 75); 2250cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(12, 5); 2251cfd74d65d832137e20e193c960802afba73b5d38sm 2252cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 2253cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 2254cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 2255cfd74d65d832137e20e193c960802afba73b5d38sm 2256cfd74d65d832137e20e193c960802afba73b5d38sm GenericAnimationComponent animation = 2257cfd74d65d832137e20e193c960802afba73b5d38sm (GenericAnimationComponent)allocateComponent(GenericAnimationComponent.class); 2258cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 2259cfd74d65d832137e20e193c960802afba73b5d38sm 2260cfd74d65d832137e20e193c960802afba73b5d38sm SleeperComponent sleeper = (SleeperComponent)allocateComponent(SleeperComponent.class); 2261cfd74d65d832137e20e193c960802afba73b5d38sm sleeper.setAttackImpulse(100.0f, 170.0f); 2262cfd74d65d832137e20e193c960802afba73b5d38sm sleeper.setSlam(0.3f, 25.0f); 2263cfd74d65d832137e20e193c960802afba73b5d38sm 2264cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 2265cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 2266cfd74d65d832137e20e193c960802afba73b5d38sm 2267cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 2268cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 2269cfd74d65d832137e20e193c960802afba73b5d38sm 2270cfd74d65d832137e20e193c960802afba73b5d38sm 2271cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 2272cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 2273cfd74d65d832137e20e193c960802afba73b5d38sm 2274cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 2275cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 2276cfd74d65d832137e20e193c960802afba73b5d38sm } 2277cfd74d65d832137e20e193c960802afba73b5d38sm 2278cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 2279cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 2280cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 2281cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 2282cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 2283cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 2284cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sleeper); 2285cfd74d65d832137e20e193c960802afba73b5d38sm 2286cfd74d65d832137e20e193c960802afba73b5d38sm 2287cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.PINK_NAMAZU, object, sprite); 2288cfd74d65d832137e20e193c960802afba73b5d38sm 2289cfd74d65d832137e20e193c960802afba73b5d38sm final SpriteAnimation wakeUp = sprite.findAnimation(GenericAnimationComponent.Animation.MOVE); 2290cfd74d65d832137e20e193c960802afba73b5d38sm if (wakeUp != null) { 2291cfd74d65d832137e20e193c960802afba73b5d38sm sleeper.setWakeUpDuration(wakeUp.getLength() + 1.0f); 2292cfd74d65d832137e20e193c960802afba73b5d38sm } 2293cfd74d65d832137e20e193c960802afba73b5d38sm 2294cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(GenericAnimationComponent.Animation.IDLE); 2295cfd74d65d832137e20e193c960802afba73b5d38sm 2296cfd74d65d832137e20e193c960802afba73b5d38sm return object; 2297cfd74d65d832137e20e193c960802afba73b5d38sm } 2298cfd74d65d832137e20e193c960802afba73b5d38sm 2299cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemyBat(float positionX, float positionY, boolean flipHorizontal) { 2300cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 2301cfd74d65d832137e20e193c960802afba73b5d38sm 2302cfd74d65d832137e20e193c960802afba73b5d38sm 2303cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 2304cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 2305cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mNormalActivationRadius; 2306cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 2307cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 2308cfd74d65d832137e20e193c960802afba73b5d38sm 2309cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.BAT); 2310cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 2311cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 2312cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 2313cfd74d65d832137e20e193c960802afba73b5d38sm 2314cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 2315cfd74d65d832137e20e193c960802afba73b5d38sm 2316cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 2317cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 2318cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new SphereCollisionVolume(16, 32, 16)); 2319cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.get(0).setHitType(HitType.HIT); 2320cfd74d65d832137e20e193c960802afba73b5d38sm 2321cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = 2322cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 2323cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(16, 32, 16, HitType.HIT)); 2324cfd74d65d832137e20e193c960802afba73b5d38sm 2325cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 4); 2326cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 2327cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_bat01), 2328cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 2329cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 2330cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_bat02), 2331cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 2332cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 2333cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_bat03), 2334cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 2335cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 2336cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_bat04), 2337cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 2338cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 2339cfd74d65d832137e20e193c960802afba73b5d38sm 2340cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 2341cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 2342cfd74d65d832137e20e193c960802afba73b5d38sm 2343cfd74d65d832137e20e193c960802afba73b5d38sm 2344cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.BAT, staticData); 2345cfd74d65d832137e20e193c960802afba73b5d38sm } 2346cfd74d65d832137e20e193c960802afba73b5d38sm 2347cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 2348cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_ENEMY); 2349cfd74d65d832137e20e193c960802afba73b5d38sm 2350cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 2351cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 2352cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 2353cfd74d65d832137e20e193c960802afba73b5d38sm 2354cfd74d65d832137e20e193c960802afba73b5d38sm PatrolComponent patrol = (PatrolComponent)allocateComponent(PatrolComponent.class); 2355cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setMovementSpeed(75.0f, 1000.0f); 2356cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setTurnToFacePlayer(false); 2357cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setFlying(true); 2358cfd74d65d832137e20e193c960802afba73b5d38sm 2359cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 2360cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 2361cfd74d65d832137e20e193c960802afba73b5d38sm 2362cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 2363cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 2364cfd74d65d832137e20e193c960802afba73b5d38sm 2365cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 2366cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setObjectToSpawnOnDeath(GameObjectType.SMOKE_POOF); 2367cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = BaseObject.sSystemRegistry.soundSystem; 2368cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 2369cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setDeathSound(sound.load(R.raw.sound_stomp)); 2370cfd74d65d832137e20e193c960802afba73b5d38sm } 2371cfd74d65d832137e20e193c960802afba73b5d38sm 2372cfd74d65d832137e20e193c960802afba73b5d38sm EnemyAnimationComponent animation = (EnemyAnimationComponent)allocateComponent(EnemyAnimationComponent.class); 2373cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 2374cfd74d65d832137e20e193c960802afba73b5d38sm 2375cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 2376cfd74d65d832137e20e193c960802afba73b5d38sm 2377cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 2378cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 2379cfd74d65d832137e20e193c960802afba73b5d38sm } 2380cfd74d65d832137e20e193c960802afba73b5d38sm 2381cfd74d65d832137e20e193c960802afba73b5d38sm // HACK. These guys originally moved on their own, so let's keep them that way. 2382cfd74d65d832137e20e193c960802afba73b5d38sm object.getVelocity().x = 75.0f * object.facingDirection.x; 2383cfd74d65d832137e20e193c960802afba73b5d38sm object.getTargetVelocity().x = 75.0f * object.facingDirection.x; 2384cfd74d65d832137e20e193c960802afba73b5d38sm 2385cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 2386cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 2387cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 2388cfd74d65d832137e20e193c960802afba73b5d38sm object.add(patrol); 2389cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 2390cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 2391cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 2392cfd74d65d832137e20e193c960802afba73b5d38sm 2393cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.BAT, object, sprite); 2394cfd74d65d832137e20e193c960802afba73b5d38sm 2395cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 2396cfd74d65d832137e20e193c960802afba73b5d38sm 2397cfd74d65d832137e20e193c960802afba73b5d38sm return object; 2398cfd74d65d832137e20e193c960802afba73b5d38sm } 2399cfd74d65d832137e20e193c960802afba73b5d38sm 2400cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemySting(float positionX, float positionY, boolean flipHorizontal) { 2401cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 2402cfd74d65d832137e20e193c960802afba73b5d38sm 2403cfd74d65d832137e20e193c960802afba73b5d38sm 2404cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 2405cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 2406cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mNormalActivationRadius; 2407cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 2408cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 2409cfd74d65d832137e20e193c960802afba73b5d38sm 2410cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.STING); 2411cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 2412cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 2413cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 2414cfd74d65d832137e20e193c960802afba73b5d38sm 2415cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 2416cfd74d65d832137e20e193c960802afba73b5d38sm 2417cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 2418cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 2419cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new SphereCollisionVolume(16, 32, 16)); 2420cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.get(0).setHitType(HitType.HIT); 2421cfd74d65d832137e20e193c960802afba73b5d38sm 2422cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = 2423cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 2424cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(16, 32, 16, HitType.HIT)); 2425cfd74d65d832137e20e193c960802afba73b5d38sm 2426cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 3); 2427cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 2428cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_sting01), 2429cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 2430cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 2431cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_sting02), 2432cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 2433cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 2434cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_sting03), 2435cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 2436cfd74d65d832137e20e193c960802afba73b5d38sm 2437cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 2438cfd74d65d832137e20e193c960802afba73b5d38sm 2439cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 2440cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 2441cfd74d65d832137e20e193c960802afba73b5d38sm 2442cfd74d65d832137e20e193c960802afba73b5d38sm 2443cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.STING, staticData); 2444cfd74d65d832137e20e193c960802afba73b5d38sm } 2445cfd74d65d832137e20e193c960802afba73b5d38sm 2446cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 2447cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_ENEMY); 2448cfd74d65d832137e20e193c960802afba73b5d38sm 2449cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 2450cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 2451cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 2452cfd74d65d832137e20e193c960802afba73b5d38sm 2453cfd74d65d832137e20e193c960802afba73b5d38sm PatrolComponent patrol = (PatrolComponent)allocateComponent(PatrolComponent.class); 2454cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setMovementSpeed(75.0f, 1000.0f); 2455cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setTurnToFacePlayer(false); 2456cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setFlying(true); 2457cfd74d65d832137e20e193c960802afba73b5d38sm 2458cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 2459cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 2460cfd74d65d832137e20e193c960802afba73b5d38sm 2461cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 2462cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 2463cfd74d65d832137e20e193c960802afba73b5d38sm 2464cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 2465cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setObjectToSpawnOnDeath(GameObjectType.SMOKE_POOF); 2466cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = BaseObject.sSystemRegistry.soundSystem; 2467cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 2468cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setDeathSound(sound.load(R.raw.sound_stomp)); 2469cfd74d65d832137e20e193c960802afba73b5d38sm } 2470cfd74d65d832137e20e193c960802afba73b5d38sm 2471cfd74d65d832137e20e193c960802afba73b5d38sm EnemyAnimationComponent animation = (EnemyAnimationComponent)allocateComponent(EnemyAnimationComponent.class); 2472cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 2473cfd74d65d832137e20e193c960802afba73b5d38sm 2474cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 2475cfd74d65d832137e20e193c960802afba73b5d38sm 2476cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 2477cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 2478cfd74d65d832137e20e193c960802afba73b5d38sm } 2479cfd74d65d832137e20e193c960802afba73b5d38sm 2480cfd74d65d832137e20e193c960802afba73b5d38sm // HACK. These guys originally moved on their own, so let's keep them that way. 2481cfd74d65d832137e20e193c960802afba73b5d38sm object.getVelocity().x = 25.0f * object.facingDirection.x; 2482cfd74d65d832137e20e193c960802afba73b5d38sm object.getTargetVelocity().x = 25.0f * object.facingDirection.x; 2483cfd74d65d832137e20e193c960802afba73b5d38sm 2484cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 2485cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 2486cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 2487cfd74d65d832137e20e193c960802afba73b5d38sm object.add(patrol); 2488cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 2489cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 2490cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 2491cfd74d65d832137e20e193c960802afba73b5d38sm 2492cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.STING, object, sprite); 2493cfd74d65d832137e20e193c960802afba73b5d38sm 2494cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 2495cfd74d65d832137e20e193c960802afba73b5d38sm 2496cfd74d65d832137e20e193c960802afba73b5d38sm return object; 2497cfd74d65d832137e20e193c960802afba73b5d38sm } 2498cfd74d65d832137e20e193c960802afba73b5d38sm 2499cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemyOnion(float positionX, float positionY, boolean flipHorizontal) { 2500cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 2501cfd74d65d832137e20e193c960802afba73b5d38sm 2502cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 2503cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 2504cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mNormalActivationRadius; 2505cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 2506cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 2507cfd74d65d832137e20e193c960802afba73b5d38sm 2508cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.ONION); 2509cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 2510cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 5; 2511cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 2512cfd74d65d832137e20e193c960802afba73b5d38sm 2513cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent gravity = allocateComponent(GravityComponent.class); 2514cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 2515cfd74d65d832137e20e193c960802afba73b5d38sm SimplePhysicsComponent physics = (SimplePhysicsComponent)allocateComponent(SimplePhysicsComponent.class); 2516cfd74d65d832137e20e193c960802afba73b5d38sm physics.setBounciness(0.2f); 2517cfd74d65d832137e20e193c960802afba73b5d38sm 2518cfd74d65d832137e20e193c960802afba73b5d38sm 2519cfd74d65d832137e20e193c960802afba73b5d38sm // Animations 2520cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 2521cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 2522cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new SphereCollisionVolume(16, 32, 32)); 2523cfd74d65d832137e20e193c960802afba73b5d38sm 2524cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = 2525cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 2526cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(16, 32, 32, HitType.HIT)); 2527cfd74d65d832137e20e193c960802afba73b5d38sm 2528cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(EnemyAnimations.IDLE.ordinal(), 1); 2529cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 2530cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_onion01), 2531cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), basicAttackVolume, basicVulnerabilityVolume)); 2532cfd74d65d832137e20e193c960802afba73b5d38sm 2533cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 2534cfd74d65d832137e20e193c960802afba73b5d38sm 2535cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation walk = new SpriteAnimation(EnemyAnimations.MOVE.ordinal(), 3); 2536cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 2537cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_onion01), 2538cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 2539cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 2540cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_onion02), 2541cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 2542cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(new AnimationFrame( 2543cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_onion03), 2544cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, basicVulnerabilityVolume)); 2545cfd74d65d832137e20e193c960802afba73b5d38sm walk.setLoop(true); 2546cfd74d65d832137e20e193c960802afba73b5d38sm 2547cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(gravity); 2548cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 2549cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(physics); 2550cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 2551cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(walk); 2552cfd74d65d832137e20e193c960802afba73b5d38sm 2553cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.ONION, staticData); 2554cfd74d65d832137e20e193c960802afba73b5d38sm 2555cfd74d65d832137e20e193c960802afba73b5d38sm } 2556cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 2557cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_ENEMY); 2558cfd74d65d832137e20e193c960802afba73b5d38sm 2559cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision 2560cfd74d65d832137e20e193c960802afba73b5d38sm = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 2561cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(32, 48); 2562cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(16, 5); 2563cfd74d65d832137e20e193c960802afba73b5d38sm 2564cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 2565cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 2566cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 2567cfd74d65d832137e20e193c960802afba73b5d38sm 2568cfd74d65d832137e20e193c960802afba73b5d38sm EnemyAnimationComponent animation 2569cfd74d65d832137e20e193c960802afba73b5d38sm = (EnemyAnimationComponent)allocateComponent(EnemyAnimationComponent.class); 2570cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 2571cfd74d65d832137e20e193c960802afba73b5d38sm 2572cfd74d65d832137e20e193c960802afba73b5d38sm PatrolComponent patrol = (PatrolComponent)allocateComponent(PatrolComponent.class); 2573cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setMovementSpeed(50.0f, 1000.0f); 2574cfd74d65d832137e20e193c960802afba73b5d38sm 2575cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision 2576cfd74d65d832137e20e193c960802afba73b5d38sm = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 2577cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 2578cfd74d65d832137e20e193c960802afba73b5d38sm 2579cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact 2580cfd74d65d832137e20e193c960802afba73b5d38sm = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 2581cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 2582cfd74d65d832137e20e193c960802afba73b5d38sm 2583cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 2584cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setVulnerableToDeathTiles(true); 2585cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setObjectToSpawnOnDeath(GameObjectType.SMOKE_POOF); 2586cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = BaseObject.sSystemRegistry.soundSystem; 2587cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 2588cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setDeathSound(sound.load(R.raw.sound_stomp)); 2589cfd74d65d832137e20e193c960802afba73b5d38sm } 2590cfd74d65d832137e20e193c960802afba73b5d38sm 2591cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 2592cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 2593cfd74d65d832137e20e193c960802afba73b5d38sm 2594cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 2595cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 2596cfd74d65d832137e20e193c960802afba73b5d38sm object.add(patrol); 2597cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 2598cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 2599cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 2600cfd74d65d832137e20e193c960802afba73b5d38sm 2601cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 2602cfd74d65d832137e20e193c960802afba73b5d38sm 2603cfd74d65d832137e20e193c960802afba73b5d38sm 2604cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 2605cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 2606cfd74d65d832137e20e193c960802afba73b5d38sm } 2607cfd74d65d832137e20e193c960802afba73b5d38sm 2608cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.ONION, object, sprite); 2609cfd74d65d832137e20e193c960802afba73b5d38sm 2610cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 2611cfd74d65d832137e20e193c960802afba73b5d38sm 2612cfd74d65d832137e20e193c960802afba73b5d38sm return object; 2613cfd74d65d832137e20e193c960802afba73b5d38sm } 2614cfd74d65d832137e20e193c960802afba73b5d38sm 2615cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemyWanda(float positionX, float positionY, boolean flipHorizontal) { 2616cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 2617cfd74d65d832137e20e193c960802afba73b5d38sm 2618cfd74d65d832137e20e193c960802afba73b5d38sm 2619cfd74d65d832137e20e193c960802afba73b5d38sm // Make sure related textures are loaded. 2620cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball01); 2621cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball02); 2622cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball03); 2623cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball04); 2624cfd74d65d832137e20e193c960802afba73b5d38sm 2625cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 2626cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 2627cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mAlwaysActive; 2628cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 2629cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 128; 2630cfd74d65d832137e20e193c960802afba73b5d38sm 2631cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.WANDA); 2632cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 2633cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 9; 2634cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 2635cfd74d65d832137e20e193c960802afba73b5d38sm 2636cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent gravity = allocateComponent(GravityComponent.class); 2637cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 2638cfd74d65d832137e20e193c960802afba73b5d38sm 2639cfd74d65d832137e20e193c960802afba73b5d38sm SimplePhysicsComponent physics = (SimplePhysicsComponent)allocateComponent(SimplePhysicsComponent.class); 2640cfd74d65d832137e20e193c960802afba73b5d38sm physics.setBounciness(0.0f); 2641cfd74d65d832137e20e193c960802afba73b5d38sm 2642cfd74d65d832137e20e193c960802afba73b5d38sm 2643cfd74d65d832137e20e193c960802afba73b5d38sm 2644cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 2645cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 2646cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new AABoxCollisionVolume(20, 5, 26, 80, HitType.COLLECT)); 2647cfd74d65d832137e20e193c960802afba73b5d38sm 2648cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(NPCAnimationComponent.IDLE, 1); 2649cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 2650cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_stand), 2651cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2652cfd74d65d832137e20e193c960802afba73b5d38sm 2653cfd74d65d832137e20e193c960802afba73b5d38sm 2654cfd74d65d832137e20e193c960802afba73b5d38sm 2655cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame1 = new AnimationFrame( 2656cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_walk01), 2657cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 2658cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame2 = new AnimationFrame( 2659cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_walk02), 2660cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 2661cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame3 = new AnimationFrame( 2662cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_walk03), 2663cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 2664cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame4 = new AnimationFrame( 2665cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_walk04), 2666cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 2667cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame5 = new AnimationFrame( 2668cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_walk05), 2669cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 2670cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation walk = new SpriteAnimation(NPCAnimationComponent.WALK, 8); 2671cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame1); 2672cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame2); 2673cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame3); 2674cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame4); 2675cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame5); 2676cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame4); 2677cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame3); 2678cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame2); 2679cfd74d65d832137e20e193c960802afba73b5d38sm walk.setLoop(true); 2680cfd74d65d832137e20e193c960802afba73b5d38sm 2681cfd74d65d832137e20e193c960802afba73b5d38sm 2682cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame runFrame4 = new AnimationFrame( 2683cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_run04), 2684cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume); 2685cfd74d65d832137e20e193c960802afba73b5d38sm 2686cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation run = new SpriteAnimation(NPCAnimationComponent.RUN, 9); 2687cfd74d65d832137e20e193c960802afba73b5d38sm run.addFrame(new AnimationFrame( 2688cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_run01), 2689cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2690cfd74d65d832137e20e193c960802afba73b5d38sm run.addFrame(new AnimationFrame( 2691cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_run02), 2692cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2693cfd74d65d832137e20e193c960802afba73b5d38sm run.addFrame(new AnimationFrame( 2694cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_run03), 2695cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2696cfd74d65d832137e20e193c960802afba73b5d38sm run.addFrame(runFrame4); 2697cfd74d65d832137e20e193c960802afba73b5d38sm run.addFrame(new AnimationFrame( 2698cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_run05), 2699cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2700cfd74d65d832137e20e193c960802afba73b5d38sm run.addFrame(new AnimationFrame( 2701cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_run06), 2702cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2703cfd74d65d832137e20e193c960802afba73b5d38sm run.addFrame(new AnimationFrame( 2704cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_run07), 2705cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2706cfd74d65d832137e20e193c960802afba73b5d38sm run.addFrame(runFrame4); 2707cfd74d65d832137e20e193c960802afba73b5d38sm run.addFrame(new AnimationFrame( 2708cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_run08), 2709cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2710cfd74d65d832137e20e193c960802afba73b5d38sm run.setLoop(true); 2711cfd74d65d832137e20e193c960802afba73b5d38sm 2712cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation jumpStart = new SpriteAnimation(NPCAnimationComponent.JUMP_START, 4); 2713cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame jump1 = new AnimationFrame( 2714cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_jump01), 2715cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume); 2716cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame jump2 = new AnimationFrame( 2717cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_jump01), 2718cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume); 2719cfd74d65d832137e20e193c960802afba73b5d38sm jumpStart.addFrame(new AnimationFrame( 2720cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_run04), 2721cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 2722cfd74d65d832137e20e193c960802afba73b5d38sm jumpStart.addFrame(new AnimationFrame( 2723cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_crouch), 2724cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2725cfd74d65d832137e20e193c960802afba73b5d38sm jumpStart.addFrame(jump1); 2726cfd74d65d832137e20e193c960802afba73b5d38sm jumpStart.addFrame(jump2); 2727cfd74d65d832137e20e193c960802afba73b5d38sm 2728cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation jumpAir = new SpriteAnimation(NPCAnimationComponent.JUMP_AIR, 2); 2729cfd74d65d832137e20e193c960802afba73b5d38sm jumpAir.addFrame(jump1); 2730cfd74d65d832137e20e193c960802afba73b5d38sm jumpAir.addFrame(jump2); 2731cfd74d65d832137e20e193c960802afba73b5d38sm jumpAir.setLoop(true); 2732cfd74d65d832137e20e193c960802afba73b5d38sm 2733cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation attack = new SpriteAnimation(NPCAnimationComponent.SHOOT, 11); 2734cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 2735cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_shoot01), 2736cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 2737cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 2738cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_shoot02), 2739cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 8), null, basicVulnerabilityVolume)); 2740cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 2741cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_shoot03), 2742cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2743cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 2744cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_shoot04), 2745cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2746cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 2747cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_shoot05), 2748cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2749cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 2750cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_shoot06), 2751cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2752cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 2753cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_shoot07), 2754cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2755cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 2756cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_shoot08), 2757cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2758cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 2759cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_shoot09), 2760cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 2761cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 2762cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_shoot02), 2763cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume)); 2764cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 2765cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_wanda_shoot01), 2766cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume)); 2767cfd74d65d832137e20e193c960802afba73b5d38sm 2768cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(gravity); 2769cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 2770cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(physics); 2771cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 2772cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(walk); 2773cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(run); 2774cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(jumpStart); 2775cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(jumpAir); 2776cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(attack); 2777cfd74d65d832137e20e193c960802afba73b5d38sm 2778cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.WANDA, staticData); 2779cfd74d65d832137e20e193c960802afba73b5d38sm } 2780cfd74d65d832137e20e193c960802afba73b5d38sm 2781cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 2782cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.NPC); 2783cfd74d65d832137e20e193c960802afba73b5d38sm 2784cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 2785cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(32, 82); 2786cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(20, 5); 2787cfd74d65d832137e20e193c960802afba73b5d38sm 2788cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 2789cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 2790cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 2791cfd74d65d832137e20e193c960802afba73b5d38sm 2792cfd74d65d832137e20e193c960802afba73b5d38sm NPCAnimationComponent animation = (NPCAnimationComponent)allocateComponent(NPCAnimationComponent.class); 2793cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 2794cfd74d65d832137e20e193c960802afba73b5d38sm 2795cfd74d65d832137e20e193c960802afba73b5d38sm NPCComponent patrol = (NPCComponent)allocateComponent(NPCComponent.class); 2796cfd74d65d832137e20e193c960802afba73b5d38sm 2797cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 2798cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 2799cfd74d65d832137e20e193c960802afba73b5d38sm 2800cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 2801cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 2802cfd74d65d832137e20e193c960802afba73b5d38sm 2803cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setHitReactionComponent(hitReact); 2804cfd74d65d832137e20e193c960802afba73b5d38sm 2805cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = sSystemRegistry.soundSystem; 2806cfd74d65d832137e20e193c960802afba73b5d38sm 2807cfd74d65d832137e20e193c960802afba73b5d38sm LaunchProjectileComponent gun 2808cfd74d65d832137e20e193c960802afba73b5d38sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 2809cfd74d65d832137e20e193c960802afba73b5d38sm gun.setShotsPerSet(1); 2810cfd74d65d832137e20e193c960802afba73b5d38sm gun.setSetsPerActivation(1); 2811cfd74d65d832137e20e193c960802afba73b5d38sm gun.setDelayBeforeFirstSet(Utils.framesToTime(24, 11)); 2812cfd74d65d832137e20e193c960802afba73b5d38sm gun.setObjectTypeToSpawn(GameObjectType.WANDA_SHOT); 2813cfd74d65d832137e20e193c960802afba73b5d38sm gun.setOffsetX(45); 2814cfd74d65d832137e20e193c960802afba73b5d38sm gun.setOffsetY(42); 2815cfd74d65d832137e20e193c960802afba73b5d38sm gun.setRequiredAction(GameObject.ActionType.ATTACK); 2816cfd74d65d832137e20e193c960802afba73b5d38sm gun.setVelocityX(300.0f); 2817cfd74d65d832137e20e193c960802afba73b5d38sm gun.setShootSound(sound.load(R.raw.sound_poing)); 2818cfd74d65d832137e20e193c960802afba73b5d38sm 2819cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 2820cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 2821cfd74d65d832137e20e193c960802afba73b5d38sm 2822cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 2823cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 2824cfd74d65d832137e20e193c960802afba73b5d38sm } 2825cfd74d65d832137e20e193c960802afba73b5d38sm 2826cfd74d65d832137e20e193c960802afba73b5d38sm object.add(gun); 2827cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 2828cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 2829cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 2830cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 2831cfd74d65d832137e20e193c960802afba73b5d38sm object.add(patrol); 2832cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 2833cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 2834cfd74d65d832137e20e193c960802afba73b5d38sm 2835cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.WANDA, object, sprite); 2836cfd74d65d832137e20e193c960802afba73b5d38sm 2837cfd74d65d832137e20e193c960802afba73b5d38sm 2838cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 2839cfd74d65d832137e20e193c960802afba73b5d38sm 2840cfd74d65d832137e20e193c960802afba73b5d38sm return object; 2841cfd74d65d832137e20e193c960802afba73b5d38sm } 2842cfd74d65d832137e20e193c960802afba73b5d38sm 2843cfd74d65d832137e20e193c960802afba73b5d38sm 2844cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemyKyle(float positionX, float positionY, boolean flipHorizontal) { 2845cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 2846cfd74d65d832137e20e193c960802afba73b5d38sm 2847cfd74d65d832137e20e193c960802afba73b5d38sm 2848cfd74d65d832137e20e193c960802afba73b5d38sm 2849cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 2850cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 2851cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mAlwaysActive; 2852cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 2853cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 128; 2854cfd74d65d832137e20e193c960802afba73b5d38sm 2855cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.KYLE); 2856cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 2857cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 9; 2858cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 2859cfd74d65d832137e20e193c960802afba73b5d38sm 2860cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent gravity = allocateComponent(GravityComponent.class); 2861cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 2862cfd74d65d832137e20e193c960802afba73b5d38sm 2863cfd74d65d832137e20e193c960802afba73b5d38sm SimplePhysicsComponent physics = (SimplePhysicsComponent)allocateComponent(SimplePhysicsComponent.class); 2864cfd74d65d832137e20e193c960802afba73b5d38sm physics.setBounciness(0.0f); 2865cfd74d65d832137e20e193c960802afba73b5d38sm 2866cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 2867cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 2868cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new AABoxCollisionVolume(20, 5, 26, 80, HitType.COLLECT)); 2869cfd74d65d832137e20e193c960802afba73b5d38sm 2870cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(NPCAnimationComponent.IDLE, 1); 2871cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 2872cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kyle_stand), 2873cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 2874cfd74d65d832137e20e193c960802afba73b5d38sm 2875cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame1 = new AnimationFrame( 2876cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kyle_walk01), 2877cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 2878cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame2 = new AnimationFrame( 2879cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kyle_walk02), 2880cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 2881cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame3 = new AnimationFrame( 2882cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kyle_walk03), 2883cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 2884cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame4 = new AnimationFrame( 2885cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kyle_walk04), 2886cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 2887cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame5 = new AnimationFrame( 2888cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kyle_walk05), 2889cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 2890cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame6 = new AnimationFrame( 2891cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kyle_walk06), 2892cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 2893cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame7 = new AnimationFrame( 2894cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kyle_walk07), 2895cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 2896cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation walk = new SpriteAnimation(NPCAnimationComponent.WALK, 12); 2897cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame1); 2898cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame2); 2899cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame3); 2900cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame4); 2901cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame3); 2902cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame2); 2903cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame1); 2904cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame5); 2905cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame6); 2906cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame7); 2907cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame6); 2908cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame5); 2909cfd74d65d832137e20e193c960802afba73b5d38sm 2910cfd74d65d832137e20e193c960802afba73b5d38sm walk.setLoop(true); 2911cfd74d65d832137e20e193c960802afba73b5d38sm 2912cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame crouch1 = new AnimationFrame( 2913cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kyle_crouch01), 2914cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume); 2915cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame crouch2 = new AnimationFrame( 2916cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kyle_crouch02), 2917cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume); 2918cfd74d65d832137e20e193c960802afba73b5d38sm 2919cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation runStart = new SpriteAnimation(NPCAnimationComponent.RUN_START, 2); 2920cfd74d65d832137e20e193c960802afba73b5d38sm runStart.addFrame(crouch1); 2921cfd74d65d832137e20e193c960802afba73b5d38sm runStart.addFrame(crouch2); 2922cfd74d65d832137e20e193c960802afba73b5d38sm 2923cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> attackVolume = 2924cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(2); 2925cfd74d65d832137e20e193c960802afba73b5d38sm attackVolume.add(new AABoxCollisionVolume(32, 32, 50, 32, HitType.HIT)); 2926cfd74d65d832137e20e193c960802afba73b5d38sm attackVolume.add(new AABoxCollisionVolume(32, 32, 50, 32, HitType.COLLECT)); 2927cfd74d65d832137e20e193c960802afba73b5d38sm 2928cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation run = new SpriteAnimation(NPCAnimationComponent.RUN, 2); 2929cfd74d65d832137e20e193c960802afba73b5d38sm run.addFrame(new AnimationFrame( 2930cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kyle_dash01), 2931cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), attackVolume, basicVulnerabilityVolume)); 2932cfd74d65d832137e20e193c960802afba73b5d38sm run.addFrame(new AnimationFrame( 2933cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kyle_dash02), 2934cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), attackVolume, basicVulnerabilityVolume)); 2935cfd74d65d832137e20e193c960802afba73b5d38sm run.setLoop(true); 2936cfd74d65d832137e20e193c960802afba73b5d38sm 2937cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation jumpStart = new SpriteAnimation(NPCAnimationComponent.JUMP_START, 2); 2938cfd74d65d832137e20e193c960802afba73b5d38sm jumpStart.addFrame(crouch1); 2939cfd74d65d832137e20e193c960802afba73b5d38sm jumpStart.addFrame(crouch2); 2940cfd74d65d832137e20e193c960802afba73b5d38sm 2941cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation jumpAir = new SpriteAnimation(NPCAnimationComponent.JUMP_AIR, 2); 2942cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame jump1 = new AnimationFrame( 2943cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kyle_jump01), 2944cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume); 2945cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame jump2 = new AnimationFrame( 2946cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kyle_jump01), 2947cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume); 2948cfd74d65d832137e20e193c960802afba73b5d38sm jumpAir.addFrame(jump1); 2949cfd74d65d832137e20e193c960802afba73b5d38sm jumpAir.addFrame(jump2); 2950cfd74d65d832137e20e193c960802afba73b5d38sm jumpAir.setLoop(true); 2951cfd74d65d832137e20e193c960802afba73b5d38sm 2952cfd74d65d832137e20e193c960802afba73b5d38sm 2953cfd74d65d832137e20e193c960802afba73b5d38sm 2954cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(gravity); 2955cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 2956cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(physics); 2957cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 2958cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(walk); 2959cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(runStart); 2960cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(run); 2961cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(jumpStart); 2962cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(jumpAir); 2963cfd74d65d832137e20e193c960802afba73b5d38sm 2964cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.KYLE, staticData); 2965cfd74d65d832137e20e193c960802afba73b5d38sm } 2966cfd74d65d832137e20e193c960802afba73b5d38sm 2967cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 2968cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.NPC); 2969cfd74d65d832137e20e193c960802afba73b5d38sm 2970cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 2971cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(32, 90); 2972cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(20, 5); 2973cfd74d65d832137e20e193c960802afba73b5d38sm 2974cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 2975cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 2976cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 2977cfd74d65d832137e20e193c960802afba73b5d38sm 2978cfd74d65d832137e20e193c960802afba73b5d38sm NPCAnimationComponent animation = (NPCAnimationComponent)allocateComponent(NPCAnimationComponent.class); 2979cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 2980cfd74d65d832137e20e193c960802afba73b5d38sm animation.setStopAtWalls(false); // Kyle can run through walls 2981cfd74d65d832137e20e193c960802afba73b5d38sm 2982cfd74d65d832137e20e193c960802afba73b5d38sm NPCComponent patrol = (NPCComponent)allocateComponent(NPCComponent.class); 2983cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setSpeeds(350.0f, 50.0f, 400.0f, -10.0f, 400.0f); 2984cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setGameEvent(GameFlowEvent.EVENT_SHOW_ANIMATION, AnimationPlayerActivity.KYLE_DEATH, false); 2985cfd74d65d832137e20e193c960802afba73b5d38sm 2986cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 2987cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 2988cfd74d65d832137e20e193c960802afba73b5d38sm 2989cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 2990cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 2991cfd74d65d832137e20e193c960802afba73b5d38sm 2992cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setHitReactionComponent(hitReact); 2993cfd74d65d832137e20e193c960802afba73b5d38sm 2994cfd74d65d832137e20e193c960802afba73b5d38sm MotionBlurComponent motionBlur = (MotionBlurComponent)allocateComponent(MotionBlurComponent.class); 2995cfd74d65d832137e20e193c960802afba73b5d38sm motionBlur.setTarget(render); 2996cfd74d65d832137e20e193c960802afba73b5d38sm 2997cfd74d65d832137e20e193c960802afba73b5d38sm LauncherComponent launcher = (LauncherComponent)allocateComponent(LauncherComponent.class); 2998cfd74d65d832137e20e193c960802afba73b5d38sm launcher.setup((float)(Math.PI * 0.45f), 1000.0f, 0.0f, 0.0f, false); 2999cfd74d65d832137e20e193c960802afba73b5d38sm launcher.setLaunchEffect(GameObjectType.FLASH, 70.0f, 50.0f); 3000cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setLauncherComponent(launcher, HitType.HIT); 3001cfd74d65d832137e20e193c960802afba73b5d38sm 3002cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.NONE; 3003cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 3004cfd74d65d832137e20e193c960802afba73b5d38sm 3005cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 3006cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 3007cfd74d65d832137e20e193c960802afba73b5d38sm } 3008cfd74d65d832137e20e193c960802afba73b5d38sm 3009cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 3010cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 3011cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 3012cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 3013cfd74d65d832137e20e193c960802afba73b5d38sm object.add(patrol); 3014cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 3015cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 3016cfd74d65d832137e20e193c960802afba73b5d38sm object.add(motionBlur); 3017cfd74d65d832137e20e193c960802afba73b5d38sm object.add(launcher); 3018cfd74d65d832137e20e193c960802afba73b5d38sm 3019cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.KYLE, object, sprite); 3020cfd74d65d832137e20e193c960802afba73b5d38sm 3021cfd74d65d832137e20e193c960802afba73b5d38sm 3022cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 3023cfd74d65d832137e20e193c960802afba73b5d38sm 3024cfd74d65d832137e20e193c960802afba73b5d38sm return object; 3025cfd74d65d832137e20e193c960802afba73b5d38sm } 3026cfd74d65d832137e20e193c960802afba73b5d38sm 3027cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemyKyleDead(float positionX, float positionY) { 3028cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 3029cfd74d65d832137e20e193c960802afba73b5d38sm 3030cfd74d65d832137e20e193c960802afba73b5d38sm 3031cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 3032cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 3033cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 3034cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 128; 3035cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 3036cfd74d65d832137e20e193c960802afba73b5d38sm 3037cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.KYLE_DEAD); 3038cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 3039cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 1; 3040cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 3041cfd74d65d832137e20e193c960802afba73b5d38sm 3042cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 3043cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 3044cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new AABoxCollisionVolume(32, 5, 64, 32, HitType.COLLECT)); 3045cfd74d65d832137e20e193c960802afba73b5d38sm 3046cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 1); 3047cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame1 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.enemy_kyle_dead), 3048cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume); 3049cfd74d65d832137e20e193c960802afba73b5d38sm 3050cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame1); 3051cfd74d65d832137e20e193c960802afba73b5d38sm 3052cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 3053cfd74d65d832137e20e193c960802afba73b5d38sm 3054cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 3055cfd74d65d832137e20e193c960802afba73b5d38sm 3056cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.KYLE_DEAD, staticData); 3057cfd74d65d832137e20e193c960802afba73b5d38sm } 3058cfd74d65d832137e20e193c960802afba73b5d38sm 3059cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 3060cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_OBJECT); 3061cfd74d65d832137e20e193c960802afba73b5d38sm 3062cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 3063cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 3064cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 3065cfd74d65d832137e20e193c960802afba73b5d38sm 3066cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 3067cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 3068cfd74d65d832137e20e193c960802afba73b5d38sm 3069cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 3070cfd74d65d832137e20e193c960802afba73b5d38sm dynamicCollision.setHitReactionComponent(hitReact); 3071cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setSpawnGameEventOnHit(HitType.COLLECT, GameFlowEvent.EVENT_SHOW_DIALOG_CHARACTER2, 0); 3072cfd74d65d832137e20e193c960802afba73b5d38sm 3073cfd74d65d832137e20e193c960802afba73b5d38sm SelectDialogComponent dialogSelect = (SelectDialogComponent)allocateComponent(SelectDialogComponent.class); 3074cfd74d65d832137e20e193c960802afba73b5d38sm dialogSelect.setHitReact(hitReact); 3075cfd74d65d832137e20e193c960802afba73b5d38sm 3076cfd74d65d832137e20e193c960802afba73b5d38sm // Since this object doesn't have gravity or background collision, adjust down to simulate the position 3077cfd74d65d832137e20e193c960802afba73b5d38sm // at which a bounding volume would rest. 3078cfd74d65d832137e20e193c960802afba73b5d38sm 3079cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().y -= 5.0f; 3080cfd74d65d832137e20e193c960802afba73b5d38sm 3081cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dialogSelect); 3082cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 3083cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 3084cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 3085cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 3086cfd74d65d832137e20e193c960802afba73b5d38sm 3087cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.KYLE_DEAD, object, sprite); 3088cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 3089cfd74d65d832137e20e193c960802afba73b5d38sm 3090cfd74d65d832137e20e193c960802afba73b5d38sm return object; 3091cfd74d65d832137e20e193c960802afba73b5d38sm } 3092cfd74d65d832137e20e193c960802afba73b5d38sm 3093cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemyAndouDead(float positionX, float positionY) { 3094cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 3095cfd74d65d832137e20e193c960802afba73b5d38sm 3096cfd74d65d832137e20e193c960802afba73b5d38sm 3097cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 3098cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 3099cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 3100cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 3101cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 3102cfd74d65d832137e20e193c960802afba73b5d38sm 3103cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.ANDOU_DEAD); 3104cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 3105cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 1; 3106cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 3107cfd74d65d832137e20e193c960802afba73b5d38sm 3108cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 1); 3109cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame1 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_explode12), 3110cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null); 3111cfd74d65d832137e20e193c960802afba73b5d38sm 3112cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame1); 3113cfd74d65d832137e20e193c960802afba73b5d38sm 3114cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 3115cfd74d65d832137e20e193c960802afba73b5d38sm 3116cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 3117cfd74d65d832137e20e193c960802afba73b5d38sm 3118cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.ANDOU_DEAD, staticData); 3119cfd74d65d832137e20e193c960802afba73b5d38sm } 3120cfd74d65d832137e20e193c960802afba73b5d38sm 3121cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 3122cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_OBJECT); 3123cfd74d65d832137e20e193c960802afba73b5d38sm 3124cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 3125cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 3126cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 3127cfd74d65d832137e20e193c960802afba73b5d38sm 3128cfd74d65d832137e20e193c960802afba73b5d38sm LaunchProjectileComponent smokeGun 3129cfd74d65d832137e20e193c960802afba73b5d38sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 3130cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun.setDelayBetweenShots(0.25f); 3131cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun.setObjectTypeToSpawn(GameObjectType.SMOKE_BIG); 3132cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun.setOffsetX(32); 3133cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun.setOffsetY(15); 3134cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun.setVelocityX(-150.0f); 3135cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun.setVelocityY(100.0f); 3136cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun.setThetaError(0.1f); 3137cfd74d65d832137e20e193c960802afba73b5d38sm 3138cfd74d65d832137e20e193c960802afba73b5d38sm LaunchProjectileComponent smokeGun2 3139cfd74d65d832137e20e193c960802afba73b5d38sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 3140cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun2.setDelayBetweenShots(0.35f); 3141cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun2.setObjectTypeToSpawn(GameObjectType.SMOKE_SMALL); 3142cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun2.setOffsetX(16); 3143cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun2.setOffsetY(15); 3144cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun2.setVelocityX(-150.0f); 3145cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun2.setVelocityY(150.0f); 3146cfd74d65d832137e20e193c960802afba73b5d38sm smokeGun2.setThetaError(0.1f); 3147cfd74d65d832137e20e193c960802afba73b5d38sm 3148cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 3149cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 3150cfd74d65d832137e20e193c960802afba73b5d38sm object.add(smokeGun); 3151cfd74d65d832137e20e193c960802afba73b5d38sm object.add(smokeGun2); 3152cfd74d65d832137e20e193c960802afba73b5d38sm 3153cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 3154cfd74d65d832137e20e193c960802afba73b5d38sm 3155cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.ANDOU_DEAD, object, sprite); 3156cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 3157cfd74d65d832137e20e193c960802afba73b5d38sm 3158cfd74d65d832137e20e193c960802afba73b5d38sm return object; 3159cfd74d65d832137e20e193c960802afba73b5d38sm } 3160cfd74d65d832137e20e193c960802afba73b5d38sm 3161cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemyKabocha(float positionX, float positionY, boolean flipHorizontal) { 3162cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 3163cfd74d65d832137e20e193c960802afba73b5d38sm 3164cfd74d65d832137e20e193c960802afba73b5d38sm 3165cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 3166cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 3167cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mAlwaysActive; 3168cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 3169cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 128; 3170cfd74d65d832137e20e193c960802afba73b5d38sm 3171cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.KABOCHA); 3172cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 3173cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 5; 3174cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 3175cfd74d65d832137e20e193c960802afba73b5d38sm 3176cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent gravity = allocateComponent(GravityComponent.class); 3177cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 3178cfd74d65d832137e20e193c960802afba73b5d38sm 3179cfd74d65d832137e20e193c960802afba73b5d38sm SimplePhysicsComponent physics = (SimplePhysicsComponent)allocateComponent(SimplePhysicsComponent.class); 3180cfd74d65d832137e20e193c960802afba73b5d38sm physics.setBounciness(0.0f); 3181cfd74d65d832137e20e193c960802afba73b5d38sm 3182cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 3183cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 3184cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new AABoxCollisionVolume(20, 5, 26, 80, HitType.COLLECT)); 3185cfd74d65d832137e20e193c960802afba73b5d38sm 3186cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(NPCAnimationComponent.IDLE, 1); 3187cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 3188cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_stand), 3189cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 3190cfd74d65d832137e20e193c960802afba73b5d38sm 3191cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame1 = new AnimationFrame( 3192cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_walk01), 3193cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume); 3194cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame2 = new AnimationFrame( 3195cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_walk02), 3196cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume); 3197cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame3 = new AnimationFrame( 3198cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_walk03), 3199cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume); 3200cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame4 = new AnimationFrame( 3201cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_walk04), 3202cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume); 3203cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame5 = new AnimationFrame( 3204cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_walk05), 3205cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume); 3206cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame6 = new AnimationFrame( 3207cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_walk06), 3208cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume); 3209cfd74d65d832137e20e193c960802afba73b5d38sm 3210cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation walk = new SpriteAnimation(NPCAnimationComponent.WALK, 6); 3211cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame1); 3212cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame2); 3213cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame3); 3214cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame4); 3215cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame5); 3216cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame6); 3217cfd74d65d832137e20e193c960802afba73b5d38sm 3218cfd74d65d832137e20e193c960802afba73b5d38sm 3219cfd74d65d832137e20e193c960802afba73b5d38sm walk.setLoop(true); 3220cfd74d65d832137e20e193c960802afba73b5d38sm 3221cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(gravity); 3222cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 3223cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(physics); 3224cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 3225cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(walk); 3226cfd74d65d832137e20e193c960802afba73b5d38sm 3227cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.KABOCHA, staticData); 3228cfd74d65d832137e20e193c960802afba73b5d38sm } 3229cfd74d65d832137e20e193c960802afba73b5d38sm 3230cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 3231cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.NPC); 3232cfd74d65d832137e20e193c960802afba73b5d38sm 3233cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 3234cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(38, 82); 3235cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(16, 5); 3236cfd74d65d832137e20e193c960802afba73b5d38sm 3237cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 3238cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 3239cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 3240cfd74d65d832137e20e193c960802afba73b5d38sm 3241cfd74d65d832137e20e193c960802afba73b5d38sm NPCAnimationComponent animation = (NPCAnimationComponent)allocateComponent(NPCAnimationComponent.class); 3242cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 3243cfd74d65d832137e20e193c960802afba73b5d38sm 3244cfd74d65d832137e20e193c960802afba73b5d38sm NPCComponent patrol = (NPCComponent)allocateComponent(NPCComponent.class); 3245cfd74d65d832137e20e193c960802afba73b5d38sm 3246cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 3247cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 3248cfd74d65d832137e20e193c960802afba73b5d38sm 3249cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 3250cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 3251cfd74d65d832137e20e193c960802afba73b5d38sm 3252cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setHitReactionComponent(hitReact); 3253cfd74d65d832137e20e193c960802afba73b5d38sm 3254cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 3255cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 3256cfd74d65d832137e20e193c960802afba73b5d38sm 3257cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 3258cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 3259cfd74d65d832137e20e193c960802afba73b5d38sm } 3260cfd74d65d832137e20e193c960802afba73b5d38sm 3261cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 3262cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 3263cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 3264cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 3265cfd74d65d832137e20e193c960802afba73b5d38sm object.add(patrol); 3266cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 3267cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 3268cfd74d65d832137e20e193c960802afba73b5d38sm 3269cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.KABOCHA, object, sprite); 3270cfd74d65d832137e20e193c960802afba73b5d38sm 3271cfd74d65d832137e20e193c960802afba73b5d38sm 3272cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 3273cfd74d65d832137e20e193c960802afba73b5d38sm 3274cfd74d65d832137e20e193c960802afba73b5d38sm return object; 3275cfd74d65d832137e20e193c960802afba73b5d38sm } 3276cfd74d65d832137e20e193c960802afba73b5d38sm 3277cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnRokudouTerminal(float positionX, float positionY) { 3278cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 3279cfd74d65d832137e20e193c960802afba73b5d38sm 3280cfd74d65d832137e20e193c960802afba73b5d38sm 3281cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 3282cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 3283cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 3284cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 3285cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 3286cfd74d65d832137e20e193c960802afba73b5d38sm 3287cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.ROKUDOU_TERMINAL); 3288cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 3289cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 1; 3290cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 3291cfd74d65d832137e20e193c960802afba73b5d38sm 3292cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = new FixedSizeArray<CollisionVolume>(1); 3293cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new AABoxCollisionVolume(0, 0, 64, 64)); 3294cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.get(0).setHitType(HitType.COLLECT); 3295cfd74d65d832137e20e193c960802afba73b5d38sm 3296cfd74d65d832137e20e193c960802afba73b5d38sm 3297cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame1 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_terminal01), 3298cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume); 3299cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame2 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_terminal02), 3300cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume); 3301cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame3 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_terminal03), 3302cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume); 3303cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame4 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_terminal01), 3304cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 3305cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame5 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_terminal02), 3306cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 3307cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame6 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_terminal01), 3308cfd74d65d832137e20e193c960802afba73b5d38sm 1.0f, null, basicVulnerabilityVolume); 3309cfd74d65d832137e20e193c960802afba73b5d38sm 3310cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 12); 3311cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame1); 3312cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame5); 3313cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame4); 3314cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame3); 3315cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame2); 3316cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame6); 3317cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame6); 3318cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame3); 3319cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame2); 3320cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame1); 3321cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame2); 3322cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame6); 3323cfd74d65d832137e20e193c960802afba73b5d38sm 3324cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 3325cfd74d65d832137e20e193c960802afba73b5d38sm 3326cfd74d65d832137e20e193c960802afba73b5d38sm 3327cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 3328cfd74d65d832137e20e193c960802afba73b5d38sm 3329cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.ROKUDOU_TERMINAL, staticData); 3330cfd74d65d832137e20e193c960802afba73b5d38sm } 3331cfd74d65d832137e20e193c960802afba73b5d38sm 3332cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 3333cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_OBJECT); 3334cfd74d65d832137e20e193c960802afba73b5d38sm 3335cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 3336cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 3337cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 3338cfd74d65d832137e20e193c960802afba73b5d38sm 3339cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 3340cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 3341cfd74d65d832137e20e193c960802afba73b5d38sm 3342cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 3343cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setSpawnGameEventOnHit(HitType.COLLECT, GameFlowEvent.EVENT_SHOW_DIALOG_CHARACTER2, 0); 3344cfd74d65d832137e20e193c960802afba73b5d38sm 3345cfd74d65d832137e20e193c960802afba73b5d38sm SelectDialogComponent dialogSelect = (SelectDialogComponent)allocateComponent(SelectDialogComponent.class); 3346cfd74d65d832137e20e193c960802afba73b5d38sm dialogSelect.setHitReact(hitReact); 3347cfd74d65d832137e20e193c960802afba73b5d38sm 3348cfd74d65d832137e20e193c960802afba73b5d38sm dynamicCollision.setHitReactionComponent(hitReact); 3349cfd74d65d832137e20e193c960802afba73b5d38sm 3350cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dialogSelect); 3351cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 3352cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 3353cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 3354cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 3355cfd74d65d832137e20e193c960802afba73b5d38sm 3356cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.ROKUDOU_TERMINAL, object, sprite); 3357cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 3358cfd74d65d832137e20e193c960802afba73b5d38sm 3359cfd74d65d832137e20e193c960802afba73b5d38sm return object; 3360cfd74d65d832137e20e193c960802afba73b5d38sm } 3361cfd74d65d832137e20e193c960802afba73b5d38sm 3362cfd74d65d832137e20e193c960802afba73b5d38sm 3363cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnKabochaTerminal(float positionX, float positionY) { 3364cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 3365cfd74d65d832137e20e193c960802afba73b5d38sm 3366cfd74d65d832137e20e193c960802afba73b5d38sm 3367cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 3368cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 3369cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 3370cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 3371cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 3372cfd74d65d832137e20e193c960802afba73b5d38sm 3373cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.KABOCHA_TERMINAL); 3374cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 3375cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 1; 3376cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 3377cfd74d65d832137e20e193c960802afba73b5d38sm 3378cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = new FixedSizeArray<CollisionVolume>(1); 3379cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new AABoxCollisionVolume(0, 0, 64, 64)); 3380cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.get(0).setHitType(HitType.COLLECT); 3381cfd74d65d832137e20e193c960802afba73b5d38sm 3382cfd74d65d832137e20e193c960802afba73b5d38sm 3383cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame1 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_terminal_kabocha01), 3384cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume); 3385cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame2 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_terminal_kabocha02), 3386cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume); 3387cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame3 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_terminal_kabocha03), 3388cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume); 3389cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame4 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_terminal_kabocha01), 3390cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 3391cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame5 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_terminal_kabocha02), 3392cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 3393cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame6 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_terminal_kabocha01), 3394cfd74d65d832137e20e193c960802afba73b5d38sm 1.0f, null, basicVulnerabilityVolume); 3395cfd74d65d832137e20e193c960802afba73b5d38sm 3396cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 12); 3397cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame1); 3398cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame5); 3399cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame4); 3400cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame3); 3401cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame2); 3402cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame6); 3403cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame6); 3404cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame3); 3405cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame2); 3406cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame1); 3407cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame2); 3408cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame6); 3409cfd74d65d832137e20e193c960802afba73b5d38sm 3410cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 3411cfd74d65d832137e20e193c960802afba73b5d38sm 3412cfd74d65d832137e20e193c960802afba73b5d38sm 3413cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 3414cfd74d65d832137e20e193c960802afba73b5d38sm 3415cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.KABOCHA_TERMINAL, staticData); 3416cfd74d65d832137e20e193c960802afba73b5d38sm } 3417cfd74d65d832137e20e193c960802afba73b5d38sm 3418cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 3419cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_OBJECT); 3420cfd74d65d832137e20e193c960802afba73b5d38sm 3421cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 3422cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 3423cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 3424cfd74d65d832137e20e193c960802afba73b5d38sm 3425cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 3426cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 3427cfd74d65d832137e20e193c960802afba73b5d38sm 3428cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 3429cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setSpawnGameEventOnHit(HitType.COLLECT, GameFlowEvent.EVENT_SHOW_DIALOG_CHARACTER2, 0); 3430cfd74d65d832137e20e193c960802afba73b5d38sm 3431cfd74d65d832137e20e193c960802afba73b5d38sm SelectDialogComponent dialogSelect = (SelectDialogComponent)allocateComponent(SelectDialogComponent.class); 3432cfd74d65d832137e20e193c960802afba73b5d38sm dialogSelect.setHitReact(hitReact); 3433cfd74d65d832137e20e193c960802afba73b5d38sm 3434cfd74d65d832137e20e193c960802afba73b5d38sm dynamicCollision.setHitReactionComponent(hitReact); 3435cfd74d65d832137e20e193c960802afba73b5d38sm 3436cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dialogSelect); 3437cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 3438cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 3439cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 3440cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 3441cfd74d65d832137e20e193c960802afba73b5d38sm 3442cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.KABOCHA_TERMINAL, object, sprite); 3443cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 3444cfd74d65d832137e20e193c960802afba73b5d38sm 3445cfd74d65d832137e20e193c960802afba73b5d38sm return object; 3446cfd74d65d832137e20e193c960802afba73b5d38sm } 3447cfd74d65d832137e20e193c960802afba73b5d38sm 3448cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemyEvilKabocha(float positionX, float positionY, boolean flipHorizontal) { 3449cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 3450cfd74d65d832137e20e193c960802afba73b5d38sm 3451cfd74d65d832137e20e193c960802afba73b5d38sm 3452cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 3453cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 3454cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mNormalActivationRadius; 3455cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 128; 3456cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 128; 3457cfd74d65d832137e20e193c960802afba73b5d38sm 3458cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.EVIL_KABOCHA); 3459cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 3460cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 8; 3461cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 3462cfd74d65d832137e20e193c960802afba73b5d38sm 3463cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent gravity = allocateComponent(GravityComponent.class); 3464cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 3465cfd74d65d832137e20e193c960802afba73b5d38sm 3466cfd74d65d832137e20e193c960802afba73b5d38sm SimplePhysicsComponent physics = (SimplePhysicsComponent)allocateComponent(SimplePhysicsComponent.class); 3467cfd74d65d832137e20e193c960802afba73b5d38sm physics.setBounciness(0.0f); 3468cfd74d65d832137e20e193c960802afba73b5d38sm 3469cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 3470cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 3471cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new AABoxCollisionVolume(52, 5, 26, 80, HitType.HIT)); 3472cfd74d65d832137e20e193c960802afba73b5d38sm 3473cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(NPCAnimationComponent.IDLE, 1); 3474cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 3475cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_stand), 3476cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 3477cfd74d65d832137e20e193c960802afba73b5d38sm 3478cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame1 = new AnimationFrame( 3479cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_walk01), 3480cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume); 3481cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame2 = new AnimationFrame( 3482cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_walk02), 3483cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume); 3484cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame3 = new AnimationFrame( 3485cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_walk03), 3486cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume); 3487cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame4 = new AnimationFrame( 3488cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_walk04), 3489cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume); 3490cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame5 = new AnimationFrame( 3491cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_walk05), 3492cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume); 3493cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame walkFrame6 = new AnimationFrame( 3494cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_walk06), 3495cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 3), null, basicVulnerabilityVolume); 3496cfd74d65d832137e20e193c960802afba73b5d38sm 3497cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation walk = new SpriteAnimation(NPCAnimationComponent.WALK, 6); 3498cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame1); 3499cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame2); 3500cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame3); 3501cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame4); 3502cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame5); 3503cfd74d65d832137e20e193c960802afba73b5d38sm walk.addFrame(walkFrame6); 3504cfd74d65d832137e20e193c960802afba73b5d38sm 3505cfd74d65d832137e20e193c960802afba73b5d38sm walk.setLoop(true); 3506cfd74d65d832137e20e193c960802afba73b5d38sm 3507cfd74d65d832137e20e193c960802afba73b5d38sm 3508cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation surprised = new SpriteAnimation(NPCAnimationComponent.SURPRISED, 1); 3509cfd74d65d832137e20e193c960802afba73b5d38sm surprised.addFrame(new AnimationFrame( 3510cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_surprised), 3511cfd74d65d832137e20e193c960802afba73b5d38sm 4.0f, null, null)); 3512cfd74d65d832137e20e193c960802afba73b5d38sm 3513cfd74d65d832137e20e193c960802afba73b5d38sm 3514cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation hit = new SpriteAnimation(NPCAnimationComponent.TAKE_HIT, 2); 3515cfd74d65d832137e20e193c960802afba73b5d38sm hit.addFrame(new AnimationFrame( 3516cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_hit01), 3517cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null)); 3518cfd74d65d832137e20e193c960802afba73b5d38sm hit.addFrame(new AnimationFrame( 3519cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_hit02), 3520cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 10), null, null)); 3521cfd74d65d832137e20e193c960802afba73b5d38sm 3522cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation die = new SpriteAnimation(NPCAnimationComponent.DEATH, 5); 3523cfd74d65d832137e20e193c960802afba73b5d38sm die.addFrame(new AnimationFrame( 3524cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_die01), 3525cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 6), null, null)); 3526cfd74d65d832137e20e193c960802afba73b5d38sm die.addFrame(new AnimationFrame( 3527cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_stand), 3528cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 3529cfd74d65d832137e20e193c960802afba73b5d38sm die.addFrame(new AnimationFrame( 3530cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_die02), 3531cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 3532cfd74d65d832137e20e193c960802afba73b5d38sm die.addFrame(new AnimationFrame( 3533cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_die03), 3534cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 3535cfd74d65d832137e20e193c960802afba73b5d38sm die.addFrame(new AnimationFrame( 3536cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_kabocha_evil_die04), 3537cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 6), null, null)); 3538cfd74d65d832137e20e193c960802afba73b5d38sm 3539cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(gravity); 3540cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 3541cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(physics); 3542cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 3543cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(walk); 3544cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(surprised); 3545cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(hit); 3546cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(die); 3547cfd74d65d832137e20e193c960802afba73b5d38sm 3548cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.EVIL_KABOCHA, staticData); 3549cfd74d65d832137e20e193c960802afba73b5d38sm } 3550cfd74d65d832137e20e193c960802afba73b5d38sm 3551cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 3552cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.NPC); 3553cfd74d65d832137e20e193c960802afba73b5d38sm 3554cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 3555cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(38, 82); 3556cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(45, 5); 3557cfd74d65d832137e20e193c960802afba73b5d38sm 3558cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 3559cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 3560cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 3561cfd74d65d832137e20e193c960802afba73b5d38sm 3562cfd74d65d832137e20e193c960802afba73b5d38sm NPCAnimationComponent animation = (NPCAnimationComponent)allocateComponent(NPCAnimationComponent.class); 3563cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 3564cfd74d65d832137e20e193c960802afba73b5d38sm 3565cfd74d65d832137e20e193c960802afba73b5d38sm ChannelSystem.Channel surpriseChannel = null; 3566cfd74d65d832137e20e193c960802afba73b5d38sm ChannelSystem channelSystem = BaseObject.sSystemRegistry.channelSystem; 3567cfd74d65d832137e20e193c960802afba73b5d38sm surpriseChannel = channelSystem.registerChannel(sSurprisedNPCChannel); 3568cfd74d65d832137e20e193c960802afba73b5d38sm animation.setChannel(surpriseChannel); 3569cfd74d65d832137e20e193c960802afba73b5d38sm animation.setChannelTrigger(NPCAnimationComponent.SURPRISED); 3570cfd74d65d832137e20e193c960802afba73b5d38sm 3571cfd74d65d832137e20e193c960802afba73b5d38sm NPCComponent patrol = (NPCComponent)allocateComponent(NPCComponent.class); 3572cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setSpeeds(50.0f, 50.0f, 0.0f, -10.0f, 200.0f); 3573cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setReactToHits(true); 3574cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setGameEvent(GameFlowEvent.EVENT_SHOW_ANIMATION, AnimationPlayerActivity.ROKUDOU_ENDING, true); 3575cfd74d65d832137e20e193c960802afba73b5d38sm 3576cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 3577cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 3578cfd74d65d832137e20e193c960802afba73b5d38sm 3579cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 3580cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 3581cfd74d65d832137e20e193c960802afba73b5d38sm 3582cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = sSystemRegistry.soundSystem; 3583cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 3584cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setTakeHitSound(HitType.HIT, sound.load(R.raw.sound_kabocha_hit)); 3585cfd74d65d832137e20e193c960802afba73b5d38sm } 3586cfd74d65d832137e20e193c960802afba73b5d38sm 3587cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setHitReactionComponent(hitReact); 3588cfd74d65d832137e20e193c960802afba73b5d38sm 3589cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 3590cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 3; 3591cfd74d65d832137e20e193c960802afba73b5d38sm 3592cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 3593cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 3594cfd74d65d832137e20e193c960802afba73b5d38sm } 3595cfd74d65d832137e20e193c960802afba73b5d38sm 3596cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 3597cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 3598cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 3599cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 3600cfd74d65d832137e20e193c960802afba73b5d38sm object.add(patrol); 3601cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 3602cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 3603cfd74d65d832137e20e193c960802afba73b5d38sm 3604cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.EVIL_KABOCHA, object, sprite); 3605cfd74d65d832137e20e193c960802afba73b5d38sm 3606cfd74d65d832137e20e193c960802afba73b5d38sm 3607cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 3608cfd74d65d832137e20e193c960802afba73b5d38sm 3609cfd74d65d832137e20e193c960802afba73b5d38sm return object; 3610cfd74d65d832137e20e193c960802afba73b5d38sm } 3611cfd74d65d832137e20e193c960802afba73b5d38sm 3612cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnemyRokudou(float positionX, float positionY, boolean flipHorizontal) { 3613cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 3614cfd74d65d832137e20e193c960802afba73b5d38sm 3615cfd74d65d832137e20e193c960802afba73b5d38sm // Make sure related textures are loaded. 3616cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball01); 3617cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball02); 3618cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball03); 3619cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball04); 3620cfd74d65d832137e20e193c960802afba73b5d38sm 3621cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_bullet01); 3622cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_bullet02); 3623cfd74d65d832137e20e193c960802afba73b5d38sm 3624cfd74d65d832137e20e193c960802afba73b5d38sm 3625cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 3626cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 3627cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mNormalActivationRadius; 3628cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 128; 3629cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 128; 3630cfd74d65d832137e20e193c960802afba73b5d38sm 3631cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.ROKUDOU); 3632cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 3633cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 8; 3634cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 3635cfd74d65d832137e20e193c960802afba73b5d38sm 3636cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 3637cfd74d65d832137e20e193c960802afba73b5d38sm 3638cfd74d65d832137e20e193c960802afba73b5d38sm SimplePhysicsComponent physics = (SimplePhysicsComponent)allocateComponent(SimplePhysicsComponent.class); 3639cfd74d65d832137e20e193c960802afba73b5d38sm physics.setBounciness(0.0f); 3640cfd74d65d832137e20e193c960802afba73b5d38sm 3641cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 3642cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 3643cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new AABoxCollisionVolume(45, 23, 42, 75, HitType.HIT)); 3644cfd74d65d832137e20e193c960802afba73b5d38sm 3645cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(NPCAnimationComponent.IDLE, 1); 3646cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 3647cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_rokudou_fight_stand), 3648cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 3649cfd74d65d832137e20e193c960802afba73b5d38sm 3650cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation fly = new SpriteAnimation(NPCAnimationComponent.WALK, 2); 3651cfd74d65d832137e20e193c960802afba73b5d38sm fly.addFrame(new AnimationFrame( 3652cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_rokudou_fight_fly01), 3653cfd74d65d832137e20e193c960802afba73b5d38sm 1.0f, null, basicVulnerabilityVolume)); 3654cfd74d65d832137e20e193c960802afba73b5d38sm fly.addFrame(new AnimationFrame( 3655cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_rokudou_fight_fly02), 3656cfd74d65d832137e20e193c960802afba73b5d38sm 1.0f, null, basicVulnerabilityVolume)); 3657cfd74d65d832137e20e193c960802afba73b5d38sm fly.setLoop(true); 3658cfd74d65d832137e20e193c960802afba73b5d38sm 3659cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation shoot = new SpriteAnimation(NPCAnimationComponent.SHOOT, 2); 3660cfd74d65d832137e20e193c960802afba73b5d38sm shoot.addFrame(new AnimationFrame( 3661cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_rokudou_fight_shoot01), 3662cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 3663cfd74d65d832137e20e193c960802afba73b5d38sm shoot.addFrame(new AnimationFrame( 3664cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_rokudou_fight_shoot02), 3665cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 3666cfd74d65d832137e20e193c960802afba73b5d38sm shoot.setLoop(true); 3667cfd74d65d832137e20e193c960802afba73b5d38sm 3668cfd74d65d832137e20e193c960802afba73b5d38sm 3669cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation surprised = new SpriteAnimation(NPCAnimationComponent.SURPRISED, 1); 3670cfd74d65d832137e20e193c960802afba73b5d38sm surprised.addFrame(new AnimationFrame( 3671cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_rokudou_fight_surprise), 3672cfd74d65d832137e20e193c960802afba73b5d38sm 4.0f, null, null)); 3673cfd74d65d832137e20e193c960802afba73b5d38sm 3674cfd74d65d832137e20e193c960802afba73b5d38sm 3675cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation hit = new SpriteAnimation(NPCAnimationComponent.TAKE_HIT, 7); 3676cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame hitFrame1 = new AnimationFrame( 3677cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_rokudou_fight_hit01), 3678cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null); 3679cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame hitFrame2 = new AnimationFrame( 3680cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_rokudou_fight_hit02), 3681cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null); 3682cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame hitFrame3 = new AnimationFrame( 3683cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_rokudou_fight_hit03), 3684cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null); 3685cfd74d65d832137e20e193c960802afba73b5d38sm 3686cfd74d65d832137e20e193c960802afba73b5d38sm hit.addFrame(hitFrame1); 3687cfd74d65d832137e20e193c960802afba73b5d38sm hit.addFrame(hitFrame2); 3688cfd74d65d832137e20e193c960802afba73b5d38sm hit.addFrame(hitFrame3); 3689cfd74d65d832137e20e193c960802afba73b5d38sm hit.addFrame(hitFrame2); 3690cfd74d65d832137e20e193c960802afba73b5d38sm hit.addFrame(hitFrame3); 3691cfd74d65d832137e20e193c960802afba73b5d38sm hit.addFrame(hitFrame2); 3692cfd74d65d832137e20e193c960802afba73b5d38sm hit.addFrame(hitFrame3); 3693cfd74d65d832137e20e193c960802afba73b5d38sm 3694cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation die = new SpriteAnimation(NPCAnimationComponent.DEATH, 5); 3695cfd74d65d832137e20e193c960802afba73b5d38sm die.addFrame(new AnimationFrame( 3696cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_rokudou_fight_stand), 3697cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 6), null, null)); 3698cfd74d65d832137e20e193c960802afba73b5d38sm die.addFrame(new AnimationFrame( 3699cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_rokudou_fight_die01), 3700cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, null)); 3701cfd74d65d832137e20e193c960802afba73b5d38sm die.addFrame(new AnimationFrame( 3702cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_rokudou_fight_die02), 3703cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 4), null, null)); 3704cfd74d65d832137e20e193c960802afba73b5d38sm die.addFrame(new AnimationFrame( 3705cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_rokudou_fight_die03), 3706cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 6), null, null)); 3707cfd74d65d832137e20e193c960802afba73b5d38sm die.addFrame(new AnimationFrame( 3708cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_rokudou_fight_die04), 3709cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 6), null, null)); 3710cfd74d65d832137e20e193c960802afba73b5d38sm 3711cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 3712cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(physics); 3713cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 3714cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(fly); 3715cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(surprised); 3716cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(hit); 3717cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(die); 3718cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(shoot); 3719cfd74d65d832137e20e193c960802afba73b5d38sm 3720cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.ROKUDOU, staticData); 3721cfd74d65d832137e20e193c960802afba73b5d38sm } 3722cfd74d65d832137e20e193c960802afba73b5d38sm 3723cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 3724cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.NPC); 3725cfd74d65d832137e20e193c960802afba73b5d38sm 3726cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 3727cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(45, 75); 3728cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(45, 23); 3729cfd74d65d832137e20e193c960802afba73b5d38sm 3730cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 3731cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 3732cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 3733cfd74d65d832137e20e193c960802afba73b5d38sm 3734cfd74d65d832137e20e193c960802afba73b5d38sm 3735cfd74d65d832137e20e193c960802afba73b5d38sm 3736cfd74d65d832137e20e193c960802afba73b5d38sm NPCAnimationComponent animation = (NPCAnimationComponent)allocateComponent(NPCAnimationComponent.class); 3737cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 3738cfd74d65d832137e20e193c960802afba73b5d38sm animation.setFlying(true); 3739cfd74d65d832137e20e193c960802afba73b5d38sm 3740cfd74d65d832137e20e193c960802afba73b5d38sm ChannelSystem.Channel surpriseChannel = null; 3741cfd74d65d832137e20e193c960802afba73b5d38sm ChannelSystem channelSystem = BaseObject.sSystemRegistry.channelSystem; 3742cfd74d65d832137e20e193c960802afba73b5d38sm surpriseChannel = channelSystem.registerChannel(sSurprisedNPCChannel); 3743cfd74d65d832137e20e193c960802afba73b5d38sm animation.setChannel(surpriseChannel); 3744cfd74d65d832137e20e193c960802afba73b5d38sm animation.setChannelTrigger(NPCAnimationComponent.SURPRISED); 3745cfd74d65d832137e20e193c960802afba73b5d38sm 3746cfd74d65d832137e20e193c960802afba73b5d38sm NPCComponent patrol = (NPCComponent)allocateComponent(NPCComponent.class); 3747cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setSpeeds(500.0f, 100.0f, 100.0f, -100.0f, 400.0f); 3748cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setFlying(true); 3749cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setReactToHits(true); 3750cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setGameEvent(GameFlowEvent.EVENT_SHOW_ANIMATION, AnimationPlayerActivity.KABOCHA_ENDING, true); 3751cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setPauseOnAttack(false); 3752cfd74d65d832137e20e193c960802afba73b5d38sm 3753cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 3754cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 3755cfd74d65d832137e20e193c960802afba73b5d38sm 3756cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 3757cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 3758cfd74d65d832137e20e193c960802afba73b5d38sm 3759cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = sSystemRegistry.soundSystem; 3760cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 3761cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setTakeHitSound(HitType.HIT, sound.load(R.raw.sound_rokudou_hit)); 3762cfd74d65d832137e20e193c960802afba73b5d38sm } 3763cfd74d65d832137e20e193c960802afba73b5d38sm 3764cfd74d65d832137e20e193c960802afba73b5d38sm patrol.setHitReactionComponent(hitReact); 3765cfd74d65d832137e20e193c960802afba73b5d38sm 3766cfd74d65d832137e20e193c960802afba73b5d38sm ChangeComponentsComponent deathSwap = (ChangeComponentsComponent)allocateComponent(ChangeComponentsComponent.class); 3767cfd74d65d832137e20e193c960802afba73b5d38sm deathSwap.addSwapInComponent(allocateComponent(GravityComponent.class)); 3768cfd74d65d832137e20e193c960802afba73b5d38sm deathSwap.setSwapAction(ActionType.DEATH); 3769cfd74d65d832137e20e193c960802afba73b5d38sm 3770cfd74d65d832137e20e193c960802afba73b5d38sm LaunchProjectileComponent gun 3771cfd74d65d832137e20e193c960802afba73b5d38sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 3772cfd74d65d832137e20e193c960802afba73b5d38sm gun.setShotsPerSet(1); 3773cfd74d65d832137e20e193c960802afba73b5d38sm gun.setSetsPerActivation(-1); 3774cfd74d65d832137e20e193c960802afba73b5d38sm gun.setDelayBetweenSets(1.5f); 3775cfd74d65d832137e20e193c960802afba73b5d38sm gun.setObjectTypeToSpawn(GameObjectType.ENERGY_BALL); 3776cfd74d65d832137e20e193c960802afba73b5d38sm gun.setOffsetX(75); 3777cfd74d65d832137e20e193c960802afba73b5d38sm gun.setOffsetY(42); 3778cfd74d65d832137e20e193c960802afba73b5d38sm gun.setRequiredAction(GameObject.ActionType.ATTACK); 3779cfd74d65d832137e20e193c960802afba73b5d38sm gun.setVelocityX(300.0f); 3780cfd74d65d832137e20e193c960802afba73b5d38sm gun.setVelocityY(-300.0f); 3781cfd74d65d832137e20e193c960802afba73b5d38sm gun.setShootSound(sound.load(R.raw.sound_poing)); 3782cfd74d65d832137e20e193c960802afba73b5d38sm 3783cfd74d65d832137e20e193c960802afba73b5d38sm 3784cfd74d65d832137e20e193c960802afba73b5d38sm LaunchProjectileComponent gun2 3785cfd74d65d832137e20e193c960802afba73b5d38sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 3786cfd74d65d832137e20e193c960802afba73b5d38sm gun2.setShotsPerSet(5); 3787cfd74d65d832137e20e193c960802afba73b5d38sm gun2.setDelayBetweenShots(0.1f); 3788cfd74d65d832137e20e193c960802afba73b5d38sm gun2.setSetsPerActivation(-1); 3789cfd74d65d832137e20e193c960802afba73b5d38sm gun2.setDelayBetweenSets(2.5f); 3790cfd74d65d832137e20e193c960802afba73b5d38sm gun2.setObjectTypeToSpawn(GameObjectType.TURRET_BULLET); 3791cfd74d65d832137e20e193c960802afba73b5d38sm gun2.setOffsetX(75); 3792cfd74d65d832137e20e193c960802afba73b5d38sm gun2.setOffsetY(42); 3793cfd74d65d832137e20e193c960802afba73b5d38sm gun2.setRequiredAction(GameObject.ActionType.ATTACK); 3794cfd74d65d832137e20e193c960802afba73b5d38sm gun2.setVelocityX(300.0f); 3795cfd74d65d832137e20e193c960802afba73b5d38sm gun2.setVelocityY(-300.0f); 3796cfd74d65d832137e20e193c960802afba73b5d38sm gun.setShootSound(sound.load(R.raw.sound_gun)); 3797cfd74d65d832137e20e193c960802afba73b5d38sm 3798cfd74d65d832137e20e193c960802afba73b5d38sm 3799cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 3800cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 3; 3801cfd74d65d832137e20e193c960802afba73b5d38sm 3802cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 3803cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 3804cfd74d65d832137e20e193c960802afba73b5d38sm } 3805cfd74d65d832137e20e193c960802afba73b5d38sm 3806cfd74d65d832137e20e193c960802afba73b5d38sm // HACK! Since there's no gravity and this is a big character, align him to the floor 3807cfd74d65d832137e20e193c960802afba73b5d38sm // manually. 3808cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().y -= 23; 3809cfd74d65d832137e20e193c960802afba73b5d38sm 3810cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 3811cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 3812cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 3813cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 3814cfd74d65d832137e20e193c960802afba73b5d38sm object.add(patrol); 3815cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 3816cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 3817cfd74d65d832137e20e193c960802afba73b5d38sm object.add(deathSwap); 3818cfd74d65d832137e20e193c960802afba73b5d38sm object.add(gun); 3819cfd74d65d832137e20e193c960802afba73b5d38sm object.add(gun2); 3820cfd74d65d832137e20e193c960802afba73b5d38sm 3821cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.ROKUDOU, object, sprite); 3822cfd74d65d832137e20e193c960802afba73b5d38sm 3823cfd74d65d832137e20e193c960802afba73b5d38sm 3824cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 3825cfd74d65d832137e20e193c960802afba73b5d38sm 3826cfd74d65d832137e20e193c960802afba73b5d38sm return object; 3827cfd74d65d832137e20e193c960802afba73b5d38sm } 3828cfd74d65d832137e20e193c960802afba73b5d38sm 3829cfd74d65d832137e20e193c960802afba73b5d38sm 3830cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnPlayerGhost(float positionX, float positionY, GameObject player, float lifeTime) { 3831cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.longTermTextureLibrary; 3832cfd74d65d832137e20e193c960802afba73b5d38sm 3833cfd74d65d832137e20e193c960802afba73b5d38sm 3834cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 3835cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 3836cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mAlwaysActive; 3837cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 3838cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 3839cfd74d65d832137e20e193c960802afba73b5d38sm 3840cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.GHOST); 3841cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 3842cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 4; 3843cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 3844cfd74d65d832137e20e193c960802afba73b5d38sm 3845cfd74d65d832137e20e193c960802afba73b5d38sm //GravityComponent gravity = (GravityComponent)allocateComponent(GravityComponent.class); 3846cfd74d65d832137e20e193c960802afba73b5d38sm //gravity.setGravityMultiplier(0.1f); 3847cfd74d65d832137e20e193c960802afba73b5d38sm 3848cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 3849cfd74d65d832137e20e193c960802afba73b5d38sm SimplePhysicsComponent physics = (SimplePhysicsComponent)allocateComponent(SimplePhysicsComponent.class); 3850cfd74d65d832137e20e193c960802afba73b5d38sm physics.setBounciness(0.6f); 3851cfd74d65d832137e20e193c960802afba73b5d38sm 3852cfd74d65d832137e20e193c960802afba73b5d38sm GhostComponent ghost = (GhostComponent)allocateComponent(GhostComponent.class); 3853cfd74d65d832137e20e193c960802afba73b5d38sm ghost.setMovementSpeed(2000.0f); 38549d4cc2572d37983607df38b0f4216ed76ac51814sm ghost.setAcceleration(700.0f); //300 3855cfd74d65d832137e20e193c960802afba73b5d38sm ghost.setUseOrientationSensor(true); 3856cfd74d65d832137e20e193c960802afba73b5d38sm ghost.setKillOnRelease(true); 3857cfd74d65d832137e20e193c960802afba73b5d38sm 3858cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = BaseObject.sSystemRegistry.soundSystem; 3859cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 3860cfd74d65d832137e20e193c960802afba73b5d38sm ghost.setAmbientSound(sound.load(R.raw.sound_possession)); 3861cfd74d65d832137e20e193c960802afba73b5d38sm } 3862cfd74d65d832137e20e193c960802afba73b5d38sm 3863cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = 3864cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 3865cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(32, 32, 32, HitType.POSSESS)); 3866cfd74d65d832137e20e193c960802afba73b5d38sm 3867cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 4); 3868cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 3869cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_energyball01), 3870cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 3871cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 3872cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_energyball02), 3873cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 3874cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 3875cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_energyball03), 3876cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 3877cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 3878cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_energyball04), 3879cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 3880cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 3881cfd74d65d832137e20e193c960802afba73b5d38sm 3882cfd74d65d832137e20e193c960802afba73b5d38sm //staticData.add(gravity); 3883cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 3884cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(physics); 3885cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(ghost); 3886cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 3887cfd74d65d832137e20e193c960802afba73b5d38sm 3888cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.GHOST, staticData); 3889cfd74d65d832137e20e193c960802afba73b5d38sm } 3890cfd74d65d832137e20e193c960802afba73b5d38sm 3891cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 3892cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.PROJECTILE); 3893cfd74d65d832137e20e193c960802afba73b5d38sm 3894cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 3895cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(64, 64); 3896cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(0, 0); 3897cfd74d65d832137e20e193c960802afba73b5d38sm 3898cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 3899cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 3900cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 3901cfd74d65d832137e20e193c960802afba73b5d38sm 3902cfd74d65d832137e20e193c960802afba73b5d38sm 3903cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 3904cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 3905cfd74d65d832137e20e193c960802afba73b5d38sm 3906cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 3907cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setDieOnAttack(true); 3908cfd74d65d832137e20e193c960802afba73b5d38sm 3909cfd74d65d832137e20e193c960802afba73b5d38sm dynamicCollision.setHitReactionComponent(hitReact); 3910cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent life = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 3911cfd74d65d832137e20e193c960802afba73b5d38sm // when the ghost dies it either releases itself or passes control to another object, so we 3912cfd74d65d832137e20e193c960802afba73b5d38sm // don't want control to return to the player. 3913cfd74d65d832137e20e193c960802afba73b5d38sm 3914cfd74d65d832137e20e193c960802afba73b5d38sm life.setReleaseGhostOnDeath(false); 3915cfd74d65d832137e20e193c960802afba73b5d38sm 3916cfd74d65d832137e20e193c960802afba73b5d38sm 3917cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 3918cfd74d65d832137e20e193c960802afba73b5d38sm 3919cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 3920cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 3921cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 3922cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 3923cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 3924cfd74d65d832137e20e193c960802afba73b5d38sm object.add(life); 3925cfd74d65d832137e20e193c960802afba73b5d38sm 3926cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.GHOST, object, sprite); 3927cfd74d65d832137e20e193c960802afba73b5d38sm 3928cfd74d65d832137e20e193c960802afba73b5d38sm object.commitUpdates(); 3929cfd74d65d832137e20e193c960802afba73b5d38sm 3930cfd74d65d832137e20e193c960802afba73b5d38sm GhostComponent ghost = object.findByClass(GhostComponent.class); 3931cfd74d65d832137e20e193c960802afba73b5d38sm if (ghost != null) { 3932cfd74d65d832137e20e193c960802afba73b5d38sm ghost.setLifeTime(lifeTime); 3933cfd74d65d832137e20e193c960802afba73b5d38sm } 3934cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 3935cfd74d65d832137e20e193c960802afba73b5d38sm 3936cfd74d65d832137e20e193c960802afba73b5d38sm return object; 3937cfd74d65d832137e20e193c960802afba73b5d38sm } 3938cfd74d65d832137e20e193c960802afba73b5d38sm 3939cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEnergyBall(float positionX, float positionY, boolean flipHorizontal) { 3940cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 3941cfd74d65d832137e20e193c960802afba73b5d38sm 3942cfd74d65d832137e20e193c960802afba73b5d38sm 3943cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 3944cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 3945cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 3946cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 32; 3947cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 3948cfd74d65d832137e20e193c960802afba73b5d38sm 3949cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.ENERGY_BALL); 3950cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 3951cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 3952cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 3953cfd74d65d832137e20e193c960802afba73b5d38sm 3954cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 3955cfd74d65d832137e20e193c960802afba73b5d38sm 3956cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = 3957cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 3958cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(16, 16, 16, HitType.HIT)); 3959cfd74d65d832137e20e193c960802afba73b5d38sm 3960cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 4); 3961cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 3962cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball01), 3963cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 3964cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 3965cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball02), 3966cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 3967cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 3968cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball03), 3969cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 3970cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 3971cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball04), 3972cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 3973cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 3974cfd74d65d832137e20e193c960802afba73b5d38sm 3975cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 3976cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 3977cfd74d65d832137e20e193c960802afba73b5d38sm 3978cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.ENERGY_BALL, staticData); 3979cfd74d65d832137e20e193c960802afba73b5d38sm 3980cfd74d65d832137e20e193c960802afba73b5d38sm } 3981cfd74d65d832137e20e193c960802afba73b5d38sm 3982cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 3983cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.PROJECTILE); 3984cfd74d65d832137e20e193c960802afba73b5d38sm 3985cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 3986cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setTimeUntilDeath(5.0f); 3987cfd74d65d832137e20e193c960802afba73b5d38sm 3988cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 3989cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 3990cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 3991cfd74d65d832137e20e193c960802afba73b5d38sm 3992cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 3993cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 3994cfd74d65d832137e20e193c960802afba73b5d38sm 3995cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 3996cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setDieOnAttack(true); 3997cfd74d65d832137e20e193c960802afba73b5d38sm 3998cfd74d65d832137e20e193c960802afba73b5d38sm dynamicCollision.setHitReactionComponent(hitReact); 3999cfd74d65d832137e20e193c960802afba73b5d38sm 4000cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 4001cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 4002cfd74d65d832137e20e193c960802afba73b5d38sm object.destroyOnDeactivation = true; 4003cfd74d65d832137e20e193c960802afba73b5d38sm 4004cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 4005cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 4006cfd74d65d832137e20e193c960802afba73b5d38sm } 4007cfd74d65d832137e20e193c960802afba73b5d38sm 4008cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 4009cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 4010cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 4011cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 4012cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 4013cfd74d65d832137e20e193c960802afba73b5d38sm 4014cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.ENERGY_BALL, object, sprite); 4015cfd74d65d832137e20e193c960802afba73b5d38sm 4016cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 4017cfd74d65d832137e20e193c960802afba73b5d38sm 4018cfd74d65d832137e20e193c960802afba73b5d38sm return object; 4019cfd74d65d832137e20e193c960802afba73b5d38sm } 4020cfd74d65d832137e20e193c960802afba73b5d38sm 4021cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnWandaShot(float positionX, float positionY, boolean flipHorizontal) { 4022cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 4023cfd74d65d832137e20e193c960802afba73b5d38sm 4024cfd74d65d832137e20e193c960802afba73b5d38sm 4025cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 4026cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 4027cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 4028cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 32; 4029cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 4030cfd74d65d832137e20e193c960802afba73b5d38sm 4031cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.WANDA_SHOT); 4032cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 4033cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 4034cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 4035cfd74d65d832137e20e193c960802afba73b5d38sm 4036cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 4037cfd74d65d832137e20e193c960802afba73b5d38sm 4038cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = 4039cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 4040cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(16, 16, 16, HitType.HIT)); 4041cfd74d65d832137e20e193c960802afba73b5d38sm 4042cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 4); 4043cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 4044cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball01), 4045cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 4046cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 4047cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball02), 4048cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 4049cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 4050cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball03), 4051cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 4052cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 4053cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.energy_ball04), 4054cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 4055cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 4056cfd74d65d832137e20e193c960802afba73b5d38sm 4057cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 4058cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 4059cfd74d65d832137e20e193c960802afba73b5d38sm 4060cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.WANDA_SHOT, staticData); 4061cfd74d65d832137e20e193c960802afba73b5d38sm 4062cfd74d65d832137e20e193c960802afba73b5d38sm } 4063cfd74d65d832137e20e193c960802afba73b5d38sm 4064cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 4065cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.PROJECTILE); 4066cfd74d65d832137e20e193c960802afba73b5d38sm 4067cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 4068cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setTimeUntilDeath(5.0f); 4069cfd74d65d832137e20e193c960802afba73b5d38sm 4070cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 4071cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 4072cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 4073cfd74d65d832137e20e193c960802afba73b5d38sm 4074cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 4075cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 4076cfd74d65d832137e20e193c960802afba73b5d38sm 4077cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 4078cfd74d65d832137e20e193c960802afba73b5d38sm //hitReact.setDieOnAttack(true); 4079cfd74d65d832137e20e193c960802afba73b5d38sm 4080cfd74d65d832137e20e193c960802afba73b5d38sm dynamicCollision.setHitReactionComponent(hitReact); 4081cfd74d65d832137e20e193c960802afba73b5d38sm 4082cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 4083cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.NONE; 4084cfd74d65d832137e20e193c960802afba73b5d38sm object.destroyOnDeactivation = true; 4085cfd74d65d832137e20e193c960802afba73b5d38sm 4086cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 4087cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 4088cfd74d65d832137e20e193c960802afba73b5d38sm } 4089cfd74d65d832137e20e193c960802afba73b5d38sm 4090cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 4091cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 4092cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 4093cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 4094cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 4095cfd74d65d832137e20e193c960802afba73b5d38sm 4096cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.WANDA_SHOT, object, sprite); 4097cfd74d65d832137e20e193c960802afba73b5d38sm 4098cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 4099cfd74d65d832137e20e193c960802afba73b5d38sm 4100cfd74d65d832137e20e193c960802afba73b5d38sm return object; 4101cfd74d65d832137e20e193c960802afba73b5d38sm } 4102cfd74d65d832137e20e193c960802afba73b5d38sm 4103cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnCannonBall(float positionX, float positionY, boolean flipHorizontal) { 4104cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 4105cfd74d65d832137e20e193c960802afba73b5d38sm 4106cfd74d65d832137e20e193c960802afba73b5d38sm 4107cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 4108cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 4109cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 4110cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 32; 4111cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 4112cfd74d65d832137e20e193c960802afba73b5d38sm 4113cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.CANNON_BALL); 4114cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 4115cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 4116cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 4117cfd74d65d832137e20e193c960802afba73b5d38sm 4118cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 4119cfd74d65d832137e20e193c960802afba73b5d38sm 4120cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = 4121cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 4122cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(8, 16, 16, HitType.HIT)); 4123cfd74d65d832137e20e193c960802afba73b5d38sm 4124cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 1); 4125cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.snail_bomb), 4126cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 4127cfd74d65d832137e20e193c960802afba73b5d38sm 4128cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 4129cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 4130cfd74d65d832137e20e193c960802afba73b5d38sm 4131cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.CANNON_BALL, staticData); 4132cfd74d65d832137e20e193c960802afba73b5d38sm } 4133cfd74d65d832137e20e193c960802afba73b5d38sm 4134cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 4135cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.PROJECTILE); 4136cfd74d65d832137e20e193c960802afba73b5d38sm 4137cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 4138cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setTimeUntilDeath(3.0f); 4139cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setDieOnHitBackground(true); 4140cfd74d65d832137e20e193c960802afba73b5d38sm 4141cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 4142cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 4143cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 4144cfd74d65d832137e20e193c960802afba73b5d38sm 4145cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 4146cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 4147cfd74d65d832137e20e193c960802afba73b5d38sm 4148cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 4149cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setDieOnAttack(true); 4150cfd74d65d832137e20e193c960802afba73b5d38sm 4151cfd74d65d832137e20e193c960802afba73b5d38sm dynamicCollision.setHitReactionComponent(hitReact); 4152cfd74d65d832137e20e193c960802afba73b5d38sm 4153cfd74d65d832137e20e193c960802afba73b5d38sm SimpleCollisionComponent collision = (SimpleCollisionComponent)allocateComponent(SimpleCollisionComponent.class); 4154cfd74d65d832137e20e193c960802afba73b5d38sm 4155cfd74d65d832137e20e193c960802afba73b5d38sm 4156cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 4157cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 4158cfd74d65d832137e20e193c960802afba73b5d38sm object.destroyOnDeactivation = true; 4159cfd74d65d832137e20e193c960802afba73b5d38sm 4160cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 4161cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 4162cfd74d65d832137e20e193c960802afba73b5d38sm } 4163cfd74d65d832137e20e193c960802afba73b5d38sm 4164cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 4165cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 4166cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 4167cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 4168cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 4169cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 4170cfd74d65d832137e20e193c960802afba73b5d38sm 4171cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.CANNON_BALL, object, sprite); 4172cfd74d65d832137e20e193c960802afba73b5d38sm 4173cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 4174cfd74d65d832137e20e193c960802afba73b5d38sm 4175cfd74d65d832137e20e193c960802afba73b5d38sm return object; 4176cfd74d65d832137e20e193c960802afba73b5d38sm } 4177cfd74d65d832137e20e193c960802afba73b5d38sm 4178cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnTurretBullet(float positionX, float positionY, boolean flipHorizontal) { 4179cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 4180cfd74d65d832137e20e193c960802afba73b5d38sm 4181cfd74d65d832137e20e193c960802afba73b5d38sm 4182cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 4183cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 4184cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 4185cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 16; 4186cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 16; 4187cfd74d65d832137e20e193c960802afba73b5d38sm 4188cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.TURRET_BULLET); 4189cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 4190cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 4191cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 4192cfd74d65d832137e20e193c960802afba73b5d38sm 4193cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 4194cfd74d65d832137e20e193c960802afba73b5d38sm 4195cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = 4196cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 4197cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(8, 8, 8, HitType.HIT)); 4198cfd74d65d832137e20e193c960802afba73b5d38sm 4199cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 2); 4200cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.effect_bullet01), 4201cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 4202cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.effect_bullet02), 4203cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 4204cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 4205cfd74d65d832137e20e193c960802afba73b5d38sm 4206cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 4207cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 4208cfd74d65d832137e20e193c960802afba73b5d38sm 4209cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.TURRET_BULLET, staticData); 4210cfd74d65d832137e20e193c960802afba73b5d38sm } 4211cfd74d65d832137e20e193c960802afba73b5d38sm 4212cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 4213cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.PROJECTILE); 4214cfd74d65d832137e20e193c960802afba73b5d38sm 4215cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 4216cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setTimeUntilDeath(3.0f); 4217cfd74d65d832137e20e193c960802afba73b5d38sm 4218cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 4219cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 4220cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 4221cfd74d65d832137e20e193c960802afba73b5d38sm 4222cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 4223cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 4224cfd74d65d832137e20e193c960802afba73b5d38sm 4225cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 4226cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setDieOnAttack(true); 4227cfd74d65d832137e20e193c960802afba73b5d38sm 4228cfd74d65d832137e20e193c960802afba73b5d38sm dynamicCollision.setHitReactionComponent(hitReact); 4229cfd74d65d832137e20e193c960802afba73b5d38sm 4230cfd74d65d832137e20e193c960802afba73b5d38sm 4231cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 4232cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 4233cfd74d65d832137e20e193c960802afba73b5d38sm object.destroyOnDeactivation = true; 4234cfd74d65d832137e20e193c960802afba73b5d38sm 4235cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 4236cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 4237cfd74d65d832137e20e193c960802afba73b5d38sm } 4238cfd74d65d832137e20e193c960802afba73b5d38sm 4239cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 4240cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 4241cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 4242cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 4243cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 4244cfd74d65d832137e20e193c960802afba73b5d38sm 4245cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.TURRET_BULLET, object, sprite); 4246cfd74d65d832137e20e193c960802afba73b5d38sm 4247cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 4248cfd74d65d832137e20e193c960802afba73b5d38sm 4249cfd74d65d832137e20e193c960802afba73b5d38sm return object; 4250cfd74d65d832137e20e193c960802afba73b5d38sm } 4251cfd74d65d832137e20e193c960802afba73b5d38sm 4252cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnBrobotBullet(float positionX, float positionY, boolean flipHorizontal) { 4253cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 4254cfd74d65d832137e20e193c960802afba73b5d38sm 4255cfd74d65d832137e20e193c960802afba73b5d38sm 4256cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 4257cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 4258cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 4259cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 4260cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 4261cfd74d65d832137e20e193c960802afba73b5d38sm 4262cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.BROBOT_BULLET); 4263cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 4264cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 4265cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 4266cfd74d65d832137e20e193c960802afba73b5d38sm 4267cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 4268cfd74d65d832137e20e193c960802afba73b5d38sm 4269cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 3); 4270cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 4271cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_walk01), 4272cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null)); 4273cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 4274cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_walk02), 4275cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null)); 4276cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 4277cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_walk03), 4278cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null)); 4279cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 4280cfd74d65d832137e20e193c960802afba73b5d38sm 4281cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 4282cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 4283cfd74d65d832137e20e193c960802afba73b5d38sm 4284cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.BROBOT_BULLET, staticData); 4285cfd74d65d832137e20e193c960802afba73b5d38sm } 4286cfd74d65d832137e20e193c960802afba73b5d38sm 4287cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 4288cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.PROJECTILE); 4289cfd74d65d832137e20e193c960802afba73b5d38sm 4290cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 4291cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setTimeUntilDeath(3.0f); 4292cfd74d65d832137e20e193c960802afba73b5d38sm 4293cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 4294cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 4295cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 4296cfd74d65d832137e20e193c960802afba73b5d38sm 4297cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 4298cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 4299cfd74d65d832137e20e193c960802afba73b5d38sm object.destroyOnDeactivation = true; 4300cfd74d65d832137e20e193c960802afba73b5d38sm 4301cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 4302cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 4303cfd74d65d832137e20e193c960802afba73b5d38sm } 4304cfd74d65d832137e20e193c960802afba73b5d38sm 4305cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 4306cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 4307cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 4308cfd74d65d832137e20e193c960802afba73b5d38sm 4309cfd74d65d832137e20e193c960802afba73b5d38sm 4310cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.BROBOT_BULLET, object, sprite); 4311cfd74d65d832137e20e193c960802afba73b5d38sm 4312cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 4313cfd74d65d832137e20e193c960802afba73b5d38sm 4314cfd74d65d832137e20e193c960802afba73b5d38sm return object; 4315cfd74d65d832137e20e193c960802afba73b5d38sm } 4316cfd74d65d832137e20e193c960802afba73b5d38sm 4317cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnCoin(float positionX, float positionY) { 4318cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 4319cfd74d65d832137e20e193c960802afba73b5d38sm 4320cfd74d65d832137e20e193c960802afba73b5d38sm 4321cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 4322cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 4323cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 4324cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 16; 4325cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 16; 4326cfd74d65d832137e20e193c960802afba73b5d38sm 4327cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.COIN); 4328cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 4329cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 4330cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 4331cfd74d65d832137e20e193c960802afba73b5d38sm 4332cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = null; /*new FixedSizeArray<CollisionVolume>(1); 4333cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new SphereCollisionVolume(8, 8, 8)); 4334cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.get(0).setHitType(HitType.COLLECT);*/ 4335cfd74d65d832137e20e193c960802afba73b5d38sm 4336cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 5); 4337cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_coin01), 4338cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 30), null, basicVulnerabilityVolume)); 4339cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_coin02), 4340cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 4341cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_coin03), 4342cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 4343cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_coin04), 4344cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 4345cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_coin05), 4346cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 4347cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 4348cfd74d65d832137e20e193c960802afba73b5d38sm 4349cfd74d65d832137e20e193c960802afba73b5d38sm InventoryComponent.UpdateRecord addCoin = new InventoryComponent.UpdateRecord(); 4350cfd74d65d832137e20e193c960802afba73b5d38sm addCoin.coinCount = 1; 4351cfd74d65d832137e20e193c960802afba73b5d38sm 4352cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(addCoin); 4353cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 4354cfd74d65d832137e20e193c960802afba73b5d38sm 4355cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.COIN, staticData); 4356cfd74d65d832137e20e193c960802afba73b5d38sm } 4357cfd74d65d832137e20e193c960802afba73b5d38sm 4358cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 4359cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_OBJECT); 4360cfd74d65d832137e20e193c960802afba73b5d38sm 4361cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 4362cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 4363cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 4364cfd74d65d832137e20e193c960802afba73b5d38sm 4365cfd74d65d832137e20e193c960802afba73b5d38sm //DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 4366cfd74d65d832137e20e193c960802afba73b5d38sm //sprite.setCollisionComponent(dynamicCollision); 4367cfd74d65d832137e20e193c960802afba73b5d38sm 4368cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 4369cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setDieWhenCollected(true); 4370cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setInvincible(true); 4371cfd74d65d832137e20e193c960802afba73b5d38sm 4372cfd74d65d832137e20e193c960802afba73b5d38sm HitPlayerComponent hitPlayer = (HitPlayerComponent)allocateComponent(HitPlayerComponent.class); 4373cfd74d65d832137e20e193c960802afba73b5d38sm hitPlayer.setup(32, hitReact, HitType.COLLECT, false); 4374cfd74d65d832137e20e193c960802afba73b5d38sm 4375cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = sSystemRegistry.soundSystem; 4376cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 4377cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setTakeHitSound(HitType.COLLECT, sound.load(R.raw.ding)); 4378cfd74d65d832137e20e193c960802afba73b5d38sm } 4379cfd74d65d832137e20e193c960802afba73b5d38sm 4380cfd74d65d832137e20e193c960802afba73b5d38sm // TODO: this is pretty dumb. The static data binding needs to be made generic. 4381cfd74d65d832137e20e193c960802afba73b5d38sm final int staticDataSize = staticData.getCount(); 4382cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < staticDataSize; x++) { 4383cfd74d65d832137e20e193c960802afba73b5d38sm final BaseObject entry = staticData.get(x); 4384cfd74d65d832137e20e193c960802afba73b5d38sm if (entry instanceof InventoryComponent.UpdateRecord) { 4385cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setInventoryUpdate((InventoryComponent.UpdateRecord)entry); 4386cfd74d65d832137e20e193c960802afba73b5d38sm break; 4387cfd74d65d832137e20e193c960802afba73b5d38sm } 4388cfd74d65d832137e20e193c960802afba73b5d38sm } 4389cfd74d65d832137e20e193c960802afba73b5d38sm 4390cfd74d65d832137e20e193c960802afba73b5d38sm //dynamicCollision.setHitReactionComponent(hitReact); 4391cfd74d65d832137e20e193c960802afba73b5d38sm 4392cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent life = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 43932b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm life.setIncrementEventCounter(EventRecorder.COUNTER_PEARLS_COLLECTED); 43942b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 4395cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 4396cfd74d65d832137e20e193c960802afba73b5d38sm 4397cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 4398cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 4399cfd74d65d832137e20e193c960802afba73b5d38sm //object.add(dynamicCollision); 4400cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitPlayer); 4401cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 4402cfd74d65d832137e20e193c960802afba73b5d38sm object.add(life); 4403cfd74d65d832137e20e193c960802afba73b5d38sm 4404cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.COIN, object, sprite); 4405cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 44062b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 44072b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm EventRecorder recorder = sSystemRegistry.eventRecorder; 44082b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm recorder.incrementEventCounter(EventRecorder.COUNTER_PEARLS_TOTAL); 4409cfd74d65d832137e20e193c960802afba73b5d38sm 4410cfd74d65d832137e20e193c960802afba73b5d38sm return object; 4411cfd74d65d832137e20e193c960802afba73b5d38sm } 4412cfd74d65d832137e20e193c960802afba73b5d38sm 4413cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnRuby(float positionX, float positionY) { 4414cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 4415cfd74d65d832137e20e193c960802afba73b5d38sm 4416cfd74d65d832137e20e193c960802afba73b5d38sm 4417cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 4418cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 4419cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 4420cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 32; 4421cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 4422cfd74d65d832137e20e193c960802afba73b5d38sm 4423cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.RUBY); 4424cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 4425cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 4426cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 4427cfd74d65d832137e20e193c960802afba73b5d38sm 4428cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = new FixedSizeArray<CollisionVolume>(1); 4429cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new SphereCollisionVolume(16, 16, 16)); 4430cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.get(0).setHitType(HitType.COLLECT); 4431cfd74d65d832137e20e193c960802afba73b5d38sm 4432cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 5); 4433cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 4434cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_ruby01), 4435cfd74d65d832137e20e193c960802afba73b5d38sm 2.0f, null, basicVulnerabilityVolume)); 4436cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 4437cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_ruby02), 4438cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 4439cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 4440cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_ruby03), 4441cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 4442cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 4443cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_ruby04), 4444cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 4445cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 4446cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_ruby05), 4447cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 4448cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 4449cfd74d65d832137e20e193c960802afba73b5d38sm 4450cfd74d65d832137e20e193c960802afba73b5d38sm InventoryComponent.UpdateRecord addRuby = new InventoryComponent.UpdateRecord(); 4451cfd74d65d832137e20e193c960802afba73b5d38sm addRuby.rubyCount = 1; 4452cfd74d65d832137e20e193c960802afba73b5d38sm 4453cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(addRuby); 4454cfd74d65d832137e20e193c960802afba73b5d38sm 4455cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 4456cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.RUBY, staticData); 4457cfd74d65d832137e20e193c960802afba73b5d38sm } 4458cfd74d65d832137e20e193c960802afba73b5d38sm 4459cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 4460cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_OBJECT); 4461cfd74d65d832137e20e193c960802afba73b5d38sm 4462cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 4463cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 4464cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 4465cfd74d65d832137e20e193c960802afba73b5d38sm 4466cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 4467cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 4468cfd74d65d832137e20e193c960802afba73b5d38sm 4469cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 4470cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setDieWhenCollected(true); 4471cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setInvincible(true); 4472cfd74d65d832137e20e193c960802afba73b5d38sm // TODO: this is pretty dumb. The static data binding needs to be made generic. 4473cfd74d65d832137e20e193c960802afba73b5d38sm final int staticDataSize = staticData.getCount(); 4474cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < staticDataSize; x++) { 4475cfd74d65d832137e20e193c960802afba73b5d38sm final BaseObject entry = staticData.get(x); 4476cfd74d65d832137e20e193c960802afba73b5d38sm if (entry instanceof InventoryComponent.UpdateRecord) { 4477cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setInventoryUpdate((InventoryComponent.UpdateRecord)entry); 4478cfd74d65d832137e20e193c960802afba73b5d38sm break; 4479cfd74d65d832137e20e193c960802afba73b5d38sm } 4480cfd74d65d832137e20e193c960802afba73b5d38sm } 4481cfd74d65d832137e20e193c960802afba73b5d38sm 4482cfd74d65d832137e20e193c960802afba73b5d38sm dynamicCollision.setHitReactionComponent(hitReact); 4483cfd74d65d832137e20e193c960802afba73b5d38sm 4484cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent life = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 4485cfd74d65d832137e20e193c960802afba73b5d38sm life.setObjectToSpawnOnDeath(GameObjectType.GEM_EFFECT_SPAWNER); 4486cfd74d65d832137e20e193c960802afba73b5d38sm 4487cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 4488cfd74d65d832137e20e193c960802afba73b5d38sm 4489cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 4490cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 4491cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 4492cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 4493cfd74d65d832137e20e193c960802afba73b5d38sm object.add(life); 4494cfd74d65d832137e20e193c960802afba73b5d38sm 4495cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.RUBY, object, sprite); 4496cfd74d65d832137e20e193c960802afba73b5d38sm 4497cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 4498cfd74d65d832137e20e193c960802afba73b5d38sm 4499cfd74d65d832137e20e193c960802afba73b5d38sm return object; 4500cfd74d65d832137e20e193c960802afba73b5d38sm } 4501cfd74d65d832137e20e193c960802afba73b5d38sm 4502cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnDiary(float positionX, float positionY) { 4503cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 4504cfd74d65d832137e20e193c960802afba73b5d38sm 4505cfd74d65d832137e20e193c960802afba73b5d38sm LevelSystem level = sSystemRegistry.levelSystem; 4506cfd74d65d832137e20e193c960802afba73b5d38sm if (level != null) { 4507cfd74d65d832137e20e193c960802afba73b5d38sm final LevelTree.Level currentLevel = level.getCurrentLevel(); 4508cfd74d65d832137e20e193c960802afba73b5d38sm if (currentLevel != null && currentLevel.diaryCollected) { 4509cfd74d65d832137e20e193c960802afba73b5d38sm return null; 4510cfd74d65d832137e20e193c960802afba73b5d38sm } 4511cfd74d65d832137e20e193c960802afba73b5d38sm } 4512cfd74d65d832137e20e193c960802afba73b5d38sm 4513cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 4514cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 4515cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 4516cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 32; 4517cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 4518cfd74d65d832137e20e193c960802afba73b5d38sm 4519cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.DIARY); 4520cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 4521cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 4522cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 4523cfd74d65d832137e20e193c960802afba73b5d38sm 4524cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = new FixedSizeArray<CollisionVolume>(1); 4525cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new SphereCollisionVolume(16, 16, 16)); 4526cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.get(0).setHitType(HitType.COLLECT); 4527cfd74d65d832137e20e193c960802afba73b5d38sm 4528cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 8); 4529cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame1 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_diary01), 4530cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 4531cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame2 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_diary02), 4532cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume); 4533cfd74d65d832137e20e193c960802afba73b5d38sm 4534cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_diary01), 4535cfd74d65d832137e20e193c960802afba73b5d38sm 1.0f, null, basicVulnerabilityVolume)); 4536cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame2); 4537cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame1); 4538cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame2); 4539cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_diary03), 4540cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 4541cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_diary04), 4542cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 4543cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_diary05), 4544cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 4545cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_diary06), 4546cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 4547cfd74d65d832137e20e193c960802afba73b5d38sm 4548cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 4549cfd74d65d832137e20e193c960802afba73b5d38sm 4550cfd74d65d832137e20e193c960802afba73b5d38sm InventoryComponent.UpdateRecord addDiary = new InventoryComponent.UpdateRecord(); 4551cfd74d65d832137e20e193c960802afba73b5d38sm addDiary.diaryCount = 1; 4552cfd74d65d832137e20e193c960802afba73b5d38sm 4553cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(addDiary); 4554cfd74d65d832137e20e193c960802afba73b5d38sm 4555cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 4556cfd74d65d832137e20e193c960802afba73b5d38sm 4557cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.DIARY, staticData); 4558cfd74d65d832137e20e193c960802afba73b5d38sm } 4559cfd74d65d832137e20e193c960802afba73b5d38sm 4560cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 4561cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_OBJECT); 4562cfd74d65d832137e20e193c960802afba73b5d38sm 4563cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 4564cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 4565cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 4566cfd74d65d832137e20e193c960802afba73b5d38sm 4567cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 4568cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 4569cfd74d65d832137e20e193c960802afba73b5d38sm 4570cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 4571cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setDieWhenCollected(true); 4572cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setInvincible(true); 4573cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setSpawnGameEventOnHit(CollisionParameters.HitType.COLLECT, 4574cfd74d65d832137e20e193c960802afba73b5d38sm GameFlowEvent.EVENT_SHOW_DIARY, 0); 4575cfd74d65d832137e20e193c960802afba73b5d38sm // TODO: this is pretty dumb. The static data binding needs to be made generic. 4576cfd74d65d832137e20e193c960802afba73b5d38sm final int staticDataSize = staticData.getCount(); 4577cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < staticDataSize; x++) { 4578cfd74d65d832137e20e193c960802afba73b5d38sm final BaseObject entry = staticData.get(x); 4579cfd74d65d832137e20e193c960802afba73b5d38sm if (entry instanceof InventoryComponent.UpdateRecord) { 4580cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setInventoryUpdate((InventoryComponent.UpdateRecord)entry); 4581cfd74d65d832137e20e193c960802afba73b5d38sm break; 4582cfd74d65d832137e20e193c960802afba73b5d38sm } 4583cfd74d65d832137e20e193c960802afba73b5d38sm } 4584cfd74d65d832137e20e193c960802afba73b5d38sm 4585cfd74d65d832137e20e193c960802afba73b5d38sm dynamicCollision.setHitReactionComponent(hitReact); 4586cfd74d65d832137e20e193c960802afba73b5d38sm 4587cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent life = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 4588cfd74d65d832137e20e193c960802afba73b5d38sm 4589cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 4590cfd74d65d832137e20e193c960802afba73b5d38sm 4591cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 4592cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 4593cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 4594cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 4595cfd74d65d832137e20e193c960802afba73b5d38sm object.add(life); 4596cfd74d65d832137e20e193c960802afba73b5d38sm 4597cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.DIARY, object, sprite); 4598cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 4599cfd74d65d832137e20e193c960802afba73b5d38sm 4600cfd74d65d832137e20e193c960802afba73b5d38sm return object; 4601cfd74d65d832137e20e193c960802afba73b5d38sm } 4602cfd74d65d832137e20e193c960802afba73b5d38sm 4603cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnObjectDoor(float positionX, float positionY, GameObjectType type, boolean solid) { 4604cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 4605cfd74d65d832137e20e193c960802afba73b5d38sm 4606cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 4607cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 4608cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 4609cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 32; 4610cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 4611cfd74d65d832137e20e193c960802afba73b5d38sm 4612cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(type); 4613cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 4614cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 5; 4615cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 4616cfd74d65d832137e20e193c960802afba73b5d38sm 4617cfd74d65d832137e20e193c960802afba73b5d38sm final int red_frames[] = { 4618cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_door_red01, 4619cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_door_red02, 4620cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_door_red03, 4621cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_door_red04, 4622cfd74d65d832137e20e193c960802afba73b5d38sm }; 4623cfd74d65d832137e20e193c960802afba73b5d38sm 4624cfd74d65d832137e20e193c960802afba73b5d38sm final int blue_frames[] = { 4625cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_door_blue01, 4626cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_door_blue02, 4627cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_door_blue03, 4628cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_door_blue04, 4629cfd74d65d832137e20e193c960802afba73b5d38sm }; 4630cfd74d65d832137e20e193c960802afba73b5d38sm 4631cfd74d65d832137e20e193c960802afba73b5d38sm final int green_frames[] = { 4632cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_door_green01, 4633cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_door_green02, 4634cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_door_green03, 4635cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_door_green04, 4636cfd74d65d832137e20e193c960802afba73b5d38sm }; 4637cfd74d65d832137e20e193c960802afba73b5d38sm 4638cfd74d65d832137e20e193c960802afba73b5d38sm int frames[] = red_frames; 4639cfd74d65d832137e20e193c960802afba73b5d38sm 4640cfd74d65d832137e20e193c960802afba73b5d38sm if (type == GameObjectType.DOOR_GREEN) { 4641cfd74d65d832137e20e193c960802afba73b5d38sm frames = green_frames; 4642cfd74d65d832137e20e193c960802afba73b5d38sm } else if (type == GameObjectType.DOOR_BLUE) { 4643cfd74d65d832137e20e193c960802afba73b5d38sm frames = blue_frames; 4644cfd74d65d832137e20e193c960802afba73b5d38sm } 4645cfd74d65d832137e20e193c960802afba73b5d38sm 4646cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> vulnerabilityVolume = null; 4647cfd74d65d832137e20e193c960802afba73b5d38sm 4648cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame1 = new AnimationFrame(textureLibrary.allocateTexture(frames[0]), 4649cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, vulnerabilityVolume); 4650cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame2 = new AnimationFrame(textureLibrary.allocateTexture(frames[1]), 4651cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2)); 4652cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame3 = new AnimationFrame(textureLibrary.allocateTexture(frames[2]), 4653cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2)); 4654cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame4 = new AnimationFrame(textureLibrary.allocateTexture(frames[3]), 4655cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1)); 4656cfd74d65d832137e20e193c960802afba73b5d38sm 4657cfd74d65d832137e20e193c960802afba73b5d38sm // one frame of closing is deadly 4658cfd74d65d832137e20e193c960802afba73b5d38sm 4659cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> attackVolume = 4660cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 4661cfd74d65d832137e20e193c960802afba73b5d38sm attackVolume.add(new AABoxCollisionVolume(12, 8, 8, 56)); 4662cfd74d65d832137e20e193c960802afba73b5d38sm attackVolume.get(0).setHitType(HitType.DEATH); 4663cfd74d65d832137e20e193c960802afba73b5d38sm 4664cfd74d65d832137e20e193c960802afba73b5d38sm 4665cfd74d65d832137e20e193c960802afba73b5d38sm 4666cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame closeFrame2 = new AnimationFrame(textureLibrary.allocateTexture(frames[1]), 4667cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), attackVolume, vulnerabilityVolume); 4668cfd74d65d832137e20e193c960802afba73b5d38sm 4669cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle_closed = new SpriteAnimation(DoorAnimationComponent.Animation.CLOSED, 1); 4670cfd74d65d832137e20e193c960802afba73b5d38sm idle_closed.addFrame(frame1); 4671cfd74d65d832137e20e193c960802afba73b5d38sm 4672cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle_open = new SpriteAnimation(DoorAnimationComponent.Animation.OPEN, 1); 4673cfd74d65d832137e20e193c960802afba73b5d38sm idle_open.addFrame(frame4); 4674cfd74d65d832137e20e193c960802afba73b5d38sm 4675cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation open = new SpriteAnimation(DoorAnimationComponent.Animation.OPENING, 2); 4676cfd74d65d832137e20e193c960802afba73b5d38sm open.addFrame(frame2); 4677cfd74d65d832137e20e193c960802afba73b5d38sm open.addFrame(frame3); 4678cfd74d65d832137e20e193c960802afba73b5d38sm 4679cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation close = new SpriteAnimation(DoorAnimationComponent.Animation.CLOSING, 2); 4680cfd74d65d832137e20e193c960802afba73b5d38sm close.addFrame(frame3); 4681cfd74d65d832137e20e193c960802afba73b5d38sm close.addFrame(closeFrame2); 4682cfd74d65d832137e20e193c960802afba73b5d38sm 4683cfd74d65d832137e20e193c960802afba73b5d38sm SolidSurfaceComponent solidSurface 4684cfd74d65d832137e20e193c960802afba73b5d38sm = (SolidSurfaceComponent)allocateComponent(SolidSurfaceComponent.class); 4685cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.inititalize(4); 4686cfd74d65d832137e20e193c960802afba73b5d38sm // box shape: 4687cfd74d65d832137e20e193c960802afba73b5d38sm // ___ ___1 4688cfd74d65d832137e20e193c960802afba73b5d38sm // | | 2| |3 4689cfd74d65d832137e20e193c960802afba73b5d38sm // --- ---4 4690cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1Start = new Vector2(0, object.height); 4691cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1End = new Vector2(object.width, object.height); 4692cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1Normal = new Vector2(0.0f, -1.0f); 4693cfd74d65d832137e20e193c960802afba73b5d38sm surface1Normal.normalize(); 4694cfd74d65d832137e20e193c960802afba73b5d38sm 4695cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2Start = new Vector2(0, object.height); 4696cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2End = new Vector2(0, 0); 4697cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2Normal = new Vector2(-1.0f, 0.0f); 4698cfd74d65d832137e20e193c960802afba73b5d38sm surface2Normal.normalize(); 4699cfd74d65d832137e20e193c960802afba73b5d38sm 4700cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3Start = new Vector2(object.width, object.height); 4701cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3End = new Vector2(object.width, 0); 4702cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3Normal = new Vector2(1.0f, 0); 4703cfd74d65d832137e20e193c960802afba73b5d38sm 4704cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface4Start = new Vector2(0, 0); 4705cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface4End = new Vector2(object.width, 0); 4706cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface4Normal = new Vector2(0, 1.0f); 4707cfd74d65d832137e20e193c960802afba73b5d38sm 4708cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface1Start, surface1End, surface1Normal); 4709cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface2Start, surface2End, surface2Normal); 4710cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface3Start, surface3End, surface3Normal); 4711cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface4Start, surface4End, surface4Normal); 4712cfd74d65d832137e20e193c960802afba73b5d38sm 4713cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle_open); 4714cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle_closed); 4715cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(open); 4716cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(close); 4717cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(solidSurface); 4718cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(type, staticData); 4719cfd74d65d832137e20e193c960802afba73b5d38sm } 4720cfd74d65d832137e20e193c960802afba73b5d38sm 4721cfd74d65d832137e20e193c960802afba73b5d38sm 4722cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 4723cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.FOREGROUND_OBJECT); 4724cfd74d65d832137e20e193c960802afba73b5d38sm 4725cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 4726cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 4727cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 4728cfd74d65d832137e20e193c960802afba73b5d38sm 4729cfd74d65d832137e20e193c960802afba73b5d38sm DoorAnimationComponent doorAnim = (DoorAnimationComponent)allocateComponent(DoorAnimationComponent.class); 4730cfd74d65d832137e20e193c960802afba73b5d38sm doorAnim.setSprite(sprite); 4731cfd74d65d832137e20e193c960802afba73b5d38sm 4732cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = BaseObject.sSystemRegistry.soundSystem; 4733cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 4734cfd74d65d832137e20e193c960802afba73b5d38sm doorAnim.setSounds(sound.load(R.raw.sound_open), sound.load(R.raw.sound_close)); 4735cfd74d65d832137e20e193c960802afba73b5d38sm } 4736cfd74d65d832137e20e193c960802afba73b5d38sm 4737cfd74d65d832137e20e193c960802afba73b5d38sm ChannelSystem.Channel doorChannel = null; 4738cfd74d65d832137e20e193c960802afba73b5d38sm ChannelSystem channelSystem = BaseObject.sSystemRegistry.channelSystem; 4739cfd74d65d832137e20e193c960802afba73b5d38sm switch (type) { 4740cfd74d65d832137e20e193c960802afba73b5d38sm case DOOR_RED: 4741cfd74d65d832137e20e193c960802afba73b5d38sm doorChannel = channelSystem.registerChannel(sRedButtonChannel); 4742cfd74d65d832137e20e193c960802afba73b5d38sm break; 4743cfd74d65d832137e20e193c960802afba73b5d38sm case DOOR_BLUE: 4744cfd74d65d832137e20e193c960802afba73b5d38sm doorChannel = channelSystem.registerChannel(sBlueButtonChannel); 4745cfd74d65d832137e20e193c960802afba73b5d38sm break; 4746cfd74d65d832137e20e193c960802afba73b5d38sm case DOOR_GREEN: 4747cfd74d65d832137e20e193c960802afba73b5d38sm doorChannel = channelSystem.registerChannel(sGreenButtonChannel); 4748cfd74d65d832137e20e193c960802afba73b5d38sm break; 4749cfd74d65d832137e20e193c960802afba73b5d38sm } 4750cfd74d65d832137e20e193c960802afba73b5d38sm doorAnim.setChannel(doorChannel); 4751cfd74d65d832137e20e193c960802afba73b5d38sm 4752cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 4753cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 4754cfd74d65d832137e20e193c960802afba73b5d38sm 4755cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact 4756cfd74d65d832137e20e193c960802afba73b5d38sm = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 4757cfd74d65d832137e20e193c960802afba73b5d38sm dynamicCollision.setHitReactionComponent(hitReact); 4758cfd74d65d832137e20e193c960802afba73b5d38sm 4759cfd74d65d832137e20e193c960802afba73b5d38sm 4760cfd74d65d832137e20e193c960802afba73b5d38sm 4761cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 4762cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 4763cfd74d65d832137e20e193c960802afba73b5d38sm object.add(doorAnim); 4764cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 4765cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 4766cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(type, object, sprite); 4767cfd74d65d832137e20e193c960802afba73b5d38sm 4768cfd74d65d832137e20e193c960802afba73b5d38sm object.commitUpdates(); 4769cfd74d65d832137e20e193c960802afba73b5d38sm 4770cfd74d65d832137e20e193c960802afba73b5d38sm SolidSurfaceComponent solidSurface = object.findByClass(SolidSurfaceComponent.class); 4771cfd74d65d832137e20e193c960802afba73b5d38sm if (solid) { 4772cfd74d65d832137e20e193c960802afba73b5d38sm doorAnim.setSolidSurface(solidSurface); 4773cfd74d65d832137e20e193c960802afba73b5d38sm } else { 4774cfd74d65d832137e20e193c960802afba73b5d38sm object.remove(solidSurface); 4775cfd74d65d832137e20e193c960802afba73b5d38sm object.commitUpdates(); 4776cfd74d65d832137e20e193c960802afba73b5d38sm } 4777cfd74d65d832137e20e193c960802afba73b5d38sm 4778cfd74d65d832137e20e193c960802afba73b5d38sm 4779cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 4780cfd74d65d832137e20e193c960802afba73b5d38sm 4781cfd74d65d832137e20e193c960802afba73b5d38sm return object; 4782cfd74d65d832137e20e193c960802afba73b5d38sm } 4783cfd74d65d832137e20e193c960802afba73b5d38sm 4784cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnObjectButton(float positionX, float positionY, GameObjectType type) { 4785cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 4786cfd74d65d832137e20e193c960802afba73b5d38sm 4787cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 4788cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 4789cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 4790cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 32; 4791cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 4792cfd74d65d832137e20e193c960802afba73b5d38sm 4793cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(type); 4794cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 4795cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 4796cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 4797cfd74d65d832137e20e193c960802afba73b5d38sm 4798cfd74d65d832137e20e193c960802afba73b5d38sm final int red_frames[] = { 4799cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_button_red, 4800cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_button_pressed_red, 4801cfd74d65d832137e20e193c960802afba73b5d38sm }; 4802cfd74d65d832137e20e193c960802afba73b5d38sm 4803cfd74d65d832137e20e193c960802afba73b5d38sm final int blue_frames[] = { 4804cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_button_blue, 4805cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_button_pressed_blue, 4806cfd74d65d832137e20e193c960802afba73b5d38sm }; 4807cfd74d65d832137e20e193c960802afba73b5d38sm 4808cfd74d65d832137e20e193c960802afba73b5d38sm final int green_frames[] = { 4809cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_button_green, 4810cfd74d65d832137e20e193c960802afba73b5d38sm R.drawable.object_button_pressed_green, 4811cfd74d65d832137e20e193c960802afba73b5d38sm }; 4812cfd74d65d832137e20e193c960802afba73b5d38sm 4813cfd74d65d832137e20e193c960802afba73b5d38sm int frames[] = red_frames; 4814cfd74d65d832137e20e193c960802afba73b5d38sm 4815cfd74d65d832137e20e193c960802afba73b5d38sm if (type == GameObjectType.BUTTON_GREEN) { 4816cfd74d65d832137e20e193c960802afba73b5d38sm frames = green_frames; 4817cfd74d65d832137e20e193c960802afba73b5d38sm } else if (type == GameObjectType.BUTTON_BLUE) { 4818cfd74d65d832137e20e193c960802afba73b5d38sm frames = blue_frames; 4819cfd74d65d832137e20e193c960802afba73b5d38sm } 4820cfd74d65d832137e20e193c960802afba73b5d38sm 4821cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> vulnerabilityVolume = 4822cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 4823cfd74d65d832137e20e193c960802afba73b5d38sm vulnerabilityVolume.add(new AABoxCollisionVolume(0, 0, 32, 16)); 4824cfd74d65d832137e20e193c960802afba73b5d38sm vulnerabilityVolume.get(0).setHitType(HitType.DEPRESS); 4825cfd74d65d832137e20e193c960802afba73b5d38sm 4826cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame1 = new AnimationFrame(textureLibrary.allocateTexture(frames[0]), 4827cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, vulnerabilityVolume); 4828cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame2 = new AnimationFrame(textureLibrary.allocateTexture(frames[1]), 4829cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, vulnerabilityVolume); 4830cfd74d65d832137e20e193c960802afba73b5d38sm 4831cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(ButtonAnimationComponent.Animation.UP, 1); 4832cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame1); 4833cfd74d65d832137e20e193c960802afba73b5d38sm 4834cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation pressed = new SpriteAnimation(ButtonAnimationComponent.Animation.DOWN, 1); 4835cfd74d65d832137e20e193c960802afba73b5d38sm pressed.addFrame(frame2); 4836cfd74d65d832137e20e193c960802afba73b5d38sm 4837cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 4838cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(pressed); 4839cfd74d65d832137e20e193c960802afba73b5d38sm 4840cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(type, staticData); 4841cfd74d65d832137e20e193c960802afba73b5d38sm } 4842cfd74d65d832137e20e193c960802afba73b5d38sm 4843cfd74d65d832137e20e193c960802afba73b5d38sm 4844cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 4845cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_OBJECT); 4846cfd74d65d832137e20e193c960802afba73b5d38sm 4847cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 4848cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 4849cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 4850cfd74d65d832137e20e193c960802afba73b5d38sm 4851cfd74d65d832137e20e193c960802afba73b5d38sm ButtonAnimationComponent button = (ButtonAnimationComponent)allocateComponent(ButtonAnimationComponent.class); 4852cfd74d65d832137e20e193c960802afba73b5d38sm button.setSprite(sprite); 4853cfd74d65d832137e20e193c960802afba73b5d38sm 4854cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = BaseObject.sSystemRegistry.soundSystem; 4855cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 4856cfd74d65d832137e20e193c960802afba73b5d38sm button.setDepressSound(sound.load(R.raw.sound_button)); 4857cfd74d65d832137e20e193c960802afba73b5d38sm } 4858cfd74d65d832137e20e193c960802afba73b5d38sm 4859cfd74d65d832137e20e193c960802afba73b5d38sm ChannelSystem.Channel buttonChannel = null; 4860cfd74d65d832137e20e193c960802afba73b5d38sm ChannelSystem channelSystem = BaseObject.sSystemRegistry.channelSystem; 4861cfd74d65d832137e20e193c960802afba73b5d38sm switch (type) { 4862cfd74d65d832137e20e193c960802afba73b5d38sm case BUTTON_RED: 4863cfd74d65d832137e20e193c960802afba73b5d38sm buttonChannel = channelSystem.registerChannel(sRedButtonChannel); 4864cfd74d65d832137e20e193c960802afba73b5d38sm break; 4865cfd74d65d832137e20e193c960802afba73b5d38sm case BUTTON_BLUE: 4866cfd74d65d832137e20e193c960802afba73b5d38sm buttonChannel = channelSystem.registerChannel(sBlueButtonChannel); 4867cfd74d65d832137e20e193c960802afba73b5d38sm break; 4868cfd74d65d832137e20e193c960802afba73b5d38sm case BUTTON_GREEN: 4869cfd74d65d832137e20e193c960802afba73b5d38sm buttonChannel = channelSystem.registerChannel(sGreenButtonChannel); 4870cfd74d65d832137e20e193c960802afba73b5d38sm break; 4871cfd74d65d832137e20e193c960802afba73b5d38sm } 4872cfd74d65d832137e20e193c960802afba73b5d38sm button.setChannel(buttonChannel); 4873cfd74d65d832137e20e193c960802afba73b5d38sm 4874cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 4875cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 4876cfd74d65d832137e20e193c960802afba73b5d38sm 4877cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 4878cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setInvincible(false); 4879cfd74d65d832137e20e193c960802afba73b5d38sm 4880cfd74d65d832137e20e193c960802afba73b5d38sm 4881cfd74d65d832137e20e193c960802afba73b5d38sm 4882cfd74d65d832137e20e193c960802afba73b5d38sm dynamicCollision.setHitReactionComponent(hitReact); 4883cfd74d65d832137e20e193c960802afba73b5d38sm 4884cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.NONE; 4885cfd74d65d832137e20e193c960802afba73b5d38sm 4886cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 4887cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 4888cfd74d65d832137e20e193c960802afba73b5d38sm object.add(button); 4889cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 4890cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 4891cfd74d65d832137e20e193c960802afba73b5d38sm 4892cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(type, object, sprite); 4893cfd74d65d832137e20e193c960802afba73b5d38sm 4894cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 4895cfd74d65d832137e20e193c960802afba73b5d38sm 4896cfd74d65d832137e20e193c960802afba73b5d38sm return object; 4897cfd74d65d832137e20e193c960802afba73b5d38sm } 4898cfd74d65d832137e20e193c960802afba73b5d38sm 4899cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnObjectCannon(float positionX, float positionY) { 4900cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 4901cfd74d65d832137e20e193c960802afba73b5d38sm 4902cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 4903cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 4904cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 4905cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 4906cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 128; 4907cfd74d65d832137e20e193c960802afba73b5d38sm 4908cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.CANNON); 4909cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 4910cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 4911cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 4912cfd74d65d832137e20e193c960802afba73b5d38sm 4913cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> attackVolume = 4914cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 4915cfd74d65d832137e20e193c960802afba73b5d38sm attackVolume.add(new AABoxCollisionVolume(16, 16, 32, 80)); 4916cfd74d65d832137e20e193c960802afba73b5d38sm attackVolume.get(0).setHitType(HitType.LAUNCH); 4917cfd74d65d832137e20e193c960802afba73b5d38sm 4918cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame1 = new AnimationFrame( 4919cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_cannon), 4920cfd74d65d832137e20e193c960802afba73b5d38sm 1.0f, attackVolume, null); 4921cfd74d65d832137e20e193c960802afba73b5d38sm 4922cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(GenericAnimationComponent.Animation.IDLE, 1); 4923cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(frame1); 4924cfd74d65d832137e20e193c960802afba73b5d38sm 4925cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame frame1NoAttack = new AnimationFrame( 4926cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_cannon), 4927cfd74d65d832137e20e193c960802afba73b5d38sm 1.0f, null, null); 4928cfd74d65d832137e20e193c960802afba73b5d38sm 4929cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation shoot = new SpriteAnimation(GenericAnimationComponent.Animation.ATTACK, 1); 4930cfd74d65d832137e20e193c960802afba73b5d38sm shoot.addFrame(frame1NoAttack); 4931cfd74d65d832137e20e193c960802afba73b5d38sm 4932cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 4933cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(shoot); 4934cfd74d65d832137e20e193c960802afba73b5d38sm 4935cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.CANNON, staticData); 4936cfd74d65d832137e20e193c960802afba73b5d38sm } 4937cfd74d65d832137e20e193c960802afba73b5d38sm 4938cfd74d65d832137e20e193c960802afba73b5d38sm 4939cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 4940cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.FOREGROUND_OBJECT); 4941cfd74d65d832137e20e193c960802afba73b5d38sm 4942cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 4943cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 4944cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 4945cfd74d65d832137e20e193c960802afba73b5d38sm 4946cfd74d65d832137e20e193c960802afba73b5d38sm LauncherComponent launcher = (LauncherComponent)allocateComponent(LauncherComponent.class); 4947cfd74d65d832137e20e193c960802afba73b5d38sm launcher.setLaunchEffect(GameObjectType.SMOKE_POOF, 32.0f, 85.0f); 4948cfd74d65d832137e20e193c960802afba73b5d38sm 4949cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = BaseObject.sSystemRegistry.soundSystem; 4950cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 4951cfd74d65d832137e20e193c960802afba73b5d38sm launcher.setLaunchSound(sound.load(R.raw.sound_cannon)); 4952cfd74d65d832137e20e193c960802afba73b5d38sm } 4953cfd74d65d832137e20e193c960802afba73b5d38sm 4954cfd74d65d832137e20e193c960802afba73b5d38sm 4955cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 4956cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 4957cfd74d65d832137e20e193c960802afba73b5d38sm 4958cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 4959cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setInvincible(false); 4960cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setLauncherComponent(launcher, HitType.LAUNCH); 4961cfd74d65d832137e20e193c960802afba73b5d38sm 4962cfd74d65d832137e20e193c960802afba73b5d38sm dynamicCollision.setHitReactionComponent(hitReact); 4963cfd74d65d832137e20e193c960802afba73b5d38sm 4964cfd74d65d832137e20e193c960802afba73b5d38sm GenericAnimationComponent anim = (GenericAnimationComponent)allocateComponent(GenericAnimationComponent.class); 4965cfd74d65d832137e20e193c960802afba73b5d38sm anim.setSprite(sprite); 4966cfd74d65d832137e20e193c960802afba73b5d38sm 4967cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.NONE; 4968cfd74d65d832137e20e193c960802afba73b5d38sm 4969cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 4970cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 4971cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 4972cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 4973cfd74d65d832137e20e193c960802afba73b5d38sm object.add(launcher); 4974cfd74d65d832137e20e193c960802afba73b5d38sm object.add(anim); 4975cfd74d65d832137e20e193c960802afba73b5d38sm 4976cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.CANNON, object, sprite); 4977cfd74d65d832137e20e193c960802afba73b5d38sm 4978cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 4979cfd74d65d832137e20e193c960802afba73b5d38sm 4980cfd74d65d832137e20e193c960802afba73b5d38sm return object; 4981cfd74d65d832137e20e193c960802afba73b5d38sm } 4982cfd74d65d832137e20e193c960802afba73b5d38sm 4983cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnObjectBrobotSpawner(float positionX, float positionY, boolean flipHorizontal) { 4984cfd74d65d832137e20e193c960802afba73b5d38sm 4985cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 4986cfd74d65d832137e20e193c960802afba73b5d38sm 4987cfd74d65d832137e20e193c960802afba73b5d38sm // This is pretty heavy-handed. 4988cfd74d65d832137e20e193c960802afba73b5d38sm // TODO: figure out a general solution for objects that depend on other objects. 4989cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_idle01); 4990cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_idle02); 4991cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_idle03); 4992cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_walk01); 4993cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_walk02); 4994cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.enemy_brobot_walk03); 4995cfd74d65d832137e20e193c960802afba73b5d38sm 4996cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 4997cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 4998cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 4999cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 5000cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 5001cfd74d65d832137e20e193c960802afba73b5d38sm 5002cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.BROBOT_SPAWNER); 5003cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 50042b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final int staticObjectCount = 2; 5005cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 5006cfd74d65d832137e20e193c960802afba73b5d38sm 5007cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 5008cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 5009cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new SphereCollisionVolume(32, 32, 32)); 5010cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.get(0).setHitType(HitType.POSSESS); 5011cfd74d65d832137e20e193c960802afba73b5d38sm 5012cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 1); 5013cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5014cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_brobot_machine), 5015cfd74d65d832137e20e193c960802afba73b5d38sm 1.0f, null, basicVulnerabilityVolume)); 5016cfd74d65d832137e20e193c960802afba73b5d38sm 5017cfd74d65d832137e20e193c960802afba73b5d38sm SolidSurfaceComponent solidSurface 5018cfd74d65d832137e20e193c960802afba73b5d38sm = (SolidSurfaceComponent)allocateComponent(SolidSurfaceComponent.class); 5019cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.inititalize(3); 5020cfd74d65d832137e20e193c960802afba73b5d38sm /* 5021cfd74d65d832137e20e193c960802afba73b5d38sm 0:2,0:8,59:-0.99532399996093,0.09659262446878 5022cfd74d65d832137e20e193c960802afba73b5d38sm 0:8,59:61,33:0.44551558813576,0.89527418187282 5023cfd74d65d832137e20e193c960802afba73b5d38sm 0:61,33:61,-1:1,0 5024cfd74d65d832137e20e193c960802afba73b5d38sm 5025cfd74d65d832137e20e193c960802afba73b5d38sm */ 5026cfd74d65d832137e20e193c960802afba73b5d38sm // trapezoid shape: 5027cfd74d65d832137e20e193c960802afba73b5d38sm // |\ |\2 5028cfd74d65d832137e20e193c960802afba73b5d38sm // | | 1| |3 5029cfd74d65d832137e20e193c960802afba73b5d38sm 5030cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1Start = new Vector2(0, 0); 5031cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1End = new Vector2(8.0f, 59.0f); 5032cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1Normal = new Vector2(-0.9953f, 0.0965f); 5033cfd74d65d832137e20e193c960802afba73b5d38sm surface1Normal.normalize(); 5034cfd74d65d832137e20e193c960802afba73b5d38sm 5035cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2Start = new Vector2(8.0f, 59.0f); 5036cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2End = new Vector2(61.0f, 33.0f); 5037cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2Normal = new Vector2(0.445515f, 0.89527f); 5038cfd74d65d832137e20e193c960802afba73b5d38sm surface2Normal.normalize(); 5039cfd74d65d832137e20e193c960802afba73b5d38sm 5040cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3Start = new Vector2(61.0f, 33.0f); 5041cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3End = new Vector2(61.0f, 0.0f); 5042cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3Normal = new Vector2(1.0f, 0.0f); 5043cfd74d65d832137e20e193c960802afba73b5d38sm 5044cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface1Start, surface1End, surface1Normal); 5045cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface2Start, surface2End, surface2Normal); 5046cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface3Start, surface3End, surface3Normal); 5047cfd74d65d832137e20e193c960802afba73b5d38sm 5048cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(solidSurface); 5049cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 5050cfd74d65d832137e20e193c960802afba73b5d38sm 5051cfd74d65d832137e20e193c960802afba73b5d38sm 5052cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.BROBOT_SPAWNER, staticData); 5053cfd74d65d832137e20e193c960802afba73b5d38sm } 5054cfd74d65d832137e20e193c960802afba73b5d38sm 5055cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 5056cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_OBJECT); 5057cfd74d65d832137e20e193c960802afba73b5d38sm 5058cfd74d65d832137e20e193c960802afba73b5d38sm 5059cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 5060cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 5061cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 5062cfd74d65d832137e20e193c960802afba73b5d38sm 5063cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision 5064cfd74d65d832137e20e193c960802afba73b5d38sm = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 5065cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 5066cfd74d65d832137e20e193c960802afba73b5d38sm 5067cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact 5068cfd74d65d832137e20e193c960802afba73b5d38sm = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 5069cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 5070cfd74d65d832137e20e193c960802afba73b5d38sm 5071cfd74d65d832137e20e193c960802afba73b5d38sm LaunchProjectileComponent gun 5072cfd74d65d832137e20e193c960802afba73b5d38sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 5073cfd74d65d832137e20e193c960802afba73b5d38sm gun.setDelayBeforeFirstSet(3.0f); 5074cfd74d65d832137e20e193c960802afba73b5d38sm gun.setObjectTypeToSpawn(GameObjectType.BROBOT); 5075cfd74d65d832137e20e193c960802afba73b5d38sm gun.setOffsetX(36); 5076cfd74d65d832137e20e193c960802afba73b5d38sm gun.setOffsetY(50); 5077cfd74d65d832137e20e193c960802afba73b5d38sm gun.setVelocityX(100.0f); 5078cfd74d65d832137e20e193c960802afba73b5d38sm gun.setVelocityY(300.0f); 5079cfd74d65d832137e20e193c960802afba73b5d38sm gun.enableProjectileTracking(1); 5080cfd74d65d832137e20e193c960802afba73b5d38sm 5081cfd74d65d832137e20e193c960802afba73b5d38sm 5082cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 5083cfd74d65d832137e20e193c960802afba73b5d38sm 5084cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 5085cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 5086cfd74d65d832137e20e193c960802afba73b5d38sm } else { 5087cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = 1.0f; 5088cfd74d65d832137e20e193c960802afba73b5d38sm } 5089cfd74d65d832137e20e193c960802afba73b5d38sm 5090cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 5091cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 5092cfd74d65d832137e20e193c960802afba73b5d38sm object.add(gun); 5093cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 5094cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 5095cfd74d65d832137e20e193c960802afba73b5d38sm 5096cfd74d65d832137e20e193c960802afba73b5d38sm 5097cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.BROBOT_SPAWNER, object, sprite); 5098cfd74d65d832137e20e193c960802afba73b5d38sm 5099cfd74d65d832137e20e193c960802afba73b5d38sm object.commitUpdates(); 5100cfd74d65d832137e20e193c960802afba73b5d38sm 51012b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 5102cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 5103cfd74d65d832137e20e193c960802afba73b5d38sm 5104cfd74d65d832137e20e193c960802afba73b5d38sm return object; 5105cfd74d65d832137e20e193c960802afba73b5d38sm } 5106cfd74d65d832137e20e193c960802afba73b5d38sm 51079d4cc2572d37983607df38b0f4216ed76ac51814sm public GameObject spawnObjectInfiniteSpawner(float positionX, float positionY) { 51089d4cc2572d37983607df38b0f4216ed76ac51814sm GameObject object = spawnObjectBrobotSpawner(positionX, positionY, false); 51099d4cc2572d37983607df38b0f4216ed76ac51814sm object.facingDirection.y = -1; //vertical flip 51109d4cc2572d37983607df38b0f4216ed76ac51814sm LaunchProjectileComponent gun = object.findByClass(LaunchProjectileComponent.class); 51119d4cc2572d37983607df38b0f4216ed76ac51814sm if (gun != null) { 51122b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm gun.disableProjectileTracking(); 51132b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm gun.setDelayBetweenShots(0.15f); 51142b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm gun.setSetsPerActivation(1); 51152b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm gun.setShotsPerSet(60); 51169d4cc2572d37983607df38b0f4216ed76ac51814sm } 51179d4cc2572d37983607df38b0f4216ed76ac51814sm 51189d4cc2572d37983607df38b0f4216ed76ac51814sm return object; 51199d4cc2572d37983607df38b0f4216ed76ac51814sm } 51209d4cc2572d37983607df38b0f4216ed76ac51814sm 51212b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm public GameObject spawnObjectCrusherAndou(float positionX, float positionY) { 51222b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 51232b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51242b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm GameObject object = mGameObjectPool.allocate(); 51252b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.getPosition().set(positionX, positionY); 51262b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.activationRadius = mAlwaysActive; 51272b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.width = 64; 51282b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.height = 64; 51292b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51302b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.CRUSHER_ANDOU); 51312b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51322b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (staticData == null) { 51332b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final int staticObjectCount = 5; 51342b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 51352b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51362b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm GameComponent gravity = allocateComponent(GravityComponent.class); 51372b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm GameComponent movement = allocateComponent(MovementComponent.class); 51382b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm PhysicsComponent physics = (PhysicsComponent)allocateComponent(PhysicsComponent.class); 51392b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51402b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm physics.setMass(9.1f); // ~90kg w/ earth gravity 51412b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm physics.setDynamicFrictionCoeffecient(0.2f); 51422b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm physics.setStaticFrictionCoeffecient(0.01f); 51432b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51442b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm // Animation Data 51452b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 51462b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm new FixedSizeArray<CollisionVolume>(1); 51472b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm basicVulnerabilityVolume.add(new SphereCollisionVolume(16, 32, 32)); 51482b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51492b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm SpriteAnimation idle = new SpriteAnimation(Animation.IDLE, 1); 51502b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm idle.addFrame(new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_stand), 51512b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1.0f, null, basicVulnerabilityVolume)); 51522b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51532b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51542b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm FixedSizeArray<CollisionVolume> stompAttackVolume = 51552b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm new FixedSizeArray<CollisionVolume>(1); 51562b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm stompAttackVolume.add(new AABoxCollisionVolume(16, -5.0f, 32, 37, HitType.HIT)); 51572b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51582b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51592b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm SpriteAnimation stomp = new SpriteAnimation(Animation.ATTACK, 4); 51602b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm stomp.addFrame( 51612b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_stomp01), 51622b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm Utils.framesToTime(24, 1), stompAttackVolume, null)); 51632b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm stomp.addFrame( 51642b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_stomp02), 51652b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm Utils.framesToTime(24, 1), stompAttackVolume, null)); 51662b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm stomp.addFrame( 51672b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_stomp03), 51682b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm Utils.framesToTime(24, 1), stompAttackVolume, null)); 51692b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm stomp.addFrame( 51702b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm new AnimationFrame(textureLibrary.allocateTexture(R.drawable.andou_stomp04), 51712b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm Utils.framesToTime(24, 1), stompAttackVolume, null)); 51722b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51732b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51742b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51752b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm // Save static data 51762b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm staticData.add(gravity); 51772b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm staticData.add(movement); 51782b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm staticData.add(physics); 51792b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51802b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51812b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm staticData.add(idle); 51822b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm staticData.add(stomp); 51832b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51842b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51852b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm setStaticData(GameObjectType.CRUSHER_ANDOU, staticData); 51862b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 51872b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51882b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51892b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 51902b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm render.setPriority(SortConstants.PLAYER); 51912b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm BackgroundCollisionComponent bgcollision 51922b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 51932b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm bgcollision.setSize(32, 48); 51942b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm bgcollision.setOffset(16, 0); 51952b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51962b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm GenericAnimationComponent animation = (GenericAnimationComponent)allocateComponent(GenericAnimationComponent.class); 51972b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 51982b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 51992b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm sprite.setSize((int)object.width, (int)object.height); 52002b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm sprite.setRenderComponent(render); 52012b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm animation.setSprite(sprite); 52022b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52032b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52042b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm DynamicCollisionComponent dynamicCollision 52052b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 52062b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm sprite.setCollisionComponent(dynamicCollision); 52072b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52082b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 52092b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm hitReact.setBounceOnHit(true); 52102b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm hitReact.setPauseOnAttack(true); 52112b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm hitReact.setInvincibleTime(3.0f); 52122b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm hitReact.setSpawnOnDealHit(HitType.HIT, GameObjectType.CRUSH_FLASH, false, true); 52132b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52142b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52152b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm dynamicCollision.setHitReactionComponent(hitReact); 52162b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52172b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52182b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52192b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.life = 1; 52202b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.team = Team.PLAYER; 52212b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52222b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.add(animation); 52232b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.add(bgcollision); 52242b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.add(render); 52252b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.add(sprite); 52262b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.add(dynamicCollision); 52272b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.add(hitReact); 52282b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52292b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm addStaticData(GameObjectType.CRUSHER_ANDOU, object, sprite); 52302b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52312b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm sprite.playAnimation(Animation.IDLE); 52322b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52332b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.commitUpdates(); 52342b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52352b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm ChangeComponentsComponent swap = (ChangeComponentsComponent)allocateComponent(ChangeComponentsComponent.class); 52362b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52372b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final int count = object.getCount(); 52382b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm for (int x = 0; x < count; x++) { 52392b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm swap.addSwapInComponent((GameComponent)object.get(x)); 52402b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 52412b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52422b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.removeAll(); 52432b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52442b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm CrusherAndouComponent crusher = (CrusherAndouComponent)allocateComponent(CrusherAndouComponent.class); 52452b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52462b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm crusher.setSwap(swap); 52472b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52482b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.add(swap); 52492b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.add(crusher); 52502b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52512b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.commitUpdates(); 52522b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52532b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm return object; 52542b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 52552b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 52569d4cc2572d37983607df38b0f4216ed76ac51814sm public GameObject spawnObjectBreakableBlock(float positionX, float positionY) { 5257cfd74d65d832137e20e193c960802afba73b5d38sm 5258cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 5259cfd74d65d832137e20e193c960802afba73b5d38sm 5260cfd74d65d832137e20e193c960802afba73b5d38sm // Preload block piece texture. 5261cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_debris_piece); 5262cfd74d65d832137e20e193c960802afba73b5d38sm 5263cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 5264cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 5265cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 5266cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 32; 5267cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 5268cfd74d65d832137e20e193c960802afba73b5d38sm 5269cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.BREAKABLE_BLOCK); 5270cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 5271cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 5272cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 5273cfd74d65d832137e20e193c960802afba73b5d38sm 5274cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 5275cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 5276cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new AABoxCollisionVolume(7, 0, 32 - 7, 42, HitType.HIT)); 5277cfd74d65d832137e20e193c960802afba73b5d38sm 5278cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 1); 5279cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5280cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_debris_block), 5281cfd74d65d832137e20e193c960802afba73b5d38sm 1.0f, null, basicVulnerabilityVolume)); 5282cfd74d65d832137e20e193c960802afba73b5d38sm 5283cfd74d65d832137e20e193c960802afba73b5d38sm SolidSurfaceComponent solidSurface 5284cfd74d65d832137e20e193c960802afba73b5d38sm = (SolidSurfaceComponent)allocateComponent(SolidSurfaceComponent.class); 5285cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.inititalize(4); 5286cfd74d65d832137e20e193c960802afba73b5d38sm 5287cfd74d65d832137e20e193c960802afba73b5d38sm // box shape: 5288cfd74d65d832137e20e193c960802afba73b5d38sm // ___ ___2 5289cfd74d65d832137e20e193c960802afba73b5d38sm // | | 1| |3 5290cfd74d65d832137e20e193c960802afba73b5d38sm // --- ---4 5291cfd74d65d832137e20e193c960802afba73b5d38sm 5292cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1Start = new Vector2(0.0f, 0.0f); 5293cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1End = new Vector2(0.0f, 32.0f); 5294cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface1Normal = new Vector2(-1.0f, 0.0f); 5295cfd74d65d832137e20e193c960802afba73b5d38sm surface1Normal.normalize(); 5296cfd74d65d832137e20e193c960802afba73b5d38sm 5297cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2Start = new Vector2(0.0f, 32.0f); 5298cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2End = new Vector2(32.0f, 32.0f); 5299cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface2Normal = new Vector2(0.0f, 1.0f); 5300cfd74d65d832137e20e193c960802afba73b5d38sm surface2Normal.normalize(); 5301cfd74d65d832137e20e193c960802afba73b5d38sm 5302cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3Start = new Vector2(32.0f, 32.0f); 5303cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3End = new Vector2(32.0f, 0.0f); 5304cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface3Normal = new Vector2(1.0f, 0.0f); 5305cfd74d65d832137e20e193c960802afba73b5d38sm 5306cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface4Start = new Vector2(32.0f, 0.0f); 5307cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface4End = new Vector2(0.0f, 0.0f); 5308cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 surface4Normal = new Vector2(0.0f, -1.0f); 5309cfd74d65d832137e20e193c960802afba73b5d38sm 5310cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface1Start, surface1End, surface1Normal); 5311cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface2Start, surface2End, surface2Normal); 5312cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface3Start, surface3End, surface3Normal); 5313cfd74d65d832137e20e193c960802afba73b5d38sm solidSurface.addSurface(surface4Start, surface4End, surface4Normal); 5314cfd74d65d832137e20e193c960802afba73b5d38sm 5315cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(solidSurface); 5316cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 5317cfd74d65d832137e20e193c960802afba73b5d38sm 5318cfd74d65d832137e20e193c960802afba73b5d38sm 5319cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.BREAKABLE_BLOCK, staticData); 5320cfd74d65d832137e20e193c960802afba73b5d38sm } 5321cfd74d65d832137e20e193c960802afba73b5d38sm 5322cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 5323cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_OBJECT); 5324cfd74d65d832137e20e193c960802afba73b5d38sm 5325cfd74d65d832137e20e193c960802afba73b5d38sm 5326cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 5327cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 5328cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 5329cfd74d65d832137e20e193c960802afba73b5d38sm 5330cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision 5331cfd74d65d832137e20e193c960802afba73b5d38sm = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 5332cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 5333cfd74d65d832137e20e193c960802afba73b5d38sm 5334cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact 5335cfd74d65d832137e20e193c960802afba73b5d38sm = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 5336cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 5337cfd74d65d832137e20e193c960802afba73b5d38sm 5338cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 5339cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setObjectToSpawnOnDeath(GameObjectType.BREAKABLE_BLOCK_PIECE_SPAWNER); 5340cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = BaseObject.sSystemRegistry.soundSystem; 5341cfd74d65d832137e20e193c960802afba73b5d38sm if (sound != null) { 5342cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setDeathSound(sound.load(R.raw.sound_break_block)); 5343cfd74d65d832137e20e193c960802afba73b5d38sm } 5344cfd74d65d832137e20e193c960802afba73b5d38sm 5345cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 5346cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 5347cfd74d65d832137e20e193c960802afba73b5d38sm 5348cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 5349cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 5350cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 5351cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 5352cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 5353cfd74d65d832137e20e193c960802afba73b5d38sm 5354cfd74d65d832137e20e193c960802afba73b5d38sm 5355cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.BREAKABLE_BLOCK, object, sprite); 5356cfd74d65d832137e20e193c960802afba73b5d38sm 5357cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 5358cfd74d65d832137e20e193c960802afba73b5d38sm 5359cfd74d65d832137e20e193c960802afba73b5d38sm return object; 5360cfd74d65d832137e20e193c960802afba73b5d38sm } 5361cfd74d65d832137e20e193c960802afba73b5d38sm 5362cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnObjectTheSource(float positionX, float positionY) { 5363cfd74d65d832137e20e193c960802afba73b5d38sm 5364cfd74d65d832137e20e193c960802afba73b5d38sm final TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 5365cfd74d65d832137e20e193c960802afba73b5d38sm 5366cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 5367cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mAlwaysActive; 5368cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 512; 5369cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 512; 5370cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 5371cfd74d65d832137e20e193c960802afba73b5d38sm 5372cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent layer1Render = (RenderComponent)allocateComponent(RenderComponent.class); 5373cfd74d65d832137e20e193c960802afba73b5d38sm layer1Render.setPriority(SortConstants.THE_SOURCE_START); 5374cfd74d65d832137e20e193c960802afba73b5d38sm FadeDrawableComponent layer1Fade = (FadeDrawableComponent)allocateComponent(FadeDrawableComponent.class); 5375cfd74d65d832137e20e193c960802afba73b5d38sm layer1Fade.setRenderComponent(layer1Render); 5376cfd74d65d832137e20e193c960802afba73b5d38sm layer1Fade.setTexture(textureLibrary.allocateTexture(R.drawable.enemy_source_spikes)); 5377cfd74d65d832137e20e193c960802afba73b5d38sm layer1Fade.setupFade(1.0f, 0.2f, 1.9f, FadeDrawableComponent.LOOP_TYPE_PING_PONG, FadeDrawableComponent.FADE_EASE, 0.0f); 5378cfd74d65d832137e20e193c960802afba73b5d38sm 5379cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent layer2Render = (RenderComponent)allocateComponent(RenderComponent.class); 5380cfd74d65d832137e20e193c960802afba73b5d38sm layer2Render.setPriority(SortConstants.THE_SOURCE_START + 1); 5381cfd74d65d832137e20e193c960802afba73b5d38sm FadeDrawableComponent layer2Fade = (FadeDrawableComponent)allocateComponent(FadeDrawableComponent.class); 5382cfd74d65d832137e20e193c960802afba73b5d38sm layer2Fade.setRenderComponent(layer2Render); 5383cfd74d65d832137e20e193c960802afba73b5d38sm layer2Fade.setTexture(textureLibrary.allocateTexture(R.drawable.enemy_source_body)); 5384cfd74d65d832137e20e193c960802afba73b5d38sm layer2Fade.setupFade(1.0f, 0.8f, 5.0f, FadeDrawableComponent.LOOP_TYPE_PING_PONG, FadeDrawableComponent.FADE_EASE, 0.0f); 5385cfd74d65d832137e20e193c960802afba73b5d38sm 5386cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent layer3Render = (RenderComponent)allocateComponent(RenderComponent.class); 5387cfd74d65d832137e20e193c960802afba73b5d38sm layer3Render.setPriority(SortConstants.THE_SOURCE_START + 2); 5388cfd74d65d832137e20e193c960802afba73b5d38sm FadeDrawableComponent layer3Fade = (FadeDrawableComponent)allocateComponent(FadeDrawableComponent.class); 5389cfd74d65d832137e20e193c960802afba73b5d38sm layer3Fade.setRenderComponent(layer3Render); 5390cfd74d65d832137e20e193c960802afba73b5d38sm layer3Fade.setTexture(textureLibrary.allocateTexture(R.drawable.enemy_source_black)); 5391cfd74d65d832137e20e193c960802afba73b5d38sm layer3Fade.setupFade(0.0f, 1.0f, 6.0f, FadeDrawableComponent.LOOP_TYPE_PING_PONG, FadeDrawableComponent.FADE_LINEAR, 0.0f); 5392cfd74d65d832137e20e193c960802afba73b5d38sm 5393cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent layer4Render = (RenderComponent)allocateComponent(RenderComponent.class); 5394cfd74d65d832137e20e193c960802afba73b5d38sm layer4Render.setPriority(SortConstants.THE_SOURCE_START + 3); 5395cfd74d65d832137e20e193c960802afba73b5d38sm FadeDrawableComponent layer4Fade = (FadeDrawableComponent)allocateComponent(FadeDrawableComponent.class); 5396cfd74d65d832137e20e193c960802afba73b5d38sm layer4Fade.setRenderComponent(layer4Render); 5397cfd74d65d832137e20e193c960802afba73b5d38sm layer4Fade.setTexture(textureLibrary.allocateTexture(R.drawable.enemy_source_spots)); 5398cfd74d65d832137e20e193c960802afba73b5d38sm layer4Fade.setupFade(0.0f, 1.0f, 2.3f, FadeDrawableComponent.LOOP_TYPE_PING_PONG, FadeDrawableComponent.FADE_EASE, 0.0f); 5399cfd74d65d832137e20e193c960802afba73b5d38sm 5400cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent layer5Render = (RenderComponent)allocateComponent(RenderComponent.class); 5401cfd74d65d832137e20e193c960802afba73b5d38sm layer5Render.setPriority(SortConstants.THE_SOURCE_START + 4); 5402cfd74d65d832137e20e193c960802afba73b5d38sm FadeDrawableComponent layer5Fade = (FadeDrawableComponent)allocateComponent(FadeDrawableComponent.class); 5403cfd74d65d832137e20e193c960802afba73b5d38sm layer5Fade.setRenderComponent(layer5Render); 5404cfd74d65d832137e20e193c960802afba73b5d38sm layer5Fade.setTexture(textureLibrary.allocateTexture(R.drawable.enemy_source_core)); 5405cfd74d65d832137e20e193c960802afba73b5d38sm layer5Fade.setupFade(0.2f, 1.0f, 1.2f, FadeDrawableComponent.LOOP_TYPE_PING_PONG, FadeDrawableComponent.FADE_EASE, 0.0f); 5406cfd74d65d832137e20e193c960802afba73b5d38sm 5407cfd74d65d832137e20e193c960802afba73b5d38sm 5408cfd74d65d832137e20e193c960802afba73b5d38sm OrbitalMagnetComponent orbit = (OrbitalMagnetComponent)allocateComponent(OrbitalMagnetComponent.class); 5409cfd74d65d832137e20e193c960802afba73b5d38sm orbit.setup(320.0f, 220.0f); 5410cfd74d65d832137e20e193c960802afba73b5d38sm 5411cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 5412cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> vulnerabilityVolume = 5413cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 5414cfd74d65d832137e20e193c960802afba73b5d38sm vulnerabilityVolume.add(new SphereCollisionVolume(256, 256, 256, HitType.HIT)); 5415cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> attackVolume = 5416cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 5417cfd74d65d832137e20e193c960802afba73b5d38sm attackVolume.add(new SphereCollisionVolume(256, 256, 256, HitType.HIT)); 5418cfd74d65d832137e20e193c960802afba73b5d38sm collision.setCollisionVolumes(attackVolume, vulnerabilityVolume); 5419cfd74d65d832137e20e193c960802afba73b5d38sm 5420cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 5421cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 5422cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setInvincibleTime(TheSourceComponent.SHAKE_TIME); 5423cfd74d65d832137e20e193c960802afba73b5d38sm 5424cfd74d65d832137e20e193c960802afba73b5d38sm TheSourceComponent theSource = (TheSourceComponent)allocateComponent(TheSourceComponent.class); 5425cfd74d65d832137e20e193c960802afba73b5d38sm ChannelSystem.Channel surpriseChannel = null; 5426cfd74d65d832137e20e193c960802afba73b5d38sm ChannelSystem channelSystem = BaseObject.sSystemRegistry.channelSystem; 5427cfd74d65d832137e20e193c960802afba73b5d38sm surpriseChannel = channelSystem.registerChannel(sSurprisedNPCChannel); 5428cfd74d65d832137e20e193c960802afba73b5d38sm theSource.setChannel(surpriseChannel); 5429cfd74d65d832137e20e193c960802afba73b5d38sm theSource.setGameEvent(GameFlowEvent.EVENT_SHOW_ANIMATION, AnimationPlayerActivity.WANDA_ENDING); 5430cfd74d65d832137e20e193c960802afba73b5d38sm 5431cfd74d65d832137e20e193c960802afba73b5d38sm 5432cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 3; 5433cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.PLAYER; 5434cfd74d65d832137e20e193c960802afba73b5d38sm 5435cfd74d65d832137e20e193c960802afba73b5d38sm object.add(layer1Render); 5436cfd74d65d832137e20e193c960802afba73b5d38sm object.add(layer2Render); 5437cfd74d65d832137e20e193c960802afba73b5d38sm object.add(layer3Render); 5438cfd74d65d832137e20e193c960802afba73b5d38sm object.add(layer4Render); 5439cfd74d65d832137e20e193c960802afba73b5d38sm object.add(layer5Render); 5440cfd74d65d832137e20e193c960802afba73b5d38sm 5441cfd74d65d832137e20e193c960802afba73b5d38sm object.add(layer1Fade); 5442cfd74d65d832137e20e193c960802afba73b5d38sm object.add(layer2Fade); 5443cfd74d65d832137e20e193c960802afba73b5d38sm object.add(layer3Fade); 5444cfd74d65d832137e20e193c960802afba73b5d38sm object.add(layer4Fade); 5445cfd74d65d832137e20e193c960802afba73b5d38sm object.add(layer5Fade); 5446cfd74d65d832137e20e193c960802afba73b5d38sm 5447cfd74d65d832137e20e193c960802afba73b5d38sm object.add(orbit); 5448cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 5449cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 5450cfd74d65d832137e20e193c960802afba73b5d38sm object.add(theSource); 5451cfd74d65d832137e20e193c960802afba73b5d38sm 5452cfd74d65d832137e20e193c960802afba73b5d38sm return object; 5453cfd74d65d832137e20e193c960802afba73b5d38sm } 54542b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 54552b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm public GameObject spawnObjectSign(float positionX, float positionY) { 54562b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 54572b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 54582b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm GameObject object = mGameObjectPool.allocate(); 54592b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.getPosition().set(positionX, positionY); 54602b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.activationRadius = mTightActivationRadius; 54612b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.width = 32; 54622b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.height = 32; 54632b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 54642b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.HINT_SIGN); 54652b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (staticData == null) { 54662b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final int staticObjectCount = 1; 54672b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 54682b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 54692b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 54702b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm new FixedSizeArray<CollisionVolume>(1); 54712b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm basicVulnerabilityVolume.add(new AABoxCollisionVolume(8, 0, 24, 32, HitType.COLLECT)); 54722b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 54732b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm SpriteAnimation idle = new SpriteAnimation(0, 1); 54742b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm AnimationFrame frame1 = new AnimationFrame(textureLibrary.allocateTexture(R.drawable.object_sign), 54752b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume); 54762b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 54772b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm idle.addFrame(frame1); 54782b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 54792b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm idle.setLoop(true); 54802b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 54812b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm staticData.add(idle); 54822b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 54832b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm setStaticData(GameObjectType.HINT_SIGN, staticData); 54842b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 54852b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 54862b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 54872b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm render.setPriority(SortConstants.GENERAL_OBJECT); 54882b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 54892b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 54902b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm sprite.setSize((int)object.width, (int)object.height); 54912b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm sprite.setRenderComponent(render); 54922b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 54932b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 54942b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm sprite.setCollisionComponent(dynamicCollision); 54952b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 54962b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm HitReactionComponent hitReact = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 54972b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm dynamicCollision.setHitReactionComponent(hitReact); 54982b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm hitReact.setSpawnGameEventOnHit(HitType.COLLECT, GameFlowEvent.EVENT_SHOW_DIALOG_CHARACTER2, 0); 54992b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 55002b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm SelectDialogComponent dialogSelect = (SelectDialogComponent)allocateComponent(SelectDialogComponent.class); 55012b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm dialogSelect.setHitReact(hitReact); 55022b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 55032b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.add(dialogSelect); 55042b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.add(render); 55052b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.add(sprite); 55062b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.add(dynamicCollision); 55072b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm object.add(hitReact); 55082b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 55092b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm addStaticData(GameObjectType.HINT_SIGN, object, sprite); 55102b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm sprite.playAnimation(0); 55112b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 55122b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm return object; 55132b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 5514cfd74d65d832137e20e193c960802afba73b5d38sm 5515cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnObjectTurret(float positionX, float positionY, boolean flipHorizontal) { 5516cfd74d65d832137e20e193c960802afba73b5d38sm 5517cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 5518cfd74d65d832137e20e193c960802afba73b5d38sm 5519cfd74d65d832137e20e193c960802afba73b5d38sm // Make sure related textures are loaded. 5520cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_bullet01); 5521cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.effect_bullet02); 5522cfd74d65d832137e20e193c960802afba73b5d38sm 5523cfd74d65d832137e20e193c960802afba73b5d38sm 5524cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 5525cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 5526cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 5527cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 5528cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 5529cfd74d65d832137e20e193c960802afba73b5d38sm 5530cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.TURRET); 5531cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 5532cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 3; 5533cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 5534cfd74d65d832137e20e193c960802afba73b5d38sm 5535cfd74d65d832137e20e193c960802afba73b5d38sm // Animations 5536cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicVulnerabilityVolume = 5537cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 5538cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.add(new SphereCollisionVolume(32, 32, 32)); 5539cfd74d65d832137e20e193c960802afba73b5d38sm basicVulnerabilityVolume.get(0).setHitType(HitType.POSSESS); 5540cfd74d65d832137e20e193c960802afba73b5d38sm 5541cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(EnemyAnimations.IDLE.ordinal(), 2); 5542cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5543cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_gunturret01), 5544cfd74d65d832137e20e193c960802afba73b5d38sm 1.0f, null, basicVulnerabilityVolume)); 5545cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5546cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_gunturret_idle), 5547cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 5548cfd74d65d832137e20e193c960802afba73b5d38sm idle.setLoop(true); 5549cfd74d65d832137e20e193c960802afba73b5d38sm 5550cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation attack = new SpriteAnimation(EnemyAnimations.ATTACK.ordinal(), 4); 5551cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 5552cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_gunturret02), 5553cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 5554cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 5555cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_gunturret01), 5556cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 5557cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 5558cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_gunturret03), 5559cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 2), null, basicVulnerabilityVolume)); 5560cfd74d65d832137e20e193c960802afba73b5d38sm attack.addFrame(new AnimationFrame( 5561cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.allocateTexture(R.drawable.object_gunturret01), 5562cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, basicVulnerabilityVolume)); 5563cfd74d65d832137e20e193c960802afba73b5d38sm attack.setLoop(true); 5564cfd74d65d832137e20e193c960802afba73b5d38sm 5565cfd74d65d832137e20e193c960802afba73b5d38sm GhostComponent ghost = (GhostComponent)allocateComponent(GhostComponent.class); 5566cfd74d65d832137e20e193c960802afba73b5d38sm ghost.setTargetAction(ActionType.IDLE); 5567cfd74d65d832137e20e193c960802afba73b5d38sm ghost.changeActionOnButton(ActionType.ATTACK); 5568cfd74d65d832137e20e193c960802afba73b5d38sm 5569cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 5570cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(attack); 5571cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(ghost); 5572cfd74d65d832137e20e193c960802afba73b5d38sm 5573cfd74d65d832137e20e193c960802afba73b5d38sm 5574cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.TURRET, staticData); 5575cfd74d65d832137e20e193c960802afba73b5d38sm } 5576cfd74d65d832137e20e193c960802afba73b5d38sm 5577cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 5578cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_OBJECT); 5579cfd74d65d832137e20e193c960802afba73b5d38sm 5580cfd74d65d832137e20e193c960802afba73b5d38sm 5581cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 5582cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 5583cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 5584cfd74d65d832137e20e193c960802afba73b5d38sm 5585cfd74d65d832137e20e193c960802afba73b5d38sm GenericAnimationComponent animation 5586cfd74d65d832137e20e193c960802afba73b5d38sm = (GenericAnimationComponent)allocateComponent(GenericAnimationComponent.class); 5587cfd74d65d832137e20e193c960802afba73b5d38sm animation.setSprite(sprite); 5588cfd74d65d832137e20e193c960802afba73b5d38sm 5589cfd74d65d832137e20e193c960802afba73b5d38sm AttackAtDistanceComponent attack = (AttackAtDistanceComponent) 5590cfd74d65d832137e20e193c960802afba73b5d38sm allocateComponent(AttackAtDistanceComponent.class); 5591cfd74d65d832137e20e193c960802afba73b5d38sm attack.setupAttack(300, 0.0f, 1.0f, true); 5592cfd74d65d832137e20e193c960802afba73b5d38sm 5593cfd74d65d832137e20e193c960802afba73b5d38sm 5594cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent collision 5595cfd74d65d832137e20e193c960802afba73b5d38sm = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 5596cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(collision); 5597cfd74d65d832137e20e193c960802afba73b5d38sm 5598cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent hitReact 5599cfd74d65d832137e20e193c960802afba73b5d38sm = (HitReactionComponent)allocateComponent(HitReactionComponent.class); 5600cfd74d65d832137e20e193c960802afba73b5d38sm collision.setHitReactionComponent(hitReact); 5601cfd74d65d832137e20e193c960802afba73b5d38sm 5602cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 5603cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setObjectToSpawnOnDeath(GameObjectType.EXPLOSION_LARGE); 5604cfd74d65d832137e20e193c960802afba73b5d38sm 5605cfd74d65d832137e20e193c960802afba73b5d38sm SoundSystem sound = sSystemRegistry.soundSystem; 5606cfd74d65d832137e20e193c960802afba73b5d38sm 5607cfd74d65d832137e20e193c960802afba73b5d38sm LaunchProjectileComponent gun 5608cfd74d65d832137e20e193c960802afba73b5d38sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 5609cfd74d65d832137e20e193c960802afba73b5d38sm gun.setShotsPerSet(1); 5610cfd74d65d832137e20e193c960802afba73b5d38sm gun.setDelayBetweenShots(0.0f); 5611cfd74d65d832137e20e193c960802afba73b5d38sm gun.setDelayBetweenSets(0.3f); 5612cfd74d65d832137e20e193c960802afba73b5d38sm gun.setObjectTypeToSpawn(GameObjectType.TURRET_BULLET); 5613cfd74d65d832137e20e193c960802afba73b5d38sm gun.setOffsetX(54); 5614cfd74d65d832137e20e193c960802afba73b5d38sm gun.setOffsetY(13); 5615cfd74d65d832137e20e193c960802afba73b5d38sm gun.setRequiredAction(GameObject.ActionType.ATTACK); 5616cfd74d65d832137e20e193c960802afba73b5d38sm gun.setVelocityX(300.0f); 5617cfd74d65d832137e20e193c960802afba73b5d38sm gun.setVelocityY(-300.0f); 5618cfd74d65d832137e20e193c960802afba73b5d38sm gun.setShootSound(sound.load(R.raw.sound_gun)); 5619cfd74d65d832137e20e193c960802afba73b5d38sm 5620cfd74d65d832137e20e193c960802afba73b5d38sm // Components for possession 5621cfd74d65d832137e20e193c960802afba73b5d38sm 5622cfd74d65d832137e20e193c960802afba73b5d38sm ChangeComponentsComponent componentSwap = (ChangeComponentsComponent)allocateComponent(ChangeComponentsComponent.class); 5623cfd74d65d832137e20e193c960802afba73b5d38sm componentSwap.addSwapOutComponent(attack); 5624cfd74d65d832137e20e193c960802afba73b5d38sm componentSwap.setPingPongBehavior(true); 5625cfd74d65d832137e20e193c960802afba73b5d38sm 5626cfd74d65d832137e20e193c960802afba73b5d38sm hitReact.setPossessionComponent(componentSwap); 5627cfd74d65d832137e20e193c960802afba73b5d38sm 5628cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.ENEMY; 5629cfd74d65d832137e20e193c960802afba73b5d38sm 5630cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 5631cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 5632cfd74d65d832137e20e193c960802afba73b5d38sm } else { 5633cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = 1.0f; 5634cfd74d65d832137e20e193c960802afba73b5d38sm } 5635cfd74d65d832137e20e193c960802afba73b5d38sm 5636cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 5637cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 5638cfd74d65d832137e20e193c960802afba73b5d38sm object.add(animation); 5639cfd74d65d832137e20e193c960802afba73b5d38sm object.add(attack); 5640cfd74d65d832137e20e193c960802afba73b5d38sm object.add(collision); 5641cfd74d65d832137e20e193c960802afba73b5d38sm object.add(hitReact); 5642cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 5643cfd74d65d832137e20e193c960802afba73b5d38sm object.add(gun); 5644cfd74d65d832137e20e193c960802afba73b5d38sm object.add(componentSwap); 5645cfd74d65d832137e20e193c960802afba73b5d38sm 5646cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.TURRET, object, sprite); 5647cfd74d65d832137e20e193c960802afba73b5d38sm 5648cfd74d65d832137e20e193c960802afba73b5d38sm object.commitUpdates(); 5649cfd74d65d832137e20e193c960802afba73b5d38sm 5650cfd74d65d832137e20e193c960802afba73b5d38sm GhostComponent possessedGhost = object.findByClass(GhostComponent.class); 5651cfd74d65d832137e20e193c960802afba73b5d38sm if (possessedGhost != null) { 5652cfd74d65d832137e20e193c960802afba73b5d38sm object.remove(possessedGhost); // Not supposed to be added yet. 5653cfd74d65d832137e20e193c960802afba73b5d38sm componentSwap.addSwapInComponent(possessedGhost); 5654cfd74d65d832137e20e193c960802afba73b5d38sm } 5655cfd74d65d832137e20e193c960802afba73b5d38sm 5656cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 5657cfd74d65d832137e20e193c960802afba73b5d38sm 5658cfd74d65d832137e20e193c960802afba73b5d38sm return object; 5659cfd74d65d832137e20e193c960802afba73b5d38sm } 5660cfd74d65d832137e20e193c960802afba73b5d38sm 5661cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnDust(float positionX, float positionY, boolean flipHorizontal) { 5662cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.longTermTextureLibrary; 5663cfd74d65d832137e20e193c960802afba73b5d38sm 5664cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 5665cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 5666cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 5667cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 32; 5668cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 5669cfd74d65d832137e20e193c960802afba73b5d38sm 5670cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.DUST); 5671cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 5672cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 1; 5673cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 5674cfd74d65d832137e20e193c960802afba73b5d38sm 5675cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 5); 5676cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.getTextureByResource(R.drawable.dust01), 5677cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1))); 5678cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.getTextureByResource(R.drawable.dust02), 5679cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1))); 5680cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.getTextureByResource(R.drawable.dust03), 5681cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1))); 5682cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.getTextureByResource(R.drawable.dust04), 5683cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1))); 5684cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame(textureLibrary.getTextureByResource(R.drawable.dust05), 5685cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1))); 5686cfd74d65d832137e20e193c960802afba73b5d38sm 5687cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 5688cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.DUST, staticData); 5689cfd74d65d832137e20e193c960802afba73b5d38sm } 5690cfd74d65d832137e20e193c960802afba73b5d38sm 5691cfd74d65d832137e20e193c960802afba73b5d38sm 5692cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 5693cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.EFFECT); 5694cfd74d65d832137e20e193c960802afba73b5d38sm 5695cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 5696cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setTimeUntilDeath(0.30f); 5697cfd74d65d832137e20e193c960802afba73b5d38sm 5698cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 5699cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 5700cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 5701cfd74d65d832137e20e193c960802afba73b5d38sm 5702cfd74d65d832137e20e193c960802afba73b5d38sm 5703cfd74d65d832137e20e193c960802afba73b5d38sm if (flipHorizontal) { 5704cfd74d65d832137e20e193c960802afba73b5d38sm object.facingDirection.x = -1.0f; 5705cfd74d65d832137e20e193c960802afba73b5d38sm } 5706cfd74d65d832137e20e193c960802afba73b5d38sm object.destroyOnDeactivation = true; 5707cfd74d65d832137e20e193c960802afba73b5d38sm 5708cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 5709cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 5710cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 5711cfd74d65d832137e20e193c960802afba73b5d38sm 5712cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.DUST, object, sprite); 5713cfd74d65d832137e20e193c960802afba73b5d38sm 5714cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 5715cfd74d65d832137e20e193c960802afba73b5d38sm 5716cfd74d65d832137e20e193c960802afba73b5d38sm return object; 5717cfd74d65d832137e20e193c960802afba73b5d38sm } 5718cfd74d65d832137e20e193c960802afba73b5d38sm 5719cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEffectExplosionSmall(float positionX, float positionY) { 5720cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.longTermTextureLibrary; 5721cfd74d65d832137e20e193c960802afba73b5d38sm 5722cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 5723cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 5724cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mAlwaysActive; 5725cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 32; 5726cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 5727cfd74d65d832137e20e193c960802afba73b5d38sm 5728cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.EXPLOSION_SMALL); 5729cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 5730cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 1; 5731cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 5732cfd74d65d832137e20e193c960802afba73b5d38sm 5733cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = 5734cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 5735cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(16, 16, 16, HitType.HIT)); 5736cfd74d65d832137e20e193c960802afba73b5d38sm 5737cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 7); 5738cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5739cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_small01), 5740cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5741cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5742cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_small02), 5743cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5744cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5745cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_small03), 5746cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5747cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5748cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_small04), 5749cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5750cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5751cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_small05), 5752cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5753cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5754cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_small06), 5755cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5756cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5757cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_small07), 5758cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5759cfd74d65d832137e20e193c960802afba73b5d38sm 5760cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 5761cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.EXPLOSION_SMALL, staticData); 5762cfd74d65d832137e20e193c960802afba73b5d38sm } 5763cfd74d65d832137e20e193c960802afba73b5d38sm 5764cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 5765cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.EFFECT); 5766cfd74d65d832137e20e193c960802afba73b5d38sm 5767cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 5768cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 5769cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 5770cfd74d65d832137e20e193c960802afba73b5d38sm 5771cfd74d65d832137e20e193c960802afba73b5d38sm 5772cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 5773cfd74d65d832137e20e193c960802afba73b5d38sm 5774cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 5775cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 5776cfd74d65d832137e20e193c960802afba73b5d38sm 5777cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 5778cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 5779cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 5780cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 5781cfd74d65d832137e20e193c960802afba73b5d38sm 5782cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.EXPLOSION_SMALL, object, sprite); 5783cfd74d65d832137e20e193c960802afba73b5d38sm 5784cfd74d65d832137e20e193c960802afba73b5d38sm final SpriteAnimation idle = sprite.findAnimation(0); 5785cfd74d65d832137e20e193c960802afba73b5d38sm if (idle != null) { 5786cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setTimeUntilDeath(idle.getLength()); 5787cfd74d65d832137e20e193c960802afba73b5d38sm } 5788cfd74d65d832137e20e193c960802afba73b5d38sm 5789cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 5790cfd74d65d832137e20e193c960802afba73b5d38sm 5791cfd74d65d832137e20e193c960802afba73b5d38sm return object; 5792cfd74d65d832137e20e193c960802afba73b5d38sm } 5793cfd74d65d832137e20e193c960802afba73b5d38sm 5794cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEffectExplosionLarge(float positionX, float positionY) { 5795cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.longTermTextureLibrary; 5796cfd74d65d832137e20e193c960802afba73b5d38sm 5797cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 5798cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 5799cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mAlwaysActive; 5800cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 5801cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 5802cfd74d65d832137e20e193c960802afba73b5d38sm 5803cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.EXPLOSION_LARGE); 5804cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 5805cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 1; 5806cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 5807cfd74d65d832137e20e193c960802afba73b5d38sm 5808cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = 5809cfd74d65d832137e20e193c960802afba73b5d38sm new FixedSizeArray<CollisionVolume>(1); 5810cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(32, 32, 32, HitType.HIT)); 5811cfd74d65d832137e20e193c960802afba73b5d38sm 5812cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 9); 5813cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5814cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big01), 5815cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5816cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5817cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big02), 5818cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5819cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5820cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big03), 5821cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5822cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5823cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big04), 5824cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5825cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5826cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big05), 5827cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5828cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5829cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big06), 5830cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5831cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5832cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big07), 5833cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5834cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5835cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big08), 5836cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5837cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5838cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big09), 5839cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5840cfd74d65d832137e20e193c960802afba73b5d38sm 5841cfd74d65d832137e20e193c960802afba73b5d38sm 5842cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 5843cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.EXPLOSION_LARGE, staticData); 5844cfd74d65d832137e20e193c960802afba73b5d38sm } 5845cfd74d65d832137e20e193c960802afba73b5d38sm 5846cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 5847cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.EFFECT); 5848cfd74d65d832137e20e193c960802afba73b5d38sm 5849cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 5850cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 5851cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 5852cfd74d65d832137e20e193c960802afba73b5d38sm 5853cfd74d65d832137e20e193c960802afba73b5d38sm 5854cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 5855cfd74d65d832137e20e193c960802afba73b5d38sm 5856cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = 5857cfd74d65d832137e20e193c960802afba73b5d38sm (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 5858cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 5859cfd74d65d832137e20e193c960802afba73b5d38sm 5860cfd74d65d832137e20e193c960802afba73b5d38sm PlaySingleSoundComponent soundEffect = (PlaySingleSoundComponent)allocateComponent(PlaySingleSoundComponent.class); 5861cfd74d65d832137e20e193c960802afba73b5d38sm soundEffect.setSound(sSystemRegistry.soundSystem.load(R.raw.quick_explosion)); 5862cfd74d65d832137e20e193c960802afba73b5d38sm 5863cfd74d65d832137e20e193c960802afba73b5d38sm 5864cfd74d65d832137e20e193c960802afba73b5d38sm object.add(soundEffect); 5865cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 5866cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 5867cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 5868cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 5869cfd74d65d832137e20e193c960802afba73b5d38sm 5870cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.EXPLOSION_LARGE, object, sprite); 5871cfd74d65d832137e20e193c960802afba73b5d38sm 5872cfd74d65d832137e20e193c960802afba73b5d38sm final SpriteAnimation idle = sprite.findAnimation(0); 5873cfd74d65d832137e20e193c960802afba73b5d38sm if (idle != null) { 5874cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setTimeUntilDeath(idle.getLength()); 5875cfd74d65d832137e20e193c960802afba73b5d38sm } 5876cfd74d65d832137e20e193c960802afba73b5d38sm 5877cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 5878cfd74d65d832137e20e193c960802afba73b5d38sm 5879cfd74d65d832137e20e193c960802afba73b5d38sm return object; 5880cfd74d65d832137e20e193c960802afba73b5d38sm } 5881cfd74d65d832137e20e193c960802afba73b5d38sm 5882cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEffectExplosionGiant(float positionX, float positionY) { 5883cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.longTermTextureLibrary; 5884cfd74d65d832137e20e193c960802afba73b5d38sm 5885cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 5886cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 5887cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mAlwaysActive; 5888cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 64; 5889cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 64; 5890cfd74d65d832137e20e193c960802afba73b5d38sm 5891cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.EXPLOSION_GIANT); 5892cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 5893cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 4; 5894cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 5895cfd74d65d832137e20e193c960802afba73b5d38sm 5896cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<CollisionVolume> basicAttackVolume = new FixedSizeArray<CollisionVolume>(1); 5897cfd74d65d832137e20e193c960802afba73b5d38sm basicAttackVolume.add(new SphereCollisionVolume(64, 32, 32, HitType.HIT)); 5898cfd74d65d832137e20e193c960802afba73b5d38sm 5899cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation idle = new SpriteAnimation(0, 9); 5900cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5901cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big01), 5902cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5903cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5904cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big02), 5905cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5906cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5907cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big03), 5908cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5909cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5910cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big04), 5911cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5912cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5913cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big05), 5914cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5915cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5916cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big06), 5917cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5918cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5919cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big07), 5920cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5921cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5922cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big08), 5923cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5924cfd74d65d832137e20e193c960802afba73b5d38sm idle.addFrame(new AnimationFrame( 5925cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_big09), 5926cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), basicAttackVolume, null)); 5927cfd74d65d832137e20e193c960802afba73b5d38sm 5928cfd74d65d832137e20e193c960802afba73b5d38sm 5929cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame smallFrame1 = new AnimationFrame( 5930cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_small01), 5931cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null); 5932cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame smallFrame2 = new AnimationFrame( 5933cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_small02), 5934cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null); 5935cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame smallFrame3 = new AnimationFrame( 5936cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_small03), 5937cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null); 5938cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame smallFrame4 = new AnimationFrame( 5939cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_small04), 5940cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null); 5941cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame smallFrame5 = new AnimationFrame( 5942cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_small05), 5943cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null); 5944cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame smallFrame6 = new AnimationFrame( 5945cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.effect_explosion_small06), 5946cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null); 5947cfd74d65d832137e20e193c960802afba73b5d38sm AnimationFrame smallFrame7 = new AnimationFrame 5948cfd74d65d832137e20e193c960802afba73b5d38sm (textureLibrary.getTextureByResource(R.drawable.effect_explosion_small07), 5949cfd74d65d832137e20e193c960802afba73b5d38sm Utils.framesToTime(24, 1), null, null); 5950cfd74d65d832137e20e193c960802afba73b5d38sm 5951cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation smallBlast1 = new SpriteAnimation(0, 7); 5952cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast1.addFrame(smallFrame1); 5953cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast1.addFrame(smallFrame2); 5954cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast1.addFrame(smallFrame3); 5955cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast1.addFrame(smallFrame4); 5956cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast1.addFrame(smallFrame5); 5957cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast1.addFrame(smallFrame6); 5958cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast1.addFrame(smallFrame7); 5959cfd74d65d832137e20e193c960802afba73b5d38sm 5960cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation smallBlast2 = new SpriteAnimation(0, 8); 5961cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast2.addFrame(new AnimationFrame(null, Utils.framesToTime(24, 4), null, null)); 5962cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast2.addFrame(smallFrame1); 5963cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast2.addFrame(smallFrame2); 5964cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast2.addFrame(smallFrame3); 5965cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast2.addFrame(smallFrame4); 5966cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast2.addFrame(smallFrame5); 5967cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast2.addFrame(smallFrame6); 5968cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast2.addFrame(smallFrame7); 5969cfd74d65d832137e20e193c960802afba73b5d38sm 5970cfd74d65d832137e20e193c960802afba73b5d38sm SpriteAnimation smallBlast3 = new SpriteAnimation(0, 8); 5971cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast3.addFrame(new AnimationFrame(null, Utils.framesToTime(24, 8), null, null)); 5972cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast3.addFrame(smallFrame1); 5973cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast3.addFrame(smallFrame2); 5974cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast3.addFrame(smallFrame3); 5975cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast3.addFrame(smallFrame4); 5976cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast3.addFrame(smallFrame5); 5977cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast3.addFrame(smallFrame6); 5978cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast3.addFrame(smallFrame7); 5979cfd74d65d832137e20e193c960802afba73b5d38sm 5980cfd74d65d832137e20e193c960802afba73b5d38sm 5981cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(idle); 5982cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(smallBlast1); 5983cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(smallBlast2); 5984cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(smallBlast3); 5985cfd74d65d832137e20e193c960802afba73b5d38sm 5986cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.EXPLOSION_GIANT, staticData); 5987cfd74d65d832137e20e193c960802afba73b5d38sm } 5988cfd74d65d832137e20e193c960802afba73b5d38sm 5989cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 5990cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.EFFECT); 5991cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 5992cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setSize((int)object.width, (int)object.height); 5993cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setRenderComponent(render); 5994cfd74d65d832137e20e193c960802afba73b5d38sm 5995cfd74d65d832137e20e193c960802afba73b5d38sm // Hack. Use static data differently for this object so we can share three animations 5996cfd74d65d832137e20e193c960802afba73b5d38sm // amongst three separate sprites. 5997cfd74d65d832137e20e193c960802afba73b5d38sm 5998cfd74d65d832137e20e193c960802afba73b5d38sm final SpriteAnimation idle = (SpriteAnimation)staticData.get(0); 5999cfd74d65d832137e20e193c960802afba73b5d38sm final SpriteAnimation smallBlast1 = (SpriteAnimation)staticData.get(1); 6000cfd74d65d832137e20e193c960802afba73b5d38sm final SpriteAnimation smallBlast2 = (SpriteAnimation)staticData.get(2); 6001cfd74d65d832137e20e193c960802afba73b5d38sm final SpriteAnimation smallBlast3 = (SpriteAnimation)staticData.get(3); 6002cfd74d65d832137e20e193c960802afba73b5d38sm 6003cfd74d65d832137e20e193c960802afba73b5d38sm sprite.addAnimation(idle); 6004cfd74d65d832137e20e193c960802afba73b5d38sm sprite.playAnimation(0); 6005cfd74d65d832137e20e193c960802afba73b5d38sm 6006cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent blast1Render = (RenderComponent)allocateComponent(RenderComponent.class); 6007cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.EFFECT); 6008cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent blast1Sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 6009cfd74d65d832137e20e193c960802afba73b5d38sm blast1Sprite.setSize(32, 32); 6010cfd74d65d832137e20e193c960802afba73b5d38sm blast1Sprite.setRenderComponent(blast1Render); 6011cfd74d65d832137e20e193c960802afba73b5d38sm blast1Render.setDrawOffset(40, 50); 6012cfd74d65d832137e20e193c960802afba73b5d38sm blast1Sprite.addAnimation(smallBlast1); 6013cfd74d65d832137e20e193c960802afba73b5d38sm blast1Sprite.playAnimation(0); 6014cfd74d65d832137e20e193c960802afba73b5d38sm 6015cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent blast2Render = (RenderComponent)allocateComponent(RenderComponent.class); 6016cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.EFFECT); 6017cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent blast2Sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 6018cfd74d65d832137e20e193c960802afba73b5d38sm blast2Sprite.setSize(32, 32); 6019cfd74d65d832137e20e193c960802afba73b5d38sm blast2Sprite.setRenderComponent(blast2Render); 6020cfd74d65d832137e20e193c960802afba73b5d38sm blast2Render.setDrawOffset(-10, 0); 6021cfd74d65d832137e20e193c960802afba73b5d38sm blast2Sprite.addAnimation(smallBlast2); 6022cfd74d65d832137e20e193c960802afba73b5d38sm blast2Sprite.playAnimation(0); 6023cfd74d65d832137e20e193c960802afba73b5d38sm 6024cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent blast3Render = (RenderComponent)allocateComponent(RenderComponent.class); 6025cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.EFFECT); 6026cfd74d65d832137e20e193c960802afba73b5d38sm SpriteComponent blast3Sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 6027cfd74d65d832137e20e193c960802afba73b5d38sm blast3Sprite.setSize(32, 32); 6028cfd74d65d832137e20e193c960802afba73b5d38sm blast3Sprite.setRenderComponent(blast3Render); 6029cfd74d65d832137e20e193c960802afba73b5d38sm blast3Render.setDrawOffset(0, 32); 6030cfd74d65d832137e20e193c960802afba73b5d38sm blast3Sprite.addAnimation(smallBlast3); 6031cfd74d65d832137e20e193c960802afba73b5d38sm blast3Sprite.playAnimation(0); 6032cfd74d65d832137e20e193c960802afba73b5d38sm 6033cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 6034cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setTimeUntilDeath(Math.max( 6035cfd74d65d832137e20e193c960802afba73b5d38sm Math.max( 6036cfd74d65d832137e20e193c960802afba73b5d38sm Math.max(idle.getLength(), smallBlast1.getLength()), 6037cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast2.getLength()), 6038cfd74d65d832137e20e193c960802afba73b5d38sm smallBlast3.getLength())); 6039cfd74d65d832137e20e193c960802afba73b5d38sm 6040cfd74d65d832137e20e193c960802afba73b5d38sm DynamicCollisionComponent dynamicCollision = 6041cfd74d65d832137e20e193c960802afba73b5d38sm (DynamicCollisionComponent)allocateComponent(DynamicCollisionComponent.class); 6042cfd74d65d832137e20e193c960802afba73b5d38sm sprite.setCollisionComponent(dynamicCollision); 6043cfd74d65d832137e20e193c960802afba73b5d38sm 6044cfd74d65d832137e20e193c960802afba73b5d38sm PlaySingleSoundComponent soundEffect = (PlaySingleSoundComponent)allocateComponent(PlaySingleSoundComponent.class); 6045cfd74d65d832137e20e193c960802afba73b5d38sm soundEffect.setSound(sSystemRegistry.soundSystem.load(R.raw.quick_explosion)); 6046cfd74d65d832137e20e193c960802afba73b5d38sm 6047cfd74d65d832137e20e193c960802afba73b5d38sm 6048cfd74d65d832137e20e193c960802afba73b5d38sm 6049cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.PLAYER; // Maybe this should be an argument to this function. 6050cfd74d65d832137e20e193c960802afba73b5d38sm 6051cfd74d65d832137e20e193c960802afba73b5d38sm object.add(dynamicCollision); 6052cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 6053cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 6054cfd74d65d832137e20e193c960802afba73b5d38sm object.add(sprite); 6055cfd74d65d832137e20e193c960802afba73b5d38sm object.add(soundEffect); 6056cfd74d65d832137e20e193c960802afba73b5d38sm 6057cfd74d65d832137e20e193c960802afba73b5d38sm 6058cfd74d65d832137e20e193c960802afba73b5d38sm object.add(blast1Render); 6059cfd74d65d832137e20e193c960802afba73b5d38sm object.add(blast1Sprite); 6060cfd74d65d832137e20e193c960802afba73b5d38sm 6061cfd74d65d832137e20e193c960802afba73b5d38sm object.add(blast2Render); 6062cfd74d65d832137e20e193c960802afba73b5d38sm object.add(blast2Sprite); 6063cfd74d65d832137e20e193c960802afba73b5d38sm 6064cfd74d65d832137e20e193c960802afba73b5d38sm object.add(blast3Render); 6065cfd74d65d832137e20e193c960802afba73b5d38sm object.add(blast3Sprite); 6066cfd74d65d832137e20e193c960802afba73b5d38sm 6067cfd74d65d832137e20e193c960802afba73b5d38sm 6068cfd74d65d832137e20e193c960802afba73b5d38sm return object; 6069cfd74d65d832137e20e193c960802afba73b5d38sm } 6070cfd74d65d832137e20e193c960802afba73b5d38sm 6071cfd74d65d832137e20e193c960802afba73b5d38sm 6072cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnGhostNPC(float positionX, float positionY) { 6073cfd74d65d832137e20e193c960802afba73b5d38sm 6074cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 6075cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 6076cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mAlwaysActive; 6077cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 32; 6078cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 6079cfd74d65d832137e20e193c960802afba73b5d38sm 6080cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.GHOST_NPC); 6081cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 6082cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 6083cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 6084cfd74d65d832137e20e193c960802afba73b5d38sm 6085cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent gravity = allocateComponent(GravityComponent.class); 6086cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 6087cfd74d65d832137e20e193c960802afba73b5d38sm 6088cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(gravity); 6089cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 6090cfd74d65d832137e20e193c960802afba73b5d38sm 6091cfd74d65d832137e20e193c960802afba73b5d38sm 6092cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.GHOST_NPC, staticData); 6093cfd74d65d832137e20e193c960802afba73b5d38sm } 6094cfd74d65d832137e20e193c960802afba73b5d38sm 6095cfd74d65d832137e20e193c960802afba73b5d38sm NPCComponent patrol = (NPCComponent)allocateComponent(NPCComponent.class); 6096cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent life = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 6097cfd74d65d832137e20e193c960802afba73b5d38sm 6098cfd74d65d832137e20e193c960802afba73b5d38sm object.team = Team.NONE; 6099cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 6100cfd74d65d832137e20e193c960802afba73b5d38sm 6101cfd74d65d832137e20e193c960802afba73b5d38sm object.add(patrol); 6102cfd74d65d832137e20e193c960802afba73b5d38sm object.add(life); 6103cfd74d65d832137e20e193c960802afba73b5d38sm 6104cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.GHOST_NPC, object, null); 6105cfd74d65d832137e20e193c960802afba73b5d38sm return object; 6106cfd74d65d832137e20e193c960802afba73b5d38sm } 6107cfd74d65d832137e20e193c960802afba73b5d38sm 6108cfd74d65d832137e20e193c960802afba73b5d38sm private GameObject spawnCameraBias(float positionX, float positionY) { 6109cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 6110cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 6111cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 6112cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 32; 6113cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 6114cfd74d65d832137e20e193c960802afba73b5d38sm 6115cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.CAMERA_BIAS); 6116cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 6117cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 1; 6118cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 6119cfd74d65d832137e20e193c960802afba73b5d38sm 6120cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent bias = allocateComponent(CameraBiasComponent.class); 6121cfd74d65d832137e20e193c960802afba73b5d38sm 6122cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(bias); 6123cfd74d65d832137e20e193c960802afba73b5d38sm 6124cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.CAMERA_BIAS, staticData); 6125cfd74d65d832137e20e193c960802afba73b5d38sm } 6126cfd74d65d832137e20e193c960802afba73b5d38sm 6127cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.CAMERA_BIAS, object, null); 6128cfd74d65d832137e20e193c960802afba73b5d38sm return object; 6129cfd74d65d832137e20e193c960802afba73b5d38sm } 6130cfd74d65d832137e20e193c960802afba73b5d38sm 6131cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEffectSmokeBig(float positionX, float positionY) { 6132cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.longTermTextureLibrary; 6133cfd74d65d832137e20e193c960802afba73b5d38sm 61349d4cc2572d37983607df38b0f4216ed76ac51814sm GameObject object = null; 61359d4cc2572d37983607df38b0f4216ed76ac51814sm // This is just an effect, so we can live without it if our pools are exhausted. 61369d4cc2572d37983607df38b0f4216ed76ac51814sm if (componentAvailable(RenderComponent.class, 1)) { 61379d4cc2572d37983607df38b0f4216ed76ac51814sm object = mGameObjectPool.allocate(); 61389d4cc2572d37983607df38b0f4216ed76ac51814sm 61399d4cc2572d37983607df38b0f4216ed76ac51814sm object.getPosition().set(positionX, positionY); 61409d4cc2572d37983607df38b0f4216ed76ac51814sm object.activationRadius = mTightActivationRadius; 61419d4cc2572d37983607df38b0f4216ed76ac51814sm object.width = 32; 61429d4cc2572d37983607df38b0f4216ed76ac51814sm object.height = 32; 61439d4cc2572d37983607df38b0f4216ed76ac51814sm 61449d4cc2572d37983607df38b0f4216ed76ac51814sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.SMOKE_BIG); 61459d4cc2572d37983607df38b0f4216ed76ac51814sm if (staticData == null) { 61469d4cc2572d37983607df38b0f4216ed76ac51814sm final int staticObjectCount = 6; 61479d4cc2572d37983607df38b0f4216ed76ac51814sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 61489d4cc2572d37983607df38b0f4216ed76ac51814sm 61499d4cc2572d37983607df38b0f4216ed76ac51814sm GameComponent movement = allocateComponent(MovementComponent.class); 61509d4cc2572d37983607df38b0f4216ed76ac51814sm 61519d4cc2572d37983607df38b0f4216ed76ac51814sm 61529d4cc2572d37983607df38b0f4216ed76ac51814sm AnimationFrame frame2 = new AnimationFrame( 61539d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_smoke_big02), 61549d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null); 61559d4cc2572d37983607df38b0f4216ed76ac51814sm 61569d4cc2572d37983607df38b0f4216ed76ac51814sm AnimationFrame frame3 = new AnimationFrame( 61579d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_smoke_big03), 61589d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null); 61599d4cc2572d37983607df38b0f4216ed76ac51814sm 61609d4cc2572d37983607df38b0f4216ed76ac51814sm AnimationFrame frame4 = new AnimationFrame( 61619d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_smoke_big04), 61629d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null); 61639d4cc2572d37983607df38b0f4216ed76ac51814sm 61649d4cc2572d37983607df38b0f4216ed76ac51814sm AnimationFrame frame5 = new AnimationFrame( 61659d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_smoke_big05), 61669d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null); 61679d4cc2572d37983607df38b0f4216ed76ac51814sm 61689d4cc2572d37983607df38b0f4216ed76ac51814sm SpriteAnimation idle = new SpriteAnimation(0, 5); 61699d4cc2572d37983607df38b0f4216ed76ac51814sm idle.addFrame(new AnimationFrame( 61709d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_smoke_big01), 61719d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 10), null, null)); 61729d4cc2572d37983607df38b0f4216ed76ac51814sm idle.addFrame(frame2); 61739d4cc2572d37983607df38b0f4216ed76ac51814sm idle.addFrame(frame3); 61749d4cc2572d37983607df38b0f4216ed76ac51814sm idle.addFrame(frame4); 61759d4cc2572d37983607df38b0f4216ed76ac51814sm idle.addFrame(frame5); 61769d4cc2572d37983607df38b0f4216ed76ac51814sm 61779d4cc2572d37983607df38b0f4216ed76ac51814sm SpriteAnimation idle2 = new SpriteAnimation(1, 5); 61789d4cc2572d37983607df38b0f4216ed76ac51814sm idle2.addFrame(new AnimationFrame( 61799d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_smoke_big01), 61809d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 13), null, null)); 61819d4cc2572d37983607df38b0f4216ed76ac51814sm idle2.addFrame(frame2); 61829d4cc2572d37983607df38b0f4216ed76ac51814sm idle2.addFrame(frame3); 61839d4cc2572d37983607df38b0f4216ed76ac51814sm idle2.addFrame(frame4); 61849d4cc2572d37983607df38b0f4216ed76ac51814sm idle2.addFrame(frame5); 61859d4cc2572d37983607df38b0f4216ed76ac51814sm 61869d4cc2572d37983607df38b0f4216ed76ac51814sm SpriteAnimation idle3 = new SpriteAnimation(2, 5); 61879d4cc2572d37983607df38b0f4216ed76ac51814sm idle3.addFrame(new AnimationFrame( 61889d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_smoke_big01), 61899d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 8), null, null)); 61909d4cc2572d37983607df38b0f4216ed76ac51814sm idle3.addFrame(frame2); 61919d4cc2572d37983607df38b0f4216ed76ac51814sm idle3.addFrame(frame3); 61929d4cc2572d37983607df38b0f4216ed76ac51814sm idle3.addFrame(frame4); 61939d4cc2572d37983607df38b0f4216ed76ac51814sm idle3.addFrame(frame5); 61949d4cc2572d37983607df38b0f4216ed76ac51814sm 61959d4cc2572d37983607df38b0f4216ed76ac51814sm SpriteAnimation idle4 = new SpriteAnimation(3, 5); 61969d4cc2572d37983607df38b0f4216ed76ac51814sm idle4.addFrame(new AnimationFrame( 61979d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_smoke_big01), 61989d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 5), null, null)); 61999d4cc2572d37983607df38b0f4216ed76ac51814sm idle4.addFrame(frame2); 62009d4cc2572d37983607df38b0f4216ed76ac51814sm idle4.addFrame(frame3); 62019d4cc2572d37983607df38b0f4216ed76ac51814sm idle4.addFrame(frame4); 62029d4cc2572d37983607df38b0f4216ed76ac51814sm idle4.addFrame(frame5); 62039d4cc2572d37983607df38b0f4216ed76ac51814sm 62049d4cc2572d37983607df38b0f4216ed76ac51814sm SpriteAnimation idle5 = new SpriteAnimation(4, 5); 62059d4cc2572d37983607df38b0f4216ed76ac51814sm idle5.addFrame(new AnimationFrame( 62069d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_smoke_big01), 62079d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 15), null, null)); 62089d4cc2572d37983607df38b0f4216ed76ac51814sm idle5.addFrame(frame2); 62099d4cc2572d37983607df38b0f4216ed76ac51814sm idle5.addFrame(frame3); 62109d4cc2572d37983607df38b0f4216ed76ac51814sm idle5.addFrame(frame4); 62119d4cc2572d37983607df38b0f4216ed76ac51814sm idle5.addFrame(frame5); 62129d4cc2572d37983607df38b0f4216ed76ac51814sm 62139d4cc2572d37983607df38b0f4216ed76ac51814sm staticData.add(idle); 62149d4cc2572d37983607df38b0f4216ed76ac51814sm staticData.add(idle2); 62159d4cc2572d37983607df38b0f4216ed76ac51814sm staticData.add(idle3); 62169d4cc2572d37983607df38b0f4216ed76ac51814sm staticData.add(idle4); 62179d4cc2572d37983607df38b0f4216ed76ac51814sm staticData.add(idle5); 62189d4cc2572d37983607df38b0f4216ed76ac51814sm staticData.add(movement); 62199d4cc2572d37983607df38b0f4216ed76ac51814sm setStaticData(GameObjectType.SMOKE_BIG, staticData); 62209d4cc2572d37983607df38b0f4216ed76ac51814sm } 62219d4cc2572d37983607df38b0f4216ed76ac51814sm 62229d4cc2572d37983607df38b0f4216ed76ac51814sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 62239d4cc2572d37983607df38b0f4216ed76ac51814sm render.setPriority(SortConstants.EFFECT); 62249d4cc2572d37983607df38b0f4216ed76ac51814sm 62259d4cc2572d37983607df38b0f4216ed76ac51814sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 62269d4cc2572d37983607df38b0f4216ed76ac51814sm sprite.setSize((int)object.width, (int)object.height); 62279d4cc2572d37983607df38b0f4216ed76ac51814sm sprite.setRenderComponent(render); 62289d4cc2572d37983607df38b0f4216ed76ac51814sm 62299d4cc2572d37983607df38b0f4216ed76ac51814sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 62309d4cc2572d37983607df38b0f4216ed76ac51814sm lifetime.setDieWhenInvisible(true); 62319d4cc2572d37983607df38b0f4216ed76ac51814sm 62329d4cc2572d37983607df38b0f4216ed76ac51814sm object.destroyOnDeactivation = true; 62339d4cc2572d37983607df38b0f4216ed76ac51814sm 62349d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(lifetime); 62359d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(render); 62369d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(sprite); 62379d4cc2572d37983607df38b0f4216ed76ac51814sm 62389d4cc2572d37983607df38b0f4216ed76ac51814sm addStaticData(GameObjectType.SMOKE_BIG, object, sprite); 62399d4cc2572d37983607df38b0f4216ed76ac51814sm 62409d4cc2572d37983607df38b0f4216ed76ac51814sm final int animIndex = (int)(Math.random() * sprite.getAnimationCount()); 62419d4cc2572d37983607df38b0f4216ed76ac51814sm final SpriteAnimation idle = sprite.findAnimation(animIndex); 62429d4cc2572d37983607df38b0f4216ed76ac51814sm if (idle != null) { 62439d4cc2572d37983607df38b0f4216ed76ac51814sm lifetime.setTimeUntilDeath(idle.getLength()); 62449d4cc2572d37983607df38b0f4216ed76ac51814sm sprite.playAnimation(animIndex); 62459d4cc2572d37983607df38b0f4216ed76ac51814sm } 62469d4cc2572d37983607df38b0f4216ed76ac51814sm 6247cfd74d65d832137e20e193c960802afba73b5d38sm 6248cfd74d65d832137e20e193c960802afba73b5d38sm } 6249cfd74d65d832137e20e193c960802afba73b5d38sm return object; 6250cfd74d65d832137e20e193c960802afba73b5d38sm } 6251cfd74d65d832137e20e193c960802afba73b5d38sm 6252cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEffectSmokeSmall(float positionX, float positionY) { 6253cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.longTermTextureLibrary; 6254cfd74d65d832137e20e193c960802afba73b5d38sm 62559d4cc2572d37983607df38b0f4216ed76ac51814sm GameObject object = null; 62569d4cc2572d37983607df38b0f4216ed76ac51814sm // This is just an effect, so we can live without it if our pools are exhausted. 62579d4cc2572d37983607df38b0f4216ed76ac51814sm if (componentAvailable(RenderComponent.class, 1)) { 62589d4cc2572d37983607df38b0f4216ed76ac51814sm object = mGameObjectPool.allocate(); 62599d4cc2572d37983607df38b0f4216ed76ac51814sm object.getPosition().set(positionX, positionY); 62609d4cc2572d37983607df38b0f4216ed76ac51814sm object.activationRadius = mAlwaysActive; 62619d4cc2572d37983607df38b0f4216ed76ac51814sm object.width = 16; 62629d4cc2572d37983607df38b0f4216ed76ac51814sm object.height = 16; 62639d4cc2572d37983607df38b0f4216ed76ac51814sm 62649d4cc2572d37983607df38b0f4216ed76ac51814sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.SMOKE_SMALL); 62659d4cc2572d37983607df38b0f4216ed76ac51814sm if (staticData == null) { 62669d4cc2572d37983607df38b0f4216ed76ac51814sm final int staticObjectCount = 2; 62679d4cc2572d37983607df38b0f4216ed76ac51814sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 62689d4cc2572d37983607df38b0f4216ed76ac51814sm 62699d4cc2572d37983607df38b0f4216ed76ac51814sm GameComponent movement = allocateComponent(MovementComponent.class); 62709d4cc2572d37983607df38b0f4216ed76ac51814sm 62719d4cc2572d37983607df38b0f4216ed76ac51814sm SpriteAnimation idle = new SpriteAnimation(0, 5); 62729d4cc2572d37983607df38b0f4216ed76ac51814sm idle.addFrame(new AnimationFrame( 62739d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_smoke_small01), 62749d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 10), null, null)); 62759d4cc2572d37983607df38b0f4216ed76ac51814sm idle.addFrame(new AnimationFrame( 62769d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_smoke_small02), 62779d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 62789d4cc2572d37983607df38b0f4216ed76ac51814sm idle.addFrame(new AnimationFrame( 62799d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_smoke_small03), 62809d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 62819d4cc2572d37983607df38b0f4216ed76ac51814sm idle.addFrame(new AnimationFrame( 62829d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_smoke_small04), 62839d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 62849d4cc2572d37983607df38b0f4216ed76ac51814sm idle.addFrame(new AnimationFrame( 62859d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_smoke_small05), 62869d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 62879d4cc2572d37983607df38b0f4216ed76ac51814sm 62889d4cc2572d37983607df38b0f4216ed76ac51814sm staticData.add(idle); 62899d4cc2572d37983607df38b0f4216ed76ac51814sm staticData.add(movement); 62909d4cc2572d37983607df38b0f4216ed76ac51814sm setStaticData(GameObjectType.SMOKE_SMALL, staticData); 62919d4cc2572d37983607df38b0f4216ed76ac51814sm } 62929d4cc2572d37983607df38b0f4216ed76ac51814sm 62939d4cc2572d37983607df38b0f4216ed76ac51814sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 62949d4cc2572d37983607df38b0f4216ed76ac51814sm render.setPriority(SortConstants.EFFECT); 62959d4cc2572d37983607df38b0f4216ed76ac51814sm 62969d4cc2572d37983607df38b0f4216ed76ac51814sm SpriteComponent sprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 62979d4cc2572d37983607df38b0f4216ed76ac51814sm sprite.setSize((int)object.width, (int)object.height); 62989d4cc2572d37983607df38b0f4216ed76ac51814sm sprite.setRenderComponent(render); 62999d4cc2572d37983607df38b0f4216ed76ac51814sm 63009d4cc2572d37983607df38b0f4216ed76ac51814sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 63019d4cc2572d37983607df38b0f4216ed76ac51814sm lifetime.setDieWhenInvisible(true); 63029d4cc2572d37983607df38b0f4216ed76ac51814sm 63039d4cc2572d37983607df38b0f4216ed76ac51814sm object.destroyOnDeactivation = true; 63049d4cc2572d37983607df38b0f4216ed76ac51814sm 63059d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(lifetime); 63069d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(render); 63079d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(sprite); 63089d4cc2572d37983607df38b0f4216ed76ac51814sm 63099d4cc2572d37983607df38b0f4216ed76ac51814sm addStaticData(GameObjectType.SMOKE_SMALL, object, sprite); 63109d4cc2572d37983607df38b0f4216ed76ac51814sm 63119d4cc2572d37983607df38b0f4216ed76ac51814sm final SpriteAnimation idle = sprite.findAnimation(0); 63129d4cc2572d37983607df38b0f4216ed76ac51814sm if (idle != null) { 63139d4cc2572d37983607df38b0f4216ed76ac51814sm lifetime.setTimeUntilDeath(idle.getLength()); 63149d4cc2572d37983607df38b0f4216ed76ac51814sm } 63159d4cc2572d37983607df38b0f4216ed76ac51814sm 63169d4cc2572d37983607df38b0f4216ed76ac51814sm sprite.playAnimation(0); 6317cfd74d65d832137e20e193c960802afba73b5d38sm } 6318cfd74d65d832137e20e193c960802afba73b5d38sm 6319cfd74d65d832137e20e193c960802afba73b5d38sm return object; 6320cfd74d65d832137e20e193c960802afba73b5d38sm } 6321cfd74d65d832137e20e193c960802afba73b5d38sm 6322cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnEffectCrushFlash(float positionX, float positionY) { 6323cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.longTermTextureLibrary; 6324cfd74d65d832137e20e193c960802afba73b5d38sm 63259d4cc2572d37983607df38b0f4216ed76ac51814sm GameObject object = null; 63269d4cc2572d37983607df38b0f4216ed76ac51814sm // This is just an effect, so we can live without it if our pools are exhausted. 63279d4cc2572d37983607df38b0f4216ed76ac51814sm if (componentAvailable(RenderComponent.class, 1)) { 63289d4cc2572d37983607df38b0f4216ed76ac51814sm object = mGameObjectPool.allocate(); 63299d4cc2572d37983607df38b0f4216ed76ac51814sm object.getPosition().set(positionX, positionY); 63309d4cc2572d37983607df38b0f4216ed76ac51814sm object.activationRadius = mAlwaysActive; 63319d4cc2572d37983607df38b0f4216ed76ac51814sm object.width = 64; 63329d4cc2572d37983607df38b0f4216ed76ac51814sm object.height = 64; 63339d4cc2572d37983607df38b0f4216ed76ac51814sm 63349d4cc2572d37983607df38b0f4216ed76ac51814sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.CRUSH_FLASH); 63359d4cc2572d37983607df38b0f4216ed76ac51814sm if (staticData == null) { 63369d4cc2572d37983607df38b0f4216ed76ac51814sm final int staticObjectCount = 2; 63379d4cc2572d37983607df38b0f4216ed76ac51814sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 63389d4cc2572d37983607df38b0f4216ed76ac51814sm 63399d4cc2572d37983607df38b0f4216ed76ac51814sm SpriteAnimation back = new SpriteAnimation(0, 3); 63409d4cc2572d37983607df38b0f4216ed76ac51814sm back.addFrame(new AnimationFrame( 63419d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_crush_back01), 63429d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 63439d4cc2572d37983607df38b0f4216ed76ac51814sm back.addFrame(new AnimationFrame( 63449d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_crush_back02), 63459d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 63469d4cc2572d37983607df38b0f4216ed76ac51814sm back.addFrame(new AnimationFrame( 63479d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_crush_back03), 63489d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 63499d4cc2572d37983607df38b0f4216ed76ac51814sm 63509d4cc2572d37983607df38b0f4216ed76ac51814sm SpriteAnimation front = new SpriteAnimation(1, 7); 63519d4cc2572d37983607df38b0f4216ed76ac51814sm front.addFrame(new AnimationFrame( 63529d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_crush_front01), 63539d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 63549d4cc2572d37983607df38b0f4216ed76ac51814sm front.addFrame(new AnimationFrame( 63559d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_crush_front02), 63569d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 63579d4cc2572d37983607df38b0f4216ed76ac51814sm front.addFrame(new AnimationFrame( 63589d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_crush_front03), 63599d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 63609d4cc2572d37983607df38b0f4216ed76ac51814sm front.addFrame(new AnimationFrame( 63619d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_crush_front04), 63629d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 63639d4cc2572d37983607df38b0f4216ed76ac51814sm front.addFrame(new AnimationFrame( 63649d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_crush_front05), 63659d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 63669d4cc2572d37983607df38b0f4216ed76ac51814sm front.addFrame(new AnimationFrame( 63679d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_crush_front06), 63689d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 63699d4cc2572d37983607df38b0f4216ed76ac51814sm front.addFrame(new AnimationFrame( 63709d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_crush_front07), 63719d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 63729d4cc2572d37983607df38b0f4216ed76ac51814sm 63739d4cc2572d37983607df38b0f4216ed76ac51814sm 63749d4cc2572d37983607df38b0f4216ed76ac51814sm staticData.add(back); 63759d4cc2572d37983607df38b0f4216ed76ac51814sm staticData.add(front); 63769d4cc2572d37983607df38b0f4216ed76ac51814sm setStaticData(GameObjectType.CRUSH_FLASH, staticData); 63779d4cc2572d37983607df38b0f4216ed76ac51814sm } 63789d4cc2572d37983607df38b0f4216ed76ac51814sm 63799d4cc2572d37983607df38b0f4216ed76ac51814sm 63809d4cc2572d37983607df38b0f4216ed76ac51814sm RenderComponent backRender = (RenderComponent)allocateComponent(RenderComponent.class); 63819d4cc2572d37983607df38b0f4216ed76ac51814sm backRender.setPriority(SortConstants.EFFECT); 63829d4cc2572d37983607df38b0f4216ed76ac51814sm 63839d4cc2572d37983607df38b0f4216ed76ac51814sm SpriteComponent backSprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 63849d4cc2572d37983607df38b0f4216ed76ac51814sm backSprite.setSize((int)object.width, (int)object.height); 63859d4cc2572d37983607df38b0f4216ed76ac51814sm backSprite.setRenderComponent(backRender); 63869d4cc2572d37983607df38b0f4216ed76ac51814sm 63879d4cc2572d37983607df38b0f4216ed76ac51814sm RenderComponent foreRender = (RenderComponent)allocateComponent(RenderComponent.class); 63889d4cc2572d37983607df38b0f4216ed76ac51814sm foreRender.setPriority(SortConstants.FOREGROUND_EFFECT); 63899d4cc2572d37983607df38b0f4216ed76ac51814sm 63909d4cc2572d37983607df38b0f4216ed76ac51814sm SpriteComponent foreSprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 63919d4cc2572d37983607df38b0f4216ed76ac51814sm foreSprite.setSize((int)object.width, (int)object.height); 63929d4cc2572d37983607df38b0f4216ed76ac51814sm foreSprite.setRenderComponent(foreRender); 63939d4cc2572d37983607df38b0f4216ed76ac51814sm 63949d4cc2572d37983607df38b0f4216ed76ac51814sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 63959d4cc2572d37983607df38b0f4216ed76ac51814sm 63969d4cc2572d37983607df38b0f4216ed76ac51814sm 63979d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(lifetime); 63989d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(backRender); 63999d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(foreRender); 64009d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(foreSprite); 64019d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(backSprite); 64029d4cc2572d37983607df38b0f4216ed76ac51814sm 64039d4cc2572d37983607df38b0f4216ed76ac51814sm addStaticData(GameObjectType.CRUSH_FLASH, object, backSprite); 64049d4cc2572d37983607df38b0f4216ed76ac51814sm addStaticData(GameObjectType.CRUSH_FLASH, null, foreSprite); 64059d4cc2572d37983607df38b0f4216ed76ac51814sm 64069d4cc2572d37983607df38b0f4216ed76ac51814sm 64079d4cc2572d37983607df38b0f4216ed76ac51814sm final SpriteAnimation idle = foreSprite.findAnimation(1); 64089d4cc2572d37983607df38b0f4216ed76ac51814sm if (idle != null) { 64099d4cc2572d37983607df38b0f4216ed76ac51814sm lifetime.setTimeUntilDeath(idle.getLength()); 64109d4cc2572d37983607df38b0f4216ed76ac51814sm } 64119d4cc2572d37983607df38b0f4216ed76ac51814sm 64129d4cc2572d37983607df38b0f4216ed76ac51814sm backSprite.playAnimation(0); 64139d4cc2572d37983607df38b0f4216ed76ac51814sm foreSprite.playAnimation(1); 6414cfd74d65d832137e20e193c960802afba73b5d38sm } 6415cfd74d65d832137e20e193c960802afba73b5d38sm 64169d4cc2572d37983607df38b0f4216ed76ac51814sm return object; 64179d4cc2572d37983607df38b0f4216ed76ac51814sm } 6418cfd74d65d832137e20e193c960802afba73b5d38sm 64199d4cc2572d37983607df38b0f4216ed76ac51814sm public GameObject spawnEffectFlash(float positionX, float positionY) { 64209d4cc2572d37983607df38b0f4216ed76ac51814sm TextureLibrary textureLibrary = sSystemRegistry.longTermTextureLibrary; 64219d4cc2572d37983607df38b0f4216ed76ac51814sm GameObject object = null; 64229d4cc2572d37983607df38b0f4216ed76ac51814sm // This is just an effect, so we can live without it if our pools are exhausted. 64239d4cc2572d37983607df38b0f4216ed76ac51814sm if (componentAvailable(RenderComponent.class, 1)) { 64249d4cc2572d37983607df38b0f4216ed76ac51814sm object = mGameObjectPool.allocate(); 64259d4cc2572d37983607df38b0f4216ed76ac51814sm object.getPosition().set(positionX, positionY); 64269d4cc2572d37983607df38b0f4216ed76ac51814sm object.activationRadius = mAlwaysActive; 64279d4cc2572d37983607df38b0f4216ed76ac51814sm object.width = 64; 64289d4cc2572d37983607df38b0f4216ed76ac51814sm object.height = 64; 64299d4cc2572d37983607df38b0f4216ed76ac51814sm 64309d4cc2572d37983607df38b0f4216ed76ac51814sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.FLASH); 64319d4cc2572d37983607df38b0f4216ed76ac51814sm if (staticData == null) { 64329d4cc2572d37983607df38b0f4216ed76ac51814sm final int staticObjectCount = 1; 64339d4cc2572d37983607df38b0f4216ed76ac51814sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 64349d4cc2572d37983607df38b0f4216ed76ac51814sm 64359d4cc2572d37983607df38b0f4216ed76ac51814sm SpriteAnimation back = new SpriteAnimation(0, 3); 64369d4cc2572d37983607df38b0f4216ed76ac51814sm back.addFrame(new AnimationFrame( 64379d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_crush_back01), 64389d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 64399d4cc2572d37983607df38b0f4216ed76ac51814sm back.addFrame(new AnimationFrame( 64409d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_crush_back02), 64419d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 64429d4cc2572d37983607df38b0f4216ed76ac51814sm back.addFrame(new AnimationFrame( 64439d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.getTextureByResource(R.drawable.effect_crush_back03), 64449d4cc2572d37983607df38b0f4216ed76ac51814sm Utils.framesToTime(24, 1), null, null)); 64459d4cc2572d37983607df38b0f4216ed76ac51814sm 64469d4cc2572d37983607df38b0f4216ed76ac51814sm 64479d4cc2572d37983607df38b0f4216ed76ac51814sm staticData.add(back); 64489d4cc2572d37983607df38b0f4216ed76ac51814sm setStaticData(GameObjectType.FLASH, staticData); 64499d4cc2572d37983607df38b0f4216ed76ac51814sm } 64509d4cc2572d37983607df38b0f4216ed76ac51814sm 64519d4cc2572d37983607df38b0f4216ed76ac51814sm 64529d4cc2572d37983607df38b0f4216ed76ac51814sm RenderComponent backRender = (RenderComponent)allocateComponent(RenderComponent.class); 64539d4cc2572d37983607df38b0f4216ed76ac51814sm backRender.setPriority(SortConstants.EFFECT); 64549d4cc2572d37983607df38b0f4216ed76ac51814sm 64559d4cc2572d37983607df38b0f4216ed76ac51814sm SpriteComponent backSprite = (SpriteComponent)allocateComponent(SpriteComponent.class); 64569d4cc2572d37983607df38b0f4216ed76ac51814sm backSprite.setSize((int)object.width, (int)object.height); 64579d4cc2572d37983607df38b0f4216ed76ac51814sm backSprite.setRenderComponent(backRender); 64589d4cc2572d37983607df38b0f4216ed76ac51814sm 64599d4cc2572d37983607df38b0f4216ed76ac51814sm 64609d4cc2572d37983607df38b0f4216ed76ac51814sm 64619d4cc2572d37983607df38b0f4216ed76ac51814sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 64629d4cc2572d37983607df38b0f4216ed76ac51814sm 64639d4cc2572d37983607df38b0f4216ed76ac51814sm 64649d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(lifetime); 64659d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(backRender); 64669d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(backSprite); 64679d4cc2572d37983607df38b0f4216ed76ac51814sm 64689d4cc2572d37983607df38b0f4216ed76ac51814sm addStaticData(GameObjectType.FLASH, object, backSprite); 64699d4cc2572d37983607df38b0f4216ed76ac51814sm 64709d4cc2572d37983607df38b0f4216ed76ac51814sm 64719d4cc2572d37983607df38b0f4216ed76ac51814sm final SpriteAnimation idle = backSprite.findAnimation(0); 64729d4cc2572d37983607df38b0f4216ed76ac51814sm if (idle != null) { 64739d4cc2572d37983607df38b0f4216ed76ac51814sm lifetime.setTimeUntilDeath(idle.getLength()); 64749d4cc2572d37983607df38b0f4216ed76ac51814sm } 64759d4cc2572d37983607df38b0f4216ed76ac51814sm 64769d4cc2572d37983607df38b0f4216ed76ac51814sm backSprite.playAnimation(0); 6477cfd74d65d832137e20e193c960802afba73b5d38sm } 6478cfd74d65d832137e20e193c960802afba73b5d38sm 6479cfd74d65d832137e20e193c960802afba73b5d38sm return object; 6480cfd74d65d832137e20e193c960802afba73b5d38sm } 6481cfd74d65d832137e20e193c960802afba73b5d38sm 6482cfd74d65d832137e20e193c960802afba73b5d38sm 64839d4cc2572d37983607df38b0f4216ed76ac51814sm public GameObject spawnFrameRateWatcher(float positionX, float positionY) { 64849d4cc2572d37983607df38b0f4216ed76ac51814sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 64859d4cc2572d37983607df38b0f4216ed76ac51814sm ContextParameters params = sSystemRegistry.contextParameters; 64869d4cc2572d37983607df38b0f4216ed76ac51814sm 6487cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 64889d4cc2572d37983607df38b0f4216ed76ac51814sm object.getPosition().set(250, 0); // HACK! 6489cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mAlwaysActive; 64909d4cc2572d37983607df38b0f4216ed76ac51814sm object.width = params.gameWidth; 64919d4cc2572d37983607df38b0f4216ed76ac51814sm object.height = params.gameHeight; 6492cfd74d65d832137e20e193c960802afba73b5d38sm 64939d4cc2572d37983607df38b0f4216ed76ac51814sm DrawableBitmap indicator = new DrawableBitmap( 64949d4cc2572d37983607df38b0f4216ed76ac51814sm textureLibrary.allocateTexture(R.drawable.framerate_warning), 64959d4cc2572d37983607df38b0f4216ed76ac51814sm (int)object.width, 64969d4cc2572d37983607df38b0f4216ed76ac51814sm (int)object.height); 6497cfd74d65d832137e20e193c960802afba73b5d38sm 64989d4cc2572d37983607df38b0f4216ed76ac51814sm indicator.setCrop(0, 8, 8, 8); // hack! this shouldn't be hard-coded. 6499cfd74d65d832137e20e193c960802afba73b5d38sm 65009d4cc2572d37983607df38b0f4216ed76ac51814sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 65019d4cc2572d37983607df38b0f4216ed76ac51814sm render.setPriority(SortConstants.OVERLAY); 65029d4cc2572d37983607df38b0f4216ed76ac51814sm render.setCameraRelative(false); 6503cfd74d65d832137e20e193c960802afba73b5d38sm 65049d4cc2572d37983607df38b0f4216ed76ac51814sm FrameRateWatcherComponent watcher = (FrameRateWatcherComponent)allocateComponent(FrameRateWatcherComponent.class); 65059d4cc2572d37983607df38b0f4216ed76ac51814sm watcher.setup(render, indicator); 6506cfd74d65d832137e20e193c960802afba73b5d38sm 65079d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(render); 65089d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(watcher); 6509cfd74d65d832137e20e193c960802afba73b5d38sm 65109d4cc2572d37983607df38b0f4216ed76ac51814sm 6511cfd74d65d832137e20e193c960802afba73b5d38sm return object; 6512cfd74d65d832137e20e193c960802afba73b5d38sm } 6513cfd74d65d832137e20e193c960802afba73b5d38sm 6514cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnBreakableBlockPiece(float positionX, float positionY) { 6515cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 6516cfd74d65d832137e20e193c960802afba73b5d38sm 6517cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 6518cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 6519cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 6520cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 16; 6521cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 16; 6522cfd74d65d832137e20e193c960802afba73b5d38sm 6523cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.BREAKABLE_BLOCK_PIECE); 6524cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 6525cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 4; 6526cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 6527cfd74d65d832137e20e193c960802afba73b5d38sm 6528cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent gravity = allocateComponent(GravityComponent.class); 6529cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 6530cfd74d65d832137e20e193c960802afba73b5d38sm 6531cfd74d65d832137e20e193c960802afba73b5d38sm SimplePhysicsComponent physics = (SimplePhysicsComponent)allocateComponent(SimplePhysicsComponent.class); 6532cfd74d65d832137e20e193c960802afba73b5d38sm physics.setBounciness(0.3f); 6533cfd74d65d832137e20e193c960802afba73b5d38sm 6534cfd74d65d832137e20e193c960802afba73b5d38sm DrawableBitmap piece = new DrawableBitmap( 6535cfd74d65d832137e20e193c960802afba73b5d38sm textureLibrary.getTextureByResource(R.drawable.object_debris_piece), 6536cfd74d65d832137e20e193c960802afba73b5d38sm (int)object.width, 6537cfd74d65d832137e20e193c960802afba73b5d38sm (int)object.height); 6538cfd74d65d832137e20e193c960802afba73b5d38sm 6539cfd74d65d832137e20e193c960802afba73b5d38sm 6540cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 6541cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.GENERAL_OBJECT); 6542cfd74d65d832137e20e193c960802afba73b5d38sm render.setDrawable(piece); 6543cfd74d65d832137e20e193c960802afba73b5d38sm 6544cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(render); 6545cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 6546cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(gravity); 6547cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(physics); 6548cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.BREAKABLE_BLOCK_PIECE, staticData); 6549cfd74d65d832137e20e193c960802afba73b5d38sm } 6550cfd74d65d832137e20e193c960802afba73b5d38sm 6551cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 6552cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setTimeUntilDeath(3.0f); 6553cfd74d65d832137e20e193c960802afba73b5d38sm 6554cfd74d65d832137e20e193c960802afba73b5d38sm BackgroundCollisionComponent bgcollision = (BackgroundCollisionComponent)allocateComponent(BackgroundCollisionComponent.class); 6555cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setSize(12, 12); 6556cfd74d65d832137e20e193c960802afba73b5d38sm bgcollision.setOffset(2, 2); 6557cfd74d65d832137e20e193c960802afba73b5d38sm 6558cfd74d65d832137e20e193c960802afba73b5d38sm 6559cfd74d65d832137e20e193c960802afba73b5d38sm object.destroyOnDeactivation = true; 6560cfd74d65d832137e20e193c960802afba73b5d38sm 6561cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 6562cfd74d65d832137e20e193c960802afba73b5d38sm object.add(bgcollision); 6563cfd74d65d832137e20e193c960802afba73b5d38sm 6564cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.BREAKABLE_BLOCK_PIECE, object, null); 6565cfd74d65d832137e20e193c960802afba73b5d38sm 6566cfd74d65d832137e20e193c960802afba73b5d38sm return object; 6567cfd74d65d832137e20e193c960802afba73b5d38sm } 6568cfd74d65d832137e20e193c960802afba73b5d38sm 6569cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnBreakableBlockPieceSpawner(float positionX, float positionY) { 6570cfd74d65d832137e20e193c960802afba73b5d38sm 6571cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 6572cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 6573cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 6574cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 1; 6575cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 1; 6576cfd74d65d832137e20e193c960802afba73b5d38sm 6577cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 6578cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setTimeUntilDeath(0.5f); 6579cfd74d65d832137e20e193c960802afba73b5d38sm 6580cfd74d65d832137e20e193c960802afba73b5d38sm LaunchProjectileComponent pieceSpawner 6581cfd74d65d832137e20e193c960802afba73b5d38sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 6582cfd74d65d832137e20e193c960802afba73b5d38sm pieceSpawner.setObjectTypeToSpawn(GameObjectType.BREAKABLE_BLOCK_PIECE); 6583cfd74d65d832137e20e193c960802afba73b5d38sm pieceSpawner.setDelayBeforeFirstSet(0.0f); 6584cfd74d65d832137e20e193c960802afba73b5d38sm pieceSpawner.setSetsPerActivation(1); 6585cfd74d65d832137e20e193c960802afba73b5d38sm pieceSpawner.setShotsPerSet(3); 6586cfd74d65d832137e20e193c960802afba73b5d38sm pieceSpawner.setDelayBetweenShots(0.0f); 6587cfd74d65d832137e20e193c960802afba73b5d38sm pieceSpawner.setOffsetX(16); 6588cfd74d65d832137e20e193c960802afba73b5d38sm pieceSpawner.setOffsetY(16); 6589cfd74d65d832137e20e193c960802afba73b5d38sm pieceSpawner.setVelocityX(600.0f); 6590cfd74d65d832137e20e193c960802afba73b5d38sm pieceSpawner.setVelocityY(-1000.0f); 6591cfd74d65d832137e20e193c960802afba73b5d38sm pieceSpawner.setThetaError(1.0f); 6592cfd74d65d832137e20e193c960802afba73b5d38sm 6593cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 6594cfd74d65d832137e20e193c960802afba73b5d38sm object.destroyOnDeactivation = true; 6595cfd74d65d832137e20e193c960802afba73b5d38sm 6596cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 6597cfd74d65d832137e20e193c960802afba73b5d38sm object.add(pieceSpawner); 6598cfd74d65d832137e20e193c960802afba73b5d38sm 6599cfd74d65d832137e20e193c960802afba73b5d38sm return object; 6600cfd74d65d832137e20e193c960802afba73b5d38sm } 6601cfd74d65d832137e20e193c960802afba73b5d38sm 6602cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnSmokePoof(float positionX, float positionY) { 6603cfd74d65d832137e20e193c960802afba73b5d38sm 66049d4cc2572d37983607df38b0f4216ed76ac51814sm GameObject object = null; 66059d4cc2572d37983607df38b0f4216ed76ac51814sm // This is just an effect, so we can live without it if our pools are exhausted. 66069d4cc2572d37983607df38b0f4216ed76ac51814sm if (componentAvailable(LaunchProjectileComponent.class, 2)) { 66079d4cc2572d37983607df38b0f4216ed76ac51814sm object = mGameObjectPool.allocate(); 66089d4cc2572d37983607df38b0f4216ed76ac51814sm object.getPosition().set(positionX, positionY); 66099d4cc2572d37983607df38b0f4216ed76ac51814sm object.activationRadius = mTightActivationRadius; 66109d4cc2572d37983607df38b0f4216ed76ac51814sm object.width = 1; 66119d4cc2572d37983607df38b0f4216ed76ac51814sm object.height = 1; 66129d4cc2572d37983607df38b0f4216ed76ac51814sm 66139d4cc2572d37983607df38b0f4216ed76ac51814sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 66149d4cc2572d37983607df38b0f4216ed76ac51814sm lifetime.setTimeUntilDeath(0.5f); 66159d4cc2572d37983607df38b0f4216ed76ac51814sm 66169d4cc2572d37983607df38b0f4216ed76ac51814sm LaunchProjectileComponent smokeGun 66179d4cc2572d37983607df38b0f4216ed76ac51814sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 66189d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun.setSetsPerActivation(1); 66199d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun.setShotsPerSet(3); 66209d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun.setDelayBetweenShots(0.0f); 66219d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun.setObjectTypeToSpawn(GameObjectType.SMOKE_BIG); 66229d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun.setVelocityX(200.0f); 66239d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun.setVelocityY(200.0f); 66249d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun.setOffsetX(16); 66259d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun.setOffsetY(16); 66269d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun.setThetaError(1.0f); 66279d4cc2572d37983607df38b0f4216ed76ac51814sm 66289d4cc2572d37983607df38b0f4216ed76ac51814sm LaunchProjectileComponent smokeGun2 66299d4cc2572d37983607df38b0f4216ed76ac51814sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 66309d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun2.setSetsPerActivation(1); 66319d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun2.setShotsPerSet(3); 66329d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun2.setDelayBetweenShots(0.0f); 66339d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun2.setObjectTypeToSpawn(GameObjectType.SMOKE_SMALL); 66349d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun2.setVelocityX(200.0f); 66359d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun2.setVelocityY(200.0f); 66369d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun2.setThetaError(1.0f); 66379d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun2.setOffsetX(16); 66389d4cc2572d37983607df38b0f4216ed76ac51814sm smokeGun2.setOffsetY(16); 66399d4cc2572d37983607df38b0f4216ed76ac51814sm 66409d4cc2572d37983607df38b0f4216ed76ac51814sm object.life = 1; 66419d4cc2572d37983607df38b0f4216ed76ac51814sm object.destroyOnDeactivation = true; 66429d4cc2572d37983607df38b0f4216ed76ac51814sm 66439d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(lifetime); 66449d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(smokeGun); 66459d4cc2572d37983607df38b0f4216ed76ac51814sm object.add(smokeGun2); 66469d4cc2572d37983607df38b0f4216ed76ac51814sm } 6647cfd74d65d832137e20e193c960802afba73b5d38sm return object; 6648cfd74d65d832137e20e193c960802afba73b5d38sm } 6649cfd74d65d832137e20e193c960802afba73b5d38sm 6650cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnGemEffect(float positionX, float positionY) { 6651cfd74d65d832137e20e193c960802afba73b5d38sm TextureLibrary textureLibrary = sSystemRegistry.shortTermTextureLibrary; 6652cfd74d65d832137e20e193c960802afba73b5d38sm 6653cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 6654cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 6655cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 6656cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 32; 6657cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 32; 6658cfd74d65d832137e20e193c960802afba73b5d38sm 6659cfd74d65d832137e20e193c960802afba73b5d38sm FixedSizeArray<BaseObject> staticData = getStaticData(GameObjectType.GEM_EFFECT); 6660cfd74d65d832137e20e193c960802afba73b5d38sm if (staticData == null) { 6661cfd74d65d832137e20e193c960802afba73b5d38sm final int staticObjectCount = 2; 6662cfd74d65d832137e20e193c960802afba73b5d38sm staticData = new FixedSizeArray<BaseObject>(staticObjectCount); 6663cfd74d65d832137e20e193c960802afba73b5d38sm 6664cfd74d65d832137e20e193c960802afba73b5d38sm GameComponent movement = allocateComponent(MovementComponent.class); 6665cfd74d65d832137e20e193c960802afba73b5d38sm 6666cfd74d65d832137e20e193c960802afba73b5d38sm staticData.add(movement); 6667cfd74d65d832137e20e193c960802afba73b5d38sm 6668cfd74d65d832137e20e193c960802afba73b5d38sm setStaticData(GameObjectType.GEM_EFFECT, staticData); 6669cfd74d65d832137e20e193c960802afba73b5d38sm } 6670cfd74d65d832137e20e193c960802afba73b5d38sm 6671cfd74d65d832137e20e193c960802afba73b5d38sm RenderComponent render = (RenderComponent)allocateComponent(RenderComponent.class); 6672cfd74d65d832137e20e193c960802afba73b5d38sm render.setPriority(SortConstants.EFFECT); 6673cfd74d65d832137e20e193c960802afba73b5d38sm 6674cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 6675cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setTimeUntilDeath(0.5f); 6676cfd74d65d832137e20e193c960802afba73b5d38sm 6677cfd74d65d832137e20e193c960802afba73b5d38sm FadeDrawableComponent fadeOut = (FadeDrawableComponent)allocateComponent(FadeDrawableComponent.class); 6678cfd74d65d832137e20e193c960802afba73b5d38sm fadeOut.setupFade(1.0f, 0.0f, 0.5f, FadeDrawableComponent.LOOP_TYPE_NONE, FadeDrawableComponent.FADE_LINEAR, 0.0f); 6679cfd74d65d832137e20e193c960802afba73b5d38sm fadeOut.setTexture(textureLibrary.allocateTexture(R.drawable.object_ruby01)); 6680cfd74d65d832137e20e193c960802afba73b5d38sm fadeOut.setRenderComponent(render); 6681cfd74d65d832137e20e193c960802afba73b5d38sm 6682cfd74d65d832137e20e193c960802afba73b5d38sm object.destroyOnDeactivation = true; 6683cfd74d65d832137e20e193c960802afba73b5d38sm 6684cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 6685cfd74d65d832137e20e193c960802afba73b5d38sm object.add(fadeOut); 6686cfd74d65d832137e20e193c960802afba73b5d38sm object.add(render); 6687cfd74d65d832137e20e193c960802afba73b5d38sm 6688cfd74d65d832137e20e193c960802afba73b5d38sm addStaticData(GameObjectType.GEM_EFFECT, object, null); 6689cfd74d65d832137e20e193c960802afba73b5d38sm 6690cfd74d65d832137e20e193c960802afba73b5d38sm return object; 6691cfd74d65d832137e20e193c960802afba73b5d38sm } 6692cfd74d65d832137e20e193c960802afba73b5d38sm 6693cfd74d65d832137e20e193c960802afba73b5d38sm public GameObject spawnGemEffectSpawner(float positionX, float positionY) { 6694cfd74d65d832137e20e193c960802afba73b5d38sm 6695cfd74d65d832137e20e193c960802afba73b5d38sm GameObject object = mGameObjectPool.allocate(); 6696cfd74d65d832137e20e193c960802afba73b5d38sm object.getPosition().set(positionX, positionY); 6697cfd74d65d832137e20e193c960802afba73b5d38sm object.activationRadius = mTightActivationRadius; 6698cfd74d65d832137e20e193c960802afba73b5d38sm object.width = 1; 6699cfd74d65d832137e20e193c960802afba73b5d38sm object.height = 1; 6700cfd74d65d832137e20e193c960802afba73b5d38sm 6701cfd74d65d832137e20e193c960802afba73b5d38sm LifetimeComponent lifetime = (LifetimeComponent)allocateComponent(LifetimeComponent.class); 6702cfd74d65d832137e20e193c960802afba73b5d38sm lifetime.setTimeUntilDeath(0.5f); 6703cfd74d65d832137e20e193c960802afba73b5d38sm 6704cfd74d65d832137e20e193c960802afba73b5d38sm final int gems = 6; 6705cfd74d65d832137e20e193c960802afba73b5d38sm final float angleIncrement = (float)(2.0f * Math.PI) / gems; 6706cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < gems; x++) { 6707cfd74d65d832137e20e193c960802afba73b5d38sm LaunchProjectileComponent gemGun 6708cfd74d65d832137e20e193c960802afba73b5d38sm = (LaunchProjectileComponent)allocateComponent(LaunchProjectileComponent.class); 6709cfd74d65d832137e20e193c960802afba73b5d38sm gemGun.setSetsPerActivation(1); 6710cfd74d65d832137e20e193c960802afba73b5d38sm gemGun.setShotsPerSet(1); 6711cfd74d65d832137e20e193c960802afba73b5d38sm gemGun.setDelayBetweenShots(0.0f); 6712cfd74d65d832137e20e193c960802afba73b5d38sm gemGun.setObjectTypeToSpawn(GameObjectType.GEM_EFFECT); 6713cfd74d65d832137e20e193c960802afba73b5d38sm gemGun.setVelocityX((float)Math.sin(angleIncrement * x) * 150.0f); 6714cfd74d65d832137e20e193c960802afba73b5d38sm gemGun.setVelocityY((float)Math.cos(angleIncrement * x) * 150.0f); 6715cfd74d65d832137e20e193c960802afba73b5d38sm gemGun.setOffsetX(16); 6716cfd74d65d832137e20e193c960802afba73b5d38sm gemGun.setOffsetY(16); 6717cfd74d65d832137e20e193c960802afba73b5d38sm 6718cfd74d65d832137e20e193c960802afba73b5d38sm object.add(gemGun); 6719cfd74d65d832137e20e193c960802afba73b5d38sm } 6720cfd74d65d832137e20e193c960802afba73b5d38sm 6721cfd74d65d832137e20e193c960802afba73b5d38sm 6722cfd74d65d832137e20e193c960802afba73b5d38sm 6723cfd74d65d832137e20e193c960802afba73b5d38sm object.life = 1; 6724cfd74d65d832137e20e193c960802afba73b5d38sm object.destroyOnDeactivation = true; 6725cfd74d65d832137e20e193c960802afba73b5d38sm 6726cfd74d65d832137e20e193c960802afba73b5d38sm object.add(lifetime); 6727cfd74d65d832137e20e193c960802afba73b5d38sm 6728cfd74d65d832137e20e193c960802afba73b5d38sm 6729cfd74d65d832137e20e193c960802afba73b5d38sm return object; 6730cfd74d65d832137e20e193c960802afba73b5d38sm } 6731cfd74d65d832137e20e193c960802afba73b5d38sm 6732cfd74d65d832137e20e193c960802afba73b5d38sm /** Comparator for game objects objects. */ 6733cfd74d65d832137e20e193c960802afba73b5d38sm private final static class ComponentPoolComparator implements Comparator<GameComponentPool> { 6734cfd74d65d832137e20e193c960802afba73b5d38sm public int compare(final GameComponentPool object1, final GameComponentPool object2) { 6735cfd74d65d832137e20e193c960802afba73b5d38sm int result = 0; 6736cfd74d65d832137e20e193c960802afba73b5d38sm if (object1 == null && object2 != null) { 6737cfd74d65d832137e20e193c960802afba73b5d38sm result = 1; 6738cfd74d65d832137e20e193c960802afba73b5d38sm } else if (object1 != null && object2 == null) { 6739cfd74d65d832137e20e193c960802afba73b5d38sm result = -1; 6740cfd74d65d832137e20e193c960802afba73b5d38sm } else if (object1 != null && object2 != null) { 6741cfd74d65d832137e20e193c960802afba73b5d38sm result = object1.objectClass.hashCode() - object2.objectClass.hashCode(); 6742cfd74d65d832137e20e193c960802afba73b5d38sm } 6743cfd74d65d832137e20e193c960802afba73b5d38sm return result; 6744cfd74d65d832137e20e193c960802afba73b5d38sm } 6745cfd74d65d832137e20e193c960802afba73b5d38sm } 6746cfd74d65d832137e20e193c960802afba73b5d38sm 6747cfd74d65d832137e20e193c960802afba73b5d38sm public class GameObjectPool extends TObjectPool<GameObject> { 6748cfd74d65d832137e20e193c960802afba73b5d38sm 6749cfd74d65d832137e20e193c960802afba73b5d38sm public GameObjectPool() { 6750cfd74d65d832137e20e193c960802afba73b5d38sm super(); 6751cfd74d65d832137e20e193c960802afba73b5d38sm } 6752cfd74d65d832137e20e193c960802afba73b5d38sm 6753cfd74d65d832137e20e193c960802afba73b5d38sm public GameObjectPool(int size) { 6754cfd74d65d832137e20e193c960802afba73b5d38sm super(size); 6755cfd74d65d832137e20e193c960802afba73b5d38sm } 6756cfd74d65d832137e20e193c960802afba73b5d38sm 6757cfd74d65d832137e20e193c960802afba73b5d38sm @Override 6758cfd74d65d832137e20e193c960802afba73b5d38sm protected void fill() { 6759cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < getSize(); x++) { 6760cfd74d65d832137e20e193c960802afba73b5d38sm getAvailable().add(new GameObject()); 6761cfd74d65d832137e20e193c960802afba73b5d38sm } 6762cfd74d65d832137e20e193c960802afba73b5d38sm } 6763cfd74d65d832137e20e193c960802afba73b5d38sm 6764cfd74d65d832137e20e193c960802afba73b5d38sm @Override 6765cfd74d65d832137e20e193c960802afba73b5d38sm public void release(Object entry) { 6766cfd74d65d832137e20e193c960802afba73b5d38sm ((GameObject)entry).reset(); 6767cfd74d65d832137e20e193c960802afba73b5d38sm super.release(entry); 6768cfd74d65d832137e20e193c960802afba73b5d38sm } 6769cfd74d65d832137e20e193c960802afba73b5d38sm 6770cfd74d65d832137e20e193c960802afba73b5d38sm } 6771cfd74d65d832137e20e193c960802afba73b5d38sm} 6772cfd74d65d832137e20e193c960802afba73b5d38sm 6773