Exemple #1
0
    /// <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);
        }
Exemple #3
0
 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;
 }
Exemple #4
0
        public override XElement ToXml()
        {
            var config = base.ToXml();

            SquareSide.ToXml(config);
            LineCount.ToXml(config);
            Invert.ToXml(config);
            return(config);
        }
Exemple #5
0
    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--;
            }
        }
    }