Player characters arent AICharacters in multiplayer, lighting optimization

This commit is contained in:
Regalis11
2015-12-13 18:02:43 +02:00
parent 04cfca0ede
commit c74caadc42
9 changed files with 38 additions and 34 deletions

Binary file not shown.

View File

@@ -297,19 +297,13 @@ namespace Barotrauma
{
return Create(file, position, null);
}
public static Character Create(CharacterInfo characterInfo, WayPoint spawnPoint, bool isNetworkPlayer = false)
{
return Create(characterInfo.File, spawnPoint.WorldPosition, characterInfo, isNetworkPlayer);
}
public static Character Create(CharacterInfo characterInfo, Vector2 position, bool isNetworkPlayer = false)
public static Character Create(CharacterInfo characterInfo, Vector2 position, bool isNetworkPlayer = false, bool hasAi=true)
{
return Create(characterInfo.File, position, characterInfo, isNetworkPlayer);
}
public static Character Create(string file, Vector2 position, CharacterInfo characterInfo = null, bool isNetworkPlayer = false)
public static Character Create(string file, Vector2 position, CharacterInfo characterInfo = null, bool isNetworkPlayer = false, bool hasAi=true)
{
if (file != humanConfigFile)
{
@@ -321,11 +315,9 @@ namespace Barotrauma
}
else
{
if (isNetworkPlayer)
if (hasAi)
{
var netCharacter = new Character(file, position, characterInfo, isNetworkPlayer);
return netCharacter;
return new Character(file, position, characterInfo, isNetworkPlayer);
}
else
{

View File

@@ -36,12 +36,12 @@ namespace Barotrauma
for (int i = 0; i < amount; i++)
{
Vector2 position = (randomWayPoint == null) ? Vector2.Zero : FarseerPhysics.ConvertUnits.ToSimUnits(randomWayPoint.Position);
//!!!!!!!!!!!!!!!!!!
//if (spawnDeep)
//{
// position.Y = FarseerPhysics.ConvertUnits.ToSimUnits(Level.Loaded.Position.Y);
//}
if (spawnDeep)
{
position.Y -= 100.0f;
}
position.X += Rand.Range(-0.5f, 0.5f);
position.Y += Rand.Range(-0.5f, 0.5f);

View File

@@ -213,7 +213,7 @@ namespace Barotrauma
//WayPoint randomWayPoint = WayPoint.GetRandom(SpawnType.Human);
//Vector2 position = (randomWayPoint == null) ? Vector2.Zero : randomWayPoint.SimPosition;
Character character = Character.Create(characterInfos[i], waypoints[i]);
Character character = Character.Create(characterInfos[i], waypoints[i].WorldPosition);
Character.Controlled = character;
if (!character.Info.StartItemsGiven)

View File

@@ -125,6 +125,18 @@ namespace Barotrauma.Lights
vertices = points;
}
public bool Intersects(Rectangle rect)
{
Rectangle transformedBounds = boundingBox;
if (parentEntity != null && parentEntity.Submarine != null)
{
transformedBounds.X += (int)parentEntity.Submarine.Position.X;
transformedBounds.Y += (int)parentEntity.Submarine.Position.Y;
}
return transformedBounds.Intersects(rect);
}
private void CalculateShadowVertices(Vector2 lightSourcePos, bool los = true)
{
//compute facing of each edge, using N*L

View File

@@ -69,6 +69,7 @@ namespace Barotrauma.Lights
foreach (ConvexHull convexHull in ConvexHull.list)
{
if (!convexHull.Intersects(camView)) continue;
//if (!camView.Intersects(convexHull.BoundingBox)) continue;
convexHull.DrawShadows(graphics, cam, pos, shadowTransform);
@@ -109,7 +110,7 @@ namespace Barotrauma.Lights
foreach (LightSource light in lights)
{
if (light.hullsInRange.Count == 0 || light.Color.A < 0.01f || light.Range < 1.0f) continue;
//if (!MathUtils.CircleIntersectsRectangle(light.Position, light.Range, viewRect)) continue;
if (!MathUtils.CircleIntersectsRectangle(light.WorldPosition, light.Range, viewRect)) continue;
//clear alpha to 1
ClearAlphaToOne(graphics, spriteBatch);
@@ -121,7 +122,7 @@ namespace Barotrauma.Lights
foreach (ConvexHull ch in light.hullsInRange)
{
//if (!MathUtils.CircleIntersectsRectangle(light.Position, light.Range, ch.BoundingBox)) continue;
if (!MathUtils.CircleIntersectsRectangle(light.Position, light.Range, ch.BoundingBox)) continue;
//draw shadow
ch.DrawShadows(graphics, cam, light, shadowTransform, false);
}

View File

@@ -507,8 +507,10 @@ namespace Barotrauma
}
}
foreach (MapEntity e in mapEntityList)
for (int i = 0; i<mapEntityList.Count; i++)
{
MapEntity e = mapEntityList[i];
e.OnMapLoaded();
if (e.Submarine != null) e.Move(Submarine.HiddenSubPosition);
@@ -516,10 +518,10 @@ namespace Barotrauma
mapEntityList.Sort((x, y) =>
{
return x.Name.CompareTo(y.Name);
});
//mapEntityList.Sort((x, y) =>
//{
// return x.Name.CompareTo(y.Name);
//});
}

View File

@@ -757,13 +757,13 @@ namespace Barotrauma.Networking
for (int i = 0; i < ConnectedClients.Count; i++)
{
ConnectedClients[i].Character = Character.Create(
ConnectedClients[i].characterInfo, assignedWayPoints[i], true);
ConnectedClients[i].characterInfo, assignedWayPoints[i].WorldPosition, true);
ConnectedClients[i].Character.GiveJobItems(assignedWayPoints[i]);
}
if (characterInfo != null)
{
myCharacter = Character.Create(characterInfo, assignedWayPoints[assignedWayPoints.Length - 1]);
myCharacter = Character.Create(characterInfo, assignedWayPoints[assignedWayPoints.Length - 1].WorldPosition);
Character.Controlled = myCharacter;
myCharacter.GiveJobItems(assignedWayPoints[assignedWayPoints.Length - 1]);

View File

@@ -1,7 +1,4 @@
using FarseerPhysics;
using FarseerPhysics.Dynamics;
using FarseerPhysics.Factories;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System;
using System.Collections.Generic;
@@ -362,7 +359,7 @@ namespace Barotrauma
UpdateCharacterLists();
}
graphics.Clear(Color.CornflowerBlue);
graphics.Clear(Color.Black);
//GameMain.GameScreen.DrawMap(graphics, spriteBatch);
@@ -370,7 +367,7 @@ namespace Barotrauma
Sprite backGround = GameMain.GameSession.Map.CurrentLocation.Type.Background;
spriteBatch.Draw(backGround.Texture, Vector2.Zero, null, Color.White, 0.0f, Vector2.Zero,
Math.Max((float)GameMain.GraphicsWidth / backGround.SourceRect.Width, (float)GameMain.GraphicsHeight / backGround.SourceRect.Width), SpriteEffects.None, 0.0f);
Math.Max((float)GameMain.GraphicsWidth / backGround.SourceRect.Width, (float)GameMain.GraphicsHeight / backGround.SourceRect.Height), SpriteEffects.None, 0.0f);
topPanel.Draw(spriteBatch);