Пример #1
0
    protected void fixTargetPosition()
    {
        UnitNode from = m_from.Node;
        UnitNode to   = m_to.Node;

        if (from == null || to == null)
        {
            return;
        }

        ProjectileNode target = _target as ProjectileNode;

        m_fromPos = from.position;

        float fFromOffsetX = 0.0f;
        float fFromHeight  = 0.0f;

        if (m_fireFrom)
        {
            bool  useFireOffset = (_target as ProjectileNode).Projectile.UseFireOffset;
            float offsetX       = useFireOffset ? from.FireOffset.x : from.HalfOfWidth;
            float offsetY       = useFireOffset ? from.FireOffset.y : from.HalfOfHeight;
            bool  bFlipX        = m_fromPos.x > m_toPos.x;
            fFromOffsetX = (bFlipX ? -offsetX : offsetX);
            fFromHeight  = from.height + offsetY;
        }
        else
        {
            fFromHeight = from.height + from.HalfOfHeight;
        }

        m_fromPos.x += fFromOffsetX;
        m_fromPos.y += fFromHeight;

        m_toPos = to.position;
        float fToHeight = to.height + to.HalfOfHeight;

        m_toPos.y += fToHeight;

        //RendererNode rendererTarget = _target as RendererNode;
        //rendererTarget.height = (fFromHeight + fToHeight) / 2;

        //World.Main.dbgPos[0].transform.position = new Vector3(m_fromPos.x, m_fromPos.y, -200);
        //World.Main.dbgPos[1].transform.position = new Vector3(m_toPos.x, m_toPos.y, -200);

        Vector2 delta = m_toPos - m_fromPos;
        float   fR    = Utils.GetAngle(delta);

        float fScale = Mathf.Sqrt(delta.x * delta.x + delta.y * delta.y) / target.size.x;

        target.position = new Vector2((m_fromPos.x + m_toPos.x) / 2, (m_fromPos.y + m_toPos.y) / 2);
        //World.Main.dbgPos[2].transform.position = new Vector3(_target.gameObject.transform.position.x, _target.gameObject.transform.position.y, -200);
        //World.Main.dbgPos[2].transform.position = new Vector3(target.position.x, target.position.y, -200);
        target.rotation = fR;
        Vector2 scale = target.scale;

        scale.x      = fScale;
        target.scale = scale;
    }
Пример #2
0
    public override void startWithTarget(Node target)
    {
        base.startWithTarget(target);

        ProjectileNode r = target as ProjectileNode;
        Projectile     p = r.Projectile;

        m_fireFrom = m_fromToType == Projectile.FromToType.kUnitToUnit && p.SourceUnit != null && m_from.Node == p.SourceUnit.Node;
        r.height   = 0.0f;
        //target.visible = false;
    }
Пример #3
0
    public INode GetNode(ushort nodeId)
    {
        INode pNode = null;

        if (nodeId == 1001)
        {
            pNode = new ProjectileNode(nodeId);
        }
        else if (nodeId == 1002)
        {
            pNode = new ExplosionNode(nodeId);
        }
        else if (nodeId == 1003)
        {
            pNode = new ActionNode(nodeId);
        }
        return(pNode);
    }
Пример #4
0
    public SyncProjectileInfo(Projectile projectile)
    {
        ProjectileNode node = projectile.Node;

        baseInfo.model  = projectile.Model;
        baseInfo.move   = projectile.MoveSpeed;
        baseInfo.height = projectile.MaxHeightDelta;
        baseInfo.fire   = Projectile.FireTypeToName(projectile.TypeOfFire);
        baseInfo.effect = (int)projectile.EffectFlags;

        //position = node.position;
        //visible = node.visible;
        fromTo        = projectile.TypeOfFromTo;
        useFireOffset = projectile.UseFireOffset;
        srcUnit       = projectile.SourceUnit != null ? projectile.SourceUnit.Id : 0;
        fromUnit      = projectile.FromUnit != null ? projectile.FromUnit.Id : 0;
        toUnit        = projectile.ToUnit != null ? projectile.ToUnit.Id : 0;
        fromPos       = projectile.FromPosition;
        toPos         = projectile.ToPosition;
    }
Пример #5
0
    public Projectile CreateProjectile(ProjectileSyncInfo syncInfo, Skill sourceSkill = null)
    {
        localClient.ServerAddSyncAction(new SyncCreateProjectile(syncInfo));

        GameObject     obj        = GameObjectPool.instance.Instantiate(projectilePrefab);
        ProjectileNode node       = obj.GetComponent <ProjectileNode>();
        Projectile     projectile = obj.GetComponent <Projectile>();

        ResourceManager.instance.LoadProjectileModel(syncInfo.baseInfo.model);  // high time cost
        ResourceManager.instance.AssignModelToProjectileNode(syncInfo.baseInfo.model, node);

        projectile.MoveSpeed      = (float)syncInfo.baseInfo.move;
        projectile.MaxHeightDelta = (float)syncInfo.baseInfo.height;
        projectile.TypeOfFire     = Projectile.FireNameToType(syncInfo.baseInfo.fire);
        projectile.EffectFlags    = (uint)syncInfo.baseInfo.effect;

        //node.position = syncInfo.position;
        //node.visible = syncInfo.visible;
        projectile.TypeOfFromTo  = syncInfo.fromTo;
        projectile.UseFireOffset = syncInfo.useFireOffset;
        projectile.SourceUnit    = GetUnit(syncInfo.srcUnit);
        projectile.FromUnit      = GetUnit(syncInfo.fromUnit);
        projectile.ToUnit        = GetUnit(syncInfo.toUnit);
        projectile.FromPosition  = syncInfo.fromPos;
        projectile.ToPosition    = syncInfo.toPos;
        if (sourceSkill != null)
        {
            projectile.SourceSkill        = sourceSkill;
            projectile.EffectiveTypeFlags = sourceSkill.effectiveTypeFlags;
        }

        AddProjectile(projectile);
        node.SetFrame(ModelNode.kFrameDefault);
        projectile.Fire();
        return(projectile);
    }
Пример #6
0
    void Start()
    {
        Debug.Assert(unitPrefab != null);
        Debug.Assert(projectilePrefab != null);
        Debug.Assert(unitHUDPrefab != null);
        Debug.Assert(cameraCtrl != null);
        Debug.Assert(hudCanvas != null);

        // unit pool
        GameObjectPool.ResetFunction unitReset = delegate(GameObject obj) {
            obj.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);
            obj.transform.rotation   = Quaternion.Euler(0, 0, 0);
            SpriteRenderer sr = obj.GetComponent <SpriteRenderer>();
            sr.enabled = true;
            sr.color   = new Color(1.0f, 1.0f, 1.0f, 1.0f);
            UnitNode node = obj.GetComponent <UnitNode>();
            node.init();
            node.enabled = true;
            Unit unit = obj.GetComponent <Unit>();
            unit.enabled = true;
        };
        GameObjectPool.DestroyFunction unitDestroy = delegate(GameObject obj) {
            Unit unit = obj.GetComponent <Unit>();
            unit.enabled = false;
            unit.Cleanup();
            UnitNode node = obj.GetComponent <UnitNode>();
            node.enabled = false;
            node.cleanup();
        };
        GameObjectPool.instance.Alloc(unitPrefab, 50, unitReset, unitDestroy);

        // projectile pool
        GameObjectPool.ResetFunction projectileReset = delegate(GameObject obj) {
            obj.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);
            obj.transform.rotation   = Quaternion.Euler(0, 0, 0);
            SpriteRenderer sr = obj.GetComponent <SpriteRenderer>();
            sr.enabled = true;
            sr.color   = new Color(1.0f, 1.0f, 1.0f, 1.0f);
            ProjectileNode node = obj.GetComponent <ProjectileNode>();
            node.init();
            node.enabled = true;
            Projectile projectile = obj.GetComponent <Projectile>();
            projectile.enabled = true;
        };
        GameObjectPool.DestroyFunction projectileDestroy = delegate(GameObject obj) {
            Projectile projectile = obj.GetComponent <Projectile>();
            projectile.enabled = false;
            //projectile.Cleanup();
            ProjectileNode node = obj.GetComponent <ProjectileNode>();
            node.enabled = false;
            node.cleanup();
        };
        GameObjectPool.instance.Alloc(projectilePrefab, 50, projectileReset, projectileDestroy);

        // unit hud pool
        GameObjectPool.ResetFunction unitHUDReset = delegate(GameObject obj) {
            UnitHUD unitHUD = obj.GetComponent <UnitHUD>();
            unitHUD.enabled = true;
        };
        GameObjectPool.DestroyFunction unitHUDDestroy = delegate(GameObject obj) {
            UnitHUD unitHUD = obj.GetComponent <UnitHUD>();
            unitHUD.enabled = false;
            unitHUD.m_unit.Set(null);
        };
        GameObjectPool.instance.Alloc(unitHUDPrefab, 50, unitHUDReset, unitHUDDestroy);
    }
Пример #7
0
 public ProjectileSystem()
 {
     NodeFilter <ProjectileNode> .Setup(ProjectileNode.GetTypes());
 }
Пример #8
0
    public void AssignModelToProjectileNode(string modelPath, ProjectileNode node)
    {
        var modelInfo = GetModelInfo(modelPath) as ProjectileModelInfo;

        AssignModelToNode(modelPath, node, modelInfo);
    }