1cfd74d65d832137e20e193c960802afba73b5d38sm/* 23c1e67e433728684b5f228c5d4f3e5b1457bb271sm * Copyright (C) 2010 The Android Open Source Project 3cfd74d65d832137e20e193c960802afba73b5d38sm * 4cfd74d65d832137e20e193c960802afba73b5d38sm * Licensed under the Apache License, Version 2.0 (the "License"); 5cfd74d65d832137e20e193c960802afba73b5d38sm * you may not use this file except in compliance with the License. 6cfd74d65d832137e20e193c960802afba73b5d38sm * You may obtain a copy of the License at 7cfd74d65d832137e20e193c960802afba73b5d38sm * 8cfd74d65d832137e20e193c960802afba73b5d38sm * http://www.apache.org/licenses/LICENSE-2.0 9cfd74d65d832137e20e193c960802afba73b5d38sm * 10cfd74d65d832137e20e193c960802afba73b5d38sm * Unless required by applicable law or agreed to in writing, software 11cfd74d65d832137e20e193c960802afba73b5d38sm * distributed under the License is distributed on an "AS IS" BASIS, 12cfd74d65d832137e20e193c960802afba73b5d38sm * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cfd74d65d832137e20e193c960802afba73b5d38sm * See the License for the specific language governing permissions and 14cfd74d65d832137e20e193c960802afba73b5d38sm * limitations under the License. 15cfd74d65d832137e20e193c960802afba73b5d38sm */ 16cfd74d65d832137e20e193c960802afba73b5d38sm 17cfd74d65d832137e20e193c960802afba73b5d38sm 18cfd74d65d832137e20e193c960802afba73b5d38smpackage com.replica.replicaisland; 19cfd74d65d832137e20e193c960802afba73b5d38sm 20cfd74d65d832137e20e193c960802afba73b5d38smpublic class HitPlayerComponent extends GameComponent { 21cfd74d65d832137e20e193c960802afba73b5d38sm float mDistance2; 22cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 mPlayerPosition; 23cfd74d65d832137e20e193c960802afba73b5d38sm Vector2 mMyPosition; 24cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent mHitReact; 25cfd74d65d832137e20e193c960802afba73b5d38sm int mHitType; 26cfd74d65d832137e20e193c960802afba73b5d38sm boolean mHitDirection; 27cfd74d65d832137e20e193c960802afba73b5d38sm 28cfd74d65d832137e20e193c960802afba73b5d38sm public HitPlayerComponent() { 29cfd74d65d832137e20e193c960802afba73b5d38sm super(); 30cfd74d65d832137e20e193c960802afba73b5d38sm mPlayerPosition = new Vector2(); 31cfd74d65d832137e20e193c960802afba73b5d38sm mMyPosition = new Vector2(); 32cfd74d65d832137e20e193c960802afba73b5d38sm reset(); 33cfd74d65d832137e20e193c960802afba73b5d38sm setPhase(ComponentPhases.THINK.ordinal()); 34cfd74d65d832137e20e193c960802afba73b5d38sm } 35cfd74d65d832137e20e193c960802afba73b5d38sm 36cfd74d65d832137e20e193c960802afba73b5d38sm @Override 37cfd74d65d832137e20e193c960802afba73b5d38sm public void reset() { 38cfd74d65d832137e20e193c960802afba73b5d38sm mDistance2 = 0.0f; 39cfd74d65d832137e20e193c960802afba73b5d38sm mPlayerPosition.zero(); 40cfd74d65d832137e20e193c960802afba73b5d38sm mMyPosition.zero(); 41cfd74d65d832137e20e193c960802afba73b5d38sm mHitReact = null; 42cfd74d65d832137e20e193c960802afba73b5d38sm mHitType = CollisionParameters.HitType.INVALID; 43cfd74d65d832137e20e193c960802afba73b5d38sm mHitDirection = false; // by default, hit myself 44cfd74d65d832137e20e193c960802afba73b5d38sm } 45cfd74d65d832137e20e193c960802afba73b5d38sm 46cfd74d65d832137e20e193c960802afba73b5d38sm @Override 47cfd74d65d832137e20e193c960802afba73b5d38sm public void update(float timeDelta, BaseObject parent) { 48cfd74d65d832137e20e193c960802afba73b5d38sm GameObjectManager manager = sSystemRegistry.gameObjectManager; 49cfd74d65d832137e20e193c960802afba73b5d38sm if (manager != null && mHitReact != null) { 50cfd74d65d832137e20e193c960802afba73b5d38sm GameObject player = manager.getPlayer(); 51cfd74d65d832137e20e193c960802afba73b5d38sm if (player != null && player.life > 0) { 52cfd74d65d832137e20e193c960802afba73b5d38sm mPlayerPosition.set(player.getCenteredPositionX(), player.getCenteredPositionY()); 53cfd74d65d832137e20e193c960802afba73b5d38sm GameObject parentObject = (GameObject)parent; 54cfd74d65d832137e20e193c960802afba73b5d38sm mMyPosition.set(parentObject.getCenteredPositionX(), parentObject.getCenteredPositionY()); 55cfd74d65d832137e20e193c960802afba73b5d38sm if (mMyPosition.distance2(mPlayerPosition) <= mDistance2) { 56cfd74d65d832137e20e193c960802afba73b5d38sm HitReactionComponent playerHitReact = player.findByClass(HitReactionComponent.class); 57cfd74d65d832137e20e193c960802afba73b5d38sm if (playerHitReact != null) { 58cfd74d65d832137e20e193c960802afba73b5d38sm if (!mHitDirection) { 59cfd74d65d832137e20e193c960802afba73b5d38sm // hit myself 60cfd74d65d832137e20e193c960802afba73b5d38sm boolean accepted = mHitReact.receivedHit(parentObject, player, mHitType); 61cfd74d65d832137e20e193c960802afba73b5d38sm playerHitReact.hitVictim(player, parentObject, mHitType, accepted); 62cfd74d65d832137e20e193c960802afba73b5d38sm } else { 63cfd74d65d832137e20e193c960802afba73b5d38sm // hit the player 64cfd74d65d832137e20e193c960802afba73b5d38sm boolean accepted = playerHitReact.receivedHit(player, parentObject, mHitType); 65cfd74d65d832137e20e193c960802afba73b5d38sm mHitReact.hitVictim(parentObject, player, mHitType, accepted); 66cfd74d65d832137e20e193c960802afba73b5d38sm } 67cfd74d65d832137e20e193c960802afba73b5d38sm } 68cfd74d65d832137e20e193c960802afba73b5d38sm } 69cfd74d65d832137e20e193c960802afba73b5d38sm } 70cfd74d65d832137e20e193c960802afba73b5d38sm } 71cfd74d65d832137e20e193c960802afba73b5d38sm } 72cfd74d65d832137e20e193c960802afba73b5d38sm 73cfd74d65d832137e20e193c960802afba73b5d38sm public void setup(float distance, HitReactionComponent hitReact, int hitType, boolean hitPlayer) { 74cfd74d65d832137e20e193c960802afba73b5d38sm mDistance2 = distance * distance; 75cfd74d65d832137e20e193c960802afba73b5d38sm mHitReact = hitReact; 76cfd74d65d832137e20e193c960802afba73b5d38sm mHitType = hitType; 77cfd74d65d832137e20e193c960802afba73b5d38sm mHitDirection = hitPlayer; 78cfd74d65d832137e20e193c960802afba73b5d38sm } 79cfd74d65d832137e20e193c960802afba73b5d38sm} 80