📄 seriworld.java
字号:
package com.croftsoft.apps.mars.model.seri; import java.awt.*; import java.io.*; import java.util.*; import com.croftsoft.core.lang.NullArgumentException; import com.croftsoft.core.math.geom.Point2DD; import com.croftsoft.core.math.geom.PointXY; import com.croftsoft.core.math.geom.ShapeLib; import com.croftsoft.core.util.ArrayKeeper; import com.croftsoft.core.util.ArrayLib; import com.croftsoft.core.util.StableArrayKeeper; import com.croftsoft.apps.mars.ai.DefaultTankOperator; import com.croftsoft.apps.mars.ai.TankOperator; import com.croftsoft.apps.mars.model.AmmoDump; import com.croftsoft.apps.mars.model.AmmoDumpAccessor; import com.croftsoft.apps.mars.model.Bullet; import com.croftsoft.apps.mars.model.Damageable; import com.croftsoft.apps.mars.model.Game; import com.croftsoft.apps.mars.model.Impassable; import com.croftsoft.apps.mars.model.Model; import com.croftsoft.apps.mars.model.ModelAccessor; import com.croftsoft.apps.mars.model.Obstacle; import com.croftsoft.apps.mars.model.Tank; import com.croftsoft.apps.mars.model.TankAccessor; import com.croftsoft.apps.mars.model.World; /********************************************************************* * A World implementation. * * @version * 2003-05-11 * @since * 2003-04-03 * @author * <a href="http://www.croftsoft.com/">David Wallace Croft</a> *********************************************************************/ public final class SeriWorld implements World, Serializable ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// { private static final long serialVersionUID = 0L; // private final Random random; private final SeriAmmoDump.Shared seriAmmoDumpShared; private final ArrayKeeper modelArrayKeeper; private final Point2DD center; private final java.util.List modelList; ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// public SeriWorld ( Random random, SeriAmmoDump.Shared seriAmmoDumpShared ) ////////////////////////////////////////////////////////////////////// { modelArrayKeeper = new StableArrayKeeper ( new Model [ 0 ] ); center = new Point2DD ( ); NullArgumentException.check ( this.random = random ); NullArgumentException.check ( this.seriAmmoDumpShared = seriAmmoDumpShared ); modelList = new ArrayList ( ); } ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// public void clear ( ) ////////////////////////////////////////////////////////////////////// { modelArrayKeeper.setArray ( new Model [ 0 ] ); } public AmmoDump createAmmoDump ( double centerX, double centerY ) ////////////////////////////////////////////////////////////////////// { SeriAmmoDump seriAmmoDump = new SeriAmmoDump ( this, centerX, centerY, seriAmmoDumpShared.ammoMax, seriAmmoDumpShared ); modelArrayKeeper.insert ( seriAmmoDump ); return seriAmmoDump; } public Bullet createBullet ( double originX, double originY, double heading ) ////////////////////////////////////////////////////////////////////// { SeriBullet seriBullet = new SeriBullet ( this, originX, originY, heading ); modelArrayKeeper.insert ( seriBullet ); return seriBullet; } public Obstacle createObstacle ( double centerX, double centerY, double radius, double radiusMin, Rectangle driftBounds ) ////////////////////////////////////////////////////////////////////// { SeriObstacle seriObstacle = new SeriObstacle ( this, centerX, centerY, radius, radiusMin, random, driftBounds ); modelArrayKeeper.insert ( seriObstacle ); return seriObstacle; } public Tank createTank ( double centerX, double centerY, Color color ) ////////////////////////////////////////////////////////////////////// { SeriTank seriTank = new SeriTank ( this, centerX, centerY, color ); TankOperator tankOperator = new DefaultTankOperator ( random ); seriTank.setTankOperator ( tankOperator ); tankOperator.setTankConsole ( seriTank ); modelArrayKeeper.insert ( seriTank ); return seriTank; } public void remove ( Model model ) ////////////////////////////////////////////////////////////////////// { modelArrayKeeper.remove ( model ); } ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// public AmmoDump [ ] getAmmoDumps ( PointXY pointXY, AmmoDump [ ] ammoDumps ) ////////////////////////////////////////////////////////////////////// { return ( AmmoDump [ ] ) getModels ( pointXY, ammoDumps, AmmoDump.class ); } public Damageable [ ] getDamageables ( Shape shape, Damageable [ ] damageables ) ////////////////////////////////////////////////////////////////////// { return ( Damageable [ ] ) getModels ( shape, damageables, Damageable.class ); } public Impassable [ ] getImpassables ( ) ////////////////////////////////////////////////////////////////////// { return ( Impassable [ ] ) modelArrayKeeper.getArray ( Impassable.class ); } public Iterator getImpassables ( Shape shape, Model model ) ////////////////////////////////////////////////////////////////////// { modelList.clear ( ); Impassable [ ] impassables = getImpassables ( ); for ( int i = 0; i < impassables.length; i++ ) { Impassable impassable = impassables [ i ]; if ( ( impassable != model ) && impassable.isActive ( ) && ShapeLib.intersects ( shape, impassable.getShape ( ) ) ) { modelList.add ( impassable ); } } return modelList.iterator ( ); } public Model [ ] getModels ( ) ////////////////////////////////////////////////////////////////////// { return ( Model [ ] ) modelArrayKeeper.getArray ( ); } public ModelAccessor [ ] getModelAccessors ( ModelAccessor [ ] modelAccessors ) ////////////////////////////////////////////////////////////////////// { return getModelAccessors ( ( Shape ) null, modelAccessors ); } public ModelAccessor [ ] getModelAccessors ( Shape shape, ModelAccessor [ ] modelAccessors ) ////////////////////////////////////////////////////////////////////// { Model [ ] allModels = getModels ( ); if ( shape == null ) { return allModels; } NullArgumentException.check ( modelAccessors ); int index = 0; for ( int i = 0; i < allModels.length; i++ ) { Model model = allModels [ i ]; if ( ShapeLib.intersects ( shape, model.getShape ( ) ) ) { if ( index < modelAccessors.length ) { modelAccessors [ index ] = model; } else { modelAccessors = ( ModelAccessor [ ] ) ArrayLib.append ( modelAccessors, model ); } index++; } } if ( index < modelAccessors.length ) { modelAccessors [ index ] = null; } return modelAccessors; } public Obstacle [ ] getObstacles ( ) ////////////////////////////////////////////////////////////////////// { return ( Obstacle [ ] ) modelArrayKeeper.getArray ( Obstacle.class ); } public Tank [ ] getTanks ( ) ////////////////////////////////////////////////////////////////////// { return ( Tank [ ] ) modelArrayKeeper.getArray ( Tank.class ); } ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// public void prepare ( ) ////////////////////////////////////////////////////////////////////// { Model [ ] models = getModels ( ); for ( int i = 0; i < models.length; i++ ) { models [ i ].prepare ( ); } } public void update ( double timeDelta ) ////////////////////////////////////////////////////////////////////// { Model [ ] models = getModels ( ); for ( int i = 0; i < models.length; i++ ) { models [ i ].update ( timeDelta ); } } ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// public void fireBullet ( double originX, double originY, double heading ) //////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -