Progress on implementing unit teams

This commit is contained in:
Anuken
2018-03-15 00:19:05 -04:00
parent 0b2a933faa
commit 155f3945a6
12 changed files with 74 additions and 33 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 B

After

Width:  |  Height:  |  Size: 264 B

View File

@ -7,13 +7,12 @@ uniform sampler2D u_texture;
uniform vec4 u_color;
uniform vec2 u_texsize;
uniform float u_lighten;
varying vec4 v_color;
varying vec2 v_texCoord;
bool id(vec4 v){
return v.a > 0.1 && !(v.r < 0.01 && v.g < 0.01 && v.b < 0.01);
return v.a > 0.1;
}
void main() {
@ -39,6 +38,6 @@ void main() {
if((c.r < 0.01 && c.g < 0.01 && c.b < 0.01)){
c = vec4(0.0);
}
gl_FragColor = mix(c, vec4(1.0, 1.0, 1.0, c.a), u_lighten) * v_color;
gl_FragColor = mix(c, vec4(1.0, 1.0, 1.0, c.a), c.a) * v_color;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 91 KiB

View File

@ -1,7 +1,7 @@
#Autogenerated file. Do not modify.
#Wed Mar 14 22:59:39 EDT 2018
#Wed Mar 14 23:06:35 EDT 2018
version=release
androidBuildCode=520
androidBuildCode=521
name=Mindustry
code=3.4
build=custom build

View File

@ -10,6 +10,7 @@ import io.anuke.mindustry.entities.Player;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.entities.effect.Shield;
import io.anuke.mindustry.entities.units.BaseUnit;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.io.Platform;
import io.anuke.mindustry.net.ClientDebug;
import io.anuke.mindustry.net.ServerDebug;
@ -136,9 +137,15 @@ public class Vars{
public static Player player;
public static final EntityGroup<Player> playerGroup = Entities.addGroup(Player.class).enableMapping();
public static final EntityGroup<BaseUnit> enemyGroup = Entities.addGroup(BaseUnit.class).enableMapping();
public static final EntityGroup<TileEntity> tileGroup = Entities.addGroup(TileEntity.class, false);
public static final EntityGroup<Bullet> bulletGroup = Entities.addGroup(Bullet.class);
public static final EntityGroup<Shield> shieldGroup = Entities.addGroup(Shield.class, false);
public static final EntityGroup<EffectEntity> effectGroup = Entities.addGroup(EffectEntity.class, false);
public static final EntityGroup<BaseUnit>[] unitGroups = new EntityGroup[Team.values().length];
static{
for(Team team : Team.values()){
unitGroups[team.ordinal()] = Entities.addGroup(BaseUnit.class).enableMapping();
}
}
}

View File

@ -14,6 +14,7 @@ import io.anuke.mindustry.world.blocks.ProductionBlocks;
import io.anuke.ucore.core.Events;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.entities.Entities;
import io.anuke.ucore.entities.EntityGroup;
import io.anuke.ucore.modules.Module;
import static io.anuke.mindustry.Vars.*;
@ -115,12 +116,17 @@ public class Logic extends Module {
Entities.update(Entities.defaultGroup());
Entities.update(bulletGroup);
Entities.update(enemyGroup);
for(EntityGroup group : unitGroups){
if(!group.isEmpty()) Entities.update(group);
}
Entities.update(tileGroup);
Entities.update(shieldGroup);
Entities.update(playerGroup);
Entities.collideGroups(bulletGroup, enemyGroup);
for(EntityGroup group : unitGroups){
if(!group.isEmpty()) Entities.collideGroups(bulletGroup, group);
}
Entities.collideGroups(bulletGroup, playerGroup);
}
}

View File

@ -17,6 +17,7 @@ import io.anuke.mindustry.entities.Player;
import io.anuke.mindustry.entities.SyncEntity;
import io.anuke.mindustry.entities.units.BaseUnit;
import io.anuke.mindustry.game.SpawnPoint;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.graphics.BlockRenderer;
import io.anuke.mindustry.graphics.Shaders;
import io.anuke.mindustry.input.InputHandler;
@ -29,11 +30,11 @@ import io.anuke.mindustry.world.blocks.ProductionBlocks;
import io.anuke.ucore.core.*;
import io.anuke.ucore.entities.EffectEntity;
import io.anuke.ucore.entities.Entities;
import io.anuke.ucore.entities.EntityGroup;
import io.anuke.ucore.function.Callable;
import io.anuke.ucore.graphics.*;
import io.anuke.ucore.modules.RendererModule;
import io.anuke.ucore.scene.ui.layout.Unit;
import io.anuke.ucore.util.Angles;
import io.anuke.ucore.util.Mathf;
import io.anuke.ucore.util.Tmp;
@ -182,18 +183,12 @@ public class Renderer extends RendererModule{
blocks.processBlocks();
blocks.drawBlocks(false);
Graphics.shader(Shaders.outline, false);
Entities.draw(enemyGroup);
Graphics.shader();
Entities.draw(playerGroup, p -> !p.mech.flying);
drawAllTeams(false);
Entities.draw(Entities.defaultGroup());
blocks.drawBlocks(true);
Graphics.shader(Shaders.outline, false);
Entities.draw(playerGroup, p -> p.mech.flying);
Graphics.shader();
drawAllTeams(true);
Entities.draw(bulletGroup);
Entities.draw(effectGroup);
@ -214,6 +209,24 @@ public class Renderer extends RendererModule{
batch.end();
}
private void drawAllTeams(boolean flying){
for(Team team : Team.values()){
EntityGroup<BaseUnit> group = unitGroups[team.ordinal()];
if(group.all().size() < 0) continue;
Shaders.outline.color.set(team.color);
Graphics.beginShaders(Shaders.outline);
drawTeam(team, flying);
Graphics.endShaders();
}
}
private void drawTeam(Team team, boolean flying){
Entities.draw(unitGroups[team.ordinal()], u -> u.isFlying() == flying);
Entities.draw(playerGroup, p -> p.isFlying() == flying && p.team == team);
}
@Override
public void resize(int width, int height){
super.resize(width, height);
@ -278,7 +291,9 @@ public class Renderer extends RendererModule{
Draw.tscl(fontscale);
}
//TODO implement
void drawEnemyMarkers(){
/*
Graphics.surface(indicatorSurface);
Draw.color(Color.RED);
@ -298,7 +313,7 @@ public class Renderer extends RendererModule{
Draw.color();
Draw.alpha(0.4f);
Graphics.flushSurface();
Draw.color();
Draw.color();*/
}
void drawShield(){
@ -499,7 +514,10 @@ public class Renderer extends RendererModule{
target.block().drawSelect(target);
}
}
//TODO draw health bars
/*
if((!debug || showUI) && Settings.getBool("healthbars")){
//draw entity health bars
@ -510,7 +528,7 @@ public class Renderer extends RendererModule{
for(Player player : playerGroup.all()){
if(!player.isDead()) drawHealth(player);
}
}
}*/
}
void drawHealth(SyncEntity dest){

View File

@ -3,7 +3,6 @@ package io.anuke.mindustry.entities;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.math.Vector2;
import io.anuke.mindustry.graphics.Fx;
import io.anuke.mindustry.graphics.Shaders;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.net.NetEvents;
import io.anuke.mindustry.resource.Mech;
@ -63,9 +62,15 @@ public class Player extends Unit{
return mech.mass;
}
@Override
public boolean isFlying(){
return mech.flying;
}
@Override
public void damage(int amount){
if(debug || mech.flying) return;
hitTime = hitDuration;
health -= amount;
if(health <= 0 && !dead && isLocal){ //remote players don't die normally
@ -118,15 +123,10 @@ public class Player extends Unit{
public void drawSmooth(){
if((debug && (!showPlayer || !showUI)) || dead) return;
Graphics.beginShaders(Shaders.outline);
boolean snap = snapCamera && Settings.getBool("smoothcam") && Settings.getBool("pixelate") && isLocal;
String mname = mech.name;
Shaders.outline.color.set(getColor());
Shaders.outline.lighten = 0f;
float px = x, py =y;
if(snap){
@ -136,6 +136,8 @@ public class Player extends Unit{
float ft = Mathf.sin(walktime, 6f, 2f);
Draw.alpha(hitTime / hitDuration);
for(int i : Mathf.signs){
tr.trns(footRotation, ft * i);
Draw.rect(mname + "-leg", x + tr.x, y + tr.y, 12f * i, 12f - Mathf.clamp(ft*i, 0, 2), footRotation- 90);
@ -152,8 +154,7 @@ public class Player extends Unit{
Draw.rect(weapon.name + "-equip", x + tr.x, y + tr.y, w, 8, rotation - 90);
}
Graphics.endShaders();
Draw.alpha(1f);
x = px;
y = py;
@ -161,6 +162,12 @@ public class Player extends Unit{
@Override
public void update(){
if(hitTime > 0){
hitTime -= Timers.delta();
}
if(hitTime < 0) hitTime = 0;
if(!isLocal){
interpolate();
return;

View File

@ -12,4 +12,5 @@ public abstract class Unit extends SyncEntity {
public float hitTime;
public abstract float getMass();
public abstract boolean isFlying();
}

View File

@ -8,7 +8,7 @@ import io.anuke.ucore.util.Timer;
import java.nio.ByteBuffer;
import static io.anuke.mindustry.Vars.enemyGroup;
import static io.anuke.mindustry.Vars.unitGroups;
public class BaseUnit extends Unit {
public UnitType type;
@ -27,6 +27,11 @@ public class BaseUnit extends Unit {
return type.mass;
}
@Override
public boolean isFlying() {
return type.isFlying;
}
@Override
public void update(){
type.update(this);
@ -76,7 +81,7 @@ public class BaseUnit extends Unit {
@Override
public BaseUnit add(){
return add(enemyGroup);
return add(unitGroups[team.ordinal()]);
}
@Override

View File

@ -20,7 +20,6 @@ public class Shaders{
public static class Outline extends Shader{
public Color color = new Color();
public float lighten = 0f;
public Outline(){
super("outline", "default");
@ -29,7 +28,6 @@ public class Shaders{
@Override
public void apply(){
shader.setUniformf("u_color", color);
shader.setUniformf("u_lighten", lighten);
shader.setUniformf("u_texsize", vec.set(region.getTexture().getWidth(), region.getTexture().getHeight()));
}
}

View File

@ -104,7 +104,7 @@ public class Weapon extends Upgrade{
p.timer.reset(t2, reload/2f);
}
float ang = Angles.mouseAngle(p.x, p.y);
tr.trns(ang - 90, 3f * Mathf.sign(left), length);
tr.trns(ang - 90, 4f * Mathf.sign(left), length + 1f);
shoot(p, p.x + tr.x, p.y + tr.y, Angles.mouseAngle(p.x + tr.x, p.y + tr.y));
}
}