| /* |
| * Copyright (C) 2010 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| |
| package com.replica.replicaisland; |
| |
| public class HitPlayerComponent extends GameComponent { |
| float mDistance2; |
| Vector2 mPlayerPosition; |
| Vector2 mMyPosition; |
| HitReactionComponent mHitReact; |
| int mHitType; |
| boolean mHitDirection; |
| |
| public HitPlayerComponent() { |
| super(); |
| mPlayerPosition = new Vector2(); |
| mMyPosition = new Vector2(); |
| reset(); |
| setPhase(ComponentPhases.THINK.ordinal()); |
| } |
| |
| @Override |
| public void reset() { |
| mDistance2 = 0.0f; |
| mPlayerPosition.zero(); |
| mMyPosition.zero(); |
| mHitReact = null; |
| mHitType = CollisionParameters.HitType.INVALID; |
| mHitDirection = false; // by default, hit myself |
| } |
| |
| @Override |
| public void update(float timeDelta, BaseObject parent) { |
| GameObjectManager manager = sSystemRegistry.gameObjectManager; |
| if (manager != null && mHitReact != null) { |
| GameObject player = manager.getPlayer(); |
| if (player != null && player.life > 0) { |
| mPlayerPosition.set(player.getCenteredPositionX(), player.getCenteredPositionY()); |
| GameObject parentObject = (GameObject)parent; |
| mMyPosition.set(parentObject.getCenteredPositionX(), parentObject.getCenteredPositionY()); |
| if (mMyPosition.distance2(mPlayerPosition) <= mDistance2) { |
| HitReactionComponent playerHitReact = player.findByClass(HitReactionComponent.class); |
| if (playerHitReact != null) { |
| if (!mHitDirection) { |
| // hit myself |
| boolean accepted = mHitReact.receivedHit(parentObject, player, mHitType); |
| playerHitReact.hitVictim(player, parentObject, mHitType, accepted); |
| } else { |
| // hit the player |
| boolean accepted = playerHitReact.receivedHit(player, parentObject, mHitType); |
| mHitReact.hitVictim(parentObject, player, mHitType, accepted); |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| public void setup(float distance, HitReactionComponent hitReact, int hitType, boolean hitPlayer) { |
| mDistance2 = distance * distance; |
| mHitReact = hitReact; |
| mHitType = hitType; |
| mHitDirection = hitPlayer; |
| } |
| } |