extends 可解锁内容
field | type | default | note |
---|---|---|---|
constructor | Prov<? extends Unit> | 单位实例 | |
health | float | 200 | 单位生命值 |
armor | float | 0 | 单位护甲值 |
range | float | -1 | |
maxRange | float | -1 | |
speed | float | 1.1 | 单位移速 |
boostMultiplier | float | 1 | 单位助推移速倍率 |
rotateSpeed | float | 5 | 单位机身在单位时间转动角度大小 |
drag | float | 0.3 | 单位惯性大小 |
accel | float | 0.5 | 单位加速度大小 |
physics | boolean | true | 是否有碰撞箱 |
hitSize | float | 6 | 单位正方形碰撞箱边长大小 |
stepShake | float | -1 | 走动屏幕摇晃强度(LEG/MECH) |
rippleScale | float | 1 | 地面粒子效果强度 |
riseSpeed | float | 0.08 | 单位助推上空速度 |
fallSpeed | float | 0.018 | 单位无助推下地速度 |
missileAccelTime | float | 0 | 导弹单位加速度到全速耗时 |
mineRange | float | 70 | 单位挖矿范围 |
buildRange | float | Vars.buildingRange | 单位构造方块范围 |
crashDamageMultiplier | float | 1 | 飞行单位坠落伤害倍率 |
dspEstimate | float | -1 | 单位秒伤(-1为自动计算) |
hovering | boolean | false | 是否不会被地板效果效应 |
canDrown | boolean | true | 陆地单位淹没时间倍率 |
drownTimeMultiplier | float | 1 | 陆地单位淹没时间倍率 |
strafePenalty | float | 0.5 | 向不同方位时移速损失 |
researchCostMultiplier | float | 50 | 单位研究消耗倍率 |
groundLayer | float | Layer.groundUnit | 单位所在图层 |
buildSpeed | float | -1 | 单位建造速度(<0以不可构造方块) |
rotateToBuilding | boolean | true | 是否转向当前构造的方块 |
aimDst | float | -1 | 单位瞄准最小范围 |
buildBeamOffset | float | 3.8 | 单位构造枪y轴偏移 |
shadowElevation | float | -1 | |
shadowElevationScl | float | 1 | |
engineOffset | float | 5 | 尾喷焰负偏移(y) |
engineSize | float | 2.5 | 尾喷焰大小 |
engineLayer | float | -1 | 尾喷焰所在图层 |
itemOffsetY | float | 3 | 单位所有物品负偏移(y) |
lightRadius | float | -1 | 单位发光半径(<0以取默认值) |
lightOpacity | float | 0.6 | 单位发光强度(α通道) |
fogRadius | float | -1 | 单位探雾范围(<0以自动计算) |
waveTrailX | float | 4 | 海军尾拖偏移 |
waveTrailY | float | -3 | |
trailScl | float | 1 | 尾拖粗细 |
abilities | Seq<Ability> | new Seq<> | 单位技能 |
weapons | Seq<Weapon> | new Seq<> | 单位武器 |
immunites | ObjectSet <StatusEffect> | new ObjectSet<> | 单位免疫效果 |
canHeal | boolean | false | 单位是否能被治疗 |
healFlash | boolean | true | 是否在单位被治疗时闪光 |
healColor | Color | Pal.heal | 单位被治疗闪光颜色 |
lightColor | Color | Pal.powerLight | 单位发光颜色 |
deathSound | Sound | Sounds.bang | 单位死亡音效 |
loopSound | Sound | Sounds.none | 单位周边音效 |
loopSoundVolume | float | 0.5 | 单位周边音效响度 |
fallEffect | Effect | Fx.fallSmoke | 助推单位坠落特效 |
fallEngineEffect | Effect | Fx.fallSmoke | 助推单位坠落时发动机特效 |
deathExplosionEffect | Effect | Fx.dynamicExplosion | 死亡单位爆炸特效 |
parts | Seq<DrawPart> | new Seq<>(DrawPart.class) | 单位额外绘制部件 |
engines | Seq<UnitEngine> | new Seq<> | 助推单位发动机 |
engineColor | @Nullable Color | null | 覆盖全部发动机颜色 |
engineColorInner | Color | Color.white | 发动机内部颜色 |
trailLength | int | 0 | 海军尾拖长度 |
outlines | boolean | true | 是否有外描边 |
outlineRadius | int | 3 | 外描边粗细 |
outlineColor | color | Pal.darkerMetal | 外描边颜色 |
itemCapacity | int | -1 | 单位物品容量(<0以碰撞箱计算) |
ammoType | AmmoType | new ItemAmmoType (Items.copper) | 物品使用的弹药 |
ammoCapacity | int | -1 | 物品弹药容量(<0以武器射速计算) |
mineWalls | boolean | false | 是否能挖墙矿 |
mineFloor | 是否能挖地矿 | ||
mineHardnessScaling | boolean | true | 是否依据矿物硬度调整挖矿效率 |
mineTier | int | -1 | 单位钻头强度 |
mineSpeed | float | 1 | 单位钻取速度 |
mineSoundVolume | float | 0.6 | 单位挖矿声音响度 |
mineItems | Seq<Item> | Seq.with( Items.copper, Items.lead, Items.titanium, Items.thorium) | 单位计划挖掘矿物 |
hidden | boolean | false | 是否隐藏单位 |
useUnitCap | boolean | true | 是否有单位数量上限 |
flying | boolean | false | 是否永远飞行 |
lowAltitude | boolean | false | 低空飞行, 图层相关 |
canBoost | boolean | false | 是否可助推, 助推时为空军 |
canAttack | boolean | true | 单位是否没有武器攻击 |
targetAir | boolean | true | 是否瞄准空军 |
targetGround | boolean | true | 是否瞄准陆军 |
faceTarget | boolean | true | 是否尝试面向瞄准的目标 |
circleTarget | boolean | false | 飞行单位是否围绕目标 |
singleTarget | boolean | false | 全部武器是否只瞄准单个目标 |
forceMultiTarget | boolean | false | 是否强制瞄准多个目标 |
aiController | Prov<? extends UnitController> | 见note | 被构造后默认分配的AI(不填以flying 决定AI) |
controller | Func<Unit, ? extends UnitController> | 见note | 决定单位用什么AI的算法 (不填默认为 aiController 或被指挥AI) |
commands | UnitCommand[] | {} | 单位指令 |
defaultCommand | @Nullable UnitCommand | 单位默认指令 | |
logicControllable | boolean | true | 是否能被逻辑控制 |
playerControllable | boolean | true | 是否能被玩家控制 |
payloadCapacity | boolean | true | 单位荷载容量 |
pickupUnit | boolean | true | 是否能捡起单位 |
allowedInPayloads | boolean | true | 是否能作为荷载被运输 |
vulnerableWithPayloads | boolean | false | 是否在单位有荷载时可被攻击 (下两项为 false 时) |
targetable | boolean | true | 是否能被瞄准 |
hittable | boolean | true | 是否能被射击 |
killable | boolean | true | 是否能被杀死 |
omniMovement | boolean | true | 是否能全方位移动 (而非面朝方向) |
rotateMoveFirst | boolean | false | 是否先转到目标方位再移动 |
drawBuildBeam | boolean | true | 是否绘制建造枪 |
drawCell | boolean | true | 是否绘制队伍指示器 |
drawItems | boolean | true | 是否绘制携带物品 |
drawShields | boolean | true | 是否绘制单位护盾 |
drawBody | boolean | true | 是否绘制单位身体 |
LEG 腿型单位 | |||
allowLegStep | boolean | false | 是否允许为腿型单位 |
legPhysicsLayer | boolean | true | |
legCount | int | 4 | 腿的数量 |
legGroupSize | int | 2 | |
legLength | float | 10 | 腿的长度 |
legSpeed | float | 0.1 | 腿的移速 |
legForwardScl | float | 1 | |
legBaseOffset | float | 0 | 大腿向单位中心远离半径 |
legMoveSpace | float | 1 | 脚落脚距离倍率(一直走动前提) |
legExtension | float | 0 | 小腿纵向坐标偏移量(多用于无关节单位) |
legPairOffset | float | 0 | 各腿移动时间间隔(或者不同步程度) |
legLengthScl | float | 1 | 每次移动脚尝试向单位中心远离倍率 |
legStraightLength | float | 1 | |
legMaxLength | float | 1.75 | |
legMinLength | float | 0 | |
legSplashRange | float | 5 | 落脚点溅射范围 |
legSplashDamage | float | 0 | 溅射伤害 |
baseLegStraightness | float | 0 | |
legStraightness | float | 0 | |
lockLegBase | boolean | false | |
legContinuousMove | boolean | ||
flipBackLegs | boolean | true | |
flipLegSide | boolean | false | |
MECH 机甲单位 | |||
baseRotateSpeed | float | 5 | 机座在单位时间转动角度大小 |
mechLandShake | float | 0 | |
mechSideSway | float | 0.54 | 机甲走动左右摇晃力度 |
mechFrontSway | float | 0.54 | 机甲走动前后摇晃力度 |
mechStride | float | -1 | |
mechStepParticles | boolean | false | 是否有走路粒子特效 |
mechLegColor | color | Pal.darkMetal | |
TANK 坦克单位 | |||
treadFrame | float | 18 | |
treadPullOffset | float | 0 | |
MISSILE 导弹单位 | |||
lifetime | float | 60 * 5 | 存活时间 |
homingDelay | float | 10 | 追踪开启时间 |
SEGMENTED 分节单位 | |||
segments | int | 0 | 分节数量 |
segmentMag | float | 2 | |
segmentScl | float | 4 | |
segmentPhase | float | 5 | |
segmentRotSpeed | float | 1 | 各分节转速 |
segmentMaxRot | float | 30 | 各分节最大差异角度 |
crawlSlowdownFrac | float | 0.55 | |
crawlSlowdown | float | 0.5 | |
crushDamage | float | 0 | 在单位本下方受到的帧伤 |
public UnitType(String name){ super(name); constructor = EntityMapping.map(this.name); }
@Override public void setStats(){ Unit inst = constructor.get(); stats.add(Stat.health, health); stats.add(Stat.armor, armor); stats.add(Stat.speed, speed * 60f / tilesize, StatUnit.tilesSecond); stats.add(Stat.size, hitSize / tilesize, StatUnit.blocksSquared); stats.add(Stat.itemCapacity, itemCapacity); stats.add(Stat.range, (int)(maxRange / tilesize), StatUnit.blocks); stats.add(Stat.commandLimit, commandLimit); if(abilities.any()){ var unique = new ObjectSet(); for(Ability a : abilities){ if(unique.add(a.localized())){ stats.add(Stat.abilities, a.localized()); } } } stats.add(Stat.flying, flying); if(!flying){ stats.add(Stat.canBoost, canBoost); } if(mineTier >= 1){ stats.addPercent(Stat.mineSpeed, mineSpeed); stats.add(Stat.mineTier, StatValues.blocks(b -> b instanceof Floor f && f.itemDrop != null && f.itemDrop.hardness <= mineTier && (!f.playerUnmineable || Core.settings.getBool("doubletapmine")))); } if(buildSpeed > 0){ stats.addPercent(Stat.buildSpeed, buildSpeed); } if(inst instanceof Payloadc){ stats.add(Stat.payloadCapacity, (payloadCapacity / (tilesize * tilesize)), StatUnit.blocksSquared); } var reqs = getFirstRequirements(); if(reqs != null){ stats.add(Stat.buildCost, StatValues.items(reqs)); } if(weapons.any()){ stats.add(Stat.weapons, StatValues.weapons(this, weapons)); } }