Home | History | Annotate | Download | only in replicaisland
      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 
     28 	public HitPlayerComponent() {
     29         super();
     30         mPlayerPosition = new Vector2();
     31         mMyPosition = new Vector2();
     32         reset();
     33         setPhase(ComponentPhases.THINK.ordinal());
     34     }
     35 
     36     @Override
     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
     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 
     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