02.09.2010, 12:29 | #21 |
Бульбаш
Регистрация: 19.01.2010
Сообщений: 47
|
А можно как-то разобраться, как бегают человечки при атаке колонны? И так же сделать пехоту (ну или хотя бы чтоб на аэродроме такой же шухер начинался при вулче)... Всяко интереснее...
|
05.09.2010, 12:53 | #22 |
Местный
|
В классе паратропер тоже есть движение.
|
05.09.2010, 12:54 | #23 |
Местный
|
/* Soldier - Decompiled by JODE
* Visit http://jode.sourceforge.net/ */ package com.maddox.il2.objects.humans; import com.maddox.JGP.Geom; import com.maddox.JGP.Point3d; import com.maddox.JGP.Vector3d; import com.maddox.JGP.Vector3f; import com.maddox.il2.ai.Explosion; import com.maddox.il2.ai.MsgExplosionListener; import com.maddox.il2.ai.MsgShotListener; import com.maddox.il2.ai.Shot; import com.maddox.il2.ai.World; import com.maddox.il2.ai.ground.Prey; import com.maddox.il2.ai.ground.UnitInterface; import com.maddox.il2.engine.Actor; import com.maddox.il2.engine.ActorMesh; import com.maddox.il2.engine.ActorMeshDraw; import com.maddox.il2.engine.BulletProperties; import com.maddox.il2.engine.Engine; import com.maddox.il2.engine.Interpolate; import com.maddox.il2.engine.Landscape; import com.maddox.il2.engine.Loc; import com.maddox.il2.engine.Mesh; import com.maddox.il2.engine.MsgCollisionListener; import com.maddox.il2.engine.MsgCollisionRequestListener; import com.maddox.il2.engine.Orient; import com.maddox.rts.Message; import com.maddox.rts.Time; public class Soldier extends ActorMesh implements MsgCollisionRequestListener, MsgCollisionListener, MsgExplosionListener, MsgShotListener, Prey { private static final int FPS = 30; private static final int RUN_START_FRAME = 0; private static final int RUN_LAST_FRAME = 22; private static final int RUN_N_FRAMES = 23; private static final int RUN_CYCLE_TIME = 733; private static final int FALL_START_FRAME = 22; private static final int FALL_LAST_FRAME = 54; private static final int FALL_N_FRAMES = 33; private static final int FALL_CYCLE_TIME = 1066; private static final int LIE_START_FRAME = 54; private static final int LIE_LAST_FRAME = 74; private static final int LIE_N_FRAMES = 21; private static final int LIE_CYCLE_TIME = 666; private static final int LIEDEAD_START_FRAME = 75; private static final int LIEDEAD_N_FRAMES = 4; private static final float RUN_SPEED = 6.5454545F; private Vector3d speed; private static final int ST_FLY = 0; private static final int ST_RUN = 1; private static final int ST_FALL = 2; private static final int ST_LIE = 3; private static final int ST_LIEDEAD = 4; private int st = 0; private int dying = 0; static final int DYING_NONE = 0; static final int DYING_DEAD = 1; private int idxOfDeadPose; private long animStartTime; private long disappearTime; private int nRunCycles; private static Mesh preload1 = null; private static Mesh preload2 = null; private static Point3d p = new Point3d(); private static Orient o = new Orient(); private static Vector3f n = new Vector3f(); class Move extends Interpolate { public boolean tick() { if ((st == 3 || st == 4) && Time.current() >= disappearTime) { Soldier.this.postDestroy(); return false; } if (dying != 0) { switch (st) { case 1: st = 2; animStartTime = Time.current(); break; case 3: st = 4; idxOfDeadPose = World.Rnd().nextInt(0, 3); break; } setAnimFrame((double) Time.tickNext()); } long l = Time.tickNext() - animStartTime; switch (st) { case 0: { pos.getAbs(Soldier.p); Soldier.p.scaleAdd((double) Time.tickLenFs(), speed, Soldier.p); speed.z -= (double) (Time.tickLenFs() * World.g()); Engine.land(); float f = Landscape.HQ((float) Soldier.p.x, (float) Soldier.p.y); if (Soldier.p.z <= (double) f) { speed.z = 0.0; speed.normalize(); speed.scale(6.545454502105713); Soldier.p.z = (double) f; st = 1; nRunCycles = World.Rnd().nextInt(9, 17); } pos.setAbs(Soldier.p); break; } case 1: pos.getAbs(Soldier.p); Soldier.p.scaleAdd((double) Time.tickLenFs(), speed, Soldier.p); Soldier.p.z = Engine.land().HQ(Soldier.p.x, Soldier.p.y); pos.setAbs(Soldier.p); if (l / 733L >= (long) nRunCycles || World.land().isWater(Soldier.p.x, Soldier.p.y)) { st = 2; animStartTime = Time.current(); } break; case 2: pos.getAbs(Soldier.p); Soldier.p.scaleAdd((double) Time.tickLenFs(), speed, Soldier.p); Soldier.p.z = Engine.land().HQ(Soldier.p.x, Soldier.p.y); if (World.land().isWater(Soldier.p.x, Soldier.p.y)) Soldier.p.z -= 0.5; pos.setAbs(Soldier.p); if (l >= 1066L) { st = 3; animStartTime = Time.current(); disappearTime = (Time.tickNext() + (long) (1000 * World.Rnd().nextInt(25, 35))); } break; case 3: case 4: pos.getAbs(Soldier.p); Soldier.p.z = Engine.land().HQ(Soldier.p.x, Soldier.p.y); if (World.land().isWater(Soldier.p.x, Soldier.p.y)) Soldier.p.z -= 3.0; pos.setAbs(Soldier.p); break; } setAnimFrame((double) Time.tickNext()); return true; } } private class SoldDraw extends ActorMeshDraw { private SoldDraw() { /* empty */ } public int preRender(Actor actor) { setAnimFrame((double) Time.current()); return super.preRender(actor); } } public static void resetGame() { preload1 = preload2 = null; } public static void PRELOAD() { preload1 = new Mesh(GetMeshName(1)); preload2 = new Mesh(GetMeshName(2)); } public void msgCollisionRequest(Actor actor, boolean[] bools) { if (actor == getOwner()) bools[0] = false; if (actor instanceof Soldier) bools[0] = false; if (dying != 0) bools[0] = false; } public void msgCollision(Actor actor, String string, String string_0_) { if (dying == 0) { Point3d point3d = p; pos.getAbs(p); Point3d point3d_1_ = actor.pos.getAbsPoint(); Vector3d vector3d = new Vector3d(); vector3d.set(point3d.x - point3d_1_.x, point3d.y - point3d_1_.y, 0.0); if (vector3d.length() < 0.0010) { float f = World.Rnd().nextFloat(0.0F, 359.99F); vector3d.set((double) Geom.sinDeg(f), (double) Geom.cosDeg(f), 0.0); } vector3d.normalize(); float f = 0.2F; vector3d.add((double) World.Rnd().nextFloat(-f, f), (double) World.Rnd().nextFloat(-f, f), (double) World.Rnd().nextFloat(-f, f)); vector3d.normalize(); float f_2_ = 13.090909F * Time.tickLenFs(); vector3d.scale((double) f_2_); point3d.add(vector3d); pos.setAbs(point3d); if (st == 1) { st = 2; animStartTime = Time.current(); } if (st == 3 && dying == 0 && actor instanceof UnitInterface && actor.getSpeed(null) > 0.5) Die(actor); } } public void msgShot(Shot shot) { shot.bodyMaterial = 3; if (dying == 0 && !(shot.power <= 0.0F)) { if (shot.powerType == 1) Die(shot.initiator); else if (!(shot.v.length() < 20.0)) Die(shot.initiator); } } public void msgExplosion(Explosion explosion) { if (dying == 0) { float f = 0.0050F; float f_3_ = 0.1F; if (explosion != null) { /* empty */ } if (Explosion.killable(this, explosion.receivedTNT_1meter(this), f, f_3_, 0.0F)) Die(explosion.initiator); } } private void Die(Actor actor) { if (dying == 0) { World.onActorDied(this, actor); dying = 1; } } public void destroy() { super.destroy(); } public Object getSwitchListener(Message message) { return this; } |
05.09.2010, 12:55 | #24 |
Местный
|
void setAnimFrame(double d) {
int i; int i_4_; float f; switch (st) { case 0: case 1: { i = 0; i_4_ = 22; int i_5_ = 733; double d_6_ = d - (double) animStartTime; d_6_ %= (double) i_5_; if (d_6_ < 0.0) d_6_ += (double) i_5_; f = (float) (d_6_ / (double) i_5_); break; } case 2: { i = 22; i_4_ = 54; int i_7_ = 1066; double d_8_ = d - (double) animStartTime; if (d_8_ <= 0.0) f = 0.0F; else if (d_8_ >= (double) i_7_) f = 1.0F; else f = (float) (d_8_ / (double) i_7_); break; } case 3: { i = 54; i_4_ = 74; int i_9_ = 666; double d_10_ = d - (double) animStartTime; if (d_10_ <= 0.0) f = 0.0F; else if (d_10_ >= (double) i_9_) f = 1.0F; else f = (float) (d_10_ / (double) i_9_); break; } default: i = i_4_ = 75 + idxOfDeadPose; f = 0.0F; } mesh().setFrameFromRange(i, i_4_, f); } public int HitbyMask() { return -25; } public int chooseBulletType(BulletProperties[] bulletpropertieses) { if (dying != 0) return -1; if (bulletpropertieses.length == 1) return 0; if (bulletpropertieses.length <= 0) return -1; if (bulletpropertieses[0].power <= 0.0F) return 1; if (bulletpropertieses[0].powerType == 1) return 0; if (bulletpropertieses[1].powerType == 1) return 1; if (bulletpropertieses[0].cumulativePower > 0.0F) return 1; if (bulletpropertieses[0].powerType == 2) return 1; return 0; } public int chooseShotpoint(BulletProperties bulletproperties) { if (dying != 0) return -1; return 0; } public boolean getShotpointOffset(int i, Point3d point3d) { if (dying != 0) return false; if (i != 0) return false; if (point3d != null) point3d.set(0.0, 0.0, 0.0); return true; } private static String GetMeshName(int i) { boolean bool = i == 2; boolean bool_11_ = World.cur().camouflage == 1; return ("3do/humans/soldiers/" + (bool ? "Germany" : "Russia") + (bool_11_ ? "Winter" : "Summer") + "/mono.sim"); } public Soldier(Actor actor, int i, Loc loc) { super(GetMeshName(i)); setOwner(actor); setArmy(i); Point3d point3d = new Point3d(); Orient orient = new Orient(); loc.get(point3d, orient); Vector3d vector3d = new Vector3d(); vector3d.set(1.0, 0.0, 0.0); orient.transform(vector3d); speed = new Vector3d(); speed.set(vector3d); if (speed.length() < 0.009999999776482582) speed.set(1.0, 0.0, 0.0); speed.normalize(); if (Math.abs(speed.z) > 0.9) { speed.set(1.0, 0.0, 0.0); speed.normalize(); } orient.setAT0(speed); orient.set(orient.azimut(), 0.0F, 0.0F); pos.setAbs(point3d, orient); pos.reset(); speed.scale(6.545454502105713); st = 0; animStartTime = Time.tick() + (long) World.Rnd().nextInt(0, 2300); dying = 0; collide(true); draw = new SoldDraw(); drawing(true); if (!interpEnd("move")) interpPut(new Move(), "move", Time.current(), null); } } вот класс содлат из колонны. |
30.10.2010, 01:51 | #25 |
Гость
Сообщений: n/a
|
Есть прогресс?
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|