Android Open Source - clash_of_balls Dynamic Game Object






From Project

Back to project page clash_of_balls.

License

The source code is released under:

GNU General Public License

If you think the Android project clash_of_balls listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright (C) 2012-2013 Hans Hardmeier <hanshardmeier@gmail.com>
 * Copyright (C) 2012-2013 Andrin Jenal//from   w ww .  j a  v  a  2 s  .  c  o  m
 * Copyright (C) 2012-2013 Beat Kng <beat-kueng@gmx.net>
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 3 of the License.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 */

package com.sapos_aplastados.game.clash_of_balls.game;

import org.jbox2d.common.Vec2;

import com.sapos_aplastados.game.clash_of_balls.GameSettings;
import com.sapos_aplastados.game.clash_of_balls.Texture;

/**
 * all game objects that can be dynamically added or removed must inherit from
 * this class
 * 
 * move() must not change m_position, but m_new_pos instead
 * this is then used in the game for object collision detection
 *
 */
public class DynamicGameObject extends StaticGameObject {
  
  /* death of an object:
   * m_bIs_dead==true: means that this object cannot interact with others anymore
   * m_bIs_dying==true: implies m_bIs_dead==true. means the object is still in the
   *           object list, but cannot move anymore. used for dying effect
   * m_bIs_dead && !m_bIs_dying: means the object is not used anymore
   */
  protected boolean m_bIs_dead = false;
  public boolean isDead() { return m_bIs_dead; }
  protected boolean m_bIs_dying = false;
  public boolean isReallyDead() { return m_bIs_dead && !m_bIs_dying; }
  
  private int m_impact_count = 0;
  
  protected GameBase m_owner;
  
  DynamicGameObject(GameBase owner, final short id, Type type
      , Texture texture) {
    super(id, type, texture);
    m_owner = owner;
  }

  //can be used for shadow drawing etc...
  public void drawBackground(RenderHelper renderer) {
  }
  
  @Override
  public void draw(RenderHelper renderer) {
    if(!isReallyDead()) {
      super.draw(renderer);
    }
  }
  
  private Vector m_server_translation = new Vector(0.f, 0.f);
  private static final float SERVER_POS_SMOOTHING = 1.f/5.f;
            //this defines how smoothly the server position update
            //is applied. a bigger value means less smoothly but 
            //more accruate with the server (1 means apply in one step)
            //it takes ln(0.01)/ln(1-SERVER_POS_SMOOTHING) frames (steps)
            //to get the error (distance of positions) below 0.01
            //for SERVER_POS_SMOOTHING = 1/5 it's about 20 frames
  
  private Vec2 m_tmp_vec = new Vec2();
  
  public void applyVectorData(Vector new_pos, Vector new_speed) {
    m_tmp_vec.set(new_speed.x, new_speed.y);
    m_body.setLinearVelocity(m_tmp_vec);
    
    if(GameSettings.client_prediction) {
      //apply position smoothly
      //we cannot simply change m_position or m_new_pos because we would need
      //to do collision handling
      m_server_translation.set(new_pos.x - m_body.getPosition().x
          , new_pos.y - m_body.getPosition().y);
    } else {
      m_tmp_vec.set(new_pos.x, new_pos.y);
      m_body.setTransform(m_tmp_vec, m_body.getAngle());
    }
    
  }

  //handle everything in here updated by the server. like position & speed
  //all these operations must be undoable or overwritable by a server update!
  @Override
  public void move(float dsec) {
    //check for client-side smoothing of server position update
    if(Math.abs(m_server_translation.x) > GameBase.EPS
        || Math.abs(m_server_translation.y) > GameBase.EPS) {
      if(m_server_translation.length() < 0.02f) {
        m_tmp_vec.set(m_body.getPosition().x + m_server_translation.x
            , m_body.getPosition().y + m_server_translation.y);
        m_body.setTransform(m_tmp_vec, m_body.getAngle());
        
        m_server_translation.set(0.f, 0.f);
      } else {
        float dx = m_server_translation.x * SERVER_POS_SMOOTHING;
        float dy = m_server_translation.y * SERVER_POS_SMOOTHING;
        
        m_tmp_vec.set(m_body.getPosition().x + dx
            , m_body.getPosition().y + dy);
        m_body.setTransform(m_tmp_vec, m_body.getAngle());
        
        m_server_translation.sub(dx, dy);
      }
    }
  }
  
  //every change that does not need to be updated by the server can be handled
  //in here
  //this can also be called by the server & is used to move less important
  //stuff like animation or item timeout's
  //do NOT generate Events in here
  public void moveClient(float dsec) {
    
  }
  
  public void handleImpact(StaticGameObject other, Vector normal) {
    ++m_impact_count;
  }
  public int impactCount() { return m_impact_count; }
  
  
  public void die() {
    if(!m_bIs_dead) {
      m_bIs_dead = true;
      m_bIs_dying = false;
      m_owner.handleObjectDied(this);
    }
  }
  
}




Java Source Code List

au.com.bytecode.opencsv.CSVParser.java
au.com.bytecode.opencsv.CSVReader.java
au.com.bytecode.opencsv.CSVWriter.java
au.com.bytecode.opencsv.ResultSetHelperService.java
au.com.bytecode.opencsv.ResultSetHelper.java
com.sapos_aplastados.game.clash_of_balls.FPSCounter.java
com.sapos_aplastados.game.clash_of_balls.Font2D.java
com.sapos_aplastados.game.clash_of_balls.FontNumbers.java
com.sapos_aplastados.game.clash_of_balls.GameLevel.java
com.sapos_aplastados.game.clash_of_balls.GameRenderer.java
com.sapos_aplastados.game.clash_of_balls.GameSettings.java
com.sapos_aplastados.game.clash_of_balls.ITouchInput.java
com.sapos_aplastados.game.clash_of_balls.LevelManager.java
com.sapos_aplastados.game.clash_of_balls.MainActivity.java
com.sapos_aplastados.game.clash_of_balls.Maths.java
com.sapos_aplastados.game.clash_of_balls.NetworkService.java
com.sapos_aplastados.game.clash_of_balls.ShaderManager.java
com.sapos_aplastados.game.clash_of_balls.TextureBase.java
com.sapos_aplastados.game.clash_of_balls.TextureManager.java
com.sapos_aplastados.game.clash_of_balls.Texture.java
com.sapos_aplastados.game.clash_of_balls.UIBase.java
com.sapos_aplastados.game.clash_of_balls.UIHandler.java
com.sapos_aplastados.game.clash_of_balls.VertexBufferFloat.java
com.sapos_aplastados.game.clash_of_balls.game.DynamicGameObject.java
com.sapos_aplastados.game.clash_of_balls.game.GameBase.java
com.sapos_aplastados.game.clash_of_balls.game.GameField.java
com.sapos_aplastados.game.clash_of_balls.game.GameHole.java
com.sapos_aplastados.game.clash_of_balls.game.GameItem.java
com.sapos_aplastados.game.clash_of_balls.game.GameMenuInGame.java
com.sapos_aplastados.game.clash_of_balls.game.GameObject.java
com.sapos_aplastados.game.clash_of_balls.game.GamePlayer.java
com.sapos_aplastados.game.clash_of_balls.game.GameServer.java
com.sapos_aplastados.game.clash_of_balls.game.GameStatistics.java
com.sapos_aplastados.game.clash_of_balls.game.GameView.java
com.sapos_aplastados.game.clash_of_balls.game.GameWall.java
com.sapos_aplastados.game.clash_of_balls.game.Game.java
com.sapos_aplastados.game.clash_of_balls.game.IDrawable.java
com.sapos_aplastados.game.clash_of_balls.game.IMoveable.java
com.sapos_aplastados.game.clash_of_balls.game.RenderHelper.java
com.sapos_aplastados.game.clash_of_balls.game.SensorThread.java
com.sapos_aplastados.game.clash_of_balls.game.StaticGameObjectNoInteraction.java
com.sapos_aplastados.game.clash_of_balls.game.StaticGameObject.java
com.sapos_aplastados.game.clash_of_balls.game.Vector3D.java
com.sapos_aplastados.game.clash_of_balls.game.Vector.java
com.sapos_aplastados.game.clash_of_balls.game.event.EventGameEnd.java
com.sapos_aplastados.game.clash_of_balls.game.event.EventGameInfo.java
com.sapos_aplastados.game.clash_of_balls.game.event.EventGameStartNow.java
com.sapos_aplastados.game.clash_of_balls.game.event.EventImpact.java
com.sapos_aplastados.game.clash_of_balls.game.event.EventItemAdded.java
com.sapos_aplastados.game.clash_of_balls.game.event.EventItemRemoved.java
com.sapos_aplastados.game.clash_of_balls.game.event.EventItemUpdate.java
com.sapos_aplastados.game.clash_of_balls.game.event.EventPool.java
com.sapos_aplastados.game.clash_of_balls.game.event.Event.java
com.sapos_aplastados.game.clash_of_balls.helper.RawResourceReader.java
com.sapos_aplastados.game.clash_of_balls.helper.ShaderHelper.java
com.sapos_aplastados.game.clash_of_balls.helper.TextureHelper.java
com.sapos_aplastados.game.clash_of_balls.menu.CreationMenu.java
com.sapos_aplastados.game.clash_of_balls.menu.GameMenuBase.java
com.sapos_aplastados.game.clash_of_balls.menu.HelpMenu.java
com.sapos_aplastados.game.clash_of_balls.menu.JoinMenu.java
com.sapos_aplastados.game.clash_of_balls.menu.MainMenu.java
com.sapos_aplastados.game.clash_of_balls.menu.MenuBackground.java
com.sapos_aplastados.game.clash_of_balls.menu.MenuItemArrow.java
com.sapos_aplastados.game.clash_of_balls.menu.MenuItemButton.java
com.sapos_aplastados.game.clash_of_balls.menu.MenuItemGreyButton.java
com.sapos_aplastados.game.clash_of_balls.menu.MenuItemImg.java
com.sapos_aplastados.game.clash_of_balls.menu.MenuItemKeyboard.java
com.sapos_aplastados.game.clash_of_balls.menu.MenuItemLevel.java
com.sapos_aplastados.game.clash_of_balls.menu.MenuItemList.java
com.sapos_aplastados.game.clash_of_balls.menu.MenuItemResultEntry.java
com.sapos_aplastados.game.clash_of_balls.menu.MenuItemStringMultiline.java
com.sapos_aplastados.game.clash_of_balls.menu.MenuItemString.java
com.sapos_aplastados.game.clash_of_balls.menu.MenuItem.java
com.sapos_aplastados.game.clash_of_balls.menu.PopupBase.java
com.sapos_aplastados.game.clash_of_balls.menu.PopupCredit.java
com.sapos_aplastados.game.clash_of_balls.menu.PopupGameStart.java
com.sapos_aplastados.game.clash_of_balls.menu.PopupMsg.java
com.sapos_aplastados.game.clash_of_balls.menu.ResultsMenu.java
com.sapos_aplastados.game.clash_of_balls.menu.WaitMenu.java
com.sapos_aplastados.game.clash_of_balls.network.AlljoynInterface.java
com.sapos_aplastados.game.clash_of_balls.network.NetworkClient.java
com.sapos_aplastados.game.clash_of_balls.network.NetworkServer.java
com.sapos_aplastados.game.clash_of_balls.network.Networking.java