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