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