/// <summary> /// Draws another square. /// </summary> void DrawSquare() { for (int i = -1; i <= 1; i += 2) { Vector3 position = Vector3.right * (insideLength / 2f + squareWidth / 2f) * i; SquareSide tmp = new SquareSide(); tmp.cube = GameObject.CreatePrimitive(PrimitiveType.Cube); tmp.cube.transform.parent = transform; tmp.cube.transform.localPosition = position; tmp.cube.transform.localScale = new Vector3(squareWidth, 0.1f, insideLength); Renderer renderer = tmp.cube.GetComponent <Renderer>(); renderer.material = material; tmp.currentVelocity = 0; cubes.Add(tmp); } for (int i = -1; i <= 1; i += 2) { Vector3 position = Vector3.forward * (insideLength / 2f + squareWidth / 2f) * i; SquareSide tmp = new SquareSide(); tmp.cube = GameObject.CreatePrimitive(PrimitiveType.Cube); tmp.cube.transform.parent = transform; tmp.cube.transform.localPosition = position; tmp.cube.transform.localScale = new Vector3(insideLength + 2f * squareWidth, 0.1f, squareWidth); Renderer renderer = tmp.cube.GetComponent <Renderer>(); renderer.material = material; tmp.currentVelocity = 0; cubes.Add(tmp); } }
/// <summary> /// Add a level if the square is Neutral or on the same side as pSide, remove a level if not and change automaticaly the side /// </summary> /// <param name="pSide">reference side</param> /// <param name="pLevel">number of level to add</param> public void AddLevelSide(SquareSide pSide, int pLevel = 1) { if (pLevel == 0) { Debug.LogWarning("You try to add 0 level to a square it's useless !"); return; } int lNewLevel = 0; //In this case we substract pLevel if ((pSide == SquareSide.ALLY && side == SquareSide.ENEMY) || (pSide == SquareSide.ENEMY && side == SquareSide.ALLY)) { pLevel *= -1; } lNewLevel = level + pLevel; if (lNewLevel < MIN_LVL || side == SquareSide.NEUTRAL) { side = pSide; } level = Math.Min(Math.Abs(lNewLevel), MAX_LVL); }
public override void FromXml(XElement config, ObjectsMap map, bool invert) { base.FromXml(config, map, invert); SquareSide.FromXml(config, DefaultCrosswalkSquareSide); LineCount.FromXml(config, DefaultCrosswalkLineCount); Invert.FromXml(config, false); Invert.Value ^= map.IsMirror ^ invert; }
public override XElement ToXml() { var config = base.ToXml(); SquareSide.ToXml(config); LineCount.ToXml(config); Invert.ToXml(config); return(config); }
void Update() { if (elapsedTime > pulseInterval) { DrawSquare(); elapsedTime = 0f; } elapsedTime += Time.deltaTime; for (int i = 0; i < cubes.Count; i++) { SquareSide side = cubes[i]; Vector3 heading = side.cube.transform.localPosition.normalized; float distance = Mathf.Abs(side.cube.transform.localPosition.x) + Mathf.Abs(side.cube.transform.localPosition.z); distance = Mathf.SmoothDamp(distance, maxDistance + insideLength, ref side.currentVelocity, maxDistance / pulseSpeed); side.cube.transform.localScale = new Vector3(squareWidth + Mathf.Abs(heading.z) * (2f * distance - 2f * squareWidth), 0.1f, squareWidth + Mathf.Abs(heading.x) * (2f * distance)); side.cube.transform.localPosition = heading * distance; Renderer renderer = side.cube.GetComponent <Renderer>(); //renderer.material = material; Color color2 = color; color2.a = (distance / (maxDistance + insideLength / 2f) > 0.55f) ? (1f - (distance / (maxDistance + insideLength / 2f) - 0.55f) / 0.45f) : 1; //color2.g = color.g * (1f - distance / (maxDistance + insideLength / 2f)); //color2.b = color.b * (1f - distance / (maxDistance + insideLength / 2f)); if (!opaque) { MaterialPropertyBlock block = new MaterialPropertyBlock(); block.SetColor("_Color", color2); renderer.SetPropertyBlock(block); } else { MaterialPropertyBlock block = new MaterialPropertyBlock(); block.SetColor("_Color", color); renderer.SetPropertyBlock(block); } if (color2.a <= 0.01f) { cubes.RemoveAt(i); Destroy(side.cube); i--; } } }